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

Aud*_*zzy 14 .net wcf service-reference system.net.webexception communicationexception

我有一个WCF服务,在负载条件下给我这个错误(我似乎无法重新创建错误).我们一直试图找到解决方法大约一个星期,现在没有这样的运气..

我看到的错误有两个部分,

System.ServiceModel.CommunicationException:通过http通道传输数据时发生错误:(请求已中止:请求已取消.)

和:

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

我见过很多人建议通过重载Reference.cs文件和设置中的方法来禁用处于保持活动状态KeepAlive = false,但是,我们的客户端正在使用服务引用(除了Web引用)并且此选项不再存在.

我看到的另一个选项是向服务添加自定义绑定而不是BasicHttpBinding我们现在使用的,但是这会对那些使用webReference的人(因为CustomBinding没有启用SOAP)的后端支持Web服务.

有没有人以前处理过这个错误?有没有办法在不影响服务器端的情况下禁用WCF中的keep alive?是否还有其他任何可以导致此错误的活着?

Lad*_*nka 6

我不认为HTTP保持活着是对此负责.WCF应该能够自己处理这个问题,因此HTTP持久连接在请求之间共享,如果它过期(它在100次不活动后到期),WCF会创建新的连接而不会触发任何异常.如果您的连接在请求传输期间中止,那么我预计会有一些其他问题.

您可以将此自定义绑定用作BasicHttpBinding的等效项,而不保持HTTP活动:

<bindings>
  <customBinding>
    <binding name="NoKeepAlive">
      <textMessageEncoding messageVersion="Soap11" />
      <httpTransport keepAliveEnabled="false" />
    </binding>
  </customBinding>
</bindings> 
Run Code Online (Sandbox Code Playgroud)

  • 是的,它是负责任的,我以前见过它. (2认同)

nua*_*der 5

我在尝试上传大文件时遇到了这个问题。我必须将其添加到网络服务的 web.config 中

<system.web>
  <httpRuntime maxRequestLength="10240" />
Run Code Online (Sandbox Code Playgroud)