0

我有一個相當大的Windows工作流程實現,我有時需要更新工作流程。我們現在偶爾會遇到工作流定義被破壞的情況,並因此導致拋出IndexOutOfRangeException。如果WF允許您使用Terminate()或Abort()方法終止工作流,這不會成爲問題。強制刪除Windows工作流程

我知道有兩種解決方案。第一個涉及使用Microsoft寫的.SQL腳本刪除和添加Workflow表。另一種方法是修改定義並將其保存回到過度表中 - 這是一項非常乏味的任務,不建議用於微弱的內心。

我想知道是否有第三種選擇,也許人們不敢考慮 - 從dbo.InstanceState和dbo.WorkflowInstance表中刪除記錄。下面是一個腳本,將這樣的伎倆:

DECLARE @WorkflowInstancID uniqueidentifier 
-- SET @WorkflowInstancID = <Your friendly, offending Workflow Instance ID> 
DELETE FROM dbo.WorkflowInstanceEvent 
    WHERE WorkflowInstanceInternalId IN (SELECT WorkflowInstanceInternalId FROM dbo.WorkflowInstance WHERE WorkflowInstanceId = @WorkflowInstancID) 
DELETE FROM dbo.UserEvent 
    WHERE WorkflowInstanceInternalId IN (SELECT WorkflowInstanceInternalId FROM dbo.WorkflowInstance WHERE WorkflowInstanceId = @WorkflowInstancID) 
DELETE FROM dbo.ActivityInstance 
    WHERE WorkflowInstanceInternalId IN (SELECT WorkflowInstanceInternalId FROM dbo.WorkflowInstance WHERE WorkflowInstanceId = @WorkflowInstancID) 
DELETE FROM dbo.ActivityExecutionStatusEvent 
    WHERE WorkflowInstanceInternalId IN (SELECT WorkflowInstanceInternalId FROM dbo.WorkflowInstance WHERE WorkflowInstanceId = @WorkflowInstancID) 
DELETE FROM dbo.InstanceState WHERE uidInstanceID = @WorkflowInstancID 
DELETE FROM dbo.WorkflowInstance WHERE WorkflowInstanceId = @WorkflowInstancID 
GO 

這個簡單的腳本作品在我的情況。我只是想向社區提出這個方法的優點或缺點。

回答

0

這樣做沒有問題。實際上,AppFabric具有用於此目的的菜單選項。我從來沒有檢查過,但我認爲它執行PowerShell命令,大多數菜單選項都可以,您可以使用PS命令執行相同的操作。