如何通过C#启动/停止/查询iis应用程序(不是站点,不是应用程序池)?

如何通过C#启动/停止/查询iis应用程序(不是站点,不是应用程序池)?,c#,iis,C#,Iis,我正在使用ServerManager远程管理应用程序站点和应用程序池。但是,没有方法控制或查询实际应用程序的状态 我有应用程序池的代码 public string StopAppPool(string poolName) { using (var iis = ServerManager.OpenRemote(this._server)) { return iis.ApplicationPools.First(ap => ap.Nam

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

我有应用程序池的代码

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 =(
        }
}

您可能需要阅读以下内容:

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

从本质上讲,请求在IIS本身中进入并启动。IIS然后查找请求的处理程序,并将其传递到正确的站点/应用程序池。根据您使用的是集成模式还是经典模式,会有细微的差异,但对于您的问题,这些都无关紧要

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

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


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

可能重复@RuiJarimba:而不是重复。这是特定于应用程序的。根据提供的屏幕截图中的IIS管理器,您可以在站点内启动/停止应用程序。@maslow:在屏幕截图中,他们混合使用了“站点”和“应用程序”这两个术语,以便于阅读。大多数人不会想到“wcf站点”,而是想到“wcf应用程序”或“wcf服务”。然而,从IIS的角度来看,“WCF应用程序”只是另一个站点。好的,但是您可以停止该应用程序,而“站点”的其余部分继续工作。因此,无论术语是什么,我仍然希望能够在这个粒度级别上启动/停止。