共用方式為


組態擴充性

IIS 7.0 和更新版本中的組態系統是以包含 IIS、ASP.NET 和其他元件的組態的分散式 xml 檔案為基礎;組態系統中的彈性也允許在許多層級設定組態,包括伺服器、月臺和應用層級。 月臺和應用層級的組態會與web.config檔案中的 ASP.NET 組態並存。

新組態系統的其中一個層面是輕鬆擴充設定。 只要進行一些簡單的變更,即可直接將自訂群組態區段整合到組態系統中,並使用現有的系統管理 API 來管理這些設定。 只要在 XML 架構檔案中定義新的組態區段,即可擴充組態,然後在 IIS 架構目錄中 %windir%\system32\inetsrv\config\schema 卸載。 最後,必須在 IIS 通用群組態檔中註冊新的組態區段。

本文將逐步解說使用基本組態擴充性和一些更進階案例的範例。 雖然使用的範例是串連的,但應該足以示範組態擴充性的強大功能。

必要條件

本文有一些必要條件。 包括:

  1. 預設安裝 IIS 7.0 或更新版本。 如果未安裝 IIS,請開啟 伺服器管理員 並新增 Web Server (IIS) 角色來安裝它。
  2. 請確定您已安裝 .NET Framework SDK。 如果您尚未安裝 SDK,請從中取得它 https://www.microsoft.com/downloads
  3. 在 SDK 的 bin 目錄中使用許多工具。 使用 [開始] 功能表中的 SDK 命令提示字元,或將 bin 目錄新增至路徑 (例如 %systemdrive%\Program Files\Microsoft.NET\SDK\v2.0\Bin)
  4. 從具有提高許可權的命令提示字元執行所有命令。 以滑鼠右鍵按一下 [SDK 命令提示字元] (或 [命令提示字元] ) 開始功能表中,然後選取 [以系統管理員身分執行]。

組態擴充性 - 基本概念

概觀

為了示範一些基本組態擴充性功能,我們使用自訂記錄模組的嘗試範例。 模組本身並非一切特殊,而且只會處理內建 IIS 記錄事件 - LogRequest - 並將記錄專案寫入磁片上的檔案;請將它視為 IIS 記錄的基本版本。

組態擴充性會開始運作,因為模組必須知道要記錄資訊的位置。 模組必須具有儲存其組態的自訂群組態區段,在此案例中為 logfile 位置。

步驟 1 - 架構檔案

新增組態區段的第一個步驟是定義 區段。 在 xml 中定義區段架構,並將檔案 %windir%\system32\inetsrv\config\schema 放入 目錄中。

建立名為 simpleLogging_Schema.xml的 xml 檔案,並將下列內容放入其中:

<configSchema> 
    <sectionSchema name="system.webServer/simpleLogging"> 
        <attribute name="logfileDirectory" type="string" 
            defaultValue="%systemdrive%\inetpub\logs\simpleLogs" expanded="true" encrypted="false" />

    </sectionSchema> 
</configSchema>

上述架構會執行兩件事。 首先,它會使用 < sectionSchema > 元素定義名為 「simpleLogging」 的新組態區段。 其次,它會定義該新組態區段的屬性,稱為 「logfileDirectory」。

您可以從架構檔案中看到屬性是字串,而且組態系統不會加密它。 expand=「true」會指示組態系統在使用時自動展開環境變數。 如果您未在 %windir%\system32\inetsrv\config\schema 目錄中建立檔案,請立即將其移至該處。

接下來,建立為 「logfileDirectory」 指定的預設目錄,因為它可能不存在於您的電腦上。 從命令列執行下列命令以建立目錄:

md %systemdrive%\inetpub\logs\simpleLogs

Windows 群組IIS_IUSRS必須具有目錄的寫入權限,以便我們在步驟 4 中建立的 SimpleLogging 模組可以將記錄檔寫入其中。 在命令列執行下列命令:

icacls %systemdrive%\inetpub\logs\simpleLogs /grant BUILTIN\IIS_IUSRS:RW

深入瞭解架構

雖然步驟 1 在範例中已完成,但適合討論架構檔案。 在上述架構中,我們只會建立新的組態區段 simpleLogging ,該區段存在於 system.webServer 下並指定自訂屬性。 不過,您可以使用集合、元素和屬性,輕鬆地建立更複雜的自訂群組態。 下列清單顯示一些範例,但學習的最佳方式是查看 IIS 組態的架構檔案。 在 找到它 %windir%\system32\inetsrv\config\schema\IIS\_schema.xml

  • 屬性

    架構資訊:

    <attribute 
    name="" [String, Required] [XML name of the attribute] 
    type="" [bool|enum|flags|uint|int|int64|string|timeSpan, Required] [Runtime type] 
    required="false" [bool] [Indicates if it must be set] 
    isUniqueKey="false" [bool] [Serves as the collection key] 
    isCombinedKey="false" [bool] [Part of a multi-attribute key] 
    defaultValue="" [String] [Default value or comma-delimited flags] 
    encrypted="false" [bool] [Indicates if the value persisted is encrypted] 
    expanded="false" [bool] [Environment variables are expanded when read] 
    allowInfinite="false" [bool] [Indicates if "Infinite" can be set] 
    timeSpanFormat="string" [string|seconds|minutes] [hh:mm:ss or number] 
    validationType="" [See validation below] 
    validationParameter="" [See validation below] 
    />
    

    範例︰

    <configSchema> 
      <sectionSchema name="system.webServer/simpleLogging"> 
        <attribute name="logfileDirectory" type="string" />
      </sectionSchema> 
    </configSchema>
    
  • 元素

    架構資訊:

    <element 
     name="" [String, Required] [XML name of the element]
     isCollectionDefault="false" [bool] [Indicates if default values are held for other elements in this collection] />
    

    範例︰

    <configSchema> 
      <sectionSchema name="system.webServer/simpleLogging"> 
        <element name="logfile"> 
          <attribute name="fileLocation" type="string" /> 
        </element> 
      </sectionSchema> 
    </configSchema>
    
  • collection

    架構資訊:

    <collection 
    addElement="" [String] [Name of Add directive, if supported] 
    removeElement="" [String] [Name of Remove directive, if supported] 
    clearElement="" [String] [Name of Clear directive, if supported] 
    defaultElement="" [applicationDefaults|applicationPoolDefaults|siteDefaults|virtualDirectoryDefaults] 
    mergeAppend="true" [bool] [Indicates whether or not deepest set values are appended] 
    allowDuplicates="false" [bool] [Indicates if multiple elements may have the same key] 
    allowUnrecognizedAttributes="false" [bool] [Indicates if non-schema attributes are ok] 
    />
    

    範例︰

    <configSchema> 
      <sectionSchema name="system.webServer/simpleLogging"> 
        <collection addElement="add"> 
          <attribute name="logfileDirectory" type="string" /> 
        </collection> 
      </sectionSchema> 
    </configSchema>
    

步驟 2 – 註冊新區段

現在已定義新的區段,請告訴組態系統有關 該區段。 在 檔案中 %windir%\system32\inetsrv\config\applicationHost.config 註冊新的區段。 開啟檔案並註冊 simpleLogging 區段,如下所示:

<configSections> 
    ...
    <sectionGroup name="system.webServer"> 
        <section name="simpleLogging"/> 
        ...
    </sectionGroup> 
</configSections>

此步驟已完成。 區段已定義並註冊。

若要檢查區段是否已正確註冊,請從命令列執行下列命令:

%windir%\system32\inetsrv\appcmd list config –section:system.webServer/simpleLogging

如果一切都已順利完成,則組態區段會顯示,您會看到類似如下的內容:

<system.webServer> 
    <simpleLogging /> 
</system.webServer>

步驟 3 – 設定組態

