共用方式為


暫停的實例管理

SuspendedInstanceManagement 範例 示範如何管理已暫停的工作流程實例。 WorkflowUnhandledExceptionBehavior 的預設動作是 AbandonAndSuspend。 這表示,根據預設,從裝載於 WorkflowServiceHost 的工作流程實例擲回的未處理例外狀況,會導致該實例被從記憶體中釋放(即已放棄),並且該實例的持久版本將被標示為暫停。 暫停的工作流程實例在未暫停之前將無法執行。

此範例示範如何實作命令行公用程式來查詢暫停的實例,以及如何為使用者提供繼續或終止實例的選項。 在此範例中,工作流程服務會刻意拋出例外,導致其暫停。 然後,命令行公用程式可用來查詢實例,然後繼續或終止實例。

演示

在 Windows Workflow Foundation (WF) 中使用 WorkflowServiceHostWorkflowUnhandledExceptionBehaviorWorkflowControlEndpoint

討論

在此範例中實作的命令行公用程式,專屬於 .NET Framework 4.6.1 隨附的 SQL 實例存放區實作。 如果您有實例存放區的自定義實作,則可以藉由將範例中的 WorkflowInstanceCommand 實作取代為實例存放區特定的實作,來調整此公用程式。

提供的實現會直接對 SQL 實例存儲庫執行 SQL 命令,以列出暫停中的實例,並依賴新增至 WorkflowServiceHostWorkflowControlEndpoint,以繼續或終止這些實例。

若要設定、建置和執行範例

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

    1. Microsoft消息佇列 (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。