如何使用 Microsoft.Web.Administration
簡介
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檔案上設定,適用于透過位置標籤指定的月臺。