我编写了一个非常简单的控制台应用程序,它只是使用以下代码下载文件:
System.Net.WebClient web = new System.Net.WebClient ();
web.DownloadFile ("http://www.google.com", "file.txt");
在我以前的开发机器上,这非常快。一旦我执行DownloadFile
方法,请求就越过了线路,响应很快就会响起。我使用ProcMon工具检查了这种行为。
但是,在切换到另一台机器之后,我发现在调用DownloadFile
时大约5-8秒没有发生任何事情。使用浏览器访问相同的URL会立即显示结果。
在花了几个小时研究这个,进入.NET源代码之后,我终于放弃了System.Net.ServicePointManager.FindServicePoint
,其中踩到某种方式对我来说不再有意义,并且代理解决方案似乎有些原因
我最终在Internet Explorer 8(I中的 Internet选项对话框的 LAN设置对话框中关闭了自动检测设置我正在运行Windows 7 x64),没有设置复选框。这神奇地使一切都做得非常非常快。没有更多的延迟。
好吧,我找到了一种方法来规避我所观察到的问题,但如果有人可以就我的代码可能出现的问题分享一些想法,我会很高兴。我可以通过某种方式配置WebClient
实例以某种方式实现相同的效果吗?
答案 0 :(得分:8)
您是否尝试过明确设置代理?
web.Proxy = new WebProxy();
这应该基本上等同于说“不要使用代理 - 甚至不要尝试。”
答案 1 :(得分:2)
您是否尝试过设置web.Proxy属性?
例如:
System.Net.WebClient web = new WebClient();
web.Proxy = new WebProxy("Address here");
web.DownloadFile("http://www.google.com", "file.txt");