使用C#管理IIS

时间:2015-01-21 17:53:05

标签: c# visual-studio-2013 deployment iis-7.5

我想创建一个可以部署网站的应用。基本上,我只想让这个应用程序将发布文件复制到新文件夹中的Web服务器,将网站更改为该文件夹,然后回收应用程序池。

我发现我应该可以使用Microsoft.Web.Administration执行此操作。即使是最基本的任务,我也遇到了问题,因为我正在学习如何做到这一点。这是我在Windows窗体应用程序中的代码,只是玩这个。

        try
        {
            using (Microsoft.Web.Administration.ServerManager sm = Microsoft.Web.Administration.ServerManager.OpenRemote("webservername"))
            {
                foreach (var site in sm.Sites)
                {
                    MessageBox.Show(string.Format("{0}", site.Name));
                }
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());

我只是试图遍历网站并显示名称作为我的第一次尝试。我得到的错误如下:

System.InvalidCastException:无法将类型为“System .__ ComObject”的COM对象强制转换为接口类型“Microsoft.Web.Administration.Interop.IAppHostWritableAdminManager”。此操作失败,因为对IID为“{FA7660F6-7B3F-4237-A8BF-ED0AD0DCBBD9}”的接口的COM组件的QueryInterface调用由于以下错误而失败:接口未注册(HRESULT异常:0x80040155)。

at Microsoft.Web.Administration.ConfigurationManager.CreateAdminManager [TClass,TInterface](WebConfigurationMap webConfigMap,Boolean isAdminConfig)

at Microsoft.Web.Administration.ConfigurationManager.CreateWritableAdminManager(WebConfigurationMap webConfigMap,String configPathToEdit,Boolean isAdminConfig)

at Microsoft.Web.Administration.ConfigurationManager.CreateConfiguration(WebConfigurationMap configMap,String configPathToEdit,Boolean isAdminConfig)

at Microsoft.Web.Administration.ConfigurationManager.GetConfiguration(String rawConfigurationPath,String cacheKey,Boolean isAdminConfig)

at Microsoft.Web.Administration.ConfigurationManager.GetApplicationHostConfiguration()

at Microsoft.Web.Administration.ServerManager.GetApplicationHostConfiguration()

在Microsoft.Web.Administration.ServerManager.get_SitesSection()

在Microsoft.Web.Administration.ServerManager.get_Sites()

错误的一行是:

foreach (var site in sm.Sites)

我已经尝试使用本地IIS8 Express和Windows Server 2008 IIS 7.5

我做错了什么?

3 个答案:

答案 0 :(得分:1)

您可能需要检查以下几点:

  1. 服务器的名称。如果不确定尝试在IIS管理中查找
  2. .dll的版本适用于您的IIS版本。
  3. .net框架版本。由于它使用System.Web,它依赖于.net框架的完整版本,但不依赖于客户端配置文件子集。

答案 1 :(得分:0)

您正在尝试管理远程服务器,所以

  1. 帐户运行代码必须是该远程服务器的本地管理员。
  2. 必须在防火墙处打开DCOM端口。

答案 2 :(得分:0)

正在执行代码的计算机需要安装IIS管理脚本和Windows工具。

在Windows客户端操作系统或Windows Server 2008 R2或更早版本上,可以通过以下步骤安装它:

  1. 打开控制面板>程序>打开或关闭Windows功能。
  2. 深入到“ Internet信息服务”>“ Web管理工具”,然后检查 IIS管理脚本和工具