IIS 7 引入全新組態系統 (applicationHost.config),舊版 `System.DirectoryServices` (IIS 6 Metabase) 不再適用。官方提供 Microsoft.Web.Administration (MWA) 組件,以強型別物件模型管理網站、應用程式、虛擬目錄、應用程式池、工作進程、請求等。本文詳細說明組件參考、核心物件模型、常見操作範例與部署注意事項。
ServerManager (進入點) ├── Sites (SiteCollection) │ └── Site │ ├── Applications (ApplicationCollection) │ │ └── Application │ │ ├── VirtualDirectories (VirtualDirectoryCollection) │ │ │ └── VirtualDirectory │ │ └── ... │ └── Bindings (BindingCollection) ├── ApplicationPools (ApplicationPoolCollection) │ └── ApplicationPool ├── WorkerProcesses (WorkerProcessCollection) │ └── WorkerProcess │ └── GetRequests() -> RequestCollection └── ...
using (var iis = new ServerManager())
{
// 名稱、協定、繫結資訊、實體路徑
iis.Sites.Add("MySite", "http", "*:8080:", @"D:\MySite");
iis.CommitChanges();
}
using (var iis = new ServerManager())
{
var site = iis.Sites["MySite"];
site.Applications.Add("/App1", @"D:\MyApp1");
iis.CommitChanges();
}
using (var iis = new ServerManager())
{
var app = iis.Sites["MySite"].Applications["/App1"];
app.VirtualDirectories.Add("/VDir", @"D:\SharedContent");
iis.CommitChanges();
}
using (var iis = new ServerManager())
{
var site = iis.Sites["MySite"];
site.Stop(); // 或 site.Start()
// 無需 CommitChanges,立即生效
}
using (var iis = new ServerManager())
{
iis.ApplicationPools["DefaultAppPool"].Recycle();
}
using (var iis = new ServerManager())
{
foreach (var wp in iis.WorkerProcesses)
{
Console.WriteLine($"w3wp.exe PID: {wp.ProcessId}");
foreach (var req in wp.GetRequests(0)) // 0 = 所有 URL
{
Console.WriteLine($" {req.Verb} {req.Url} | Client: {req.ClientIPAddr} | Elapsed: {req.TimeElapsed} | State: {req.TimeInState}");
}
}
}
using (var iis = new ServerManager())
{
var pool = iis.ApplicationPools["MyPool"];
pool.ManagedRuntimeVersion = "v4.0"; // 或 "" 表示無 managed code
pool.ManagedPipelineMode = ManagedPipelineMode.Integrated; // 或 Classic
iis.CommitChanges();
}
| 項目 | 說明 |
|---|---|
| 執行身分 | 互動式:以管理員執行;服務:啟用「以系統管理員身分執行」或指定具備 IIS 管理權限的服務帳號 |
| 遠端管理 | MWA 僅支援**本機**管理。遠端需搭配 WinRM/PowerShell Remoting/IIS 管理服務 (WMSVC) |
| 版本對應 | IIS 7.0/7.5/8.0/8.5/10.0 組件介面相容,但建議 NuGet 套件版本與目標 IIS 主版本一致 |
| 唯讀查詢 | `ServerManager.OpenRemote` 僅限舊版 Metabase,新版無遠端唯讀 API |
| 例外處理 | `FileNotFoundException` (找不到 DLL)、`UnauthorizedAccessException` (權限不足)、`COMException` (組態鎖定/語法錯誤) |
Microsoft.Web.Administration 是 IIS 7+ 程式化管理的標準方式,物件模型清晰、強型別、支援完整生命週期操作。掌握 `ServerManager`、`Site`、`Application`、`VirtualDirectory`、`ApplicationPool`、`WorkerProcess` 核心類別,即可實現自動化部署、環境佈建、監控儀表板、故障自癒等 DevOps 場景。記住:**管理員權限、CommitChanges、版本對應、本機限制** 四大鐵律。