Максимальное значение происходит для удаления сообщений из входящего сообщения, а не для определения количества записей в выходном сообщении.Таким образом, вам придется создать собственный компонент дизассемблера плоских файлов, который читает входящий файл в пакетном режиме: считывает некоторые данные из потока (например, на основе количества строк) и передает их.
Кажется, чтовозникла проблема с тем, как метод GetNext считывает данные в больших файлах, что может привести к чрезмерному использованию памяти (у меня был сценарий, когда это происходило с файлом размером 10 МБ, содержащим около 800 000 позиций).Таким образом, все, что нужно сделать, это заново реализовать метод GetNext, чтобы удовлетворить ваш сценарий вывода определенного количества записей на сообщение и в то же время повысить эффективность обработки больших сообщений.
Вот частьисходный метод GetNext (важные части) декомпилировал код:
private IBaseMessage GetNext2(IPipelineContext pc)
{
...
baseMessage = this.CreateOutputMessage(pc);
...
baseMessage = this.CreateOutputMessage(pc);
...
return baseMessage;
}
В конечном итоге метод «CreateOutputMessage» вызывает метод «CreateNonrecoverableOutputMessage», в котором проблема возникает при обработке больших сообщений:
internal IBaseMessage CreateNonrecoverableOutputMessage(IPipelineContext pc)
{
...
XmlReader reader1 = this.m_docspec.Parse(this.m_inputData);
...
return message;
}
Была создана переменная "m_inputData", вызывающая делегат "FFDasmComp.DataReaderFunction", переданный в конструктор компонента дизассемблера плоских файлов.Возможно, вы сможете контролировать чтение данных, передав собственный метод чтения данных в конструктор вашей пользовательской реализации компонента дизассемблера плоских файлов.
Есть пара статей, но приведенные реализацииимеет ряд серьезных предостережений при работе с сообщениями большего размера:
Отладка больших сообщений и расширение компонента дизассемблера конвейера плоского файла в Biztalk 2006
Обработка плоского файла 10 МБ в BizTalk