0

かなり大きな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 

この簡単なスクリプトは、私の場合には動作します:以下はトリックを行いますスクリプトです。私はちょうどこのアプローチに賛否両論を聞くためにコミュニティにそれをポーズしたかったのです。

答えて

0

これは問題ありません。実際、AppFabricにはこの目的のためのメニューオプションがあります。私は決してチェックしませんでしたが、PowerShellコマンドを実行すると思われます。ほとんどのメニューオプションはそうですが、PSコマンドを使用して同じアクションを実行できます。

関連する問題