【问题标题】:this operation is not supported in the wcf test client because it uses type system.object[]wcf 测试客户端不支持此操作,因为它使用类型 system.object[]
【发布时间】:2012-06-01 19:17:04
【问题描述】:

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

【问题讨论】:

    标签: .net wcf c#-4.0


    【解决方案1】:

    问题在于ArrayList 可以是anything 的列表(因此错误中的object[]),而测试客户端无法处理。虽然在 WCF 中返回任意对象的数组是完全合法的,但您应该考虑返回客户端感兴趣的实际类型——在这种情况下,String 的数组应该这样做。

    此外,在现代 (>1.1) 版本的 .NET 上,通常不使用 ArrayList。通用的List<T> 通常更合适。

    【讨论】:

      【解决方案2】:

      由于您要向服务添加字符串(ProcessName.ToString() - 尽管 ToString() 不是必需的,因为 ProcessName 已经是 string)到您的服务,您应该定义您的方法以返回 List<string> 而不是 @ 987654326@.

      这可以简化为:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-08
        • 1970-01-01
        相关资源
        最近更新 更多