SQL 工作流程實例存放區會執行內部工作,定期喚醒並偵測持續性資料庫中可執行或可啟動的工作流程實例。 如果找到可執行的工作流程實例,它會通知工作流程主機能夠啟動實例。 如果實例存放區找到可啟動的工作流程實例,它會通知啟動工作流程主機的泛型主機,接著會執行工作流程實例。 本主題中的下列各節將詳細說明實例啟用程式。
偵測和啟用可執行的工作流程實例
如果實例不是處於暫止狀態或已完成狀態,且符合下列條件,SQL 工作流程實例存放區會考慮 可 執行的工作流程實例:
實例已解除鎖定,且有已過期的擱置定時器。
實例的鎖定已過期。
實例已解除鎖定,且其狀態為 [正在執行]。
當 SQL 工作流程實例存放區找到可執行的實例時,會觸發 HasRunnableWorkflowEvent。 之後,SqlWorkflowInstanceStore 會停止監視,直到 TryLoadRunnableWorkflowCommand 在存放區上呼叫一次為止。
訂閱了 HasRunnableWorkflowEvent 並具有可載入實例功能的工作流程主機會在實例存放區執行 TryLoadRunnableWorkflowCommand ,以便將實例載入至記憶體中。 如果主機和實例的元數據屬性 WorkflowServiceType 設定為相同的值,工作流程主機就會被視為能夠載入工作流程實例。
偵測和啟用可啟用的工作流程實例
如果實例可執行,而且計算機上沒有能夠載入實例的工作流程主機,則工作流程實例會被視為 可啟動 。 如需可執行工作流程實例的定義,請參閱上述偵測和啟動可執行工作流程實例。
當 SQL 工作流程實體存放區在資料庫中找到可啟動的工作流程實例時,就會觸發 HasActivatableWorkflowEvent。 之後,SqlWorkflowInstanceStore 會停止監視,直到 QueryActivatableWorkflowsCommand 在存放區上呼叫一次為止。
當已訂閱 HasActivatableWorkflowEvent 的泛型主機接收事件時,它會對實例存放區執行 QueryActivatableWorkflowsCommand ,以取得建立工作流程主機所需的啟用參數。 泛型主機會使用這些啟用參數來建立工作流程主機,進而載入和執行可執行的服務實例。
一般主機
泛型主機是具有泛型主機之元數據屬性 WorkflowServiceType 值的主機,會設定為 WorkflowServiceType。Any 表示它可以處理任何工作流程類型。 泛型主機具有名為 ActivationType的 XName 參數。
目前,SQL 工作流程實例存放區支援將 ActivationType 參數的值設定為 WAS 的泛型主機。 如果 ActivationType 未設定為 WAS,SQL 工作流程實例存放區將擲回 InstancePersistenceException。 隨 Windows Server AppFabric 的裝載功能提供的工作流程管理服務是通用主機,其啟用類型設定為 WAS。
針對WAS啟用,一般主機需要一組啟用參數來衍生可啟動新主機的端點位址。 WAS 啟用的參數包括網站的名稱、相對於網站的應用程式路徑,以及相對於應用程式的服務路徑。 SQL 工作流程實例存放區會在 執行 SaveWorkflowCommand期間儲存這些啟用參數。
可運行的實例偵測時段
SQL 工作流程實例存放區的 「可執行實例偵測期間 」屬性會指定 SQL 工作流程實例存放區執行偵測工作的時間週期,以偵測在前一個偵測周期之後,持續性資料庫中任何可執行或可啟動的工作流程實例。 如需此屬性的詳細資訊 ,請參閱可執行的實例偵測期間 。