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

Biztalk 如何在运行时在管道中动态选择XSD?,biztalk,pipeline,biztalk-2010,Biztalk,Pipeline,Biztalk 2010,我有一个要求,在那里我接收txt格式的基于位置的数据 记录的前两个字符帮助我识别消息类型 不,我有40+个消息类型,因此根据消息类型,我需要在接收管道中获取xsd 运行时在管道中动态获取xsd的最佳方法是什么?根据您的问题,我将构建模式,以利用每条记录中的标记标识符,以便根据您提到的前两个字符使用记录模式。主架构中可能包含所有记录类型架构变体。看一看。有一个名为标记标识符的属性,但我怀疑它是否适用于您的场景。我要做的是在管道组件(反汇编阶段)的某个位置(数据库或BRE)维护一个消息类型映射表,插

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

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

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


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

根据您的问题,我将构建模式,以利用每条记录中的标记标识符,以便根据您提到的前两个字符使用记录模式。主架构中可能包含所有记录类型架构变体。看一看。

有一个名为标记标识符的属性,但我怀疑它是否适用于您的场景。我要做的是在管道组件(反汇编阶段)的某个位置(数据库或BRE)维护一个消息类型映射表,插入记录的前两个字符,识别记录类型,然后动态调用FF反汇编程序来反汇编消息。

您可以通过多种方法来完成此操作

在平面文件架构向导中使用标记标识符。定义两个字符的字段,设置类型,并定义所有40种类型的消息结构。标记标识符将为您分类


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

简短回答

您所追求的是创建一个自定义组件,该组件承载内置平面文件组件的实例,但也实现了接口

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

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

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

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

长答案

我可以在这里复制一个很长的答案,但是请看一下我写的以下系列文章。这些文章将引导您完成一个自定义平面文件反汇编程序组件的实现,该组件使用我刚才描述的确切技术,动态解析运行时要使用的平面文件.XSD模式

请从这里开始: