2012-06-01 12 views
7

hola mientras se ejecuta el servicio wcf me da error "esta operación no es compatible con el cliente de prueba wcf porque usa tipo system.object []"esta operación no es compatible con el cliente de prueba wcf porque utiliza tipo system.object []

enter image description here

im tratando de recuperar la lista de procesos en ejecución.

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

Respuesta

1

cadenas Puesto que usted está agregando (ProcessName.ToString() - aunque ToString() no se requiere como ProcessName ya es un string) a su servicio, se deben definir su método para devolver un lugar de List<string>ArrayList.

Esto se puede simplificar a:

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

El problema es que ArrayList puede ser una lista de nada (por lo tanto object[] en el error), y el cliente de prueba no puede manejar eso. Si bien es perfectamente legal en WCF devolver una matriz de objetos arbitrarios, debería considerar devolver el tipo real que le interesa al cliente, en este caso una matriz de String debería hacerlo.

Además, por lo que vale, en las versiones modernas (> 1.1) de .NET, generalmente no se usa ArrayList. El genérico List<T> suele ser más apropiado.

Cuestiones relacionadas