System.Net.Sockets.SocketException

Posted

技术标签:

【中文标题】System.Net.Sockets.SocketException【英文标题】: 【发布时间】:2009-09-02 10:15:21 【问题描述】:

我有一个应用程序通过 http(s) 对外部资源发出同步请求。每隔几周我就会收到以下异常

Exception: System.Net.WebException - Message: Unable to connect to the remote server

内部异常: - 消息:连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应

困扰我的是,我的跟踪日志显示,对于此异常的每个实例,它都会在请求中抛出“21 秒”。

以前有人见过这样的行为吗?有解决办法吗? System.Net.HttpWebRequest 命名空间中是否存在任何已知问题? 使用 System.Net.HttpWebRequest 的最佳实践是什么?我应该明确关闭并处理响应流吗...

【问题讨论】:

【参考方案1】:

如果您正在访问外部资源,答案很可能是这些资源不可用(他们的服务器已关闭、您的连接已关闭、他们的连接已关闭等)。

您可以在 HTTPWebRequest 对象的 GetResponse() 方法之前设置 .Timeout 属性,以延长它正式超时之前的时间,看看会发生什么:

myHttpWebRequest.Timeout = 10; //In milliseconds

如果您以 NETWORK SERVICE 作为主机帐户运行 ASP.NET,则可以尝试将其添加到配置文件中:

<configuration >
  <system.net>
    <defaultProxy>
      <proxy bypassonlocal="true" usesystemdefault="false" />
    </defaultProxy>
</system.net>
</configuration>

如果不这样做,您的应用程序将无法访问代理设置。 .NET 搜索它,找不到它,然后通过默认连接。这将导致异常,但执行将继续。它可以解释为什么它总是 21 秒进入请求。

Read the full details here.

【讨论】:

没有超时。默认超时为 100 秒。我的请求正在到达正在处理的远程服务器,一切都按预期工作,但我得到了上述异常? 更新了我的答案,希望对您有所帮助。

以上是关于System.Net.Sockets.SocketException的主要内容,如果未能解决你的问题,请参考以下文章

什么是使用 .NET 3.5 异步 System.Net.Sockets.Socket 停止数据流?

紧急求助,在传输数据时页面提示无法连接到远程服务器 System.Net.Sockets.SocketException

C# 客户端 Python 服务器:连接被拒绝

Shadowsocks用不了,求教是啥原因,如何解决?

在 C# 中获取套接字对象的流

.NET即时通信 WebSocket服务端实例