我有一个非常简单的HTTP get应用程序,这里有一个更简单的编辑版本
using System;
using System.Net;
using System.Threading;
namespace UploadRichardsStatusConsoleApplication
{
class Program
{
static void Main()
{
const string requestString = "http://www.google.com/";
while (true)
{
var request = WebRequest.Create(requestString);
Console.WriteLine("request sent = " + requestString);
try
{
var response = request.GetResponse();
Console.WriteLine("response.ContentLength = " + response.ContentLength);
}
catch (WebException)
{
Console.WriteLine("Request timed out");
}
Thread.Sleep(5000);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
真正的控制台应用程序有我自己的Azure URL,但问题显示在任何请求字符串,即使是谷歌,所以我不认为这是服务器端问题.当我运行代码时,前两个循环成功,即response.ContentLength报告.此后他们超时.为什么我只接到两个电话?我正在使用的实际应用程序使用HTTP GET定期报告状态,因此我需要重复执行此操作(超过两次!)
我应该注意到我已经尝试过:
但这些都没有奏效.
您没有处理响应,这意味着它仍然占用该主机的连接池.对同一主机的后续请求将等待释放连接,这意味着等待可能永远不会发生的垃圾收集/终结器轮次.
使用using声明,应该没问题:
using (var response = request.GetResponse())
{
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
601 次 |
| 最近记录: |