动态生成的代码中的参数序列不正确

时间:2016-03-06 11:17:18

标签: c# wcf dynamic-proxy

通过使用Dynamic Proxy namespace,我试图动态创建和使用WCF服务。我已经宣布了如下合同:

[OperationContract]
long GetStrings(string sinput, int n, out List<String> lstStrings);

在客户端,我收集的信息如下:

        MethodInfo getStrings = proxyType.GetMethod("GetStrings");
        Type strType = getStrings.GetParameters()[0].ParameterType;
        Type strType1 = getStrings.GetParameters()[1].ParameterType;
        Type strType2 = getStrings.GetParameters()[2].ParameterType;

类型的名称如下:

strType = "String[]&"
strType1 = "String"
strType2 = "int"

我的问题是:

  1. 为什么参数的顺序会发生变化,即参数定义为&#39; out&#39;在别人面前来了吗?
  2. 如何更正方法的参数顺序?
  3. 如何将参数设置为List而不是String []?
  4. 提前致谢。

1 个答案:

答案 0 :(得分:0)

在WCF中使用out-parameters不是很惯用。通常最好将两条返回的信息(长和序列)包装在一个响应类中。

但是,如果由于某种原因你确实需要out-parameters,那么我相信当bodystyle被“包裹”(或者可能是“wrapresponse”)时它会被支持,但是当它是默认的“bare”时则不支持。< / p>

https://msdn.microsoft.com/en-us/library/system.servicemodel.web.webinvokeattribute.bodystyle(v=vs.110).aspx

我认为建议客户端代码获取List会显示出对WCF和SOAP如何工作的误解。客户端代理是通过读取服务生成的WSDL来完成的。 WSDL没有指定C#类型,它指定XML Schema类型。 XML Schema中的序列由C#数组表示,它就是这样的。如果需要C#List,则需要将原始代理包装在您自己设计的适配器类中。