我有一个要求,我在哪里接收 txt 格式的基于位置的数据。
记录的前 2 个字符帮助我识别消息类型。
不,我有 40 多种消息类型,因此根据消息类型,我需要在接收管道中选择一个 xsd。
在运行时动态地在管道中获取 xsd 的最佳方法是什么?
我有一个要求,我在哪里接收 txt 格式的基于位置的数据。
记录的前 2 个字符帮助我识别消息类型。
不,我有 40 多种消息类型,因此根据消息类型,我需要在接收管道中选择一个 xsd。
在运行时动态地在管道中获取 xsd 的最佳方法是什么?
简答
您所追求的是创建一个自定义平面文件反汇编程序组件,该组件托管内置平面文件组件的实例,但也实现了IProbeMessage接口。
此接口允许 BizTalk 运行时在接收管道的 Disassemble 阶段中的多个组件之间进行选择。
您可以使用此自定义管道的多个版本,每个可用的平面文件 .XSD 架构一个版本,
不幸的是,这种解决方案很快就会成为维护的噩梦和性能问题。因此,我建议更进一步,构建一个这样的组件来动态选择要使用的平面文件模式。
为此,您需要构建一个插件系统来驱动 IProbeMessage 实现。您的插件的每个实例都将被配置为返回正确的平面文件 .XSD 模式,并在接收到的消息的输入流中检查格式是否匹配(可能基于前几个起始字节)。然后,您的自定义管道组件会将其 IProbeMessage 实现委托给各种插件,直到消息被识别并返回平面文件 .XSD 模式。
长答案
我可以在这里复制一个很长的答案,但是请看一下我在博客上写的以下系列文章。这些帖子将引导您完成自定义平面文件反汇编程序组件的实现,该组件使用我上面刚刚描述的确切技术动态解析要在运行时使用的平面文件 .XSD 模式。
请从这里开始:
有一个名为标签标识符的属性,但我怀疑它是否适用于您的场景。我要做的是在管道组件(反汇编阶段)的某处(数据库或 BRE)维护一个消息类型映射表戳记录的前 2 个字符,识别记录类型然后动态调用 FF 反汇编程序来反汇编信息。
你可以通过多种方式做到这一点。
在平面文件模式向导中使用标记标识符。定义一个两个字符的字段,设置类型,定义所有 40 种类型的消息结构。标签标识符将为您整理它们。
您可以将其作为多部分/封装的消息。第一部分是两个字符的标识符(消息类型),另一部分是消息的其余部分。使用平面文件管道将输入转换为消息。确保推广标签字段。然后,您可以使用带有标签的第一个消息部分来为每种类型选择正确的映射。如果您希望消息类型会被更改,那会好很多。