Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net wcf测试客户端不支持此操作,因为它使用system.object[]类型_.net_Wcf_C# 4.0 - Fatal编程技术网

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

.net wcf测试客户端不支持此操作,因为它使用system.object[]类型,.net,wcf,c#-4.0,.net,Wcf,C# 4.0,您好,在运行我的wcf服务时,它向我发出错误“wcf测试客户端不支持此操作,因为它使用system.object[]类型” 我正在尝试检索正在运行的进程列表 [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)] class Windows_processes_Service:IWindows_processes_Service { ArrayList RunningProcesses_

您好,在运行我的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;
        }
    }

问题是,
ArrayList
可以是任何内容的列表(因此,
object[]
在错误中),而测试客户机无法处理这个问题。在WCF中返回任意对象数组是完全合法的,但您应该考虑返回客户端感兴趣的实际类型——在这种情况下,“代码>字符串应该做一个数组。


另外,在现代(>1.1)版本的.NET上,通常不使用
ArrayList
。一般的
列表
通常更合适。

因为您正在向您的服务添加字符串(
ProcessName.ToString()
)-虽然不需要
ToString()
,因为
ProcessName
已经是
字符串了,您应该定义返回
列表的方法,而不是
ArrayList

这可以简化为:

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
class Windows_processes_Service:IWindows_processes_Service
{
    public List<string> GetRunningProcesses()
    {
        return Process.GetProcesses().Select(p => p.ProcessName).ToList();
    }
}
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
类Windows\u进程\u服务:IWindows\u进程\u服务
{
公共列表GetRunningProcess()
{
return Process.getProcesss().Select(p=>p.ProcessName.ToList();
}
}