C# 从Windows 2003 server以编程方式控制IIS 7服务器
我们使用Windows2003服务器运行各种作业。其中一些作业向运行IIS 6的web服务器发送应用程序池命令(回收、启动、停止)。现在我们有一个运行IIS 7的Windows 2008 web服务器,我们希望发送相同的命令。这一切都是用C完成的 这是我们用于为IIS 6发送命令的代码:C# 从Windows 2003 server以编程方式控制IIS 7服务器,c#,iis,iis-7,windows-server-2008,windows-server-2003,C#,Iis,Iis 7,Windows Server 2008,Windows Server 2003,我们使用Windows2003服务器运行各种作业。其中一些作业向运行IIS 6的web服务器发送应用程序池命令(回收、启动、停止)。现在我们有一个运行IIS 7的Windows 2008 web服务器,我们希望发送相同的命令。这一切都是用C完成的 这是我们用于为IIS 6发送命令的代码: var methodToInvoke = "Stop"; // could be "Stop", "Start", or "Recycle" var co = new ConnectionOptions {
var methodToInvoke = "Stop"; // could be "Stop", "Start", or "Recycle"
var co = new ConnectionOptions
{
Impersonation = ImpersonationLevel.Impersonate,
Authentication = AuthenticationLevel.PacketPrivacy
};
var objPath = string.Format("IISApplicationPool.Name='W3SVC/AppPools/{0}'", appPoolName);
var scope = new ManagementScope(string.Format(@"\\{0}\root\MicrosoftIISV2", machineName), co);
using (var mc = new ManagementObject(objPath))
{
mc.Scope = scope;
mc.InvokeMethod(methodToInvoke, null, null);
}
由于基础更改,此代码不适用于IIS 7,因此我们目前正在尝试以下操作:
using (ServerManager serverManager = ServerManager.OpenRemote(machineName))
{
var appPool = serverManager.ApplicationPools[appPoolName];
if (appPool != null)
{
appPool.Stop(); // or app.Start() or app.Recycle()
serverManager.CommitChanges();
}
}
上述代码在我的工作站上运行良好,该工作站运行Windows 7(因此也运行IIS 7.5)。但是,当我将此代码部署到应用程序服务器时,它不起作用。它将获得以下错误:
System.InvalidCastException:
Unable to cast COM object of type 'System.__ComObject' to interface type
'Microsoft.Web.Administration.Interop.IAppHostWritableAdminManager'.
This operation failed because the QueryInterface call on the COM component for the
interface with IID '{FA7660F6-7B3F-4237-A8BF-ED0AD0DCBBD9}' failed due to the following error:
Interface not registered (Exception from HRESULT: 0x80040155).
根据我的研究,这是因为WindowsServer2003服务器上没有IIS 7。(我确实包含了Microsoft.Web.Administration.dll文件。)
因此,我的问题是:
从周围的阅读来看,似乎不可能做到你想要的。仅包含dll文件是不够的。 根据 为了使用Microsoft.Web.Administration,您需要安装IIS,至少需要安装通过安装管理工具带来的配置API 不幸的是,没有SDK支持此功能,并且它对其他组件有多个依赖关系,这些组件不允许您将其带到另一台机器上并使其工作(例如COM对象、DLL等) 我很想知道你是否找到了解决这个问题的方法
谢谢尝试用DirectoryEntry控制IIS池 请参见本主题:
Microsoft.Web.Administration
,它依赖于framework 4提供的System.Web.dll
,而不是客户端配置文件。我最终在Web服务器本身上创建了一个Web服务,可以启动/停止/回收该服务器上的应用程序池。此web服务显然需要位于单独的应用程序池中,而不是它将更新的应用程序池中。这不是一个非常安全的解决方案,但我正在使用一个内部web服务器。遇到了同样的问题,你的帖子证实了我所担心的——管理API在windows XP上无法工作。谢谢你的帖子,这并不能回答问题。