最近有个项目部署在IIS上,时不时会出现程序池自动停止的情况,程序池一停止就整个项目废了。所以百度了一下,找到一个C#监控IIS程序池的方法,下面大家看代码。
///
/// IIS应用地址池监控方法
///
private void IISAppPools()
{
try
{
string entPath = "IIS://LOCALHOST/W3SVC/AppPools";
while (true)
{
DirectoryEntry rootEntry = new DirectoryEntry(entPath);
foreach (DirectoryEntry AppPool in rootEntry.Children)
{
if (AppPool.Properties["AppPoolState"].Value.ToString() != "2")
{
//AppPool.Name + "应用程序池已停止"
//重启程序池
AppPool.Invoke("Start", null);
AppPool.CommitChanges();
//AppPool.Name + "应用程序池已成功启动"
}
AppPool.Close();
}
//每3分钟监测一次
Thread.Sleep(1000 * 60 * 3);
}
}
catch (Exception ex)
{
}
}
//使用独立线程来监测IIS程序池状态
Thread t = new Thread(IISAppPools);
t.Start();
如果报以下异常,请安装IIS 6兼容组件【IIS 元数据库和IIS 6配置兼容性】
System.Runtime.InteropServices.COMException (0x80005000): 未知错误(0x80005000)
在 System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
在 System.DirectoryServices.DirectoryEntry.Bind()
在 System.DirectoryServices.DirectoryEntry.get_IsContainer()
在 System.DirectoryServices.DirectoryEntries.ChildEnumerator..ctor(DirectoryEntry container)
在 System.DirectoryServices.DirectoryEntries.GetEnumerator()
安装成功后,如果还是报错,请使用管理员身份运行程序
ok
mjj通道