HttpWebRequest.BeginGetResponse阻止30-60秒

时间:2013-03-26 14:16:39

标签: c# .net httpwebrequest

目前在我们的某个应用程序中,我发现在执行第一个HTTP Webrequest时存在很大的滞后。根据我们的日志,有30到60秒的滞后。它阻止了HttpWebRequest.BeginGetResponse

以下是MSDN的引用:

  

BeginGetRequestStream方法需要一些同步设置任务   完成(DNS解析,代理检测和TCP套接字   连接,例如)此方法变为异步之前。作为一个   结果,永远不应该在用户界面(UI)上调用此方法   线程,因为它可能需要一些时间,通常是几秒钟。在   某些未配置webproxy脚本的环境   这可能需要60秒或更长时间。的默认值   config文件元素的downloadTime属性是   一分钟占了潜在时间延迟的大部分时间。

我知道有DNS解析,代理检测和其他所需的东西。但是30-60秒太长了。当我在任何浏览器中输入相同的URL时,我立即获得该页面。当我解决DNS手册时,也没有延迟。 对同一URI的所有并发请求都不会阻止。当我重新启动应用程序时,第一个请求再次阻止min。 30秒。

这是一个已知问题吗?有bug吗?我们在不同的机器上看到这一点,所以我认为我的开发者机器不是问题所在。

以下是一些示例代码:

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台机器,并且不会在那里造成同样的问题。我看到来自客户的日志文件存在完全相同的问题。这似乎发生在某些机器的某些条件下。

2 个答案:

答案 0 :(得分:1)

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

我发现Microsoft Client Firewall正在生成它。我正在使用它来避免浏览我公司的代理。我的第一个解决方法是设置request.Proxy硬编码。为了避免这种丑陋的代码行,我最终禁用了Microsoft Client Firewall并在Internet选项上设置了代理。

希望这有帮助。

正如@EricLaw所说,System.Net日志记录可能有所帮助。以下是MSDN到Enable System.Net logging的链接。

答案 1 :(得分:0)