动态生成的代码中的参数顺序不正确
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"
我的问题是:
- 为什么参数的顺序发生了变化,即定义为 'out' 的参数排在其他参数之前?
- 如何更正方法的参数顺序?
- 如何将我们的参数设为 List 而不是 String[]?
提前致谢。
输出参数的使用在 WCF 中不是很惯用。您通常最好将两条返回信息(长和序列)包装在一个响应中 class.
但是,如果您出于某种原因确实需要输出参数,那么我相信当 bodystyle 为 "wrapped"(或可能 "wrappedresponse")时支持它,但在默认情况下不支持"bare".
我认为建议客户端代码将永远获得列表显示了对 WCF 和 SOAP 工作方式的误解。客户端代理是通过读取服务生成的 WSDL 来实现的。 WSDL 不指定 C# 类型,它指定 XML 模式类型。 XML Schema 中的序列由 C# 数组表示,事实就是如此。如果您需要 C# 列表,则需要将原始代理包装在您自己设计的适配器 class 中。
通过使用 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"
我的问题是:
- 为什么参数的顺序发生了变化,即定义为 'out' 的参数排在其他参数之前?
- 如何更正方法的参数顺序?
- 如何将我们的参数设为 List 而不是 String[]?
提前致谢。
输出参数的使用在 WCF 中不是很惯用。您通常最好将两条返回信息(长和序列)包装在一个响应中 class.
但是,如果您出于某种原因确实需要输出参数,那么我相信当 bodystyle 为 "wrapped"(或可能 "wrappedresponse")时支持它,但在默认情况下不支持"bare".
我认为建议客户端代码将永远获得列表显示了对 WCF 和 SOAP 工作方式的误解。客户端代理是通过读取服务生成的 WSDL 来实现的。 WSDL 不指定 C# 类型,它指定 XML 模式类型。 XML Schema 中的序列由 C# 数组表示,事实就是如此。如果您需要 C# 列表,则需要将原始代理包装在您自己设计的适配器 class 中。