分享方式:


執行個體儲存、查詢與控制提供者

執行個體儲存區是執行個體的邏輯容器。它是儲存執行個體資料和中繼資料的位置。執行個體儲存區並不代表專用的實體儲存區。執行個體儲存區可包含 SQL Server 資料庫中的持續性資訊,或記憶體中的非持續性狀態資訊。.NET Framework 4 包括「SQL 工作流程執行個體儲存區」,它是執行個體儲存區的具體實作,可讓工作流程在 SQL Server 2005 或 SQL Server 2008 資料庫中維持執行個體資料和中繼資料的持續性。如需詳細資訊,請參閱 .NET Framework 說明中的執行個體儲存區 (https://go.microsoft.com/fwlink/?LinkId=181533) (可能為英文網頁)。AppFabric 只支援使用 SQL Server 2008 資料庫來儲存工作流程服務執行個體的持續性資料。

若要將執行個體儲存區與 AppFabric 工具 (Windows PowerShell Cmdlet 和「IIS 管理員」擴充模組) 和「工作流程管理服務」搭配使用,必須針對該執行個體儲存區開發執行個體儲存提供者、執行個體查詢提供者與執行個體控制提供者。以下各節說明這三種類型的提供者。

注意

執行個體查詢與控制提供者 API 是以 .NET Framework 2.0 為基礎,而執行個體儲存提供者 API 是以 .NET Framework 4 為基礎

執行個體儲存提供者

執行個體儲存區的執行個體儲存提供者會公開 API 讓用戶端叫用以建立執行個體儲存區物件。用戶端使用執行個體儲存區物件將工作流程執行個體儲存在基礎執行個體儲存區 (例如:SQL Server 資料庫) 或從執行個體儲存區載入執行個體。

AppFabric 包含「SQL 工作流程執行個體儲存區」的執行個體儲存提供者。若要支援不同的執行個體儲存區,必須為該執行個體儲存區建立執行個體儲存提供者。若要建立執行個體儲存提供者,必須建立衍生自 InstanceStoreProvider 類別的類別,並實作建立執行個體儲存區 (例如,SqlWorkflowInstanceStore) 的方法。如需詳細資訊,請參閱作法:開發執行個體儲存提供者

執行個體查詢提供者

執行個體儲存區的執行個體查詢提供者可讓您提出執行個體儲存區的相關查詢。當您使用 Cmdlet (例如,Get-ASAppServiceInstance) 來查詢執行個體儲存區中的執行個體時,Cmdlet 會建立查詢提供者物件並叫用該物件上的方法。查詢提供者物件會建立查詢並針對執行個體儲存區執行查詢,再將查詢結果傳回給 Cmdlet。AppFabric 的「IIS 管理員」擴充模組在大部分情況下使用 Cmdlet 來對執行個體儲存區進行查詢。因此,它們也相依於查詢提供者。

所有查詢提供者都會實作相同的 API,並在各種基礎執行個體儲存區之上提供抽象層。AppFabric 包括「SQL 工作流程執行個體儲存區」的執行個體查詢提供者,可讓您查詢儲存在 SQL Server 持續性資料庫中的執行個體。當 SQL 查詢提供者從用戶端 (例如,Windows PowerShell Cmdlet) 收到查詢時,它會從 SQL Server 資料庫查詢並擷取執行個體資料,並將結果集傳回給用戶端。「SQL 工作流程執行個體儲存區」的執行個體查詢提供者之實作位於 Microsoft.ApplicationServer.StoreManagement.dll。

若要支援查詢不同類型的執行個體儲存區,您必須有該儲存區的執行個體查詢提供者。若要建立自訂查詢提供者,必須建立衍生自 InstanceQueryProvider 類別的類別,並實作方法以代表用戶端執行查詢。如需詳細資訊,請參閱作法:開發執行個體查詢提供者

執行個體控制提供者

執行個體控制提供者可讓用戶端針對執行個體儲存區中的執行個體發出控制命令,並擷取必須對執行個體執行的命令。當您使用 AppFabric Windows PowerShell Cmdlet 來控制 (暫停、繼續等) 執行個體儲存區中的執行個體時,Cmdlet 會建立控制提供者物件並叫用物件上的方法,以將命令新增至命令佇列。控制提供者會維護儲存在執行個體儲存區中的命令佇列。泛型主機 (例如,「工作流程管理服務」(WMS)) 會建立控制提供者物件並叫用物件上的方法以擷取儲存在命令佇列中的命令,並執行命令。WMS 會通知控制提供者執行失敗或成功。若執行成功,則控制提供者會從佇列移除命令;否則 WMS 會通知控制提供者執行失敗,而提供者會採取適當動作。

除了將來自命令佇列的命令轉送給 WMS 之外,執行個體控制提供者也會轉送屬性包 (其中包含有關將執行命令之執行個體的中繼資料)。此屬性包包含執行個體的網站名稱和虛擬服務路徑。控制提供者戶從執行個體儲存區取得此中繼資料。WMS 會使用此中繼資料來取得服務執行個體公開的「執行個體控制端點」(ICE) 之存取權,並在端點叫用適當的方法。

所有查詢提供者都會實作相同的 API,並在各種基礎執行個體儲存區之上提供抽象層。AppFabric 包括「SQL 工作流程執行個體儲存區」的執行個體控制提供者,可讓您針對儲存在 SQL Server 持續性資料庫中的執行個體發出控制命令。「SQL 工作流程執行個體儲存區」的執行個體控制提供者之實作位於 Microsoft.ApplicationServer.StoreManagement.dll。若要支援針對儲存在不同類型之執行個體儲存區中的執行個體發出命令,必須為該儲存區開發執行個體控制提供者。

若要建立自訂控制提供者,必須建立衍生自 InstanceControlProvider 類別的類別,並實作方法以代表用戶端新增命令至命令佇列以及從命令佇列擷取命令。如需詳細資訊,請參閱作法:開發執行個體控制提供者

SQL 工作流程執行個體儲存區的執行個體控制提供者

AppFabric 包括「SQL 工作流程執行個體儲存區」的執行個體控制提供者。執行個體控制提供者會在 SQL Server 資料庫中維護命令佇列。當您針對「SQL 工作流程執行個體儲存區」執行控制 Cmdlet 時,執行個體控制提供者會接收要求並將命令資訊儲存在 SQL Server 資料庫的命令佇列中。WMS 使用執行個體控制提供者來從命令佇列擷取命令、針對「SQL 工作流程執行個體儲存區」執行命令,並從命令佇列刪除命令 (若命令執行成功)。「SQL 工作流程執行個體儲存區」的執行個體控制提供者之實作位於 Microsoft.ApplicationServer.StoreManagement.dll。

以下幾點適用於「SQL 工作流程執行個體儲存區」的執行個體控制提供者:

  • 它可立即 (同步) 處理刪除命令。所有其他命令在控制提供者提交命令給 WMS 進行處理之前,都會先放入 (新增至) 命令佇列。

  • 命令佇列是先進先出 (FIFO) 佇列。控制提供者會在佇列結尾新增命令,並從佇列前端讀取命令。控制提供者會將未鎖定的最舊命令傳回給 WMS。

  • 在佇列中,控制提供者一次只能為一個執行個體儲存一個命令。當提供者收到將執行個體的命令放入佇列之要求而命令已經存在於佇列中時,如果命令未鎖定,提供者會覆寫現有的命令。若命令已鎖定或者命令處於「擱置中」狀態,則控制提供者會傳回錯誤。

  • 控制提供者從命令佇列讀取命令之後,會放置一個暫時鎖定。此鎖定會在 65 秒之後到期。從 WMS 收到關於成功執行命令的通知之後,提供者會從命令佇列移除命令。

  • 若執行失敗,控制提供者會重試命令五次。命令佇列會維護失敗之執行嘗試的計數器。若命令執行失敗五次,提供者會從命令佇列移除命令。

  • 控制提供者會在資料庫中維護命令執行錯誤記錄檔。此記錄檔儲存有關失敗的命令和失敗的原因之中繼資料。記錄檔針對每個執行個體最多包含一個失敗的命令。每個記錄項目包含命令類型、執行個體識別碼、錯誤碼、錯誤訊息、上次執行嘗試的時間、執行命令的電腦識別碼,以及嘗試執行的次數。

    當新的命令排入執行個體的佇列,或當使用者從執行個體儲存區移除執行個體時,會移除執行個體的記錄項目。使用者可以使用 Cmdlet 來移除執行個體 (例如:Remove-ASAppServiceInstance)。

  • 控制提供者以 10 個為一批將命令從佇列移出。

另請參閱

概念

作法:開發執行個體儲存提供者
作法:開發執行個體查詢提供者
作法:開發執行個體控制提供者
作法:設定執行個體儲存、查詢與控制提供者

  2012-03-05