当我在 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 传递给构造函数来解决它。

最佳答案

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

type WSDL = Microsoft.FSharp.Data.TypeProviders.WsdlService< @"http://www.webservicex.net/RealTimeMarketData.asmx?WSDL">
let client = new WSDL.ServiceTypes.RealTimeMarketDataSoapClient(...)

关于web-services - 用于 WSDL 和 BasicHttpBinding 的 F# 类型提供程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13109959/

10-11 15:46