【问题标题】:How to get Application Pool name through code (C#, ASP.net)如何通过代码(C#、ASP.net)获取应用程序池名称
【发布时间】:2014-10-29 03:10:26
【问题描述】:

我想通过我的应用回收应用池。

以前我将应用程序池名称存储在我的数据库中并使用它来回收。 但是过去发生过我们将应用程序从一个应用程序池移动到另一个应用程序池的情况,有时我们忘记更新数据库中的应用程序池名称。

所以我正在考虑通过应用程序获取应用程序池名称并将其用于回收。

【问题讨论】:

标签: c# asp.net iis application-pool


【解决方案1】:

@Razon 答案的修改版 :)

public static string GetCurrentApplicationPoolName()
    {
        ServerManager manager = new ServerManager();
        string DefaultSiteName = System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();
        Site defaultSite = manager.Sites[DefaultSiteName];
        string appVirtualPath = HttpRuntime.AppDomainAppVirtualPath;

        string appPoolName = string.Empty;
        foreach (Application app in defaultSite.Applications)
        {
            string appPath = app.Path;
            if (appPath == appVirtualPath)
            {
                appPoolName = app.ApplicationPoolName;
            }   
        }
        return appPoolName;
    }

【讨论】:

  • 恕我直言,比 Razon 更好的答案
  • 将链接与代码结合起来,这应该就是答案。
  • 警告:如果 IIS 上 AppPool 中的“加载用户配置文件”设置未设置为“True”,则此代码可能会引发 COM 异常
  • 请注意:确保将 ServerManager 包装到 Using 语句中,以便一旦超出范围(其非托管代码)就将其处理掉
【解决方案2】:

在许多情况下,仅从环境变量中读取应用程序池的名称就足够了:

var apppool = System.Environment.GetEnvironmentVariable(
                  "APP_POOL_ID", EnvironmentVariableTarget.Process);

【讨论】:

    【解决方案3】:

    这可能会有所帮助:ApplicationPoolName 属性

    命名空间:Microsoft.Web.Administration 程序集:Microsoft.Web.Administration(在 Microsoft.Web.Administration.dll 中)

    http://msdn.microsoft.com/en-us/library/microsoft.web.administration.application.applicationpoolname(v=vs.90).aspx

    【讨论】:

    • 以防万一,Install-Package Microsoft.Web.Administration
    猜你喜欢
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 2017-12-30
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多