簡體   English   中英

強制刪除Windows工作流程

[英]Forcibly Deleting a Windows Workflow

我有一個相當大的Windows Workflow實現,有時必須更新工作流。 有時我們會遇到工作流定義被破壞的情況,並因此引發IndexOutOfRangeException。 如果WF允許您使用Terminate()或Abort()方法終止工作流,那么這將不是問題。

我知道有兩種解決方案。 首先涉及使用Microsoft編寫的.SQL腳本刪除和添加工作流表。 另一種是修改定義並將其保存回持久表中-這是一項非常繁瑣的任務,不建議您精打細算。

我想知道是否還有第三種選擇,也許人們不敢考慮- 從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

這個簡單的腳本適用於我的情況。 我只是想向社區展示它,以聽取這種方法的利弊。

這樣做沒有問題。 實際上,AppFabric正是有一個用於此目的的菜單選項。 我從未檢查過,但我假設它執行PowerShell命令,大多數菜單選項都執行,並且您可以使用PS命令執行相同的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM