2014-12-10 1 views
0

전화로 사람들과 연락하는 작업 흐름이 있습니다. 응답되거나 만료 시간에 도달 할 때까지 일련의 번호로 전화를 걸도록 설계되었습니다. 워크 플로가 일 때 만료일이 지나면이 완료되었지만 전화 통화 중일 때는 아래 오류가 나타납니다. 결과적으로 중단 메시지가 완료된 워크 플로로 전송되고 실패합니다.완료된 워크 플로에 메시지를 보낼 때 Windows Workflow가 실패합니다.

걸림 메시지를 받으면 워크 플로가 완료되었음을 어떻게 감지 할 수 있습니까?

System.ServiceModel.FaultException: The execution of an InstancePersistenceCommand was interrupted because the instance 'a9ecca9f-9edd-4dd0-939c-2a7091a6b59c' is already complete. 

Server stack trace: 
    at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc) 
    at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) 
    at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) 

enter image description here

답변

0

이 워크 플로우 서비스와 예쁜 근본적인 문제 - 워크 플로우가 들어오는 메시지를 수신하기 위해 적절한 상태에 있음을 보장이없고, 그렇지 않은 경우 모호한 오류가 발생합니다. 다시 시도 할 수있는 일시적인 오류로 인해 워크 플로에 오류가 발생하는 등 워크 플로가 준비되지 않을 조건이 너무 많습니다. 코드를 강력하게 만들려면 워크 플로우가 해당 이벤트에서 대기 중인지 확인하기 위해 들어오는 호출의 유효성을 검사하고, 워크 플로우가 그 상태가되면 작동 할 수 있도록 이벤트를 기록해야합니다. WCF 보내기 및 받기 작업에 의존하는 대신 책갈피 자체를 관리하는 것이 가장 좋았고 워크 플로를 깨우려면 서비스 작업을 수행하여 깨우기 위해 별도의 폴링 프로세스를 사용하여 이벤트를 기록하는 정상적인 WCF 작업이어야합니다. 워크 플로우가 아직 올바른 상태가 아닌 경우 재 시도하십시오.

관련 문제