C# 从Windows 2003 server以编程方式控制IIS 7服务器

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 {

我们使用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
{
   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文件。)

因此,我的问题是:

  • IIS 7的上述代码是否可以在Windows 2003服务器上运行
  • 如果答案是否定的,有没有更好的方法

  • 从周围的阅读来看,似乎不可能做到你想要的。仅包含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上无法工作。谢谢你的帖子,这并不能回答问题。