首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 程式化管理 IIS 7+ (一) - 從 DirectoryEntry 到 Microsoft.Web.Administration

     編輯:關於C語言

嘗試用 `DirectoryEntry` (ADSI) 操作 IIS 7 失敗,錯誤 `0x80005000` (未知錯誤)。根因:IIS 7 不再預設安裝 Metabase 相容層。本文記錄排查歷程並引導遷移至現代 `Microsoft.Web.Administration` API。

失敗嘗試:DirectoryEntry (IIS 6 風格)


var iis = new DirectoryEntry("IIS://localhost/W3SVC");
foreach (DirectoryEntry site in iis.Children)
{
    if (site.SchemaClassName == "IISWebServer")
        Console.WriteLine($"{site.Name} - {site.Properties["ServerComment"].Value}");
}

即使以管理員執行、關閉 UAC、安裝「IIS 6 管理相容性」功能,仍不穩定且屬舊技術棧。

正解:Microsoft.Web.Administration (MWA)

IIS 7+ 以 `applicationHost.config` XML 為核心設定存儲,MWA (`%windir%\system32\inetsrv\Microsoft.Web.Administration.dll`) 為官方管理 API,支援:

  • 網站/應用程式/虛擬目錄/應用程式池 建立、修改、刪除、啟停。
  • 綁定、SSL 憑證、認證、記錄、模組、處理常式 完整配置。
  • 交易式批次認可 (ServerManager.CommitChanges())。
  • 遠端管理 (需管理服務啟用)。

MWA 快速上手


using Microsoft.Web.Administration;

using (var mgr = new ServerManager())
{
    // 列舉網站
    foreach (var site in mgr.Sites)
        Console.WriteLine($"{site.Id} {site.Name} {site.State} {site.Bindings[0].BindingInformation}");

    // 建立虛擬目錄
    var site = mgr.Sites["Default Web Site"];
    var app = site.Applications["/"];
    app.VirtualDirectories.Add("/myvd", @"C:\MyContent");
    mgr.CommitChanges();

    // 建立應用程式池
    var pool = mgr.ApplicationPools.Add("MyPool");
    pool.ManagedRuntimeVersion = "v4.0";
    pool.ManagedPipelineMode = ManagedPipelineMode.Integrated;
    mgr.CommitChanges();
}

關鍵遷移對照表

ADSI/Metabase 概念MWA 對應類別
IISWebServerSite
IIsWebVirtualDirVirtualDirectory (隸屬 Application)
IIsApplicationPoolApplicationPool
AppIsolated/AccessFlagsApplicationPool 設定
KeyType/MetabasePathConfigurationElement / ConfigurationSection

常見坑與解法

  • 權限:程式需以 **管理員** 執行 (或具備 IIS 管理權限的服務帳號)。
  • 32/64 位元:MWA 為 64-bit 唯一,專案必須設定 Prefer 32-bit = false (Any CPU)。
  • 遠端連線:`new ServerManager("serverName")` 需目標機器啟用「管理服務」且防火牆開放 8172 (Web Deploy) 或 WMI/RPC。
  • 設定鎖定:`applicationHost.config` 中 `
    ` 會阻止網站層級覆寫,需解鎖或在伺服器層級設定。

下一篇預告

實戰:以 MWA 批次建立多租戶網站、綁定 SSL 憑證、設定應用程式池身分識別、啟用動態壓縮與快取規則。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved