組態擴充性
IIS 7.0 和更新版本中的組態系統是以包含 IIS、ASP.NET 和其他元件的組態的分散式 xml 檔案為基礎;組態系統中的彈性也允許在許多層級設定組態,包括伺服器、月臺和應用層級。 月臺和應用層級的組態會與web.config檔案中的 ASP.NET 組態並存。
新組態系統的其中一個層面是輕鬆擴充設定。 只要進行一些簡單的變更,即可直接將自訂群組態區段整合到組態系統中,並使用現有的系統管理 API 來管理這些設定。 只要在 XML 架構檔案中定義新的組態區段,即可擴充組態,然後在 IIS 架構目錄中 %windir%\system32\inetsrv\config\schema
卸載。 最後,必須在 IIS 通用群組態檔中註冊新的組態區段。
本文將逐步解說使用基本組態擴充性和一些更進階案例的範例。 雖然使用的範例是串連的,但應該足以示範組態擴充性的強大功能。
必要條件
本文有一些必要條件。 包括:
- 預設安裝 IIS 7.0 或更新版本。 如果未安裝 IIS,請開啟 伺服器管理員 並新增 Web Server (IIS) 角色來安裝它。
- 請確定您已安裝 .NET Framework SDK。 如果您尚未安裝 SDK,請從中取得它 https://www.microsoft.com/downloads
- 在 SDK 的 bin 目錄中使用許多工具。 使用 [開始] 功能表中的 SDK 命令提示字元,或將 bin 目錄新增至路徑 (例如
%systemdrive%\Program Files\Microsoft.NET\SDK\v2.0\Bin
) - 從具有提高許可權的命令提示字元執行所有命令。 以滑鼠右鍵按一下 [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 網站下載它。
必要的步驟包括:
建立要在其中運作並加以開啟的目錄。
建立 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() { } } }
我們必須將此模組設為強式名稱模組,才能讓 IIS 將其作為所有網站的全域模組。 首先,建立強式名稱金鑰檔案。 開啟命令提示字元,並將目錄變更為包含 SimpleLoggingModule.cs 檔案的目錄。 然後,執行下列命令 (確定 .NET Framework SDK 的 bin 目錄位於路徑) :
sn.exe /k keyFile.snk
如果運作正常,sn.exe的輸出會顯示類似「寫入 keyFile.snk 的金鑰組」
現在編譯檔案並建立 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
接下來,將編譯的元件 (SimpleLoggingModule.dll) 放入全域組件快取中。 從命令提示字元處執行下列命令:
gacutil.exe /i SimpleLoggingModule.dll
現在,我們必須將模組新增至 IIS 可以使用的模組清單。 不過,在之前,我們必須取得剛建立之元件的完整名稱。 在命令列執行下列命令:
gacutil.exe /l SimpleLoggingModule
這會輸出如下的內容:
SimpleLoggingModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=652a8d02f48e4288, processorArchitecture=MSIL
將模組新增至 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 的通用群組態檔。
此程式已完成。 已設定使用自訂群組態的自訂模組。 保留的一切就是測試它。 起始瀏覽器並流覽至 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 元件的步驟:
開啟命令列提示字元,並變更至您建立的目錄來儲存檔案。 請確定.NET Framework的 bin 目錄位於您的路徑中,然後在命令列執行下列命令:
tlbimp %windir%\system32\inetsrv\nativerd.dll /keyfile:keyFile.snk
tlbimp.exe工具會建立名為 AppHostAdminLibrary.dll 的檔案 – 這是我們需要的 Interop dll。
在稍早建立的目錄中建立 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 所建立記錄檔檔案名模式的檔案。
從命令列執行下列命令來建置元件:
%windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library /r:AppHostAdminLibrary.dll ConfigurationExtensibility.cs /keyfile:keyFile.snk
您現在有 .NET COM 元件 – ConfigurationExtensibility.dll。
註冊您剛才建立的受控 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 - 程式碼
首先,新增 方法的必要程式碼。 開啟稍早建立的 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」 的方法。
使用下列專案再次建置專案:
%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」。
這最後會探討組態擴充性。 希望您可以在閱讀先前的範例之後,以有趣的方式使用設定擴充性。