如何在运行时动态选择管道中的 XSD



我有一个要求,在我接收txt格式的基于位置的数据。

记录的前 2 个字符可帮助我识别消息类型。

不,我有 40+ 消息类型,因此根据消息类型,我需要在接收管道中选取 xsd。

在运行时动态选取管道中的 xsd 的最佳方法是什么?

简答题

您要做的是创建自定义平面文件拆装器组件,该组件托管内置平面文件组件的实例,但也实现 IProbeMessage 接口。

此接口允许 BizTalk 运行时在接收管道的"反汇编"阶段的多个组件之间进行选择。

您可以使用此自定义管道的多个版本,每个版本对应一个可用的平面文件。XSD 模式,

不幸的是,此解决方案将很快成为维护噩梦和性能问题。因此,我建议更进一步,构建一个动态选择要使用的平面文件架构的单个此类组件。

为此,您需要构建一个插件系统来驱动 IProbeMessage 实现。插件的每个实例都将配置为返回正确的平面文件。XSD 架构,并在收到的消息的输入流中检查格式是否匹配(可能基于前几个起始字节)。然后,您的自定义管道组件会依次将其 IProbeMessage 实现委托给各种插件,直到识别消息和平面文件。返回 XSD 架构。

长答案

我可以在这里复制一个很长的答案,但请看一下我在博客上写的以下系列文章。这些帖子将引导您完成自定义平面文件反汇编器组件的实现,该组件可动态解析哪个平面文件。在运行时使用的 XSD 架构,使用我上面刚刚描述的确切技术。

请从这里开始:

  • 自定义平面文件架构解析程序和拆装器管道组件
  • 向 .Net 组件添加安装和卸载逻辑
  • 自定义架构解析反汇编器实现
  • 使用自定义模式对话框编辑设计时属性

根据您的问题,我将以某种方式构建您的架构,以利用每条记录中的标签标识符,以便根据您指出的前两个字符使用记录架构。 主架构中可以包含所有记录类型架构变体。 看看这里和这里。

有一个名为标签标识符的属性,但我怀疑它是否适用于您的场景。我要做的是,我将在管道组件(反汇编阶段)的某个地方(数据库或 BRE)编写一个消息类型映射表,戳记录的前 2 个字符,识别记录类型,然后动态调用 FF 拆装器来反汇编消息。

你可以用

很多方法做到这一点。

使用平面文件架构向导中的标记标识符。定义一个双字符字段,设置类型,并定义所有 40 种类型的消息结构。标签标识符将为您整理它们。

您可以将其作为多部分/信封消息执行。第一部分是两个字符的标识符(消息类型),另一部分是消息的其余部分。使用平面文件管道将输入转换为消息。确保升级标记字段。然后,您可以使用带有标记的第一个消息部分为每种类型选择正确的映射。如果您希望更改消息类型,那就更好了。

最新更新