2

有没有办法使用 .NET 代码在 BizTalk 编排流中添加持久点?我已经搜索和搜索,但找不到任何有用的东西。请帮忙,有人吗?

4

1 回答 1

3

将代码包装在原子范围内将在遇到范围后立即创建一个持久点。

这就是为什么通常认为使用原子作用域是不好的做法的原因,除非你真的需要它们,因为持久性是一种成本并引入了复杂性。

在理想的世界中,您的编排将被设计为幂等的,因此不需要持久性 - 您的编排被加载一次,然后保留在内存中直到它完成(裸露脱水)。

如果编排失败,它应该可以作为一个整体重放。然而,这并不总是可能的,因此需要持久性点。

但我想这是不好的做法..?

我会将在长期运行的过程中创建持久性要求归类为有时不可避免的不良设计。

想象一下,作为业务流程的一部分,您必须调用具有非幂等 API 的外部资源。一个很好的例子是一个期望调用以特定顺序到达的 Web 服务。在这种情况下,您必须在服务调用之前和之后保留业务流程的状态,否则如果您的流程发生故障然后恢复,您可能会再次使用陈旧或不正确的调用数据再次调用服务。如果服务调用本身失败,您还将被迫编写复杂的补偿逻辑来确定再次调用服务是否安全。

于 2016-02-19T09:56:46.313 回答