1

我有 2 个自定义操作在这样的同一服务中一个接一个地执行

<actions mep="RequestResponse">
    <action name="ActionA" class="ClassA"/>
    <action name="ActionB" class="ClassB"/>
</actions>

假设 ActionA 对收到的 msg 进行了一些验证。如果验证发现 msg 无效,您如何向调用者发送有关该失败的响应?

现在,在我的操作中,我在 ActionA 的消息中设置了响应,并在其中放置了一个标记,表明我在 ActionA 中发现了一个错误,并且 ActionB 在执行其代码之前检查了该标记。我发现这种方法很有用,但很累,因为我的所有操作都必须从以下内容开始:

if (!markIspressent) {
    //Code goes here
}
return message.

我尝试在 ActionA 处设置响应消息并返回null以停止管道,但这不起作用。我还尝试了另一种我发现的投掷方法,ActionProcessingFaultException(message,"SomeTextGoesInHere")但这也不起作用。我对第二个问题的主要问题是 ESB 尝试重新处理引发该异常的 msg,并且在 ESB 放弃并将其发回之前,我看不到我设置到消息中的响应。但这种放弃最多需要 60 秒。

所以我的问题是如何在到达服务管道的末端之前向调用者发送响应消息。

谢谢

4

1 回答 1

3

提前完成管道的选项是: - return null; - 将服务分成三份(注意服务 1 是 OneWay,并根据您的操作结果路由到相应的服务)服务 1

<actions mep="OneWay">
    <action name="ActionA" class="ClassA"/>
    <action name="ActionA1" class="RouteBasedOnMsgContentTo(Service 2 or Service 3)"/>
</actions>

服务 2

<actions mep="RequestResponse">
    <action name="ActionB" class="ClassB"/>
</actions>

服务 3

<actions mep="RequestResponse">
    <action name="ActionC" class="ClassC-SimplyRespondsTheProblem"/>
</actions>
于 2012-06-08T12:48:13.813 回答