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