繁体   English   中英

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

[英]How do I start/stop/query an iis application (not site, not app pool) via C#?

我正在使用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 =(
        }
}

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

由于网络的工作原理,“请求”仅在请求处于活动状态时运行。 因此,除非有一个长时间运行的线程,否则它仅在当前正在处理请求时才处于活动状态。 如果需要对此进行检查,则可以使用某些WMI功能来获取活动请求的数量。 但是,仅仅因为特定的应用程序当前不处理请求并不意味着它就无法执行。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM