我有一个调用 WCF 服务的编排,它是一个双向请求/响应发送端口。像这样:
我一直在尝试找出一种方法让编排在发送形状之前保持状态。这是希望当出现异常或端点关闭时,我可以恢复编排并让它尝试重新发送到端点。
我曾尝试将发送/接收形状包裹在各种范围形状中,以使其保持在发送形状之上,但无济于事。我上下阅读了 Seroter 的博客,并尝试了他帖子中建议的所有内容:
http://seroter.wordpress.com/2007/01/02/orchestration-handling-of-suspended-messages/
例如,如果我取下端点并发送给它,我会得到一个
System.ServiceModel.ServiceActivationException: The requested service, 'https://my-service.svc' could not be activated. The service instance will remain suspended until administratively resumed or terminated. If resumed the instance will continue from its last persisted state and may re-throw the same unexpected exception.
这是意料之中的。正如它所说,该实例在恢复时可能会重新抛出相同的异常(无论我尝试了什么,它都会这样做)。
我尝试过的事情:
- 将 Send 形状包装在原子范围内,但在抛出异常后它仍然会被挂起。
- 在原子范围内包装发送和接收形状,但在编译时出现错误:
Error 1 an atomic scope may not contain or call a service or scope that contains both the send and the corresponding receive of a requestresponse operation on a 'uses' port or servicelink
- 尝试将 Send 和 Receive 形状包装在长时间运行范围内并捕获异常,然后使用暂停形状 - 但这只会导致脱水实例等待 WCF 服务的响应。
我不确定还有什么可以尝试的。基本上我要问的是,如何让编排在包含的图像中看到的“conWrapper”(或 sendRCMR 上方的任何位置...)形状持续存在?
最佳答案
对于您所描述的内容,您实际上并不需要强制执行编排持久性。
如果端点关闭,或者适配器抛出任何其他错误,消息实例将首先进入重试模式,然后挂起。这可能是您包含的错误消息所指的“实例”。
一旦端点再次运行,您将恢复 Messaging 实例。
这是最常见的情况。
关于wcf - 如何在发送形状之前保留 BizTalk 业务流程 - 用于重新发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20749838/