目前在我们的一个应用程序中,我在执行第一个 HTTP Webrequest 时看到了很大的滞后。根据我们的日志,有 30 - 60 秒的延迟。它在 HttpWebRequest.BeginGetResponse 处阻塞
这是来自 MSDN 的引用:
BeginGetRequestStream 方法需要在此方法变为异步之前完成一些同步设置任务(例如 DNS 解析、代理检测和 TCP 套接字连接)。因此,永远不应在用户界面 (UI) 线程上调用此方法,因为它可能需要一些时间,通常是几秒钟。在某些未正确配置 webproxy 脚本的环境中,这可能需要 60 秒或更长时间。配置文件元素的 downloadTime 属性的默认值是一分钟,这占了大部分潜在的时间延迟。
我知道需要 DNS 解析、代理检测和其他东西。但是30-60秒太长了。当我在任何浏览器中输入相同的 URL 时,我会立即获得该页面。当我手动解析 DNS 时,也没有延迟。对同一 URI 的所有并发请求都不会阻塞。当我重新启动应用程序时,第一个请求再次阻塞分钟。30秒。
这是一个已知问题吗?有错误吗?我们在不同的机器上看到了这个,所以我不认为我的开发机器是问题所在。
这是一些示例代码:
private void TestWebRequest()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://matrix.ag-software.de/http-bind");
request.ContentType = "text/xml; charset=utf-8";
request.Method = "POST";
request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
}
private void GetRequestStreamCallback(IAsyncResult result)
{
//
}
更新:这一定是我的 Windows 7 安装的问题。我已经测试了另外 2 台机器,但不会出现同样的问题。我已经看到来自客户的日志文件具有完全相同的问题。这似乎在某些机器上的某些条件下发生。