我们使用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();
根据我在这个网站和其他网站上找到的关于使请求更快的建议,我还设置了读写超时属性并将代理设置为空。虽然在我自己的电脑和我尝试过的其他电脑上,它在3秒后正确停止,但在其他一些电脑上,它直到大约40秒后才会停止。我重复一下,如果它试图连接到无效的地址,例如在我们的子网内不存在的IP,并且"使用正确的IP"不是一个可接受的解决方案(我可以解释为什么,但我认为这将是离题)。如果它连接到一个确实存在的IP,数据交换就会像它应该的那样快。
有人见过类似的东西吗?
我不知道为什么会发生这种情况,但我认为你可以使用ping
作为解决方案,如果你有IP(不是域名):
Console.WriteLine(new Ping().Send(IPAddress.Parse(ipAddress)).Status);