是否使用BizTalk平面文件反汇编程序将传入文件拆分为大于1条记录?

是否使用BizTalk平面文件反汇编程序将传入文件拆分为大于1条记录?,biztalk,flat-file,Biztalk,Flat File,我有一个传入的平面文件,我希望接收该文件并将其分解为离散的块,以便进行更高效的处理。这里有一篇关于如何使用平面文件反汇编程序帮助BT2010的不错的示例文章: 但是,在文章底部附近,您会看到他们将正文记录的最大发生次数设置为1,并将文件整齐地拆分为每条记录一条消息。但是,我想把我的文件分成1000条记录的块。但是,当尝试将max occurs设置为1000时,管道将一直正常读取,直到最后一个块不是偶数1000个记录,然后我们会得到意外的流结束错误 有没有办法让库存FF反汇编程序在这里运行良好,

我有一个传入的平面文件,我希望接收该文件并将其分解为离散的块,以便进行更高效的处理。这里有一篇关于如何使用平面文件反汇编程序帮助BT2010的不错的示例文章:

但是,在文章底部附近,您会看到他们将正文记录的最大发生次数设置为1,并将文件整齐地拆分为每条记录一条消息。但是,我想把我的文件分成1000条记录的块。但是,当尝试将max occurs设置为1000时,管道将一直正常读取,直到最后一个块不是偶数1000个记录,然后我们会得到意外的流结束错误

有没有办法让库存FF反汇编程序在这里运行良好,或者我们需要编写自定义反汇编程序?或者有没有其他好的方法来获得我们想要的分块行为


谢谢。

最大发生次数用于将消息与传入消息断开,而不是确定输出消息中应有多少条记录。因此,您必须创建一个自定义平面文件反汇编程序组件,该组件以批处理方式读取传入文件:从流中读取一些数据(例如,基于行数)并将其传递

GetNext方法如何读取较大文件中的数据似乎存在问题,这可能会导致内存过度使用(我有一个场景,其中一个10Mb的文件包含大约800000行项目)。因此,我们需要做的就是重新实现GetNext方法,以满足每个消息输出一定数量记录的场景,同时在处理较大消息时更高效

以下是原始GetNext(重要部分)方法反编译代码的一部分:

private IBaseMessage GetNext2(IPipelineContext pc)
    {
      ...
            baseMessage = this.CreateOutputMessage(pc);
      ...
          baseMessage = this.CreateOutputMessage(pc);
        ...
        return baseMessage;
    }
“CreateOutputMessage”方法最终调用“CreateUnrecoverableOutputMessage”方法,这就是处理较大消息时出现问题的地方:

internal IBaseMessage CreateNonrecoverableOutputMessage(IPipelineContext pc)
{
  ...
  XmlReader reader1 = this.m_docspec.Parse(this.m_inputData);
  ...
  return message;
}
“m_inputData”变量是通过调用传递到平面文件反汇编程序组件的构造函数中的“FFDasmComp.DataReaderFunction”委托创建的。您可以通过将自己的数据读取器方法传递到平面文件反汇编程序组件的自定义实现的构造函数中来控制数据的读取

下面有几篇文章,但在处理较大的消息时,给定的实现有一些严重的警告:

internal IBaseMessage CreateNonrecoverableOutputMessage(IPipelineContext pc)
{
  ...
  XmlReader reader1 = this.m_docspec.Parse(this.m_inputData);
  ...
  return message;
}