共用方式為


如何使用 Microsoft.Web.Administration

Saad Ladki

簡介

IIS 7.0 和更新版本提供完整的 Managed 程式碼管理應用程式開發介面 (API) ,可讓您完整操作 XML 組態檔,並方便存取伺服器物件。 本檔會逐步引導您使用新的管理 API 來修改伺服器組態和管理伺服器物件。

IIS 包含 Microsoft.Web.Administration,這是 Web 服務器的新管理 API,可透過完整操作 XML 組態檔來編輯組態。 它也提供方便的物件來管理伺服器、其屬性和狀態。 API 的組態編輯層面可讓您以程式設計方式存取 IIS 組態檔階層和特定組態檔中的讀取和寫入組態屬性。 此 API 的物件管理層面提供一系列的最上層系統管理物件,以便直接管理伺服器 (,例如月臺、應用程式集區、背景工作進程等) 。

管理類別位於 Microsoft.Web.Administration 命名空間中。 類別提供弱型別介面來存取組態區段和便利物件,其屬性和方法代表組態屬性 (,例如虛擬目錄路徑) 或動作,例如回收應用程式集區 () 。

建立新網站

下列程式碼會建立名為 「Racing Cars Site」 的網站及其根應用程式和根虛擬目錄。 它也會設定月臺在埠 80 使用 HTTP 通訊協定,並在 d:\inetput\wwwroot\racing 定義實體路徑。

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Web.Administration;
namespace MSWebAdmin_Application
{       
    class Program
    {
        static void Main(string[] args)
        {
            ServerManager serverManager = new ServerManager();
            Site mySite = serverManager.Sites.Add("Racing Cars Site", "d:\\inetpub\\wwwroot\\racing",  8080);
            mySite.ServerAutoStart = true;
            serverManager.CommitChanges();
         }
    }
}

ServerManager 是 Factory 類別,其中包含一組伺服器便利物件,這些屬性和方法可用來以強型別方式使用。 這是管理伺服器的主要進入點。 管理伺服器可能已透過其他麻煩的路由來完成, (存取原始組態 XML 或撥號狀態 API) ,但透過管理伺服器的這些物件是順暢的。 最常見的物件集可透過伺服器管理員使用,包括:應用程式、虛擬目錄、月臺、背景工作進程和應用程式域。

ServerManager serverManager = new ServerManager();

sites 物件可讓您存取網站屬性和應用程式。 它也包含將月臺新增至系統或取得網站總數的方法。 add 方法也會定義月臺的名稱、根虛擬目錄路徑,以及埠號碼作為整數。 另請注意,此呼叫會具現化為 Site 物件 mySite,然後我們可以直接修改其屬性來處理新建立的網站。

Site mySite = serverManager.Sites.Add("Racing Cars Site", "d:\\inetpub\\wwwroot\\racing",  8080);

方便物件可讓您輕鬆修改屬性。 藉由從 mySite 物件存取屬性,即可直接將網站的自動啟動屬性設定為 「true」,而不需要知道任何特定的 XML 屬性或元素概念。

mySite.ServerAutoStart = true;

此外,修改自動啟動屬性可能採用的不同路由,就是不要具現化月臺物件。 相反地,建立網站後擷取網站,並直接修改其屬性。 管理物件會使用索引子的概念,依名稱或索引等索引鍵搜尋特定物件,而不需要產生昂貴的呼叫來列出整個物件集。 藉由定義名稱,可以取得特定物件並對其採取行動。

serverManager.Sites["Racing Cars Site"].ServerAutoStart = true;

為了更新,認可變更呼叫會執行交易來序列化設定,如果有任何變更,則為磁片。

serverManager.CommitChanges();

執行上述程式碼會在 區段內的applicationHost.config產生下列輸出。 使用伺服器管理員物件,而不是直接操作 XML 並在元素和屬性層級運作,而是提供方便的方式來管理網頁伺服器。

<site name="Racing Cars Site" id="2" serverAutoStart="true"> 
    <application path="/"> 
        <virtualDirectory path="/" physicalPath="d:\inetpub\wwwroot\racing" /> 
    </application> 
    <bindings> 
        <binding protocol="http" bindingInformation=":8080:" /> 
    </bindings> 
</site>

建立新的應用程式集區

下列程式碼會修改現有的 「Racing Cars Site」,並變更其名稱,以及位於 d:\inetput\wwwroot\racing 的實體路徑。 它也會建立新的應用程式集區、定義一些屬性、設定賽車網站以使用此集區,最後回收它。

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Web.Administration;
namespace MSWebAdmin_Application
{       
    class Program
    {
        static void Main(string[] args)
        {
            ServerManager serverManager = new ServerManager();
            Site site = serverManager.Sites["Racing Cars Site"];
            site.Name = "Racing Site";
            site.Applications[0].VirtualDirectories[0].PhysicalPath = "d:\\racing";
            serverManager.ApplicationPools.Add("RacingApplicationPool");
            serverManager.Sites["Racing Site"].Applications[0].ApplicationPoolName = "RacingApplicationPool";
            ApplicationPool apppool = serverManager.ApplicationPools["RacingApplicationPool"];
            apppool.ManagedPipelineMode = ManagedPipelineMode.ISAPI;
            serverManager.CommitChanges();
            apppool.Recycle();
        }
    }
}

