我正在使用F#和WsdlTypeProvider,代码如下:
type svc = FSharp.Data.TypeProviders.WsdlService<"http://my.service.url?wsdl">
let svcClient = svc.GetServicePort()
在大多数情况下,它在客户端上调用某个方法时运行良好。但在某些情况下,我会收到以下消息:
已超出传入邮件的最大邮件大小配额 (65536)。若要增加配额,请在相应的绑定元素上使用 MaxReceivedMessageSize 属性。
除非绑定上没有这样的属性。可以使用以下命令访问绑定:
let binding = svcClient.DataContext.Endpoint.Binding
将绑定强制转换为具有该属性的 BasicHttpBinding 也不起作用,因为显然绑定与继承无关:
let binding = svcClient.DataContext.Endpoint.Binding :?> System.ServiceModel.BasicHttpBinding
它会导致此错误:
无法强制转换类型的对象 键入"System.ServiceModel.Channels.CustomBinding" 'System.ServiceModel.BasicHttpBinding'.
所以问题是: 如何在使用 WsdlTypeProvider 时增加 MaxReceivedMessageSize?
我的 App.Config 中似乎没有任何设置,就像我通过生成代理等以常规方式附加到服务一样。
如果您出于测试目的编写此代码,则可以使用 BasicHttp 绑定,但为了支持会话和安全原因,您不应将 BasicHttp 用于应用程序的商业用途。选择netTcp或WsHttp绑定。以下代码适用于 netTcp 绑定。
<bindings>
<customBinding>
<binding name="CustomBinding_MyService">
<binaryMessageEncoding>
<readerQuotas maxDepth="32" maxStringContentLength="200000000" maxArrayLength="200000000"/>
</binaryMessageEncoding>
<tcpTransport maxBufferPoolSize="200000000" maxReceivedMessageSize="200000000" maxBufferSize="200000000">
<extendedProtectionPolicy policyEnforcement="Never"/>
</tcpTransport>
</binding>
</customBinding>
</bindings>
希望这有帮助!