微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有 30mb 输入字符串的 WCF 服务 - 远程服务器返回错误:(413) 请求实体太大

如何解决具有 30mb 输入字符串的 WCF 服务 - 远程服务器返回错误:(413) 请求实体太大

客户端使用太大的 xml(保存到文件时大约 30mb)调用我的 WCF 方法,IIS 返回 413。我尝试将 uploadReadAheadSize 设置为 2gb;没有用。还尝试将绑定的 ma​​xBufferSize 增加到 2gb。

我的 WCF 服务托管在带有几台服务器的负载均衡器上;由于到位的证书验证,我无法进行隔离测试。我没有尝试的是协商客户端证书,考虑到其他服务的广泛消费者,我们不想改变它。

使用认 48kb 的 uploadReadAheadSize,我能够测试 7mb 大小的 xml 字符串并且它工作正常。关于堆栈溢出/谷歌显示uploadReadAheadSize的所有发现都应该修复它..我不确定我做错了什么。客户端可能是非 .net 客户端,我对它的控制较少。

解决方法

那不是IIS的问题,而是WCF的问题。默认情况下,WCF 将消息限制为 65KB,以避免对大消息进行拒绝服务攻击。此外,如果您不使用 MTOM,它会将 byte[] 发送到 base64 编码字符串(大小增加 33%)=> 48KB * 1,33 = 64KB

要解决此问题,您必须重新配置您的服务以接受更大的消息。此问题之前引发了 400 Bad Request 错误,但在较新版本中,WCF 开始使用 413,这是此类错误的正确状态代码。

您需要在绑定中设置 maxReceivedMessageSize。您还可以需要设置 readerQuotas。

<system.serviceModel>
  <bindings>
    <basicHttpBinding>
      <binding maxReceivedMessageSize="12345.......">
        <readerQuotas ... />
      </binding>
    </basicHttpBinding>
  </bindings>  
</system.serviceModel>

https://stackoverflow.com/a/10123764/6459462

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。