2015-06-27 484 views
3

我的问题可能很愚蠢,但需要一个答案。据我所知,每当“操作超时HttpWebRequest.GetResponse()方法发生异常比连接关闭和释放。如果它不是真的,它的工作原理是什么?我试图谷歌这一点,但无法得到答案。在httpWebRequest.GetResponse()方法中,操作超时异常关闭连接

编辑:在这种情况下,它是一个POST请求,已建立连接并称为URL被处理在服务器端的请求,但HttpWebRequest对象在等待响应和一段时间后发生的异常。

回答

1

我的理解是,您必须调用Close方法来关闭流并释放连接。否则可能会导致应用程序无法连接。如果您不确定,可以在Close方法或HttpWebRequest.GetResponse()附近放置try/catch块。

+0

其中Close方法,我们这里所说的? HttpWebRequest没有Close方法,并且HttpWebResponse尚未在此初始化。 – Nps

0

那么我不完全确定,但它看起来像Operation TimedOut异常可能会错误的底层连接通道;导致所有请求结束后出现同样的异常。

MSDN Documentation

必须调用Close方法关闭该流并释放 连接。如果不这样做,可能会导致您的应用程序耗尽连接 。

我做了一个小试验,看看

private static void MakeRequest() 
    { 
     WebRequest req = null; 
     try 
     { 
      req = WebRequest.Create("http://www.wg.net.pl"); 
      req.Timeout = 10;     
      req.GetResponse(); 
     } 
     catch (Exception ex) 
     { 

      Console.WriteLine(ex.Message); 
      req.Timeout = 10000; 
      req.GetResponse(); // This as well results in TimeOut exception 
     } 
    } 
+0

我们在这里谈论哪种Close方法? HttpWebRequest没有Close方法,并且HttpWebResponse尚未在此初始化。 – Nps

+0

@NPS,请检查我已链接的文档以及答案。特别是你应该调用'Stream.Close()'或'HttpWebResponse.Close()'。看到这里https://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.close%28v=vs.110%29.aspx。 – Rahul

+0

但在GetResponse()方法中发生异常,该方法返回由于异常而不返回的HttpWebResponse对象。我无法在空对象上调用Close方法。 – Nps

相关问题