首页 > 解决方案 > 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;
}

标签: c#iisapplication-pool

解决方案


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

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

更多提示可以在这篇文章中找到


推荐阅读