Dot-Net

wcf 測試客戶端不支持此操作,因為它使用類型 system.object

  • June 1, 2012

嗨,在執行我的 wcf 服務時,它給了我錯誤“wcf 測試客戶端不支持此操作,因為它使用類型 system.object

$$ $$" 在此處輸入圖像描述

我試圖檢索正在執行的程序列表。

[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;
       }
   }

由於您正在向您的服務添加字元串(ProcessName.ToString()- 雖然ToString()不是必需的,因為ProcessName它已經是 a string),所以您應該定義您的方法以返回 aList<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();
   }
}

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

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

引用自:https://stackoverflow.com/questions/10856128