您可以具現化網站物件,並設定其參考,而不是編制索引來擷取網站。 設定參考之後,您可以呼叫月臺物件的方法,在此案例中為名稱,直接重新命名網站。

Site site = serverManager.Sites["Racing Cars Site"];
site.Name = "Racing Site";

以下是索引子的另一個用法,可取得根應用程式,然後取得根目錄,並在其上設定實體路徑。

site.Applications[0].VirtualDirectories[0].PhysicalPath = "d:\\racing";

除了月臺物件之外,我們有應用程式集區物件,可提供方便的方式來取得和設定組態屬性,以及處理狀態方法和資料。 系統會建立新的應用程式集區,然後立即將月臺放在該應用程式集區上。

serverManager.ApplicationPools.Add("RacingApplicationPool");
serverManager.Sites["Racing Site"].Applications[0].ApplicationPoolName = "RacingApplicationPool";

如同伺服器管理員月臺物件,伺服器管理員應用程式集區物件可讓您建立應用程式集區物件,並設定其參考。 您也可以取得和設定屬性,並在方法上呼叫。

一旦應用程式集區組態資料透過更新呼叫序列化至檔案,您就可以在檔案上執行回收方法。 不需要此回收呼叫,因為只會建立應用程式集區,而且不需要。 但是,這說明只有在物件序列化至磁片之後,才能在物件中採取動作,而且伺服器可以擷取此設定並對其採取動作。

ApplicationPool apppool = serverManager.ApplicationPools["RacingApplicationPool"];
apppool.ManagedPipelineMode = ManagedPipelineMode.ISAPI;
serverManager.CommitChanges();
apppool.Recycle();

執行上述程式碼會在 區段內的applicationHost.config產生下列輸出。 使用伺服器管理員物件,而不是直接操作 XML 並在元素和屬性層級運作,而是提供方便的方式來管理網頁伺服器。

<site name="Racing Site" id="2" serverAutoStart="true"> 
    <application path="/"> 
        <virtualDirectory path="/" physicalPath="d:\racing" /> 
    </application> 
    <bindings> 
        <binding protocol="http" bindingInformation=":8080:" /> 
    </bindings> 
</site>

此外,區段也會發生下列變更:

<add name="RacingApplicationPool" managedPipelineMode="ISAPI" />

在月臺根目錄中設定組態web.config

下列程式碼會將網站 「Default Web Site」 區段的 「enabled」 屬性設定為 false。

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Web.Administration;
namespace MSWebAdmin_Application
{
    class Program
    {
        static void Main(string[] args)
        {
            ServerManager serverManager = new ServerManager();
            Configuration config =
            mgr.GetWebConfiguration("Default Web Site");
            ConfigurationSection section = config.GetSection("system.webServer/defaultDocument");
            ConfigurationAttribute enabled = section.GetAttribute("enabled");
            enabled.Value = true;
            serverManager.CommitChanges();
        }
    }
}

組態是類別,可讓您存取系統中的組態區段。 根據取得設定的不同呼叫,您可以存取applicationHost.config、web.config、administration.config或任何其他組態檔。 GetWebConfiguration 呼叫會特別取得指定網站的web.config檔案 – 預設網站 - 和特定路徑 – 根目錄。

Configuration config = serverManager.GetWebConfiguration("Default Web Site");

一旦取得web.config檔案 (不存在,就會在建立) 建立取得區段的呼叫。 我們正在尋找區段以停用該區段。 即使web.config檔案不存在 (或不存在,但未明確設定區段) ,仍會套用至月臺層級的有效組態。 這是將覆寫的組態。

ConfigurationSection section = config.GetSection("system.webServer/defaultDocument");

透過在 section 物件上使用方法,您可以取得已啟用的屬性,然後透過 value 方法設定其值。 只有在伺服器管理員中呼叫認可變更方法之後,才會將變更序列化並保存到磁片,並立即由伺服器挑選。 如果有多個組態物件的實例,在伺服器管理員上呼叫認可變更會將所有物件保存至磁片。

ConfigurationAttribute enabled = section.GetAttribute("enabled");
enabled.Value = true;    
serverManager.CommitChanges();

從區段取得和設定屬性資訊的另一個選項是透過使用索引子。 取得區段物件之後,可以使用下列程式程式碼,以設定啟用的屬性值。

section["enabled"] = true;

最終結果是在所指定月臺的web.config檔案上設定。

在 applicationHost.config 中設定月臺的組態

下列程式碼會將網站 「Default Web Site」 區段的 「enabled」 屬性設定為 false。

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Web.Administration;

namespace MSWebAdmin_Application
{
    class Program
    {
        static void Main(string[] args)
        {
            ServerManager serverManager = new ServerManager();
            Configuration config = serverManager.GetApplicationHostConfiguration();
            ConfigurationSection section = config.GetSection("system.webServer/defaultDocument","Default Web Site");
            ConfigurationAttribute enabled = section.GetAttribute("enabled");
            enabled.Value = false;
            serverManager.CommitChanges();
        }
    }
}

此程式碼實際上與上一個工作相同;唯一的差異是透過 GetApplicationHostconfiguration 取得applicationHost.config檔案的組態管理員呼叫。

注意

get 區段呼叫是指定將讀取和/或修改的區段,以及其位置路徑的區段。

Configuration config = serverManager.GetApplicationHostConfiguration();

最終結果是在applicationHost.config檔案上設定,適用于透過位置標籤指定的月臺。