我有一个调用WCF服务的业务流程,这是一个双向请求/响应发送端口。像这样:
我一直试图找到一种方法让业务流程在发送形状之前保持状态。这是希望当有异常或端点关闭时,我可以恢复业务流程并让它尝试重新发送到端点。
我尝试在各种范围形状中包装发送/接收形状,以使其在发送形状上方保持不变,但无济于事。我上下阅读了Seroter的博客并尝试了他帖子中建议的所有内容:
http://seroter.wordpress.com/2007/01/02/orchestration-handling-of-suspended-messages/
例如,如果我取下端点并发送给它,我会得到一个
System.ServiceModel.ServiceActivationException:无法激活所请求的服务“https://my-service.svc”。 在管理恢复或终止之前,服务实例将保持暂停状态。 如果恢复,则实例将从其上一个持久状态继续,并可能重新抛出相同的意外异常。
这是可以预料的。正如它所说的那样,实例可能会在恢复时重新抛出同样的异常(无论我尝试过什么,都会这样做。)
我尝试过的事情:
错误1原子范围可能不包含或调用包含“使用”端口或服务链接上的请求响应操作的发送和相应接收的服务或范围
我不确定我能尝试的其他任何东西。基本上我要问的是,我怎样才能让业务流程在包含图像中看到的“conWrapper”(或者sendRCMR上方的任何地方......)的形状中持续存在?
答案 0 :(得分:4)
对于您所描述的内容,您实际上并不需要强制使用业务流程持久性。
如果端点关闭,或者适配器抛出任何其他错误,则Messaging实例将首先进入重试模式,然后暂停。这可能是您所包含的错误消息所指的“实例”。
端点再次运行后,您将恢复Messaging实例。
这是最常见的情况。
答案 1 :(得分:1)
将变量默认为false。
在发送/接收形状周围放置一个长运行范围,并在发送后将变量设置为true的表达式形状,包含所有异常的catch块(通常一个用于SOAP,一个用于System.Exception和一个General)发送警报然后在发送警报后暂停形状。
在示波器周围放置一个循环形状,而假,循环。
这将允许您恢复Orchestration,直到成功发送。