我正在尝试为 BizTalk 2010 创建一个自定义管道组件,它将传入的平面文件拆分为多个较小的文件。我想将文件(可以说大约 30 000 行)拆分为每个大约 5000 行或更少的文件(可以说文件是否包含 33 000 行)。
我曾尝试使用Selvan 的自定义反汇编管道的绝佳示例,但无济于事。
我已经使用管道组件向导来生成管道骨架,但是对于如何继续对反汇编阶段进行编码和拆分大文件的任何提示或指示,我将非常高兴。我几乎是这种编码的新手。
有什么帮助吗?
我正在尝试为 BizTalk 2010 创建一个自定义管道组件,它将传入的平面文件拆分为多个较小的文件。我想将文件(可以说大约 30 000 行)拆分为每个大约 5000 行或更少的文件(可以说文件是否包含 33 000 行)。
我曾尝试使用Selvan 的自定义反汇编管道的绝佳示例,但无济于事。
我已经使用管道组件向导来生成管道骨架,但是对于如何继续对反汇编阶段进行编码和拆分大文件的任何提示或指示,我将非常高兴。我几乎是这种编码的新手。
有什么帮助吗?
拆分消息只能通过反汇编组件来完成。您可以创建一个继承自现有反汇编程序的类(就像 Selvin 所做的那样),或者您可以指定要在管道组件向导中为接收管道类型创建一个“DisassembleParser”组件类型。如果您可以重用设计时属性但不是必需的,那么继承很有用。
当它运行时,BizTalk 通过“反汇编”方法传递消息。此方法返回后,BizTalk 开始轮询“GetNext”方法,直到它返回 null 以获取所有输出消息。所以你需要设计的是如何在“Disassemble”方法中准备消息,以便在BizTalk调用“GetNext”时返回所需的拆分消息。
塞尔文的做法是:
正如他所指出的,使用 XPathNavigator 不适用于非常大的消息。尽可能使用 XmlReader 总是最好的,这样消息可以作为流处理,而不会完全加载到内存中。这可以通过将 GetNext 流程重新设计为:
根据您的描述,听起来您可能想要输出平面文件而不将它们反汇编成 XML,在这种情况下,我建议在调用 Disassemble 时只保存输入流,然后使用相同的 GetNext 设计,但使用 StreamReader 而不是 XmlReader .