2009-09-03 65 views
7

我的asp.net应用程序发送的HttpWebRequest到远程REST服务器并等待响应,我发现有很多相同的错误消息的是这样的:如何关闭捕捉的HttpWebRequest超时后底层连接

系统。 Net.WebException:操作超时。在 System.Net.HttpWebRequest.GetResponse()

那是可能的,我捕获这个异常后直接关闭底层的HTTP连接?或者我没有必要这样做,因为我已经设置keepalive为false?

谢谢。

其实另一个问题是如果超时异常总是发生在System.Net.HttpWebRequest.GetResponse(),这是否意味着应用程序正在等待远程服务器的响应,并且在超时之前无法获得响应。可能的原因是什么,网络连接不稳定?远程服务器没有响应?任何其他可能的原因?

下面是代码:

System.Net.HttpWebResponse httpWebResponse = null; 
System.IO.Stream stream = null; 
XmlTextReader xmlTextReader = null; 
try 
{ 
    System.Net.HttpWebRequest httpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(request); 
    httpWebRequest.ReadWriteTimeout = 10000; 
    httpWebRequest.Timeout = 10000; 
    httpWebRequest.KeepAlive = false; 
    httpWebRequest.Method = "GET"; 
    httpWebResponse = (System.Net.HttpWebResponse)httpWebRequest.GetResponse(); 
    stream = httpWebResponse.GetResponseStream(); 
    xmlTextReader = new XmlTextReader(stream); 
    xmlTextReader.Read(); 
    xmlDocument.Load(xmlTextReader); 
    //Document processing code. 
    //... 
} 
catch 
{ 
    //Catch blcok with error handle 
} 
finally 
{ 
    if (xmlTextReader != null) 
     xmlTextReader.Close(); 
    if (httpWebResponse != null) 
     httpWebResponse.Close(); 
    if (stream != null) 
     stream.Close(); 
} 
+0

没有你的身影解决?我正在打同样的问题。我没有想法。 – 2012-09-03 17:10:59

+0

@AlekseyBykov你说过,那标记的答案不'解决你的问题?备择方案 ? – Kiquenet 2015-09-05 09:39:06

回答

2

简单的经验法则 - 的 - 是,如果它没有实现IDisposal那么它并不需要处置。

+0

没有实现IDisposal,但我发现在CLOSE_WAIT条件下有很多连接,不知道发生了什么,担心如果我的代码没有正确处理底层连接。 – machinegone 2009-09-04 00:26:28

+0

我认为你必须相信这个框架设计师。查看http://stackoverflow.com/questions/716436/is-there-a-correct-way-to-dispose-of-a-httpwebrequest获取更多信息。 – 2009-09-04 08:36:54

+2

尽管一般情况是这样,但它并没有解决这个问题 – 2012-09-03 17:07:14

0

请务必处理以及关闭。

或者使用使用块代替尝试,终于

using (var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse()) { 
    using (var stream = httpWebResponse.GetResponseStream()) { 
     using (var xmlTextReader = new XmlTextReader(stream)) { 
      xmlDocument.Load(xmlTextReader); 
     } 
    } 
} 
+2

配置响应对象没有解决问题 – 2012-09-03 17:10:24

0

你可以做的另一件事是调用Abort()方法上的HttpWebRequest已导致错误,像这样:

catch (WebException we) 
{ 
    using (HttpWebResponse errorResp = we.Response as HttpWebResponse) 
    { 
    ... 
    } 
    request.Abort(); 
} 
+1

没有解决问题 – 2012-09-03 17:09:59

相关问题