WebResponse response;
try
{                
 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
 request.Timeout = 20000;
 response = request.GetResponse();

 request = (HttpWebRequest)WebRequest.Create(url2);
 response = request.GetResponse();
}
catch(Exception ex)
{
 //do something
}              
finally
{
}

那里应该响应。Close()被叫什么?

  • 之后每GetResponse()以试试吗?

  • 后GetResponse()在尝试一次?

  • 在最后块?
有帮助吗?

解决方案

没有一以上。你应该使用 using 块:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 20000;
using (WebResponse response = request.GetResponse())
{
    using (var stream = response.GetResponseStream())
    {
        using (var reader = new StreamReader(stream))
        {
            var result = reader.ReadToEnd();
            // Do something with result
        }
    }
}

一个 using 块将确保处理方法,是否有一个例外。处理将做同样的事情,以关闭。

using (var d = new DisposableClass()){code;}

相当于:

DisposableClass d = null;
try
{
    d = new DisposableClass();
    code;
}
finally
{
    if (d != null)
        ((IDisposable)d).Dispose();
}

其他提示

把它放在最后块。为每 MSDN:

最后块是有用的 清理任何资源分配 试块以及任何运行的 代码,必须执行,即使有 是一个例外。控制是总是 传递到最后无论块 如何试图阻退出。

注意嵌套的使用块不需要括号,提高其可读性。所以约翰Saunder的代码可以写成:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 20000;
using (WebResponse response = request.GetResponse())
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
    var result = reader.ReadToEnd();
    // Do something with result
}

VS.NET 了解到,这种嵌套块不需要缩进.注意顺便说一句,如果您知道的编码的反应或是要忽略它,无论如何,Web客户端提供了一个简单的API-丢头信息,所以头部为基础(传/文本)的编码检测成为不可能的,但除此之外,它工作正常。

我谨建议以下的

        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.google.com");
            request.Timeout = 20000;
            using (var response = request.GetResponse())
            {
                //Do something with response.
            }


            request = (HttpWebRequest)WebRequest.Create("http://www.bing.com");
            using (var response = request.GetResponse())
            {
                //Do somehing with response
            }
        }
        catch (Exception ex)
        {
            //do something
        }
        finally
        {
        }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top