2011-05-11 74 views
0

處理多個推送通知,我得到以下異常和WF中止:WCF WF服務相關的異常

「的相關處理一些情況下是不正確消費」。沒有關於這個錯誤的任何文檔,afai可以看到。

完整信息: System.ServiceModel.FaultException`1 [System.ServiceModel.ExceptionDetail]:相關處理程序上的某些上下文沒有正確使用。確保處理程序已由運行時正確初始化,並且工作流具有發送,然後是Receive或ReceiveReply活動。 (Fault Detail等於ExceptionDetail,可能由IncludeExceptionDetailInFaults = true創建,其值爲: System.InvalidOperationException:相關處理程序的某些上下文未被正確使用。確保處理程序已由運行時和工作流正確初始化有一個發送,然後是接收或ReceiveReply活動。在System.Runtime.AsyncResult.End (IAsyncResult結果) at System.ServiceModel.Activities.Dispatcher.ControlOperationInvoker.ControlOperationAsyncResult.End(Object [] & outputs,IAsyncResult result ) 在System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeEnd(MessageRpc & RPC) 在System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage7(MessageRpc & RP c) 在System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet))。

回答

0

好的我想通了。長話短說,發生什麼事情是一種競爭狀態,其中具有查詢關聯和請求 - 應答關聯的接收通過坐在do-while循環中處理具有相同關聯ID的多個消息。其目的是處理具有相同ID的許多消息中的第一個,丟棄其餘消息。第一條消息通過爲等待序列(隨後發送回覆)引發一個併發進程開始,而隨後的消息被丟棄(立即發送「發送應答」)。

問題是第二條消息在第一個SendReply通過之前進入。這導致相關初始化程序覆蓋第一個需要使用的請求響應相關處理程序。這似乎是導致上述例外的原因。我通過使SendReply立即發生,暫時解決了這個問題,但是當我有時間時,我會考慮使用多個Correlation Handler來處理Receive Reply。 (基於某些消息ID的處理程序字典?)