2012-06-01 26 views
7

您在運行我的wcf服務時發生錯誤「它在wcf測試客戶端中不支持此操作,因爲它使用了類型system.object []」此操作在wcf測試客戶端中不受支持,因爲它使用了類型system.object []

enter image description here

我嘗試檢索正在運行的進程列表。

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)] 
    class Windows_processes_Service:IWindows_processes_Service 
    { 
     ArrayList RunningProcesses_Name = new ArrayList(); 
     public ArrayList GetRunningProcesses() 
     { 
      Process[] processlist = Process.GetProcesses(); 
      foreach (Process nme_processes in processlist) 
      { 
       RunningProcesses_Name.Add(nme_processes.ProcessName.ToString()); 
      } 
      return RunningProcesses_Name; 
     } 
    } 

回答

1

既然你要添加字符串(ProcessName.ToString() - 儘管ToString()不需要爲ProcessName已經是string)爲您服務,您應該定義你的方法返回的List<string>代替ArrayList

這可以簡化爲:

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)] 
class Windows_processes_Service:IWindows_processes_Service 
{ 
    public List<string> GetRunningProcesses() 
    { 
     return Process.GetProcesses().Select(p => p.ProcessName).ToList(); 
    } 
} 
3

的問題是,ArrayList可以任何(從而在錯誤object[])的列表,並測試客戶端無法處理。雖然在WCF中返回任意對象的數組是完全合法的,但您應該考慮返回客戶端感興趣的實際類型 - 在這種情況下,應使用String的數組。

另外,對於它的價值,在.NET的現代(> 1.1)版本中,通常不使用ArrayList。通用的List<T>通常更合適。

相關問題