我創建了一個自定義的SQL工作流持久化服務,以防止工作流程與實際終止 - 從而讓工作流在以前的狀態導致了錯誤發生轉變前:
public class CustomSqlWorkflowPersistenceService : SqlWorkflowPersistenceService
{
public CustomSqlWorkflowPersistenceService (string connectionString) : base(connectionString)
{
}
public CustomSqlWorkflowPersistenceService (NameValueCollection parameters) : base(parameters)
{
}
public CustomSqlWorkflowPersistenceService (string connectionString, bool unloadOnIdle, TimeSpan instanceOwnershipDuration, TimeSpan loadingInterval) : base(connectionString, unloadOnIdle, instanceOwnershipDuration, loadingInterval)
{
}
protected override void SaveWorkflowInstanceState(Activity rootActivity, bool unlock)
{
WorkflowStatus workflowStatus = GetWorkflowStatus(rootActivity);
if (workflowStatus == WorkflowStatus.Terminated)
{
string workflowError = GetSuspendOrTerminateInfo(rootActivity);
if (!string.IsNullOrEmpty(workflowError))
{
string error = string.Format("Workflow terminated, forcing an abort! {0}", workflowError);
throw new Exception(error);
}
}
base.SaveWorkflowInstanceState(rootActivity, unlock);
}
}
這顯然會如果你想迫使WF終止,那就太痛苦了,但我相信你可以解決這個問題。