.net - System.Net.WebException:请求已中止:请求已取消

标签 .net wcf system.net.webexception service-reference communicationexception

我有一个 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/

相关文章:

c# - System.Net.HttpWebResponse.GetResponseStream() 在 WebException 中返回截断的正文

.NET 最终概念问题

java - .Net 中的 Struts、JSF 等 MVC 框架

c# - 将 XML 反序列化为对象 C#

c# - web.config/Global.asax 中的自定义错误处理不处理不存在的目录

.net - ASP.NET MVC 和 WCF

c# - System.ServiceModel.Clientbase.Open() 是做什么的?

c# - 无法从 WebException 获取 ResponseStream

c# - 在 C# 中在服务器和客户端之间传递自定义复杂对象

c# - 如何避免 403 Forbidden 响应的 WebException?