使用 WorkflowCommitWorkBatch 服務範例

Download sample

這個範例示範 Windows Workflow Foundation 如何讓自訂服務在使用該服務的交易中,以工作流程執行個體的身分參與該交易。

任何複合活動都具有與它關聯的交易行為,同時還具備與它關聯的工作批次。如果此複合活動中的任何活動呼叫了主機所提供之服務上的某個方法,那麼該服務也會成為工作批次的一部分。當複合活動完成時,工作批次就會被認可。如果任何項目因為某些原因而認可失敗,則整個工作批次都會復原。交易內容會提供給該批次中的所有項目,這是認可程序的一部分。因此,想要參與交易的服務也會取得交易內容。接著,活動就可以將交易內容傳給它所進行的任何呼叫。例如,最常見的例子就是將交易內容傳給資料庫呼叫,如此,連資料庫呼叫都會成為相同交易的一部分。

參與工作批次

若要參與工作批次,服務必須實作一個名為 IPendingWork 的介面。

向工作批次註冊

若要參與工作批次,服務 (或任何要參與工作批次的型別) 必須向工作批次註冊。下列案例說明向工作批次註冊的必要步驟。

執行期間,活動會呼叫服務上的方法。此方法不會執行實際工作,而是向工作批次和完成工作所需的內容進行註冊。稍後要認可工作批次時,就會以註冊時使用的內容來呼叫 Commit 方法。換言之,此方法延遲了處理,直到適合進行實際工作為止。

若要向工作批次註冊,請使用下列方式將工作項目加入至目前工作批次中:

WorkflowEnvironment.WorkBatch.Add(IPendingWork work, object workItem);

範例詳細資料

此範例是一個轉帳案例。某筆金額必須從存款帳戶轉帳至支票帳戶。工作流程首先將此金額計入支票帳戶的貸方。然後,嘗試將此金額計入存款帳戶的借方。如果存款帳戶中的金額少於轉帳金額,交易就會中止並還原支票帳戶。如果金額高於轉帳金額,則交易成功。

交易內容會傳給資料庫呼叫,因此連資料庫呼叫都會參與相同交易,這是認可方法的一部分。

此範例有三個自訂活動。

CreditAmount -- 用來將金額計入支票帳戶的貸方。

DebitAmount -- 用來將金額計入存款帳戶的借方。

TransactionComposite -- 繼承自 SequenceActivity 活動的複合活動,提供交易行為。

若要建立和設定 SQL Server 資料庫

  1. 如果您使用 Microsoft 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\<語言>\SqlPersistenceService_Schema.sql,其中 <framework_version> 是目前您電腦上安裝的 .NET Framework 版本。

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

  5. 在 [檔案] 功能表上,按一下 [開啟],並開啟 SQL 指令碼 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<語言>\SqlPersistenceService_Logic.sql,其中 <framework_version> 是目前您電腦上安裝的 .NET Framework 版本。

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

若要建置和執行範例

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

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

  2. 執行 .\SQL\TransactionServiceDB.cmd 檔案所提供之資料庫的指令碼,以建立 TransactionServiceSampleDB 資料庫。

    Note注意:

    這個指令碼會建立名為 TransactionServiceSampleDB 的資料庫。此範例所使用的連接字串會套用這個資料庫名稱。

    Note 注意:

    如果您要變更資料庫的名稱,請務必在原始程式碼中更新正確的連接字串。否則,此範例將無法連接到資料庫。此外,執行指令碼之前,請先檢查指令碼的第 20 行是否指定了正確的 SQL 伺服器安裝位置。

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

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

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

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

  7. 若要偵錯此範例,請在 [方案總管] 中,以滑鼠右鍵按一下專案並選取 [設定為啟始專案],將 SampleWorkflow 專案設為啟始專案。

  8. 開啟 SampleWorkflow 專案的 [屬性] 對話方塊。

  9. 選取 [啟動外部程式],並選取 Host\bin\Debug 資料夾中的 host.exe 檔。

    當您執行 Host.exe 檔時,此範例會等待您輸入要從存款帳戶轉帳至支票帳戶的金額。請輸入非零的正數值。此交易的成功或失敗,取決於存款帳戶的餘額。您將會在螢幕上看到適當的結果。

請參閱

參考

Commit
Add
WorkflowCommitWorkBatchService

其他資源

Windows Workflow CommitWorkBatch Services
Using Transactions in Workflows

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.