如何确定Web应用程序当前是否正在运行

时间:2010-11-19 11:59:35

标签: c# .net asp.net iis-6

我有一个在IIS 6下运行的ASP.NET Web应用程序,以及另一个负责监视和报告状态的进程。

我想通过监控过程对Web应用程序进行抽样,以便通过访问Web应用程序上的专用处理程序来检查其状态,但是我不想“唤醒” Web应用程序,以防它没有运行。

是否有选项可以确定特定的Web应用程序当前是否正在运行?如果有这样的选项,我将能够首先检查应用程序是否正在运行,然后才能访问处理程序以检查其状态。

感谢。

6 个答案:

答案 0 :(得分:2)

我今年早些时候必须为IIS7做类似的事情,不确定这是否适用于IIS6,但这就是我所做的。

        var iis = new DirectoryEntry("IIS://" + Environment.MachineName + "/w3svc");

        foreach (DirectoryEntry site in iis.Children)
        {
            if (site.SchemaClassName.ToLower() == "iiswebserver")
            {
                Console.WriteLine("Name: " + site.Name);
                Console.WriteLine("State: " + site.Properties["ServerState"].Value);
            }
        }

ServerState返回2表示已启动,4表示已停止。

答案 1 :(得分:1)

您可以使用HTTP HEAD请求来检查网站是否已启动。这是一个做同样的例子。

http://www.eggheadcafe.com/tutorials/aspnet/2c13cafc-be1c-4dd8-9129-f82f59991517/the-lowly-http-head-reque.aspx

答案 2 :(得分:0)

我会在ASP.NET网站中包含一个asmx文件,一个带有简单Ping功能的Web服务,但它仍会唤醒网站的应用程序池。

答案 3 :(得分:0)

您可以分析IIS日志文件,以查看是否有最近的条目。

如果您的应用程序使用不多,则可能仍需要刷新最新的“条目”。

或者您可以更新文件/数据库以指示“仍然有效”。

如果您真的不想要延迟,请在Application_Start和Application_End中创建并销毁系统互斥锁。

答案 4 :(得分:0)

这是我的解决方案:

    try
    {
        WebRequest request = WebRequest.Create("http://localhost/");
        WebResponse response = request.GetResponse();
    }
    catch (WebException ex)
    { 
        // ex.Status will be WebExceptionStatus.ConnectFailure
        // if the site is not currently running
    }

答案 5 :(得分:0)

我们曾经使用Nagios来监控我们的网站,它会定位我们网站的favicon。如果它可以拉回图标,我们就知道网站已经启动了。