c# - 使用 C# 管理 IIS

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

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

我发现我应该能够使用 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 对象强制转换为接口(interface)类型“Microsoft.Web.Administration.Interop.IAppHostWritableAdminManager”。此操作失败,因为对 IID 为“{FA7660F6-7B3F-4237-A8BF-ED0AD0DCBBD9}”的接口(interface)的 COM 组件上的 QueryInterface 调用因以下错误而失败:接口(interface)未注册(HRESULT 异常:0x80040155)。

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

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

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

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

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

在 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 上尝试过此操作

我做错了什么?

最佳答案

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

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

关于c# - 使用 C# 管理 IIS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28073701/

相关文章:

c# - XmlWriter : is calling Close() required if using a using block?

c# - EF System.MissingMethodException

c++ - 当我输入 Ctrl+Z 来完成下面的循环时,我在变量 z 中得到了空字符串。为什么?

mongodb - 在Grails的H2 DB中导入CSV

google-cloud-platform - 在云运行上部署时,服务帐户的权限 'iam.serviceaccounts.actAs' 被拒绝

deployment - jetty 部署顺序

c# - 如何直接在 MySQL 中更新 magento stock

c# - 通用类型检测

asp.net-mvc - ASP.NET MVC :How to debug razor code in cshtml file

c++ - 无法使用 BaseClass 的 shared_ptr 访问派生类的成员