我有一个 WCF 服务,在负载条件下一直给我这个错误(否则我似乎无法重新创建该错误)。我们已经尝试寻找解决方法大约一周了,但没有这样的运气..
我看到的错误有两个部分,
System.ServiceModel.CommunicationException: An error: (The request was aborted: the request was cancelled.) occurred while transmitting data over the http channel.
和:
System.Net.WebException: The request was aborted: the request was cancelled.
我看到很多人建议通过重载 Reference.cs
文件中的方法并设置 KeepAlive = false
来禁用保持事件状态,但是,我们的客户端side 正在使用服务引用(除了 Web 引用之外),并且此选项不再存在。
我看到的另一个选项是向服务添加自定义 Binding,而不是我们现在使用的 BasicHttpBinding
,但这会影响那些一直在使用 Web 服务的用户的向后支持webReference(因为 CustomBinding
未启用 SOAP)。
以前有人处理过这个错误吗?有没有办法在不影响服务器端的情况下禁用 WCF 中的保持事件状态?是否还有其他已知的保持事件状态会导致此错误?
最佳答案
我不认为 HTTP keep-alive 是造成这种情况的原因。 WCF 应该能够自行处理此问题,以便 HTTP 持久连接在请求之间共享,并且如果它过期(在 100s of inactivity 之后过期),WCF 将创建新连接而不引发任何异常。如果您的连接在请求传输期间中止,那么我预计还会出现其他问题。
您可以使用此自定义绑定(bind),相当于 BasicHttpBinding,无需 HTTP 保持事件状态:
<bindings>
<customBinding>
<binding name="NoKeepAlive">
<textMessageEncoding messageVersion="Soap11" />
<httpTransport keepAliveEnabled="false" />
</binding>
</customBinding>
</bindings>
关于.net - System.Net.WebException:请求已中止:请求已取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3900040/