[英]How to determine whether a web application is currently running
我有一个在IIS 6下运行的ASP.NET Web应用程序,以及另一个负责监视和报告状态的进程。
我想通过监视进程对Web应用程序进行采样,以便通过访问Web应用程序上的专用处理程序来检查其状态, 但我不想“唤醒”Web应用程序,以防它不运行。
是否有一个选项来确定特定的Web应用程序当前是否正在运行? 如果有这样的选项,我将能够首先检查应用程序是否正在运行,然后才能访问处理程序以检查其状态。
谢谢。
我不得不在今年早些时候为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。
您可以使用HTTP HEAD请求来检查站点是否已启动。 这是一个做同样的例子。
我会在ASP.NET网站中包含一个asmx文件,一个带有简单Ping功能的Web服务,但它仍会唤醒网站的应用程序池。
您可以分析IIS日志文件,以查看是否有最近的条目。
如果您的应用程序使用不多,则可能仍需要刷新最新的“条目”。
或者您可以更新文件/数据库以指示“仍处于活动状态”。
如果您确实不想要延迟,请在Application_Start和Application_End中创建并销毁系统互斥锁。
这是我的解决方案:
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
}
我们曾经使用Nagios监控我们的网站,它将针对我们网站的favicon。 如果它可以撤回图标,我们就知道网站已经启动了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.