執行個體啟動
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 工作流程執行個體存放區會執行偵測工作,以偵測在上一次偵測週期之後,持續性資料庫中有無任何可執行或可啟用的工作流程執行個體。 如需此屬性的詳細資訊,請參閱可執行的執行個體偵測週期 。