使用持續性服務範例

Download sample

這個範例說明如何使用 SqlWorkflowPersistenceService 服務來載入和卸載工作流程。

許多商務程序要花很長的時間才能完成 (可能長達數月,甚至數年)。將工作流程保存在記憶體中,不僅不切實際 (記憶體限制的緣故),而且也不能進行擴充,因為執行個體必須在單一伺服器上處理。許多這類長時間執行的工作流程並不會主動執行流程或處理序邏輯,而是會有效地處於閒置狀態,等待使用者或其他系統的輸入。透過卸載閒置的執行個體,主應用程式 (Host Application) 就可以節省記憶體,並在多台處理伺服器之間啟用延展性 (Scalability)。這個範例示範如何使用簡單工作流程卸載閒置的執行個體,此工作流程會在完成前等待 5 秒。

Note注意:

您也可以將建構函式中的 UnloadOnIdle 參數設定為 true,藉此將 SqlWorkflowPersistenceService 設定為自動卸載閒置的工作流程。

資料庫組態

Windows Workflow Foundation 所安裝的 SQL 服務會使用 Microsoft SQL Server 來儲存資訊。您可以使用 Microsoft SQL Server 2005 Express、SQL Server 2000 (含) 以後版本或 SQL Server 2000 Desktop Engine (MSDE) 來執行這些工作。

Windows Workflow Foundation 安裝程式不會安裝這些服務所需的資料庫,但會安裝 SQL 指令碼來為這些服務建立和設定資料庫。

Note注意:

您必須啟用「Microsoft 分散式交易協調器」(MSDTC) 服務,SqlWorkflowPersistenceService 才能運作。

下列步驟說明如何建立和設定此範例中的服務所使用的資料庫。

若要建立和設定 SQL 資料庫

  1. 如果您使用 SQL Server 2005 Express、SQL Server 2000 (含) 以後版本或 SQL Server 2000 Desktop Engine (MSDE),請使用 SQL 查詢陳述式 (Statement) 建立名為 SqlPersistenceService 的新資料庫:

    CREATE DATABASE SqlPersistenceService

    注意:在工作流程應用程式中同時使用 SqlTrackingServiceSqlWorkflowPersistenceService 時,建議您使用單一資料庫,以保持持續性並方便進行追蹤。

  2. 在 SQL Query Analyzer 工作區中,於可用資料庫的清單中選取您在步驟 1 建立的資料庫。

  3. 在 [檔案] 功能表上,按一下 [開啟],並開啟 SQL 指令碼 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<language>\SqlPersistenceService_Schema

  4. 按一下 [執行] 或按下 F5 執行查詢,以建立 SQL 持續性服務資料表。

  5. 在 [檔案] 功能表上,按一下 [開啟],並開啟 SQL 指令碼 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<language>\SqlPersistenceService_Logic

  6. 按一下 [執行] 或按下 F5 執行查詢,以建立 SQL 持續性服務預存程序。

範例逐步解說

此工作流程是循序工作流程,含有三個循序活動:code1、delay1 和 code2。CodeActivity 活動會將目前 UTC 日期時間寫入主控台,而 DelayActivity 活動會等待 5 秒鐘再繼續。主應用程式會根據各種 WorkflowRuntime 事件提供處理常式,以管理整個工作流程執行個體進出記憶體的載入和卸載作業。

執行如下:

  1. 主機建立並啟動工作流程。

  2. Code1 將目前 UTC 時間日期顯示在主控台上。

  3. 工作流程進入 delay1 活動。

  4. 工作流程執行個體現在會處於閒置狀態,等待計時器逾時。當工作流程閒置時,會導致 WorkflowRuntime 引發 WorkflowIdled 事件。

  5. Unload 方法會呼叫進入 SqlWorkflowPersistenceService 服務,以保存工作流程執行個體。接著,工作流程執行階段會處置工作流程執行個體。

  6. 經過至少 5 秒,計時器會逾時。

  7. SqlWorkflowPersistenceService 服務會從資料庫載入工作流程,並且執行階段會繼續處理工作流程。

  8. 接著,Code2 將目前 UTC 時間日期顯示在主控台上。顯示的時間日期必須比 code1 顯示的時間晚 5 秒鐘。

  9. 當工作流程執行個體完成時,工作流程執行階段會呼叫進入 SqlWorkflowPersistenceService 服務,以保存工作流程的最終狀態。

自訂服務

基於狀態持續性的目的,這個範例使用非預設的服務,然而,您也可以建立自訂的狀態持續性服務。您可能必須執行這項操作,才能使用目前資料庫系統或提供額外功能。如需如何開發自訂服務的詳細資訊,請參閱本主題所列的範例和 Windows Workflow Foundation 文件。

若要建置範例

  1. 按一下 [下載範例] 來下載範例。

    這樣會將範例專案擷取到本機硬碟上。

  2. 按一下 [開始],並依序指向 [程式集] 和 [Microsoft Windows SDK],再按一下 [CMD 殼層]。

  3. 移至範例的來源目錄。

  4. 在命令提示字元上,輸入 MSBUILD <Solution file name>

若要執行範例

  • 在 [SDK 命令提示字元] 視窗中,執行 PersistenceServices\bin\debug 資料夾 (若是範例的 VB 版本,則是 PersistenceServices\bin 資料夾) 中的 .exe 檔案,該資料夾位於此範例的主要資料夾下方。

請參閱

參考

SqlWorkflowPersistenceService
WorkflowPersistenceService

其他資源

自訂持續性服務範例
引發事件來載入工作流程範例
Windows Workflow Persistence Services
Exercise 4 : Using Runtime Services
Using the SqlWorkflowPersistenceService Service
裝載範例
Task 3 : Using the Windows Workflow Persistence Service

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.