目前在我们的某个应用程序中,我发现在执行第一个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台机器,并且不会在那里造成同样的问题。我看到来自客户的日志文件存在完全相同的问题。这似乎发生在某些机器的某些条件下。
答案 0 :(得分:1)
我刚刚经历过同样的事情。
我发现Microsoft Client Firewall正在生成它。我正在使用它来避免浏览我公司的代理。我的第一个解决方法是设置request.Proxy
硬编码。为了避免这种丑陋的代码行,我最终禁用了Microsoft Client Firewall并在Internet选项上设置了代理。
希望这有帮助。
正如@EricLaw所说,System.Net日志记录可能有所帮助。以下是MSDN到Enable System.Net logging的链接。
答案 1 :(得分:0)