wcf测试客户端不支持此操作,因为它使用类型system.object []

时间:2012-06-01 19:17:05

标签: .net wcf c#-4.0

在运行我的wcf服务时,它给出了错误“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;
        }
    }

2 个答案:

答案 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();
    }
}