2011-03-15 4 views
0

요청 제출/승인/완료 시나리오를 모델링하려고합니다. WorkflowServiceHost를 사용하여 콘솔 앱에서 서비스로 호스팅되는 순서도 워크 플로를 사용하고 있습니다. 워크 플로에는이 두 번째 서비스가 응용 프로그램 데이터베이스와 상호 작용하는 IIS에서 호스팅되는 WCF 서비스에 대한 서비스 참조가 있습니다. 호스팅 된 워크 플로 서비스에 대한 서비스 참조가있는 ASPNET 프런트 엔드가 있고 프록시 클라이언트에서 해당 메서드를 호출합니다.ASPNET을 사용하는 워크 플로 4 : 동시성 및 상태 검사

워크 플로우는 제공된 스크립트를 사용하여 작성한 지속성 데이터베이스를 사용하고 있습니다.

시나리오는 서비스에 대한 요청이 사용자에 의해 이루어진다는 것입니다. 요청은 특정 사람이 한 번 승인해야합니다 (한 지점에 지연이있는 선택을 사용하여 결정이 없으면 다른 사람에게 결정을 알립니다.) 일부 서비스의 경우 요청은 승인자 풀 중 하나에서 수행 할 수있는 두 번째 승인을 가져야합니다. 승인이 모두 끝나면 요청은 다른 사람에게 전달되어 완료됩니다. ASPNET 홈 페이지에서

  1. 나는 그들이 다시 리디렉션 후 프록시에 적절하고 호출 방법 완전한 승인 페이지에 링크 요청 목록 /가 있습니다

    나는 그것이 작동하지만 3 개 질문이 하지만 그것은 모두 비동기이기 때문에 수동으로 홈페이지를 새로 고쳐야 변경된 목록을 볼 수 있습니다. 페이지를 x 초마다 새로 고쳐야 강제로이 문제를 해결할 수 있습니까? 아니면 워크 플로의 상태를 확인하거나 메시지를 다시 기다리는 방법이 있습니까? 액션이 성공했는지 여부를 모르는 상태에서 버튼을 누르는 것만으로도 대담한 상호 작용이 아닙니다.

  2. 풀의 다른 누군가가 승인 한 직후에 요청을 승인하는 사람을 중지시킬 수있는 방법이 있습니까? 그 순간 두 번째 사람이 버튼을 눌렀을 때 아무 일도 일어나지 않습니다 (좋은 것입니다). 워크 플로우 퍼시스턴스 데이터베이스에서 블로킹 북마크가 다음 활동 (아마 거기에 먼저 도착한 사람이 설정 한 것임)을 볼 수 있으므로 두 번째 수신이 발생하지 않는 것처럼 보입니다. WCF 데이터 서비스에서 동시성 검사 코드가 있지만 데이터베이스 업데이트 시도가 없기 때문에이 호출이 발생하지 않습니다. 두 번째 사람에게 다른 사용자가 먼저 갔음을 경고 할 수 있기를 바랍니다.
  3. 웹 응용 프로그램의 내 홈페이지 목록은 응용 프로그램 데이터베이스를 쿼리하여 작성되지만 항목의 ID (상관 관계 핸들로 ID 사용)를 전달하여 각 항목의 상태를 찾기 위해 워크 플로를 쿼리 할 수 ​​있습니다. ? 이 작업을 수행하는 것이 정상입니까 아니면 사람들이 대개 응용 프로그램 데이터베이스에 쿼리를 수행합니까?

답변

0
  1. 나는 당신이 어떤 상태 변경이 발생하는 경우 확인하고 그런 경우가있는 경우에만 페이지를 새로 고침 할 Ajax 호출을 만들 수있을 것 같아요.
  2. 더 이상 유효하지 않은 작업에 대한 WCF 요청을 보내면 오류를 다시 보낼 메시지가 없기 때문에 단방향 메시징을 사용하지 않는 한 오류가 발생합니다. WF4의 버그로 인해 메시지가 60 초 후에 시간 초과 될 수 있음을 알려드립니다. 지속되는 워크 플로 상태를 확인하고이를 기반으로 사용자가 작업을 수행하도록하기 때문에 문제를 피할 실제 방법이 없습니다. 상태를 쿼리해도 워크 플로가 다시 시작되었지만 아직 저장되지 않았을 수 있습니다.
  3. 둘 중 하나만 작동 할 수 있지만 일반적으로 실제 워크 플로 상태에 가장 가까운 워크 플로 인스턴스 저장소를 쿼리합니다.
+0

감사합니다. 1) Ajax에 대해 생각했지만 어떻게해야할지 모르겠다. 튜토리얼을 찾아 보자.
2) ReceiveAndSendReply로 Receive 중 하나를 돌리려고했다. (Receive는 Pick 브랜치의 Trigger 부분에있다.) 하지만 당신이 설명하는대로 시간 초과가 있습니다. 이것은 동시성이 중요하기 때문에 오히려 문제입니다.3) 어떻게 한거야? 차단 북마크를 볼 수 있지만 항목 ID를 볼 수 없습니다. 암호화를 해제해야합니까? – Nix

+0

차단 책갈피를있는 그대로 볼 수 있으며 속성 프로모션을 사용하는 경우 워크 플로에서 다른 변수를 추출하여 데이터베이스에서 검색 할 수 있습니다. – Maurice

+0

나는 메시지가 돌아 오기를 기다리는 ASP 쪽에서 몇 가지 작업을했다. 그러나 한 번에 2 Receives를 제출할 수 있었고 wcf에서 발생하는 동시성 예외가 발생했습니다. 워크 플로에서 Try Catch를 구현하려고 시도했지만 워크 플로가 예외를 잡았음에도 불구하고 오류 상태가되는 것 같습니다. FaultContract로 정의 된 FaultException을 던지기 시작했지만 오류가 발생했습니다. 메시지에 대해 서명 메시지 부분이 지정되지 않았습니다. FaultContract를 사용해야하며 어떻게 워크 플로 폴링을 중지하고 asp로 예외 또는 메시지를 가져 옵니까? – Nix

관련 문제