0

我有最基本的可能代码,它试图从 WebRequest 获得响应。它将超时设置为 500 毫秒(这绰绰有余),并获得响应。如果请求超时,它会返回信息。当我从通过 VPN 连接到运行 IIS 的服务器的计算机上运行此代码时 - 一切正常。此代码返回“OK”。在 IIS 服务器上运行的相同代码返回“超时。”。总是。

请注意,我已经通过在我的计算机上运行此代码以及在 IIS 服务器计算机上的 InternetExplorer 中测试此 URI 来仔细检查 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 后,我让它工作了!但这仍然很奇怪。为什么我只需要 300 毫秒从远程主机运行代码,而从 localhost 运行相同的代码需要 5000 毫秒?

4

0 回答 0