1

AppFabric에서 배포 된 SQL Server- 지속 형 .NET 4 WF (Workflow Foundation) 워크 플로 서비스의 경우 한 활동에서 다른 활동으로 서비스를 "어떻게"이동할 수 있습니까? 워크 플로는 순차 또는 순서도 일 수 있습니다.WF에서 GoTo 구현 4

사용 사례는 관리입니다. 장기 실행 워크 플로는 수신 활동 A에서 유휴 상태입니다. 일부 클라이언트가 실수로 서비스를 호출하여 수신 작업 B로 진행합니다. 워크 플로 (더 큰 워크 플로에 포함될 수 있음)에는 A로 돌아가는 경로가 없습니다. 워크 플로를 다시 A로 설정하도록 요청합니다.

이 경우는 프로덕션 환경에서 자주 발생하는 것을 확인했습니다. 우리의 기존 BPM 시스템은 "goto"호출을 지원합니다. 이것이 WF 4에서 어떻게 성취 될 수 있습니까?

편집 : 위의 실용적이지 경우, 알려진 선행 활동의 제한된 수의 하나로 분기 할 수있는 "행복한 길"에서 벗어난 활동을 "실패"구현을위한 좋은 디자인 패턴 (다시 시작은 무엇인가 여기에서) 변수를 기반으로? 목표는 여러 행으로 읽을 수없는 워크 플로를 만드는 것을 피하는 것입니다.

EDIT 2 : 우리는이 길로 가지 않기로 결정했으나,이 작업을 수행 할 때 더 새로운 MSDN article이 있습니다.

EDIT 3 : 우리는 마음이 바뀌었고 위에 링크 된 MSDN 기사에서 Leon Welicki의 솔루션을 사용할 것입니다. :)

답변

2

이것은 기본적으로 제공되지 않습니다.

작업을 수행 할 수있는 경우 워크 플로 상태를 열어 4 개의 이진 열에 저장하고 해당 수를 이전 상태로 변경하면 모든 수의 작업이 실행될 수 있고 모든 변수가 변경되거나 심지어 변경 될 수 있음을 의미합니다. 그들이 더 이상 범위에 없기 때문에 떨어졌다.

내가 워크 플로의 모든 이전의 유휴 상태와 스택의 종류를 얻을 수 있도록 SQL 데이터베이스에서 워크 플로우가 유휴 갔다 때마다 상태를 복사하려고 할 것입니다 이것을 시도 거라고 가정합니다. 그런 다음 나중에 워크 플로가 유휴 상태이고 메모리에없는 상태에서 현재 상태를 이전 상태로 바꾸고 워크 플로를 다시로드 할 수 있습니다. 나는 그것을 시도한 적이 없으므로 그것이 작동하고 꽤 많은 잠재적 인 문제를 보거나, DB 거래가 경쟁했거나 이메일이 전송되었지만 두 번째로 실행되는 것처럼 생각하는지 모른다.

+0

나는 그것을 두려워했습니다. 해결 방법에 대한 제안 사항이 있습니까 (부분 솔루션 일 경우에도)? – TrueWill

+0

워크 플로 상태 레코드를 복사 할 때 제안한 것이 내가 생각할 수있는 최상의 해결 방법이었습니다. 미안하지만 더 좋은 대답은 :-( – Maurice