【问题标题】:Does Operation Timed out exception in httpWebRequest.GetResponse() method close the connectionhttpWebRequest.GetResponse() 方法中的操作超时异常是否关闭连接
【发布时间】:2015-06-27 22:21:10
【问题描述】:

我的问题可能很愚蠢,但需要一个答案。据我所知,每当HttpWebRequest.GetResponse() 方法中出现“操作超时”异常时,连接就会关闭并释放。如果它不是真的那么它是如何工作的?我试图用谷歌搜索,但无法得到答案。

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

【问题讨论】:

    标签: c# httpwebrequest httpwebresponse system.net


    【解决方案1】:

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

    【讨论】:

    • 我们在这里讨论的是哪种关闭方法? HttpWebRequest 没有 Close 方法,HttpWebResponse 在这里还没有初始化。
    【解决方案2】:

    好吧,我不完全确定,但看起来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
            }
        }
    

    【讨论】:

    • 我们在这里讨论的是哪种关闭方法? HttpWebRequest 没有 Close 方法,HttpWebResponse 在这里还没有初始化。
    • @Nps,检查我与答案一起链接的文档。特别是您应该致电Stream.Close()HttpWebResponse.Close()。见这里msdn.microsoft.com/en-us/library/…
    • 但是在GetResponse() 方法中发生了异常,该方法返回了由于异常而没有返回的HttpWebResponse 对象。我无法在 null 对象上调用 Close 方法。
    • @Nps,这是正确的,调用 close() 是最佳实践。在这种特殊情况下,我不明白为什么还要调用 close() ,因为它可能已经关闭了。
    • 那是我的问题,所以异常会自动关闭连接。我们不需要处理这种特殊情况。
    猜你喜欢
    • 1970-01-01
    • 2016-08-10
    • 2011-06-04
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 2014-04-25
    • 2015-01-05
    相关资源
    最近更新 更多