当我在 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/