BizTalk Q & A: Process / Debatch Multiple Flat Files in a Single Receive Pipeline

Wednesday, November 28, 2012

Hi all, 
I have several different flat files I have to consume.  I would like to be able to drop them all into one receive location and use one flat file pipeline to disassemble them.  I created a receive pipeline and put in several flat file disassembler components, configuring each for one of the appropriate document schema.  I assumed one could do this from the language in BTS 2006 R2 help for the SchemaResolverComponent.  It reads: 
The flat file disassembler component normally requires you to define a parsing schema at design time. So if you expect to receive different flat file documents on the same receive location, you typically include several flat file disassemblers in the receive pipeline, one for each schema. At run time, the correct disassembler component is selected using a pipeline probing mechanism. However, this approach is expensive if you have many flat file schemas because probing for every corresponding disassembler component degrades pipeline performance.
 After deploying my pipeline, however, I got errors like the one below. 
Event Type: Error
Event Source: BizTalk Server 2006
Event Category: BizTalk Server 2006 
Event ID: 5753
Date:  7/12/2008
Time:  22:32:27
User:  N/A
A message received by adapter "FILE" on receive location "Receive Location_EMDEON.RPT4" with URI "D:\HIPAA_HOME\EMDEON_RPT4\*.*" is suspended. 
 Error details: An output message of the component "Flat file disassembler" in receive pipeline "HMOS.BizTalk.Pipelines.FF_ReceivePipeline.FlatFileReceivePipeline, HMOS.BizTalk.Pipelines.FF_ReceivePipeline, Version=, Culture=neutral, PublicKeyToken=27ef7ae893a91467" is suspended due to the following error: 
     Unexpected data found while looking for:
The current definition being parsed is Root. The stream offset where the error occured is 268. The line number where the error occured is 7. The column where the error occured is 12. .
 The sequence number of the suspended message is 1.  
 MessageId:  {F7B3BE2F-5504-40AE-8973-A08F073D6131}
 InstanceID: {3BB9BC41-2394-4C1B-A9F2-9DD97D7A7641}
For more information, see Help and Support Center at

Evidently, the "pipeline probing mechanism" mentioned in BTS help is not part of the pipeline already?  How do I enable this one pipeline with multiple flat file dis-assembler components to be able to resolve which dis-assembler component to use for a given message?  (The SchemaResolverComponent in the SDK is one obvious answer, but I was really hoping to avoid it, if possible).
I just tried to do the mimic you did
I created 3 – flat file schema  (delimited) with one receive pipeline with 3-dis-assemblers
It works fine with no extra configuration , the BTS will successfully recognize all message types
So I do not think your problem related to enable probing “it is already their”

But I notice the following points in this scenario
Lets say I have 3-flat file schema's (f1 , f2 , f3)
Where f3 instances also valid on f1 schema 
Pipeline dis-assembler process the list of dis-assembler in the same order you apply it on the design time

I created 2-pipeline with the following orders
Pipeline 1 (f1 , f2 , f3) this pipeline consider the f3 files as f1 files 
Pipeline 2 (f3, f2 , f1) this pipeline process all the messages successfully

No comments:

Post a Comment

Post Your Comment...