4

当我在 C# 中使用 WSDL 服务时,我可以将两个参数传递给构造函数;BasicHttpBinding 和 EndpointAddress

BasicHttpBinding basicHttpBinding = new BasicHttpBinding { MaxReceivedMessageSize = 20000000, MaxBufferSize = 20000000 };
EndpointAddress endpointAddress = new EndpointAddress(delarsListUrl);
var ds = new DealersService.DealersServiceClient(basicHttpBinding,endpointAddress);

当我在 F# 中使用 WSDL 类型提供程序时,我只允许在没有任何参数或使用 BasicHttpBinding 类型的一个参数的情况下调用构造函数。那么如何设置 MaxReceivedMessageSize 或 MaxBufferSize 等参数呢?

编辑:

如果我把它放到 Azure Worker 角色的 app.config

<system.serviceModel>
   <bindings>
     <basicHttpBinding>
       <binding name="basicHttp" allowCookies="true"
             maxReceivedMessageSize="20000000"
             maxBufferSize="20000000"
             maxBufferPoolSize="20000000">
         <readerQuotas maxDepth="32"
           maxArrayLength="200000000"
           maxStringContentLength="200000000"/>
       </binding>
     </basicHttpBinding>
   </bindings>
 </system.serviceModel>

它没有帮助,我仍然得到 maxReceivedMessageSize 只有 64k 的异常,我应该更改它。我在 C# 中遇到了同样的问题,app.config 设置似乎被忽略了,所以我通过将带有这些设置的 BasicHttpBinding 传递给构造函数来解决它。

4

1 回答 1

7

简化的数据上下文(通过 T.GetDataContext() 创建)仅公开无参数构造函数和接受 EndpointAddress 的构造函数。如果您想手动设置绑定 - 您可以直接实例化客户端类(它应该位于 ServiceTypes 内),即:

type WSDL = Microsoft.FSharp.Data.TypeProviders.WsdlService< @"http://www.webservicex.net/RealTimeMarketData.asmx?WSDL">
let client = new WSDL.ServiceTypes.RealTimeMarketDataSoapClient(...)
于 2012-10-29T19:08:05.577 回答