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命令执行相同的操作。