0

다소 큰 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 

이 간단한 스크립트는 내 경우에 작동합니다 다음은 트릭을 할 것입니다 스크립트입니다. 이 방법에 찬성하거나 반대 의견을 들으려면 커뮤니티에 게시하고 싶었습니다.

답변

0

이렇게하는 데는 문제가 없습니다. 사실 AppFabric은 정확히이 목적을위한 메뉴 옵션을 가지고 있습니다. 체크하지는 않았지만 대부분의 메뉴 옵션은 PowerShell 명령을 실행한다고 가정하고 PS 명령을 사용하여 동일한 작업을 수행 할 수 있습니다.

관련 문제