我有最基本的可能代码,试图从WebRequest获得响应。它将超时设置为500毫秒(这已经足够了),并获得响应。如果请求超时,它将返回信息。当我从通过VPN连接的计算机运行此代码到运行IIS的服务器时 - 一切正常。此代码返回“OK”。在IIS服务器上运行的相同代码返回“超时”。总是
请注意,我已经仔细检查了URI是否有效,无论是在我的计算机上运行此代码,还是在IIS服务器计算机上的InternetExplorer中测试此URI。
文件Pulse.aspx是一个包含1个字符“1”的简单文本文件。它可以通过代码中提供的URI访问。
运行IIS的计算机是安装了所有最新更新的Windows 2008 Server。
有趣的是 - 消息“超时”。超过2000毫秒后显示,而不是500毫秒,所以这不是正常超时。在我的计算机上,我可以将超时值设置为100毫秒,然后超时,但它会立即发生(在真正的100毫秒之后)。
我尝试以常规用户和管理员用户身份运行我的测试代码。没有快乐。
我做错了什么?我真的需要从IIS服务器运行此代码(它是检测IIS崩溃的看门狗/脉冲服务的一部分)。
这是完整的代码:
using System;
using System.Net;
namespace ConsoleApplication1 {
class Program {
private static bool CheckForTimeout(Uri uri, int timeout) {
var status = false;
var req = WebRequest.Create(uri);
req.Method = "GET";
req.Timeout = timeout;
WebResponse res = null;
try {
res = req.GetResponse();
} catch (WebException x) {
status = x.Status == WebExceptionStatus.Timeout;
} finally {
if (res != null) res.Close();
}
return status;
}
static void Main(string[] args) {
if (CheckForTimeout(new Uri("http://192.168.1.11/Pulse.aspx"), 500))
Console.WriteLine("Timed out.");
else
Console.WriteLine("OK.");
}
}
}
更新:我将超时更改为5000后才能正常工作!但它仍然非常奇怪。为什么我只需要300ms运行来自远程主机的代码,5000ms运行来自localhost的相同代码?