다소 큰 Windows Workflow 구현이 있고 때로는 워크 플로를 업데이트해야합니다. 때때로 워크 플로의 정의가 손상되어 결과적으로 Throw 된 IndexOutOfRangeException을 얻는 상황이 발생합니다. WF를 사용하여 Terminate() 또는 Abort() 메서드를 사용하여 워크 플로를 종료 할 수 있으면 문제가되지 않습니다.강제로 Windows 워크 플로 삭제
내가 아는 두 가지 해결책이 있습니다. 첫 번째 작업은 Microsoft에서 작성한 .SQL 스크립트를 사용하여 워크 플로 테이블을 제거하고 추가하는 작업입니다. 다른 하나는 정의를 수정하여 percistant 테이블에 다시 저장하는 것입니다. 이는 매우 지루한 작업이며 마음이 희미하기 때문에 권장되지 않습니다.
사람들이 두려워 할 수있는 세 번째 옵션이 있는지 알고 싶습니다. 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
이 간단한 스크립트는 내 경우에 작동합니다 다음은 트릭을 할 것입니다 스크립트입니다. 이 방법에 찬성하거나 반대 의견을 들으려면 커뮤니티에 게시하고 싶었습니다.