我正在尝试为BizTalk 2010创建一个自定义管道组件,将传入的平面文件拆分为多个较小的文件。我想将文件(比如大约30 000行)拆分成大约5000行或更少的文件(假设文件包含33 000行)。
我尝试使用自定义反汇编管道的Selvan's great example无效。
我使用了管道组件向导来生成管道骨架,但是对于如何继续编写反汇编阶段和拆分大文件的任何提示或指针都会非常满意。我几乎是这种编码的新手。
任何帮助?
答案 0 :(得分:3)
拆分消息只能通过反汇编程序组件完成。您可以创建一个继承自现有反汇编程序的类(如Selvin所做的那样),或者您可以指定要在管道组件向导中为接收管道类型创建“DisassemblingParser”组件类型。如果可以重用设计时属性但不必要,则继承很有用。
当它运行时,BizTalk通过“反汇编”方法传递消息。在此方法返回后,BizTalk开始轮询“GetNext”方法,直到它返回null以获取所有输出消息。因此,您需要设计的是如何在“反汇编”方法中准备消息,以便在BizTalk调用“GetNext”时返回所需的拆分消息。
塞万的方法是:正如他所指出的,使用XPathNavigator对于非常大的消息并不好。最好尽可能使用XmlReader,以便可以将消息作为流处理而不会完全加载到内存中。这可以通过将GetNext流程重新设计为:
来完成从你的描述中你可能想要输出平面文件而不将它们反汇编成XML,在这种情况下,我建议只在调用Disassemble时保存输入流,然后使用相同的GetNext设计但使用StreamReader代替一个XmlReader。