在运行我的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;
}
}
答案 0 :(得分:3)
问题是ArrayList
可以是任何的列表(因此错误中为object[]
),并且测试客户端无法处理。虽然在WCF中返回任意对象数组是完全合法的,但您应该考虑返回客户端感兴趣的实际类型 - 在这种情况下,String
数组应该这样做。
此外,对于它的价值,在现代(> 1.1)版本的.NET上,通常不使用ArrayList
。通用List<T>
通常更合适。
答案 1 :(得分: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();
}
}