2013-03-26 70 views
3

目前在我们的应用程序中,当执行第一个HTTP Webrequest时,我看到很大滞后。根据我们的日志,有30-60秒的滞后。它会阻止在HttpWebRequest.BeginGetResponseHttpWebRequest.BeginGetResponse块30-60秒

下面是从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台其他机器,并且不会在那里导致相同的问题。我看到客户的日志文件具有完全相同的问题。这似乎发生在某些机器的某些条件下。

+0

这是针对内部网或互联网网址吗? – Justin 2013-03-26 14:26:20

+0

我添加了一些示例代码。我有内部和外部的问题。也许它只是一个针对这个特定服务器实现的问题,可以通过一些特殊的设置来解决。 关于MONO我们没有这个问题。目前我正在调试完整的.NET框架3.5。所有框架版本上都不存在该问题。例如Silverlight似乎工作正常,但它使用浏览器堆栈。 – Alex 2013-03-26 14:34:09

+0

你有没有尝试过,如果对任何其他网站,如谷歌或stackoverflow?它存在吗? – Justin 2013-03-26 14:38:45

回答

0
+0

是的,我之前看过这些线程,但不知道这是否是完全相同的问题。这些线程是非常古老的,如果这是一个.NET问题,它应该已经在最新版本如3.5,4和4.5中修复。 – Alex 2013-03-28 11:46:56

+0

@Pete:你应该给出一个关于链接结论的摘要链接-O不允许回答。 – jgauffin 2014-04-25 11:55:43

1

我刚刚经历了同样的事情发生。

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

希望这会有所帮助。

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

+0

代理缓慢检测通常是请求延迟的原因。启用S​​ystem.NET日志记录将有助于揭示这是否是特定.NET WebRequest性能问题的原因。 – EricLaw 2014-04-24 16:46:48

+0

谢谢@EricLaw。我会看一看,因为我只有很少的URI需要这么长时间。 – Diego 2014-04-25 11:50:54

相关问题