現在,區段已註冊,請設定組態,就像使用 web.config 檔案的任何其他組態一樣,或使用 目錄中 的appcmd.exe 工具 %windir%\system32\inetsrv\ 進行設定。 您也可以使用任何組態 API 來設定組態。 另一個選項是透過新的 IIS 系統管理 UI 設定組態,方法是建立 UI 模組並呼叫組態 API 來設定組態。

目前,請將它新增至預設 IIS 網站的新 web.config 檔案, (預設 IIS 組態) 中安裝 %systemdrive%\inetpub\wwwroot\ 並命名為 「預設網站」的設定。 建立名為 web.config 的檔案,並新增下列專案:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
        <simpleLogging logfileDirectory="%systemdrive%\inetpub\logs\simpleLogs" /> 
    </system.webServer> 
</configuration>

您可以使用下列方式,從命令列達成相同的動作:

%windir%\system32\inetsrv\appcmd set config "Default Web Site" –section:system.webServer/simpleLogging 
                                    /logfileDirectory:""%"systemdrive"%"\inetpub\logs\simpleLogs"

執行下列命令來列出「預設網站」的組態:

%windir%\system32\inetsrv\appcmd list config "Default Web Site" –section:system.webServer/simpleLogging

輸出如下所示:

<system.webServer> 
    <simpleLogging logfileDirectory="%systemdrive%\inetpub\logs\simpleLogs" /> 
</system.webServer>

注意

如果為 「logfileDirectory」 指定的目錄不存在,請立即建立它。 Windows 群組IIS_IUSRS必須具有目錄的寫入權限,以便我們在下一個步驟中建立的 SimpleLogging 模組可以將記錄檔寫入其中。 上述步驟 1 顯示命令列命令,用來設定預設目錄的正確許可權。 如果您已建立不同的目錄,請使用類似的命令。

步驟 4 – SimpleLogging 模組

在此階段,我們已使用客戶 simpleLogging 組 態一節來擴充設定系統。 我們會藉由建立模組,並示範如何使用自訂群組態,來進一步瞭解基本組態擴充性。

我們將建立強式名稱的 .NET 元件,讓 IIS 中的所有網站都可以使用。 我們必須針對本節使用 .NET SDK 中的一些工具;如果未安裝,請從 www.microsoft.com/downloads 網站下載它。

