C# 中的应用程序池状态

Application Pool Status in C#

我正在尝试从 Web 应用程序中获取应用程序池状态。我感兴趣的应用程序池是“ABC”,但是当我按名称检查它时,我什么也没得到,当我按名称检查可用池时(即 manager.ApplicationPools),它们显示为 Clr4ClassicAppPool、Clr4IntegratedAppPool,...所以我找不到匹配项。

这是我正在使用的

public static int GetAppPoolStatus(string sAppPoolName)
{
    int iRet = -1;
    try
    {
        using (ServerManager manager = new ServerManager())
        {
            ApplicationPool appPool = manager.ApplicationPools.FirstOrDefault(ap => ap.Name == sAppPoolName);

            if (appPool != null)
            {
                //Get the current state of the app pool
                iRet = (int)appPool.State;         // 0: Starting, 1: Started, 2: Stopping, 3: Stopped
            }
            else
            {
            }
        }
    }
    catch (Exception ex)
    { }
    return iRet;
}

GAC 版本 (7.9.0.0) 是 IIS Express 的一部分,如果您的项目文件未明确指向 %SystemRoot%\system32\inetsrv\Microsoft.Web.Administration.dll.

,则在编译您的项目时由 MSBuild 解析

最终解决方案(如果不卸载 IIS Express)是显式添加对 %SystemRoot%\system32\inetsrv\Microsoft.Web.Administration.dll 的引用,以便在编译时使用正确的元数据。它有副作用,但仍然是一种可靠的方法。在运行时,使用程序集重定向来坚持版本 7.0.0.0.

可以在 this post

中找到更多提示