我创建了一个自定义 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 终止,这显然会很痛苦,但我相信你可以解决这个问题。