gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:20:30 25 4
gpt4 key购买 nike

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

IIS Manager Context Menu

我有应用程序池的代码

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 然后查找请求的处理程序并将其传递到正确的站点/应用程序池。根据您使用的是集成模式还是经典模式,存在细微差别,但对于您的问题,这些都无关紧要。

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

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

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

关于c# - 如何通过 C# 启动/停止/查询 iis 应用程序(不是站点,不是应用程序池)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14057506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com