从控制台应用程序运行时,WebRequest到IIS失败,超时

时间:2012-05-11 12:28:54

标签: c# iis timeout webrequest

我有最基本的可能代码,试图从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的相同代码?

0 个答案:

没有答案