2012-06-01 7 views
7

hi podczas działania mojej usługi wcf daje mi błąd "ta operacja nie jest obsługiwana w kliencie testowym wcf, ponieważ używa type system.object []”ta operacja nie jest obsługiwana w kliencie testowym wcf, ponieważ używa type system.object []

enter image description here

im próbuje odzyskać listę procesu.

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

Odpowiedz

1

Skoro dodawanie ciągi (ProcessName.ToString() - choć ToString() nie jest wymagana jako ProcessName jest już string) do usługi, należy określić metodę zwrócić List<string> zamiast ArrayList.

ten można uprościć do:

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

Problemem jest to, że ArrayList może być lista niczegoobject[] (tym samym w błąd), a klient testowy nie może sobie z tym poradzić. Choć jest całkowicie legalne w WCF powrócić tablicę dowolnych obiektów, należy rozważyć powrót do rzeczywistego typu, że klient jest zainteresowany w tym przypadku in- tablicą String powinien robić.

Ponadto, co warto, na nowoczesnych (> 1,1) wersji .NET ArrayList zwykle nie używane. Generic List<T> jest zwykle bardziej odpowiedni.

Powiązane problemy