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

parameter sequence is incorrect in dynamically generated code

通过使用 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. 为什么参数的顺序发生了变化,即定义为 'out' 的参数排在其他参数之前?
  2. 如何更正方法的参数顺序?
  3. 如何将我们的参数设为 List 而不是 String[]?

提前致谢。

输出参数的使用在 WCF 中不是很惯用。您通常最好将两条返回信息(长和序列)包装在一个响应中 class.

但是,如果您出于某种原因确实需要输出参数,那么我相信当 bodystyle 为 "wrapped"(或可能 "wrappedresponse")时支持它,但在默认情况下不支持"bare".

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

我认为建议客户端代码将永远获得列表显示了对 WCF 和 SOAP 工作方式的误解。客户端代理是通过读取服务生成的 WSDL 来实现的。 WSDL 不指定 C# 类型,它指定 XML 模式类型。 XML Schema 中的序列由 C# 数组表示,事实就是如此。如果您需要 C# 列表,则需要将原始代理包装在您自己设计的适配器 class 中。