2010-03-05 8 views
0

워크 플로 인스턴스가 연결된 개체가 있습니다. 개체는 개체와 연결된 워크 플로 인스턴스의 GUID 인 GUID로 식별됩니다. 워크 플로 정의가 변경된 경우 워크 플로 인스턴스를 다시 시작해야합니다 (워크 플로 자체에 상태가없고이 방식으로 다시 시작을 지원하도록 작성된 경우).동일한 인스턴스 ID를 사용하여 워크 플로 인스턴스 다시 만들기

다시 시작은 WorkflowInstance에서 Terminate을 호출 한 다음 동일한 GUID로 인스턴스를 다시 생성하여 다시 시작됩니다. 이상한 부분은이 모든 다른 시도가 작동한다는 것입니다 (이상한 시도 - 워크 플로가 중지되었지만 어떤 이유로 다시 시작되지 않고 시도한 경우에도 이미 종료 된 워크 플로가 다시 생성되어 성공적으로 시작됨).

'중고품'GUID를 사용하는 것이 엄청난 싸구려 (그리고 우리가 변경하려는 것)의 징후라는 것을 인정하지만, 왜 이것이 작동하지 않는지 궁금합니다. 어떤 아이디어?

참고 :

  1. 종료 워크 플로 인스턴스가 종료시 (통지 대기) 부동 태화된다.

  2. Terminate은 해당 인스턴스에 대해 데이터베이스에 보존 된 데이터를 성공적으로 삭제합니다.

  3. 우리는 비활성화 된 인스턴스를 다시 시작하지 않고 워크 플로의 정의 시작 부분부터 다시 시작하도록 WF의 컨텍스트에서는 덜 일반적인 의미로 '다시 시작'을 사용하고 있습니다.

고마워요!

답변

0

Terminate()을 호출하면 루트 활동 (이 경우에는 일부 정리가 필요함)에 대해서도 Uninitialize()을 호출하지 않고도 매우 잔인하게 작업 흐름을 완료하는 것처럼 보입니다.

해결 방법은 작업 흐름이 종료되고 Uninitialize()이 호출되도록 워크 플로에서 예외를 throw하는 것입니다 ('항목 사용 가능'이벤트를 처리 할 때 특수 큐에서 개체를 큐에 넣음으로써 '종료'가 트리거 될 수 있음).

관련 문제