Windows Server AppFabric 中的組態程序
「IIS 管理員」的 AppFabric 延伸模組與 AppFabric 的 Windows PowerShell Cmdlet 提供直接化的方式,可讓應用程式擁有者或 IT 專業人員設定在 WCF 或 WF 服務上建立的應用程式。 此主題說明當您在「IIS 管理員」延伸模組或透過 AppFabric 組態 Cmdlet 設定服務或應用程式時,Web.config 檔案會發生什麼變更。 此主題首先說明用於設定服務的 Web.config 檔案;接著說明如何直接設定服務;最後說明設定預設值供服務繼承。
如需使用 ASP.NET 之 Web.config 檔案的詳細資訊,請參閱 ASP.NET Configuration (可能為英文網頁)。
Web.config 檔案的階層
IIS 組態階層中的每個項目都可以有自己的 Web.config 檔案,而且服務可以從與伺服器、網站、應用程式及服務所屬子目錄關聯的 Web.config 檔案繼承預設組態設定。 因此,服務組態是由 Web.config 檔案的階層所定義。 本節說明決定階層中的哪個 Web.config 檔案定義服務組態以及那些檔案中的哪些元素具有較高優先順序的規則。
在伺服器上安裝 AppFabric 時,它會在 Machine.config 檔案 (<磁碟機>:\Windows\Microsoft.NET\Framework\v4.0.xxxxx\Config) 所在目錄建立伺服器 Web.config 檔案 (若該檔案不存在)。 此伺服器 Web.config 檔案的組態可啟用服務追蹤、工作流程持續性與工作流程執行個體管理。 網站目錄中可以有一個適用於網站的 Web.config 檔案 (<磁碟機>:\inetpub\wwwroot);應用程式根目錄中可以有一個適用於應用程式與應用程式子目錄的 Web.config 檔案。 網站、應用程式與子目錄 Web.config 檔案並非由 AppFabric 安裝程式所安裝。 當您嘗試使用「IIS 管理員」的 AppFabric 延伸模組來變更範圍的組態,且該範圍沒有 Web.config 檔案存在,系統將會為您建立 Web.config 檔案。
任何等級的 Web.config 檔案可包含能直接套用至服務的組態設定,但若要直接在「IIS 管理員」UI 中定義服務,您必須處理應用程式 Web.config 檔案中的服務定義。 除了這些設定之外,伺服器、網站、應用程式與子目錄等級的 Web.config 檔案可包含能供服務繼承的預設組態設定。 由「IIS 管理員」UI 的 AppFabric 延伸模組與組態 Cmdlet 所設定的應用程式組態只會影響 Web.config 檔案,而不會影響定義環境組態的 machine.config 或其他檔案。 此規則的例外是在伺服器等級之 applicationHost.config 檔案中針對應用程式設定的自動啟動功能。
Web.config 檔案包含巢狀 XML 標記與子標記階層,這些標記具有指定組態設定的屬性。 WCF 與 WF 服務的某些組態設定是在伺服器行為中定義。 在 AppFabric 中,大部分 (但並非全部) 的組態工具作用都具有編輯行為。 但是,某些組態設定是在服務行為外所定義。 例如,服務的監控、端點位址與繫結傳輸配額是在 Web.config 檔案中設定,但卻是在行為之外設定。 事件收集器與系統診斷組態都是在應用程式以上的等級範圍設定,而不是在行為內定義。
注意
AppFabric 使用 Microsoft Web Administration (MWA) 來管理組態。 MWA 要求將所有組態元素結構描述化。 如需如何為自訂行為建立結構描述的詳細資訊,請參閱Extending IIS 7.0 Schema and Accessing the Custom Sections Using MWA (可能為英文網頁)。
直接設定服務
您可以在 Web.config 檔案中使用具名服務行為來設定服務。 若要這樣做,請在 Web.config 檔案中輸入 <service> 標記,並設定指向服務行為標記的 behaviorConfiguration 屬性。 您可以在應用程式等級或更高等級的 Web.config 檔案中定義服務的具名行為。 以下提供名為 TestService 的服務範例,其組態是在名為 TestGetMetaData 的具名服務行為中定義:
<system.serviceModel>
<services>
<service name="TestService" behaviorConfiguration="TestGetMetaData" >
<endpoint address="/TestService" binding="wsHttpBinding" contract="ITestService"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="TestGetMetaData"> <serviceMetadata httpGetEnabled="true" httpGetUrl=""/> </behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
在 .NET Framework 3.5 中,設定服務最直接的方式是在服務的應用程式 (或子目錄) Web.config 檔案中使用具名服務行為。 在 .NET Framework 4.0 中,新的 範本使用無名稱行為,供服務繼承預設組態。 如需相關資訊,請參閱本章稍後的<設定預設值以供服務繼承>。
AppFabric 組態工具會修改下列服務行為:
sqlWorkflowInstanceStore (持續性)
etwTracking (監控)
serviceThrottling (效能)
serviceCredentials/serviceCertificate (安全性)
workflowIdle
workflowUnhandledException
workflowInstanceManagement
設定預設值以供服務繼承
在應用程式 Web.config 檔案中使用具名服務行為並非設定服務的唯一方式。 服務也可以從伺服器、網站、應用程式與服務所屬子目錄的 Web.config 檔案繼承預設組態設定。 WCF 與 WF 服務的某些預設組態設定是在無名稱服務行為中所定義。
使用無名稱行為
若具名服務行為存在,則服務的 behaviorConfiguration 屬性會指向它,服務將會使用具名行為中的設定。 它也會從在較高等級具有相同名稱的任何其他具名行為繼承設定。 它將不會使用在適用於服務之子目錄、應用程式、網站與伺服器 Web.config 檔案中定義的預設服務行為設定。 但是,您可以變更應用程式 Web.config 檔案中的 <service> 標記,讓服務繼承預設值。 您可以在一或多個等級的 Web.config 檔案中定義無名稱服務行為,並指定服務使用該無名稱行為。 當服務元素的 behaviorConfiguration 屬性名稱設定為空字串時,服務將使用無名稱行為,如下列程式碼所示:
<services>
<service name=”TutorialService” behaviorConfiguration=””
<endpoint address=”” binding=”wsHttpBinding” contract=”IService” />
</service>
</services>
不為 behaviorConfiguration 屬性指定值的效果相同,如下列程式所示。 在上面的範例中,我們明確地使用無名稱行為,在下面的範例中則以隱含方式使用。
<services>
<service name=”TutorialService”
<endpoint address=”” binding=”wsHttpBinding” contract=”IService” />
</service>
</services>
無名稱 behaviorConfiguration 元素的效果會使得服務從 serviceBehavior 元素中定義的一或多個無名稱行為繼承其組態。 下面列出預設在伺服器等級定義的無名稱 serviceBehavior 元素。 此伺服器預設組態 (由 AppFabric 安裝程式所建立) 會啟用服務追蹤、工作流程持續性與工作流程執行個體管理。
<behaviors>
<serviceBehaviors>
<behavior name=””>
<workflowIdle timeToUnload="00:01:00" timeToPersist="infinite" />
<workflowInstanceManagement authorizedWindowsGroup=”AS_Administrators" />
<etwTracking profileName="HealthMonitoring Tracking Profile" />
</behavior>
</serviceBehaviors>
</behaviors>
您可以在階層中任一等級的 Web.config 檔案中定義無名稱行為。 若在包含服務的一或多個等級定義無名稱行為,則服務的組態將包含從其階層中定義之每個無名稱行為合併的設定。 若服務階層中的兩個或多個無名稱行為包含衝突的設定,則會使用等級較低或最低等級的設定。 這個從多個無名稱行為彙總服務組態設定的程序稱為「行為合併」。
您也可以在 Web.config 檔案中的行為區段使用移除與清除標記。 移除標記會移除包含無名稱行為的設定。 清除標記會移除服務的所有行為。
behaviorConfiguration 設定為空字串的所有服務將會無其階層中定義的無名稱行為繼承預設組態值。 每個等級的 Web.config 檔案中只能有一個無名稱行為。
在隱含式 (亦稱為「無標記」) 服務的案例中,是以隱含的方式使用無名稱行為 (在不設定 behaviorConfiguration 屬性值的情況下)。 無標記服務是未在 Web.config 檔案中宣告的服務。 它在 Web.config 檔案中沒有關聯的服務節點。 根據預設值,Visual Studio 10 中的專案類型會建立無標記服務。 當執行階段遇到無標記服務時,它會自動將合併自適當無名稱行為的預設值套用到服務。 請注意,您無法在「IIS 管理員」延伸模組修改無標記服務的端點;若要這樣做,您必須將具名服務元素新增至 Web.config 檔案。
雖然 WCF 與 WF 服務的某些預設組態設定是在無名稱服務行為內定義,其他組態設定是在無名稱服務行為之外定義。 例如,對於連接字串或集合,服務將會從階層中的所有組態檔繼承組態值。
在 IIS 管理員中設定預設值
您可以直接在「IIS 管理員」的 AppFabric 延伸模組中設定應用程式。 當您這樣做時,AppFabric 會在適當的 Web.config 檔案 (通常是在應用程式等級) 中設定具名服務行為。 您也可以使用「IIS 管理員」來變更服務組態以使用子目錄、應用程式、網站與伺服器等級的預設值,而不是直接設定服務。 當您這樣做時,Web.config 檔案的無名稱行為會變更。 AppFabric 執行行為合併,以建立整組的應用程式組態參數。
若相同的組態屬性在兩個或多個 Web.config 檔案中設定為不同的值,AppFabric 將使用來自較低或最低等級的值。 服務之 [設定服務] 對話方塊的欄位會填入適當之 Web.config 檔案中的無名稱行為。 您可以在服務等級於組態 UI 變更這些值,在此情況中將變更適當之應用程式的無名稱行為。 或者,您可以在子目錄、網站與伺服器等級變更預設值。 若在建立應用程式無名稱行為之後於較高等級變更預設設定,對於較高等級之無名稱行為的變更將套用至服務等級 (除非在較低等級覆寫)。
若要在「IIS 管理員」中定義應用程式、子目錄、網站或伺服器等級的預設設定,您必須在 [連線] 窗格中選取等級,然後在 [動作] 窗格的 [管理 WCF 與 WF 服務] 下按一下 [設定]。 您也可以在 [連線] 窗格中的等級上按一下滑鼠右鍵,指向 [管理 WCF 與 WF 服務],然後按一下 [設定]。 這樣會顯示該等級的 [組態] 對話方塊。 當您在 UI 中變更某個等級的預設設定時,若該等級沒有 Web.config 檔案,則 AppFabric 將建立該檔案。
在「IIS 管理員」的 AppFabric 延伸模組中,當您設定服務時,不需要選取將使用的具名行為組態。 您必須在服務的 [設定服務] 對話方塊中輸入值或進行選取;AppFabric 會編輯該 Web.config 檔案。 您也可以使用 AppFabric 的 Windows PowerShell Cmdlet 來設定許多行為組態設定。
使用位置標記
AppFabric 支援對於 Web.config 檔案中位置標記的讀取操作。 位置標記是定義服務組態的另一種方式 (除了使用具名服務行為或使用無名稱服務行為或無標記服務來定義預設行為之外)。 位置標記是內嵌在 Web.config 檔案中的元素,它會將組態設定套用到特別識別的實體。 位置標記包含一或多個組態設定。 它也包含路徑,路徑指定組態屬性套用目標的實體。 不像具名服務行為 (必須位於適當之應用程式 Web.config 檔案的 <services> 節點),您可以在任一 Web.config 檔案中輸入位置標記。 不像無名稱行為,位置標記在應用程式 Web.config 檔案的 <service> 節點不需要無名稱 behaviorConfiguration 元素,即可適當地轉譯。
下列範例是 Web.config 檔案中的位置標記,此 Web.config 檔會將組態設定套用至應用程式 app1 中的服務 s1:
<location path=”app1/s1.svc” overrideMode=”Allow”>
<defaultDocument enabled=”true”>
<files>
<add value=”Developer.htm” />
</files>
</defaultDocument>
</location>
若未宣告路徑,則路徑是從位置標記定義所在等級向下延伸到所有子路徑 (與指定點 (.) 的效果相同)。 在 applicationHost.config 這樣做會導致為全域等級指定組態。 若位置標記中的 overrideMode 元素設定為 “Allow”,則可以編輯位置標記中設定的組態,並在階層的較低等級覆寫。 若 overrideMode 元素未設定,且有多個位置標記為相同服務中的相同組態設定指定不同的值,則將會套用一組優先順序規則以決定要使用的設定。
您無法在「IIS 管理員」的 AppFabric 延伸模組或透過 AppFabric 組態 Cmdlet 從位置標記變更套用至服務的組態設定。 不論使用 UI 或 Cmdlet,位置標記的內容都是唯讀的。 若嘗試使用「IIS 管理員」或 Cmdlet 來變更位置標記,將會傳回錯誤。 若變更由位置標記套用的設定,您必須手動變更 Web.config 檔案中的位置標記。
回收
當您在「IIS 管理員」的 [設定服務] 對話方塊中按一下 [套用] 或 [確定] 時,系統會修改 Web.config 檔案,而且會回收關聯的應用程式定義域。 當您按一下 [套用] 或 [確定] 以在子目錄、應用程式、網站或伺服器等級建立預設設定時,系統會變更對應的 Web.config 檔案,而且會回收該範圍下所有服務的應用程式定義域。 建議您盡量避免執行重新組態程序 (特別是在較高等級),以降低回收成本。 當您設定預設值時,您應該執行下列動作: 設定伺服器預設值與網站預設值 (以任何順序),接著匯入應用程式,然後設定應用程式與其包含的服務。 必須按照此順序設定的原因是設定預設值會導致整個樹狀結構被回收。 如果可能,請在實際執行任何應用程式之前執行設定步驟,才能避免回收應用程式的成本。
2011-12-05