[英]Recycle IIS7 Application Pool with C#
我已经阅读了有关如何以编程方式执行此操作的所有线程,但无法正常工作。 关于我的代码如何工作的一些背景知识。
您登录到站点,然后选择“应用程序池”监视器。 有一个下拉列表允许您选择要查找的服务器。 我有一个存储过程,它将从该服务器中拉出应用程序池并在网格中显示它们。 然后,我有正在测试的代码:
while (rdr.Read())
{
string appPool = rdr["AppPoolName"].ToString();
string permission = rdr["Permission"].ToString();
string serverIP = rdr["ServerIP"].ToString();
if (permission == "E")
{
lblErrorStart.Visible = false;
using (var serverManager = ServerManager.OpenRemote(serverIP))
{
ApplicationPool poolName = serverManager.ApplicationPools[appPool];
poolName.Stop();
lblSuccess.Visible = true;
}
}
else
{
lblErrorStart.Visible = true;
}
}
我创建的阅读器汇集了SQL的AppPoolName,ServerIP和Permission。
我将DirectoryEntry用于IIS6,它的工作原理很好,但不适用于IIS7。
using (DirectoryEntry w3svc = new DirectoryEntry(string.Format("IIS://" + serverIP + "/W3SVC/AppPools/" + appPool)))
{
w3svc.Invoke("Recycle", null);
lblSuccess.Visible = true;
}
任何帮助,将不胜感激。
编辑:我与目录服务获得的异常是System.Runtime.InteropServices.COMException
您怎么知道它不起作用? 您如何才能真正知道应用程序池是否已回收? 几个月前,我们遇到了这个问题,并试图找到一种方法来查看它是否真正在回收。 我们在IIS中打开了跟踪功能,但是没有记录任何消息,我们认为这是行不通的。 然后,我们要做的是创建一个虚拟服务和一个控制台应用程序,该应用程序每0.5秒钟ping该服务一次。 然后,我们回收了托管服务的AppPool,奇怪的是,我们发现ping响应出现了延迟,这意味着它确实可以回收。
尝试更改w3svc.Invoke("Recycle", null);
到w3svc.Invoke("Stop", null);
。 如果那停止了AppPool,那么您几乎可以确定Recycle
可以正常工作。 请注意,调用Recycle
操作不会阻塞 ,因此,如果您的代码依赖于AppPool在回收后启动并运行,则需要在继续之前检查其状态。
试一下:
在“ Windows Features
窗口中,确保启用了IIS 6 Management Compatibility
。
打开“开始”菜单并键入“服务”,然后按Enter。 确保IIS Admin Service
正在运行。 现在尝试调用该命令,看看它是否有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.