我有一个带有 Rcv 和发送管道的接收位置。两条管道都有一个自定义管道组件,该组件具有一些设计时属性。在发送管道中,如果我通过 BizTalk 管理控制台设置这些属性,则不会覆盖这些属性。但是,对于 Rcv 管道,同样的事情完全可以正常工作。我不能只在设计时设置属性,因为它是基于环境的值,需要在运行时设置。
2 回答
调试管道组件后,这是我发现的:
以下是管道组件的通常工作方式(http://geekswithblogs.net/cyoung/archive/2011/09/14/biztalk-server-2010-loading-properties-in-custom-pipeline-components.aspx)
当一个管道组件被执行时,管道组件的 Load 方法被调用了两次——第一次它加载了在管道上设置的所有设计时属性,当第二次调用 Load 方法时,它正在加载中设置的属性包BizTalk 管理控制台上的管道配置。 注意:只有被改变的属性才会被传递到这个属性包中。
当我们使用请求-响应接收位置时,接收管道上会遵循上述过程。但是,当从发送管道调用相同的管道组件时,加载方法只调用一次,因此没有设置任何属性正在设置 BizTalk 管理控制台,并且设计时属性不会被覆盖,从而导致问题。
我发现了一个类似的帖子,有类似的问题但没有答案(https://social.msdn.microsoft.com/Forums/en-US/c69b3af1-b208-4213-884e-a98b8583761c/strange-ipersistpropertybag-load-pattern?论坛=biztalkgeneral)
看起来这是设计使然,我将向 Microsoft 提出票证。
请确保在更改设计时间后重新启动主机。此外,您还可以设置一个断点来查看它的行为方式。