我有一个管理人员通过电话联系的工作流程。它旨在调用一系列数字,直到应答或达到到期时间。我在工作时间完成后完成时收到以下错误,但是正在通话中。因此,挂断消息将发送到已完成的工作流并失败。
如何在收到挂断消息时检测到工作流程已完成?
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)
答案 0 :(得分:0)
这是Workflow Services的一个非常基本的问题 - 无法保证您的工作流处于接收传入消息的正确状态,如果不是,则会出现模糊错误。工作流程已经准备就绪的条件太多,例如工作流程因某些可以重试的暂时性错误而出现故障。为了使您的代码健壮,您几乎总是需要验证传入调用以检查工作流正在等待该事件,并可能记录事件,以便在工作流进入该状态时对其执行操作。我发现最好自己管理书签而不是依赖于WCF发送和接收活动,并且让服务操作唤醒工作流只是记录事件的正常WCF操作,需要单独的轮询过程来尝试唤醒工作流程,如果工作流程尚未处于正确状态,则重试。