暫停的執行個體管理

SuspendedInstanceManagement 範例 (英文) 示範如何管理已暫停的工作流程執行個體。 WorkflowUnhandledExceptionBehavior 的預設動作為 AbandonAndSuspend。 這表示根據預設,從裝載於 WorkflowServiceHost 中之工作流程執行個體所擲回的未處理例外狀況將會造成此執行個體從記憶體中處置 (放棄),而且此執行個體的永久性/持續版本將會標示為已暫停。 暫停的工作流程執行個體要等到取消暫停之後才能夠執行。

此範例會示範如何實作命令列公用程式來查詢暫停的執行個體,以及如何提供使用者繼續或終止執行個體的選擇。 在這個範例中,工作流程服務會故意擲回例外狀況,使得它遭到暫停。 然後可以使用此命令列公用程式來查詢執行個體,之後再繼續或終止執行個體。

示範

WorkflowServiceHost 在 Windows Workflow Foundation (WF) 中有 WorkflowUnhandledExceptionBehaviorWorkflowControlEndpoint

討論

這個範例中所實作的命令列公用程式,專用於 .NET Framework 4.6.1 隨附之 SQL 執行個體存放區實作。 如果您擁有執行個體存放區的自訂實作,您可以改寫此公用程式,其方式是使用您的執行個體存放區所特有的實作來取代範例中的 WorkflowInstanceCommand 實作。

提供的實作會直接針對 SQL 執行個體存放區來執行 SQL 命令,以列出暫停的執行個體,而且此實作會依賴加入至 WorkflowControlEndpointWorkflowServiceHost 來結束或終止執行個體。

若要安裝、建置及執行範例

  1. 本範例需要啟用下列 Windows 元件:

    1. Microsoft Message Queues (MSMQ) 伺服器

    2. SQL Server Express

  2. 設定 SQL Server 資料庫。

    1. 在 Visual Studio 命令提示字元中,從 SuspendedInstanceManagement 範例目錄執行 “setup.cmd”,可執行以下作業:

      1. 使用 SQL Server Express 建立持續性資料庫。 如果持續性資料庫已經存在,請將它卸除然後重新建立。

      2. 設定資料庫擁有持續性。

      3. 將 IIS APPPOOL\DefaultAppPool 和 NT AUTHORITY\Network Service 加入至 InstanceStoreUsers 角色,這是設定資料庫擁有持續性時所定義的角色。

  3. 設定服務佇列。

    1. 在 Visual Studio 中,以滑鼠右鍵按一下 [SampleWorkflowApp] 專案,然後再按一下 [設定為啟始專案]

    2. F5,編譯及執行 SampleWorkflowApp。 這樣會建立所需的佇列。

    3. Enter 鍵停止 SampleWorkflowApp。

    4. 從命令提示字元執行 Compmgmt.msc,開啟 [電腦管理] 主控台。

    5. 依序展開 [服務及應用程式]、[訊息佇列]、[私用佇列]

    6. 以滑鼠右鍵按一下 ReceiveTx 佇列,然後選取 [內容]

    7. 選取 [安全性] 索引標籤,並允許 [所有人] 擁有 [接收訊息]、[查看訊息] 和 [傳送訊息] 的權限。

  4. 現在,請執行範例。

    1. 在 Visual Studio 中,按下 Ctrl+F5,於沒有偵錯的情況下,再次執行 SampleWorkflowApp 專案。 兩個端點位址將會列印到主控台視窗:一個適用於應用程式端點,另一個來自 WorkflowControlEndpoint。 然後會建立工作流程執行個體,該執行個體的追蹤記錄將會出現在主控台視窗。 工作流程執行個體將會擲回例外狀況,造成執行個體被暫停及中止。

    2. 然後可以使用此命令列公用程式來針對任何執行個體採取進一步的動作。 命令列引數的語法如下:

      SuspendedInstanceManagement -Command:[CommandName] -Server:[ServerName] -Database:[DatabaseName] -InstanceId:[InstanceId]

      支援的命令為:QueryResumeTerminate。 只有 ResumeTerminate 作業需要 InstanceId 參數。

若要清除 (選擇性)

  1. 執行 Compmgmt.msc,開啟電腦管理主控台。

  2. 依序展開 [服務及應用程式]、[訊息佇列]、[私用佇列]

  3. 刪除 ReceiveTx 佇列。

  4. 若要移除持續性資料庫,請執行 cleanup.cmd。