3

目前在我们的一个应用程序中,我在执行第一个 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 台机器,但不会出现同样的问题。我已经看到来自客户的日志文件具有完全相同的问题。这似乎在某些机器上的某些条件下发生。

4

2 回答 2

1

我刚刚经历过同样的事情。

我发现 Microsoft 客户端防火墙正在生成它。我用它来避免浏览我公司的代理。我的第一个解决方法是设置request.Proxy硬编码。为了避免那段难看的代码,我最终禁用了 Microsoft 客户端防火墙并在 Internet 选项上设置了代理。

希望这可以帮助。

正如@EricLaw 所说,System.Net 日志记录可能会有所帮助。这是一个链接到 MSDN 以启用 System.Net 日志记录

于 2014-04-24T16:41:32.823 回答