3

我有一个调用 WCF 服务的编排,这是一个 2 向请求/响应发送端口。像这样:

编排

我一直在想办法让编排在发送形状之前保持在状态。这是希望当出现异常或端点关闭时,我可以恢复编排并让它尝试重新发送到端点。

我尝试将发送/接收形状包装在各种范围形状中,以使其保持在发送形状之上,但无济于事。我已经阅读了 Seroter 的博客,并尝试了他帖子中建议的所有内容:

http://seroter.wordpress.com/2007/01/02/orchestration-handling-of-suspended-messages/

例如,如果我关闭端点并发送给它,我会得到一个

System.ServiceModel.ServiceActivationException:无法激活请求的服务“ https://my-service.svc ”。服务实例将保持挂起状态,直到以管理方式恢复或终止。如果恢复,实例将从其上次持久状态继续,并可能重新引发相同的意外异常。

这是可以预料的。正如它所说,实例在恢复时可能会重新抛出相同的异常(无论我尝试过什么,它都会发生)。

我尝试过的事情:

  • 将 Send 形状包装在原子范围内,但在引发异常后仍会暂停。
  • 在原子范围内包装 Send 和 Receive 形状,但在编译时出错:

    错误 1 ​​原子范围可能不包含或调用包含“使用”端口或服务链接上请求响应操作的发送和相应接收的服务或范围

  • 尝试将 Send 和 Receive 形状包装在 Long-Running 范围内并捕获异常,然后使用挂起形状 - 但这只会导致脱水的实例正在等待 WCF 服务的响应。

我不确定我还能尝试什么。基本上我要问的是,我怎样才能让编排在包含的图像中看到的“conWrapper”(或 sendRCMR 上方的任何位置......)形状上持续存在?

4

2 回答 2

4

对于您所描述的内容,您实际上并不需要强制执行编排持久性。

如果端点关闭,或者适配器抛出任何其他错误,消息传递实例将首先进入重试模式,然后挂起。这可能是您包含的错误消息所指的“实例”。

一旦端点再次运行,您将恢复消息传递实例。

这是最常见的情况。

于 2013-12-26T14:45:47.260 回答
1

有一个变量默认为假。

在发送/接收形状周围放置一个长时间运行的范围,以及在发送后将变量设置为 true 的表达式形状,具有所有异常的捕获块(通常一个用于 SOAP,一个用于 System.Exception 和一个 General)以发送一个警报,然后在发送警报后具有暂停形状。

在范围周围放一个循环形状,而假的,循环。

这将允许您恢复编排,直到它成功发送。

于 2013-12-25T07:16:36.240 回答