2

ServerManager用来远程管理应用程序站点和应用程序池。但是,没有方法可以控制或查询实际应用程序的状态。

IIS 管理器上下文菜单

我有应用程序池的代码

public string StopAppPool(string poolName)
{
        using (var iis = ServerManager.OpenRemote(this._server))
        {
            return iis.ApplicationPools.First(ap => ap.Name == poolName).Stop().ToString();
        }
}

和现场

public string StartSite(string site)
{
        using(var iis = ServerManager.OpenRemote(this._server))
        {
            return iis.Sites.First(s => s.Name == site).Start().ToString();
        }
}

但是应用程序级别根本没有这些方法。

public string StartApp(string site,string path)
{
        using (var iis = ServerManager.OpenRemote(this._server))
        {
            iis.Sites[0].Applications[0]. // not here =(
        }
}
4

1 回答 1

0

您可能想阅读以下内容: http ://www.iis.net/configreference/system.applicationhost/applicationpools

由于网络的工作方式,“应用程序”仅在请求处于活动状态时运行。因此,除非有一个长时间运行的线程,否则它只会在当前处理请求时处于活动状态。如果您需要对此进行检查,您可以使用一些 WMI 功能来获取活动请求的数量。然而,仅仅因为一个特定的应用程序当前没有处理请求并不意味着它不能这样做。

本质上,一个请求在 IIS 本身内部进入并开始。IIS 然后查找请求的处理程序并将其传递到正确的站点/应用程序池。根据您使用的是集成模式还是经典模式,存在细微差别,但对于您的问题,这些并不重要。

如果站点已关闭,或者其应用程序池已关闭,则该站点可能处于非活动状态。提供了这种粒度级别,以便您可以在多个站点之间共享应用程序池,并允许某些站点打开而其他站点关闭,或者一次关闭应用程序池中的所有站点。

在给定站点内,应用程序本身始终处于启用状态,前提是该站点已启用,因此无法控制该特定应用程序在整个站点打开或关闭的上下文之外是打开还是关闭。

如果您需要关闭特定的应用程序,那么您应该将它们拆分到不同的站点并在该级别控制它们。

于 2012-12-27T16:33:54.460 回答