我有一个在IIS 6下运行的ASP.NET Web应用程序,以及另一个负责监视和报告状态的进程。
我想通过监控过程对Web应用程序进行抽样,以便通过访问Web应用程序上的专用处理程序来检查其状态,但是我不想“唤醒” Web应用程序,以防它没有运行。
是否有选项可以确定特定的Web应用程序当前是否正在运行?如果有这样的选项,我将能够首先检查应用程序是否正在运行,然后才能访问处理程序以检查其状态。
感谢。
答案 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请求来检查网站是否已启动。这是一个做同样的例子。
答案 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。如果它可以拉回图标,我们就知道网站已经启动了。