如何使用代码添加自定义 BizTalk 持久点?

How to add custom BizTalk persistent points using code?

是否有任何方法可以使用 .NET 代码在 BizTalk Orchestration 流中添加持久点?我搜索了又搜索,但没有找到任何有用的信息。请帮忙,有人吗?

将您的代码包装在原子作用域中将在遇到该作用域时立即创建一个持久点。

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

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

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

but I guess it's bad practice..?

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

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