WCF自定义绑定配置MaxReceivedMessageSize及MTOM缓冲区报错咨询
问题原因
你用的是WCF的自定义绑定,网上大部分教程的配置示例是针对basicHttpBinding、wsHttpBinding这类系统内置绑定的,这类绑定的大小配额可以直接写在<binding>节点属性上,但是自定义绑定的所有参数必须挂载到对应功能的子节点上,这是你之前几种写法报错的核心原因。
第一次的65536大小限制报错,maxReceivedMessageSize是<httpsTransport>传输节点的属性,不是独立配置节点,也不能写到endpoint节点上,所以你前三次修改都会抛配置错误。
后续修改完传输节点参数后出现的MTOM读取错误,是因为MTOM编码层有独立的读取器配额限制,和传输层的配额不共用,默认的单批次读取字节上限就是65536,所以传输层放开限制后编码层的限制还是会拦截大消息。
正确配置示例
完整的绑定配置如下:
<system.serviceModel> <bindings> <customBinding> <binding name="tripAndTimeReportingServiceSoapBinding"> <mtomMessageEncoding messageVersion="Soap12"> <!-- 调整MTOM读取器配额,所有值可根据业务需求调整,以下示例为int最大值 --> <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> </mtomMessageEncoding> <httpsTransport maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" /> </binding> </customBinding> </bindings> <!-- 原有client节点配置无需修改 --> <client> <endpoint address="https://soap.webfleet.com/v1.53/tripAndTimeReportingService" binding="customBinding" bindingConfiguration="tripAndTimeReportingServiceSoapBinding" contract="TripAndTimeReportingService.tripAndTimeReporting" name="tripAndTimeReportingPort" /> </client> </system.serviceModel>
如果不需要这么大的配额,你可以把数值调整为你的业务场景中最大可能的消息大小即可,不需要直接用最大值。
内容的提问来源于stack exchange,提问作者GuidoG。
相关产品推荐
相关产品推荐

