2016-03-06 65 views
0

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

在此先感谢。

回答

0

在WCF中使用out-parameters不是很习惯。你通常最好把你的两段返回的信息(long和sequence)包装在一个响应类中。但是,如果因为某些原因确实需要out-parameters,那么我认为它在bodystyle被“包装”(或者可能是“wrappedresponse”)时受支持,但当它是默认的“裸露”时,它不受其支持。

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#列表,则需要将原始代理包装到自己设计的适配器类中。

+0

谢谢!为了解释它。 –