暫停的實例管理
SuspendedInstanceManagement 範例 示範如何管理已暫停的工作流程實例。
WorkflowUnhandledExceptionBehavior 的預設動作是 AbandonAndSuspend
。 這表示,根據預設,從裝載於 WorkflowServiceHost 的工作流程實例擲回的未處理例外狀況,會導致該實例被從記憶體中釋放(即已放棄),並且該實例的持久版本將被標示為暫停。 暫停的工作流程實例在未暫停之前將無法執行。
此範例示範如何實作命令行公用程式來查詢暫停的實例,以及如何為使用者提供繼續或終止實例的選項。 在此範例中,工作流程服務會刻意拋出例外,導致其暫停。 然後,命令行公用程式可用來查詢實例,然後繼續或終止實例。
演示
在 Windows Workflow Foundation (WF) 中使用 WorkflowServiceHost 與 WorkflowUnhandledExceptionBehavior 和 WorkflowControlEndpoint。
討論
在此範例中實作的命令行公用程式,專屬於 .NET Framework 4.6.1 隨附的 SQL 實例存放區實作。 如果您有實例存放區的自定義實作,則可以藉由將範例中的 WorkflowInstanceCommand
實作取代為實例存放區特定的實作,來調整此公用程式。
提供的實現會直接對 SQL 實例存儲庫執行 SQL 命令,以列出暫停中的實例,並依賴新增至 WorkflowServiceHost 的 WorkflowControlEndpoint,以繼續或終止這些實例。
若要設定、建置和執行範例
此範例需要啟用下列 Windows 元件:
Microsoft消息佇列 (MSMQ) 伺服器
SQL Server Express
設定 SQL Server 資料庫。
從 Visual Studio 命令提示字元中,從 SuspendedInstanceManagement 範例目錄執行 「setup.cmd」,這會執行下列動作:
使用 SQL Server Express 建立持續性資料庫。 如果持續性資料庫已經存在,則會卸除並重新建立
設定資料庫以進行資料持久性。
將 IIS APPPOOL\DefaultAppPool 和 NT AUTHORITY\Network Service 新增至為持續性設定資料庫時所定義的 InstanceStoreUsers 角色。
設定服務佇列。
在 Visual Studio 中,以滑鼠右鍵按一下 SampleWorkflowApp 專案,然後點擊設定為啟始專案。
按 F5編譯並執行 SampleWorkflowApp。 這會建立所需的佇列。
按 Enter 停止 SampleWorkflowApp。
從命令提示字元執行 Compmgmt.msc,以開啟電腦管理控制台。
展開 服務與應用程式、消息佇列、私人佇列。
以滑鼠右鍵按下 ReceiveTx 佇列,然後選取 [屬性]。
選取 [安全性] 索引標籤,並允許 [所有人] 擁有 接收訊息、查看訊息,以及 傳送訊息的權限。
現在,請執行範例。
在 Visual Studio 中,按 Ctrl +F5,以再次執行 SampleWorkflowApp 專案而不偵錯。 在主控台視窗中會列印兩個端點位址:一個用於應用程式端點,另一個來自 WorkflowControlEndpoint。 然後會建立工作流程實例,並追蹤該實例的記錄會出現在控制台視窗中。 工作流程實例會擲回例外狀況,導致實例暫停和中止。
然後,您可以使用命令行公用程式對這些實例採取進一步的動作。 命令行自變數的語法如下所示:
SuspendedInstanceManagement -Command:[CommandName] -Server:[ServerName] -Database:[DatabaseName] -InstanceId:[InstanceId]
支援的指令包括:
Query
、Resume
和Terminate
。 只有Resume
和Terminate
作業才需要使用 InstanceId 切換。
清除 (選擇性)
執行 Compmgmt.msc 來開啟電腦管理主控台。
展開 服務和應用、消息佇列、私人佇列。
刪除 ReceiveTx 佇列。
若要移除持續性資料庫,請執行cleanup.cmd。