use*_*976 4 .net c# webrequest httpwebresponse getresponse
我构建此方法(c#)以便从URL接收HTTP响应状态代码.我运行这种方法的时候它的工作正常,但是当我在一个循环中运行它时,它第三次卡住了.任何线索?
public static string isAlive(string url)
{
Console.WriteLine("start: Is Alive Test");
WebRequest request = WebRequest.Create(url);
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
return Convert.ToString((int)response.StatusCode);
}
catch(WebException ex)
{
HttpWebResponse res = (HttpWebResponse)ex.Response;
return Convert.ToString((int)res.StatusCode);
}
}
Run Code Online (Sandbox Code Playgroud)
循环
for (int i = 0; i < 5; i++)
{
string a = isAlive("https://www.yahoo.com/");
Console.WriteLine(a);
}
Run Code Online (Sandbox Code Playgroud)
你没有调用Dispose这个HttpWebResponse对象,这意味着连接仍然存在.如果您将代码更改为以下内容:
public static string isAlive(string url)
{
Console.WriteLine("start: Is Alive Test");
WebRequest request = WebRequest.Create(url);
try
{
using(HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
return Convert.ToString((int)response.StatusCode);
}
}
catch(WebException ex)
{
using(HttpWebResponse res = (HttpWebResponse)ex.Response)
{
return Convert.ToString((int)res.StatusCode);
}
}
}
Run Code Online (Sandbox Code Playgroud)
该using语句将隐式为您调用Dispose,这将关闭连接.
您的代码在第二次迭代后停止的原因是因为.Net具有内置的最大连接数,它将打开到网站,默认情况下为2.这是System.Net.ServicePointManager.DefaultConnectionLimit您可以根据需要增加的控制.
| 归档时间: |
|
| 查看次数: |
2006 次 |
| 最近记录: |