【发布时间】:2011-08-30 12:40:13
【问题描述】:
我们使用 HttpWebRequest 对象在应用程序的服务器和客户端部分之间交换数据。当服务器的 IP 无法访问或无效(这是发生的事情,应该发生)时,客户端要么在 3 秒后停止等待(这是我设置的超时),要么继续等待最多一分钟,具体取决于它在哪台计算机上运行! 代码如下:
HttpWebRequest webRequest = null;
WebResponse webResponse = null;
webRequest = (HttpWebRequest)WebRequest.Create(serverURL);
webRequest.Timeout = 1000 * 3; //3 seconds
webRequest.ReadWriteTimeout = webRequest.Timeout;
webRequest.AllowWriteStreamBuffering = true;
//Adding headers here; code removed
webRequest.Proxy = null;
webResponse = webRequest.GetResponse();
根据我在本网站和其他网站上找到的关于加快请求速度的建议,我还设置了 ReadWriteTimeout 属性并将 Proxy 设置为 null。 虽然它在我自己的计算机和我尝试过的其他计算机上 3 秒后正确停止,但在其他一些计算机上它直到大约 40 秒后才会停止。 我再说一遍,如果它尝试连接到 无效 地址,例如我们的子网中不存在的 IP,就会发生这种情况,并且“使用正确的 IP”是不可接受的解决方案(我可以解释原因,但我认为这会离题)。如果它连接到一个确实存在的 IP,那么数据交换就会像预期的那样快速。
有人见过类似的吗?
【问题讨论】:
-
这40秒真的测出来了吗?你没有达到 15 秒的 DNS 超时时间,这在关于 Timeout property 的备注中列出
-
我建议打开
System.Net的跟踪并检查日志。看到这个帖子blogs.msdn.com/b/dgorti/archive/2005/09/18/471003.aspx -
确实测量了 40 多秒。我读到 DNS 超时可能是“15 或更多”秒,所以我想这并不能免除它。有没有办法覆盖它?
标签: .net httpwebrequest timeout