必要的步驟包括:

  1. 建立要在其中運作並加以開啟的目錄。

  2. 建立 SimpleLoggingModule.cs 檔案,並使用文字編輯器將下列程式碼新增至其中:

    using System;
    using System.Web;
    using System.Web.Hosting;
    using System.IO;
    using Microsoft.Web.Administration;
    
    namespace ConfigurationExtensibility
    {
        public class SimpleLoggingModule : IHttpModule
        {
            private string GetlogfileDirectory(HttpContext context)
            {
                ConfigurationSection section = WebConfigurationManager.GetSection(
                        context, "system.webServer/simpleLogging");
                return (string)section["logfileDirectory"];
            }
     
            public void Init(HttpApplication context)
            {
                context.LogRequest += new EventHandler(LogRequest_EventHandler);
            }
     
            private void LogRequest_EventHandler(object sender, EventArgs e)
            {
                HttpApplication application = (HttpApplication)sender;
                LogRequest(application.Context);
            }
     
            private void LogRequest(HttpContext context)
            {
                string logfileDirectory = GetlogfileDirectory(context);
     
                if (Directory.Exists(logfileDirectory) == false)
                {
                    Directory.CreateDirectory(logfileDirectory);
                }
     
                string logfile = Path.Combine(logfileDirectory, DateTime.Now.ToString("yyyyMMdd") + ".log");
                string ogline = string.Format("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}",
                        DateTime.Now,
                        context.Request.HttpMethod,
                        context.Request.UserHostAddress,
                        context.Request.Url.ToString(),
                        context.Request.ServerVariables["LOGON_USER"],
                        context.Request.UserAgent,
                        context.Response.StatusCode,
                        HostingEnvironment.SiteName);
            File.AppendAllText(logfile, ogline + Environment.NewLine);
            }
     
            public void Dispose()
            {
            }    
        }
    }
    
  3. 我們必須將此模組設為強式名稱模組,才能讓 IIS 將其作為所有網站的全域模組。 首先,建立強式名稱金鑰檔案。 開啟命令提示字元,並將目錄變更為包含 SimpleLoggingModule.cs 檔案的目錄。 然後,執行下列命令 (確定 .NET Framework SDK 的 bin 目錄位於路徑) :

    sn.exe /k keyFile.snk
    

    如果運作正常,sn.exe的輸出會顯示類似「寫入 keyFile.snk 的金鑰組」

  4. 現在編譯檔案並建立 DLL。 從命令提示字元處執行下列命令:

    %windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library SimpleLoggingModule.cs /r:System.Web.dll 
                       /r:%windir%\system32\inetsrv\Microsoft.Web.Administration.dll /keyfile:keyFile.snk
    
  5. 接下來,將編譯的元件 (SimpleLoggingModule.dll) 放入全域組件快取中。 從命令提示字元處執行下列命令:

    gacutil.exe /i SimpleLoggingModule.dll
    
  6. 現在,我們必須將模組新增至 IIS 可以使用的模組清單。 不過,在之前,我們必須取得剛建立之元件的完整名稱。 在命令列執行下列命令:

    gacutil.exe /l SimpleLoggingModule
    

    這會輸出如下的內容:

    SimpleLoggingModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=652a8d02f48e4288, processorArchitecture=MSIL
    
  7. 將模組新增至 IIS 可以使用的模組清單。 執行下列命令。 不過,請確定您將變數取代為最後一個命令的輸出。

    %windir%\system32\inetsrv\appcmd add module /name:"SimpleLoggingModule" 
    /type:"ConfigurationExtensibility.SimpleLoggingModule, SimpleLoggingModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=652a8d02f48e4288"
    

    這會將必要的組態專案新增至applicationHost.config檔案 - IIS 的通用群組態檔。

  8. 此程式已完成。 已設定使用自訂群組態的自訂模組。 保留的一切就是測試它。 起始瀏覽器並流覽至 http://localhost/. 這時會顯示下列項目:

    在網頁瀏覽器中存取本機主機的螢幕擷取畫面。

如果您收到錯誤,請確定您已將IIS_IUSRS群組許可權授與寫入目錄。

開啟 %systemdrive%\inetpub\logs\simpleLogs (或任何您在組態) 中使用的目錄,而且您有一個名為 的 .log 檔案,其日期為 。 開啟檔案,您會看到如下的內容:

記錄檔的螢幕擷取畫面,其中包含本機主機網站的存取目錄時間戳記。

實驗組態,以確保其運作正常。 請嘗試從您的web.config檔案中移除 simpleLogging 區 段,並檢查記錄是否移至預設位置 (只確定 ASPNET 使用者具有正確的許可權) 。

注意

我們剛才建立的模組僅供示範之用,不應用於生產環境。 如果有多個要求嘗試同時寫入記錄專案,就會失敗。

設定擴充性 - 更進階的案例

概觀

上一節會檢查組態擴充性的基本概念,只要使用架構來擴充組態即可。 不過,擴充組態時有更多可用電源。

首先,能夠擴充組態以使用 COM 物件來擷取組態,讓您隨時隨地儲存組態資訊,但不必擔心組態 API 無法讀取。

其次,能夠定義方法來操作及操作您的設定。 接著可以使用現有的組態 API 呼叫這些方法。 這兩項功能一起提供建置自訂群組態延伸模組的強大支援。

本節會先探討如何修改本文第一部分的 simpleLogging 自訂設定,以使用 COM 元件擷取組態值。 然後,它會查看新增 COM 元件所支援的組態方法,以執行動作。

擴充組態 - COM 支援的屬性

