【问题标题】:Get application pool name and status from IIS server with .net core使用 .net 核心从 IIS 服务器获取应用程序池名称和状态
【发布时间】:2020-09-09 13:09:50
【问题描述】:

我想使用 .NET core 访问应用程序池的名称和状态

我们过去要么手动检查状态,要么使用不同的工具来检查 IIS 中应用程序池的状态。但是使用这些工具进行更新和删除仍然是一项人们容易忘记的手动工作。

我尝试过这样做:

public static void GetApplicationPoolNames()
    {
        ServerManager manager = new ServerManager();
        Site defaultSite = manager.Sites["Default Web Site"];

        foreach (Application app in defaultSite.Applications)
        {
            Console.WriteLine(
                "{0} is assigned to the '{1}' application pool.",
                app.Path, app.ApplicationPoolName);
        }
    }

但这仅适用于我的本地 IIS 安装。我喜欢访问不同的 IIS 服务器并检索此信息。是否有必要将应用程序托管在同一个 IIS 池中?或者它可以是一个独立的项目?

【问题讨论】:

标签: .net iis


【解决方案1】:

这里有两种获取应用程序池信息的方法。第一个就像在你的代码中一样,你可以方便快捷的获取本地IIS上的应用程序池信息。

public static void GetPoolName()
    {
        ServerManager server = new ServerManager();
        ApplicationPoolCollection apc = server.ApplicationPools;
        foreach (ApplicationPool pool in apc)
        {
            bool autostart = pool.AutoStart;
            string poolname = pool.Name;

            Console.WriteLine(poolname);
            Console.WriteLine(autostart);
        }
    }

第二个使用 DirectoryEntry 获取应用程序池信息,包括远程服务器中的 iis。您需要设置服务器名称、用户名和密码,以便获得权限。更多信息可以参考这个link

public static void GetPoolName()
    {
        string uname = "your username";
        string pwd = "passwod";
        string serverName = "remote server";
        DirectoryEntries apppools = new DirectoryEntry("IIS://" + serverName + "/W3SVC/AppPools", uname, pwd).Children;
        foreach (DirectoryEntry pool in apppools)
        {
            int code = (int)pool.InvokeGet("AppPoolState");
            string status;
            switch (code)
            {
                case 2:
                    status = "Running";
                    break;
                case 4:
                    status = "Stopped";
                    break;
                default:
                    status = "Unknown";
                    break;
            }
            Console.WriteLine(pool.Name);
            Console.WriteLine(status);
        }
    }

【讨论】:

  • 这段代码给了我以下异常: System.Runtime.InteropServices.COMException: 'Unknown error (0x80005000)' 对此有什么建议吗?
  • 请检查 IIS Metabase 和 IIS 6 配置兼容性以将其安装到 windows 功能中。
  • 我们有 IIS 版本 10.xxx。我是否需要安装任何兼容软件才能与 IIS6 一起运行?也许我误解了这个主题。你能给我提供一些文件还是我遗漏了一些明显的东西?
  • IIS 7 默认不安装 ADSI 提供程序。但是,您可以将其作为 IIS Web 服务器的角色服务启用。在您的控制面板中,选择程序,打开或关闭 Windows 功能,然后选择 Internet 信息服务、Web 管理兼容性、检查 IIS 元数据库和 IIS6 配置
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多