我有一个 WCF 服务,在负载条件下一直给我这个错误(并且我似乎无法重新创建该错误)。我们已经尝试寻找解决方法大约一周了,但没有这样的运气。
我看到的错误有两个部分,
System.ServiceModel.CommunicationException:
错误:(请求被中止:
请求被取消。)发生
通过http传输数据时
渠道。
and:
System.Net.WebException:请求
被中止:请求是
取消。
我看到很多人建议通过重载中的方法来禁用保持活动状态Reference.cs
文件和设置KeepAlive = false
但是,我们的客户端正在使用服务引用(除了 Web 引用之外),并且此选项不再存在。
我看到的另一个选择是向服务添加自定义绑定,而不是BasicHttpBinding
我们现在正在使用,但这会打扰那些一直在使用 webReference 的人对 web 服务的向后支持(因为CustomBinding
未启用 SOAP)。
以前有人处理过这个错误吗?有没有办法在不影响服务器端的情况下禁用 WCF 中的保持活动状态?是否还有其他已知的保持活动状态会导致此错误?
我不认为 HTTP keep-alive 是造成这种情况的原因。 WCF 应该能够自行处理此问题,以便在请求之间共享 HTTP 持久连接,并且如果它过期(它在以下时间后过期)数百秒不活动 https://stackoverflow.com/questions/3466490/how-to-set-keep-alive-interval-for-http-connection-in-wcf) WCF 创建新的而不引发任何异常。如果您的连接在请求传输期间中止,那么我预计还会出现其他问题。
您可以使用此自定义绑定,相当于 BasicHttpBinding,无需 HTTP 保持活动状态:
<bindings>
<customBinding>
<binding name="NoKeepAlive">
<textMessageEncoding messageVersion="Soap11" />
<httpTransport keepAliveEnabled="false" />
</binding>
</customBinding>
</bindings>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)