本節會將架構擴充為具有名為 「logfileCount」 的屬性。 此組態屬性是由 .NET 元件所支援, (以 C# ) 程式設計,它會計算記錄目錄中的記錄檔數目;同樣地,這是一個常見的案例,但有些可能發現很有用的案例。

注意

您不需要建立 .NET 元件 - 任何有效的 COM 元件都會執行。

步驟 1 - 建立和註冊 .NET COM 元件

首先,建立 .NET COM 元件。 建立目錄來儲存我們將建立的檔案,以及我們將建置並開啟它的元件。

我們建立的元件必須實作 IIS 組態系統透過 COM 公開的某些介面。 為了使用 .NET 元件的 COM 介面,我們必須建立 Interop dll - 這可讓 IIS 組態系統在必須取得 logfileCount 屬性的值時與元件通訊。 若要建立 Interop dll,請使用名為tlbimp.exe.NET Framework SDK 的工具。 安裝 Visual Studio 或 .NET SDK 是本文的必要條件。 如果未安裝,請從 www.microsoft.com/downloads下載它。

以下是建立 .NET COM 元件的步驟:

  1. 開啟命令列提示字元,並變更至您建立的目錄來儲存檔案。 請確定.NET Framework的 bin 目錄位於您的路徑中,然後在命令列執行下列命令:

    tlbimp %windir%\system32\inetsrv\nativerd.dll /keyfile:keyFile.snk
    

    tlbimp.exe工具會建立名為 AppHostAdminLibrary.dll 的檔案 – 這是我們需要的 Interop dll。

  2. 在稍早建立的目錄中建立 ConfigurationExtensibility.cs 檔案,並使用文字編輯器將下列 C# 程式碼複製到檔案中:

    using System;
    using System.IO;
    using System.Runtime.InteropServices;
    using AppHostAdminLibrary;
    
    namespace ConfigurationExtensibility
    {
        [ComVisible(true)]
        public class SimpleLoggingExtension : IAppHostPropertyExtension
        {
            public void ProvideGetProperty(IAppHostElement pElement, IAppHostProperty pProperty)
            {
                switch(pProperty.Name)
                {
                case "logfileCount":
                string logDirectory = (string) pElement.Properties["logfileDirectory"].Value;
     
                if(Directory.Exists(logDirectory))
                pProperty.Value = Directory.GetFiles(logDirectory, "????????.log").Length;
                else 
               pProperty.Value = 0;
                break;
            }
            }
        }
    }
    

    注意

    我們有一個類別,其實作 IAppHostPropertyExtension 介面。 程式碼本身只會讀取 logfileDirectory 屬性以取得 logfile 目錄,然後計算所有符合 SimpleLoggingModule 所建立記錄檔檔案名模式的檔案。

  3. 從命令列執行下列命令來建置元件:

    %windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library /r:AppHostAdminLibrary.dll 
                        ConfigurationExtensibility.cs /keyfile:keyFile.snk
    

    您現在有 .NET COM 元件 – ConfigurationExtensibility.dll

  4. 註冊您剛才建立的受控 COM 元件。 在命令提示字元中執行下列命令:

    %windir%\Microsoft.NET\Framework\v2.0.50727\regasm.exe /register /codebase ConfigurationExtensibility.dll
    

    這會在登錄中註冊 COM 元件。 您已建立並註冊組態系統可以使用的 .NET COM 元件。

步驟 2 - 更新架構檔案

接下來,修改稍早建立 的simpleLogging_Schema.xml 檔案。 開啟檔案,並將它變更為如下所示, (新屬性會以粗體顯示) :

<configSchema> 
    <sectionSchema name="system.webServer/simpleLogging"> 
        <attribute name="logfileDirectory" type="string" 
             defaultValue="%systemdrive%\inetpub\logs\simpleLogs\" expanded="true" encrypted="false" />
        <attribute name="logfileCount" type="int" extension="ConfigurationExtensibility.SimpleLoggingExtension" /> 
    </sectionSchema> 
</configSchema>

步驟 3 - 測試

所有專案現在都應該正常運作-所有仍會進行測試。 若要測試延伸模組,請使用簡單的腳本。 建立SimpleLoggingTest.vbs檔案,然後輸入下列文字:

Dim adminManager, section
Set adminManager = WScript.Createobject("Microsoft.ApplicationHost.AdminManager")
Set section = adminManager.GetAdminSection("system.webServer/simpleLogging",
                    "MACHINE/WEBROOT/APPHOST/Default Web Site")
WScript.Echo(section.Properties.Item("logfileCount").Value)

在這個階段中,應該會有一個記錄檔,從稍早測試 SimpleLoggingModule。 從命令列執行腳本。 您會看到 1 的輸出。

擴充設定 - COM 支援的方法

最後,本文會檢查使用 方法擴充設定。 組態方法是組態系統可以呼叫以執行工作的工作,例如修改組態或刪除記錄檔,也就是此方法將執行的作業。 在此範例中,我們會新增方法來刪除 SimpleLoggingModule 所建立的所有記錄檔。

步驟 1 - 程式碼

  1. 首先,新增 方法的必要程式碼。 開啟稍早建立的 ConfigurationExtensibility.cs 檔案,並加以更新,如下所示 (新的程式碼粗體) :

    using System;
    using System.IO;
    using System.Runtime.InteropServices;
    using AppHostAdminLibrary;
     
    namespace ConfigurationExtensibility
    {
        [ComVisible(true)]
        public class SimpleLoggingExtension : IAppHostPropertyExtension, IAppHostMethodExtension 
        {
            public void ProvideGetProperty(IappHostElement pElement, IappHostProperty pProperty)
            {
                switch(pProperty.Name)
                {
                case "logfileCount":
                string logDirectory = (string) pElement.Properties["logfileDirectory"].Value;
     
                if(Directory.Exists(logDirectory))
                pProperty.Value = Directory.GetFiles(logDirectory, "????????.log").Length;
                else 
               pProperty.Value = 0;
                break;
            }
            }
     
            public void ProvideMethod(IappHostMethod pMethod,
                IappHostMethodInstance pMethodInstance,
                IappHostElement pElement)
            {
                switch(pMethod.Name)
            {
                case "deleteLogs":
                string logDirectory = (string) pElement.Properties["logfileDirectory"].Value;
     
                if(Directory.Exists(logDirectory))
                {
                foreach(string logFile in Directory.GetFiles(logDirectory, "????????.log"))
                {
                    File.Delete(logFile);
                    }
                }
     
                break;
            }
            }
        }
    }
    

    注意

    我們已實作 IAppHostMethodExtension 介面。 這個介面有一個稱為 ProvideMethod 的單一方法,以邏輯方式提供 方法。 當有人呼叫 方法 (請參閱步驟 3 以瞭解如何執行此) 時,組態系統會呼叫 ProvideMethod 並傳遞參數,其中一個具有所呼叫方法的名稱;在上述程式碼中,我們只會處理名為 「deleteLogs」 的方法。

  2. 使用下列專案再次建置專案:

    %windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library /r:AppHostAdminLibrary.dll 
                ConfigurationExtensibility.cs /keyfile:keyFile.snk
    

步驟 2 - 更新架構

接下來,告訴架構有關我們的新方法。 在這個階段中,您應該相當熟悉 您的simpleLogging_Schema.xml 檔案,因此請再次開啟檔案,並將其變更為如下所示:

<configSchema> 
    <sectionSchema name="system.webServer/simpleLogging"> 
        <attribute name="logfileDirectory" type="string" 
            defaultValue="c:\inetpub\logs\simpleLogs\" expanded="true" encrypted="false" />
        <attribute name="logfileCount" type="int" extension="ConfigurationExtensibility.SimpleLoggingExtension" /> 
        <method name="deleteLogs" extension="ConfigurationExtensibility.SimpleLoggingExtension" /> 
    </sectionSchema> 
</configSchema>

變更定義了名為 「deleteLogs」 的新方法,並告知組態要在哪裡尋找方法。

步驟 3 - 測試

最後,檢查方法是否正常運作。 快速且簡單的做法是撰寫簡單的 VB 腳本。 以下是輸出 logfileCount 的範例腳本,然後呼叫我們的 方法並輸出 logfileCount。 只要更新您稍早建立的SimpleLoggingTest.vbs檔案,然後輸入下列內容:

Dim adminManager, section
Set adminManager = WScript.Createobject("Microsoft.ApplicationHost.AdminManager")
Set section = adminManager.GetAdminSection("system.webServer/simpleLogging", "MACHINE/WEBROOT/APPHOST/Default Web Site")
WScript.Echo(section.Properties.Item("logfileCount").Value)
section.Methods.Item("deleteLogs").CreateInstance().Execute()
WScript.Echo(section.Properties.Item("logfileCount").Value)

從命令列執行腳本,並取得下列專案的輸出:

1
0

上述概觀說明如何提供 COM 元件所支援的新組態和組態方法。 如您所發現,使用此方法擴充設定非常強大。

組態擴充性 - 擴充現有的組態

組態擴充性的最後一個層面是能夠擴充現有的組態區段,例如 system.webServer/sites 區段,或擴充在前兩個區段中建立 的 system.webServer/simpleLogging 區段。

擴充現有的組態區段,就像建立新組態一樣簡單。 只要將架構定義為 xml,並將架構檔案 %windir%\system32\inetsrv\config\schema\ 放在目錄中即可。 這應該很熟悉,因為我們先前已多次完成此作業。

擴充「月臺」設定

為了更清楚地示範如何擴充現有的組態區段,我們會擴充 system.applicationHost/sites 區段 - 用來定義月臺的組態區段。 我們會藉由新增「擁有者」屬性和「ownerEmail」屬性來擴充網站區段。 當您在單一方塊上裝載多個網站,並想要追蹤擁有不同網站的人員時,這類屬性很有用。

首先,建立新的架構檔案。 在目錄中建立 siteExtension_schema.xml 檔案 %windir%\system32\inetsrv\config\schema\ ,然後輸入下列文字:

<configSchema> 
    <sectionSchema name="system.applicationHost/sites"> 
        <collection addElement="site"> 
            <attribute name="owner" type="string" /> 
            <attribute name="ownerEmail" type="string" /> 
        </collection> 
    </sectionSchema> 
</configSchema>

擴充現有區段的架構時,只要建立 <sectionSchema> 專案,並將 name 屬性設定為與現有區段相同。 在上述架構檔案中,我們已使用 「system.applicationHost/sites」 的名稱來定義 < sectionSchema > - 這與 Schema 目錄中IIS_Schema.xml檔案中的 sectionSchema 名稱相同。

藉由新增 「owner」 和 「ownerEmail」 屬性的值來測試我們的修改,然後檢查組態檔以查看變更。 只要從命令列執行下列命令:

%windir%\system32\inetsrv\appcmd set site "Default Web Site" /owner:"John Contoso" /ownerEmail:"john@contoso.com"

若要查看是否已套用組態,請執行下列命令並檢查輸出:

%windir%\system32\inetsrv\appcmd list site "Default Web Site" /config

輸出應該如下所示:

<system.applicationHost> 
    <sites> 
    ...
        <site name="Default Web Site" id="1" siteOwner="John Contoso" siteOwnerEmail="john@contoso.com">
        ...
        ...
        </site> 
    </sites> 
</system.applicationHost>

注意

如果您現在流覽至 http://localhost/ ,您可能會收到伺服器 500.19 錯誤訊息。 這是已知問題,將在稍後的 IIS 組建中解決。 若要解決此問題,請從命令列執行 「iisreset」。

這最後會探討組態擴充性。 希望您可以在閱讀先前的範例之後,以有趣的方式使用設定擴充性。