自動啟動功能
AppFabric 的 自動啟動 功能是根據 Windows 7 及 Windows Server 2008 R2 所含之 Internet Information Services (IIS) 7.5 的 自動啟動 功能所建置。在 IIS 中,您可以設定應用程式集區及其所有或部分應用程式在 IIS 服務啟動時自動啟動。AppFabric 自動啟動功能延伸此功能,因此您可以設定應用程式內的所有或部分服務,在應用程式啟動時自動啟動。
自動啟動功能的優點
當您為服務啟用自動啟動功能後,在服務所屬的應用程式啟動時,並在服務收到來自用戶端的第一個 WCF 訊息之前,服務會立即啟動並執行。因為服務已完成初始化,所以可快速處理第一個訊息。例如,假設服務在最初建立時,需要連線至資料庫來讀取數百個資料列,以填入 .NET Framework 快取資料結構。初始化處理需要很長一段時間,完成後服務才算準備就緒,可以開始實際操作。在此情況下,如果您使用自動啟動,服務便可在收到第一個呼叫之前完成初始化。
IIS 的 HTTP.SYS 元件會處理 HTTP 要求,而 Windows 處理序啟用服務 (WAS) 會處理 TCP、具名管道與 MSMQ 要求 (使用 IIS 隨附的自訂 WCF 接聽程式配接器)。接聽程式配接器可在 WAS 與使用非 HTTP 通訊協定的服務之間建立通訊。為了支援處理透過其他通訊協定收到的訊息,您必須開發自訂的接聽程式配接器與其他支援模組,而這會是一項複雜的工作。如需有關接聽程式配接器的詳細資訊,請參閱接聽程式配接器 (https://go.microsoft.com/fwlink/?LinkId=160359) (可能為英文網頁)。透過自動啟動支援,您可以將支援任何通訊協定的應用程式部署到 IIS。如果您為這些部署的應用程式啟用自動啟動功能,WAS 會在工作者處理序中啟動這些應用程式並使其保持在作用中。
自動啟動案例
使用自動啟動功能的服務可支援下列案例:
已將部署應用程式的電腦重新開機。已將 IIS、WAS、應用程式集區、應用程式與服務設定為隨著電腦自動啟動。此案例中的服務會在應用程式重新啟動時自動啟動。如果已設定應用程式自動啟動所有服務,則該應用程式內的所有服務就會自動啟動;否則,只有 Web.config 檔案中所指定的服務會啟動。
某些通訊協定 (例如,WS-Discovery 宣告通訊協定) 需要隨時都可以使用的應用程式。當您啟用應用程式及該應用程式中服務的自動啟動時,只要啟動含有服務的應用程式,Windows Server AppFabric 自動啟動功能就會自動啟動該服務。
服務所屬的應用程式集區偵測到在指定的期間內,有太多工作者處理序變得不健康,因而啟動快速失敗保護程序。自動啟動功能支援快速失敗保護,因此,如果處理序在指定時間間隔的失敗次數多於可設定的次數,則在超出快速失敗保護閾值之後,不會重新啟動應用程式及其服務。
電腦重新啟動案例
下列清單包含自動啟動功能所支援之電腦重新啟動範例案例的一般步驟:
如果將「Windows 處理序啟用」服務 (WAS) 設定為自動啟動,該服務就會啟動。您可以使用 [系統管理工具] 中的 [服務] 小程式來設定 WAS。
WAS 會啟動設定為自動啟動的所有應用程式集區。在 ApplicationHost.config 檔案中,這些應用程式集區上的 startMode 設定是設定為 AlwaysRunning。
<applicationPools> <add name=”MyAppPool” startMode=”AlwaysRunning” /> </applicationPools>
WAS 內的應用程式管理員會載入設定為自動啟動的所有應用程式。在 ApplicationHost.config 檔案的這些應用程式中,serviceAutoStartEnabled 屬性是設為 true。
<sites> <site name="MySite" id="1"> <application path="/" serviceAutoStartEnabled=”true” serviceAutoStartProvider=”Service” serviceAutoStartMode=”All/Custom”> <virtualDirectory path="/" physicalPath="C:\MySite" /> </application> </site> </sites>
應用程式初始化程序會叫用自動啟動模組,而此模組會啟動設定為自動啟動的服務。
serviceAutoStartProvider 屬性是 IIS 擴充點,您可以用來啟動自訂物件。Windows Server AppFabric 安裝程式會安裝 Service 提供者,以及延伸 IIS 結構描述來新增 serviceAutoStartMode 屬性。
如果應用程式的 serviceAutoStartMode 設定為 All,就會啟動該應用程式中的所有服務。如果應用程式的 serviceAutoStartMode 設定是設定為 Custom,則只會啟動 Web.config 檔案中指定的服務。
自動啟動模組會使用 relativeVirtualPath 的設定值來載入服務。下列是來自 Web.config 檔案的組態片段,該檔案已設定兩個服務的 relativeVirtualPath 設定。服務的 relativeVirtualPath 是服務路徑 (相對於包含該服務的應用程式)。
// a sample Web.config fragment with two services configured to use the auto-start feature. <Microsoft.ProcessServer.Hosting> <serviceAutoStart> <add relativeVirtualPath =”/Calendar/Appointments.xamlx” > <add relativeVirtualPath =”/BookStore/ShoppingCart.svc” > </serviceAutoStart> </Microsoft.ProcessServer.Hosting>
提示
服務的自動啟動設定是儲存在 Web.config 檔案中,應用程式集區及應用程式的自動啟動設定則是儲存在 ApplicationHost.config 檔案中。
設定自動啟動功能
您可以使用 AppFabric 提供的「IIS 管理員」延伸模組或 Cmdlet,來設定 WCF 或 WF 服務的自動啟動功能。如需設定自動啟動功能的詳細逐步指示,請參閱設定自動啟動功能一節中的使用 IIS 管理員來設定自動啟動功能與使用 Windows Server AppFabric Cmdlet 來設定自動啟動功能主題。
注意
如果已針對服務啟用自動啟動功能,IIS 就會忽略應用程式集區與使用該應用程式集區之應用程式上的 Idle Timeout 設定。即使應用程式集區處於閒置的時間已超過 Idle Timeout 值,與應用程式集區關聯的工作者處理序仍會保留在記憶體中。
警告
如果專為服務撰寫的初始化程式碼效率不佳,而需要很長的時間進行初始化,IIS 啟動時間間隔可能會過期,而導致該處理序在其目前的狀態下關閉。如果服務是在擁有多顆 CPU 的電腦上執行,最好在服務的初始化程式碼內使用多重執行緒。
另請參閱
概念
2011-12-05