【发布时间】:2018-03-02 18:31:46
【问题描述】:
我使用 SoapHttpClientProtocol 向 Web 服务发送请求。有时我得到 SocketException:'阻塞操作被 WSACancelBlockingCall 调用中断'。 我看到以下调用堆栈:
System.IO.IOException: Unable to read data from the transport connection: A
blocking operation was interrupted by a call to WSACancelBlockingCall. --->
System.Net.Sockets.SocketException: A blocking operation was interrupted by a call to WSACancelBlockingCall
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
--- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
...
System.Net.WebException: The operation has timed out
at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
at System.Net.HttpWebRequest.GetRequestStream()
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
我只打电话给SoapHttpClientProtocol.Invoke,没有别的。
如果机器带有代理和防火墙,我会遇到这个问题。我想这可能是原因,但我不明白如何以及如何解决它。
【问题讨论】:
-
您多久收到一次问题?立即重试总是有效吗?我怀疑有超时问题,但不确定。
-
一天会发生几次。问题是它发生在具有防火墙和代理的机器上。在其他类型的机器上它工作正常。
-
服务器和客户端在同一台机器上吗?您的网络有组策略吗?当您使用组策略时,必须在密码服务器上确认连接。有时密码服务器的确认时间过长或超时。故障时间是随机的还是一致的?这可能是硬件问题,因此可能运行一些长时间的 ping 以验证运行状况可能会有所帮助。如果没有其他工作,您可以将代码放入循环中,并在失败时重试。我真的不喜欢提出这个建议。
标签: c# socketexception