0

私はかなり大規模なWindowsワークフローの実装を持っており、ワークフローを更新しなければならない場合があります。時々、ワークフローの定義が壊れて、その結果、IndexOutOfRangeExceptionがスローされる状況が発生します。WFでTerminate()またはAbort()メソッドを使用してワークフローを終了できる場合、これは問題にはなりません。

私が知っている2つの解決策があります。1つ目は、Microsoftが作成した.SQLスクリプトを使用してワークフローテーブルを削除および追加することです。もう1つは、定義を変更して永続テーブルに保存することです。これは非常に面倒な作業であり、気の弱い人にはお勧めできません。

おそらく人々が検討することを恐れている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

この単純なスクリプトは私の場合は機能します。このアプローチの賛否両論を聞くために、コミュニティにそれを提示したかっただけです。

4

1 に答える 1

0

これで問題ありません。実際、AppFabric にはまさにこの目的のためのメニュー オプションがあります。確認したことはありませんが、PowerShell コマンドを実行し、ほとんどのメニュー オプションが実行され、PS コマンドを使用して同じアクションを実行できると推測します。

于 2012-01-24T18:07:22.620 に答える