かなり大きなWindows Workflow実装があり、ワークフローを更新する必要があることがあります。今や、ワークフローの定義が破損し、その結果、スローされたIndexOutOfRangeExceptionが発生する状況が発生します。 WFでTerminate()メソッドまたはAbort()メソッドを使用してワークフローを終了させることができれば、これは問題にはなりません。強制的にWindowsワークフローを削除する
私が知っている解決策は2つあります。最初に、Microsoftが書いた.SQLスクリプトを使用してワークフローテーブルを削除して追加します。もう一つは、定義を変更してそれをpercistantテーブルに保存することです - これは非常に退屈な作業であり、心の弱い人にはお勧めできません。
おそらく人々が考慮する恐れのある第3のオプションがあるかどうかを知りたいと思っています - 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
この簡単なスクリプトは、私の場合には動作します:以下はトリックを行いますスクリプトです。私はちょうどこのアプローチに賛否両論を聞くためにコミュニティにそれをポーズしたかったのです。