BizTalk编排水合/补液问题

时间:2011-11-09 06:30:24

标签: .net biztalk orchestration

我有一个自定义接收管道,它将大文件分解为单个文件并将它们发送到消息框,业务流程将订阅这些消息并处理它们。在我的编排中,我有几个表达式形状,用于执行.net dll中的方法。我还在每一步都添加了日志记录。在任何给定时间,消息框可能充斥着数百条消息。我注意到有些消息是多次执行的。我加倍检查以确保我没有生成相同的多个消息。这让我相信它可能与水合作用有关。根据我的研究,当一个管弦乐队被水合时,它会持续存在于它所处的形状以及dll的状态。当它恢复时,它将恢复它的持久形状而不是从头开始。

有没有人见过这个问题?我可以做哪些测试/配置来验证/纠正这个问题?!

Here is part of the orchestrations

Here is the .net method that each of the Expression shape calls

非常感谢!

安琪

3 个答案:

答案 0 :(得分:1)

我认为你将水合作用与持久性点混淆。结合一些try \ catch逻辑的字母可以使编排从最新的持久点重新开始。您没有发布您的业务流程的完整图片,但我看到有一个范围。你有任何异常处理吗?

无论如何,编排都无法在没有显式发送形状的情况下将任何消息发布到消息框。另请查看是否安装了最新的SP和累积更新。

答案 1 :(得分:0)

有趣的问题:)

当业务流程闲置等待某事时,会发生水化和补液。因此,它不应该在处理文件的过程中发生。

  • 只是为了确保它不是数据质量问题,请检查输入文件中是否没有重复数据。
  • 您可以使用限制功能来确保一次只处理一个文件。这将删除一个潜在的错误来源。
  • 您可以做的另一件事是检查错误处理,第一次调用失败时是否有任何重试逻辑?如果Biztalk也在重试,那可以解释重复。

答案 2 :(得分:0)

在这种情况下,我会建议在您生成的每条新消息的管道阶段推广2个新的自定义属性 -

1)消息总数 2)当前消息号

通过这种方式,您可以在业务流程开始时或您决定的任何其他阶段跟踪,打印或保存每个消息编号,这样可以使工作更轻松。