locked
Multiple disassembler components in Disassemble stage of Receive pipeline RRS feed

  • Question

  • I have created a custom disassembler component which can disassemble the message from the xpath you provide.

    I wanted to create a pipeline where I can use this component twice in the disassemble stage.

    For this, I got a thread where the solution to this was written:

    https://social.msdn.microsoft.com/Forums/en-US/1276d54f-2a60-434b-85e0-a81611a72855/can-you-have-more-than-one-component-in-pipelines-disassemble-stage?forum=biztalkgeneral

    The solution basically says, I can change the execution mode of Disassemble stage from FirstMatch to All, and I can keep multiple disassemblers in the receive pipeline.

    But, the solution does not work, only 1st disassembler component executes and the second one is by passed.

    Please let me know if there is any other solution to this.

    Friday, September 23, 2016 10:21 AM

Answers

  • I tried Alastair Grant's solution as well and it did not work.  I suspect the First Match is simple baked into the Pipeline Manager.  The described option is undocumented anyway.

    However, if you really need to Disassemble twice, and yes there are legitimate reasons for this, you can execute the second Disassembler in a different Receive Pipeline by Routing the first output to a Send Port that uses a Loopback Adapter.  This actually give you a bit more control over the process.

    Loopback Adapter: TwoConnect Loopback Adapter

    • Proposed as answer by Angie Xu Friday, September 30, 2016 6:34 AM
    • Marked as answer by Angie Xu Friday, September 30, 2016 6:34 AM
    • Unmarked as answer by Nikhil4usinha Wednesday, October 12, 2016 2:12 PM
    • Marked as answer by Nikhil4usinha Wednesday, October 12, 2016 2:12 PM
    Saturday, September 24, 2016 4:03 PM
    Moderator

All replies

  • Hi Nikhil,

    What is your scanario here and why you want to execute dissembler twice?


    in the dissemble Stage you can use 0-255 components but all other will be by pass after one will get execute.

    This stage is used for components that parse or disassemble the message.
    • The components within this stage probe the message to see if the format of the message is recognized. Based on the recognition of the format, one of the components disassembles the message.
    • If this stage contains more than one component, only the first component that recognizes the message format is run. If none of the components within the stage recognize the message format, the message processing fails.
    • This stage should include any custom components that implement special behavior to disassemble the message contents.
    • This stage can contain between zero and 255 components. If there are no components in the stage, the message is passed through

    You can go through this link :

    https://msdn.microsoft.com/en-us/library/ee268059(v=bts.10).aspx

    Regards

    Abhay Giri

    mark this as Answered if this reply provided your answer

     
    Friday, September 23, 2016 10:32 AM
  • It is expected behavior of Disassemble stage, only the component which detects the message first will execute and rest will be surpassed.

    But the question is, if you already did the processing on the message (with some logic in component) then how would it be applicable for second time? And what exactly you  are trying to do?

    Probably using Orchestration for xpath manipulation should be good option.

    --------

    Maheshkumar S Tiwari|User Page|Blog|Sending file as attachment using BizTalk Orchestration


    Friday, September 23, 2016 10:40 AM
  • What you are getting is the expected behavior by BizTalk,

    In case the component disassembles the incoming message all other disassembling component are skipped...why do feel to disassemble message multiple times..may share the scenario with us and we can provide some more in sights on that

    Regards


    Mandar Dharmadhikari

    Friday, September 23, 2016 11:18 AM
    Moderator
  • I tried Alastair Grant's solution as well and it did not work.  I suspect the First Match is simple baked into the Pipeline Manager.  The described option is undocumented anyway.

    However, if you really need to Disassemble twice, and yes there are legitimate reasons for this, you can execute the second Disassembler in a different Receive Pipeline by Routing the first output to a Send Port that uses a Loopback Adapter.  This actually give you a bit more control over the process.

    Loopback Adapter: TwoConnect Loopback Adapter

    • Proposed as answer by Angie Xu Friday, September 30, 2016 6:34 AM
    • Marked as answer by Angie Xu Friday, September 30, 2016 6:34 AM
    • Unmarked as answer by Nikhil4usinha Wednesday, October 12, 2016 2:12 PM
    • Marked as answer by Nikhil4usinha Wednesday, October 12, 2016 2:12 PM
    Saturday, September 24, 2016 4:03 PM
    Moderator
  • Hi Nikhil,

    Additional to what John has suggested, you can also introduce orchestration, or if you already have one for the process, if can take in the original message and execute multiple pipelines within orch one after another.


    Pi_xel_xar

    Blog: My Blog

    BizTalkApplicationDeploymentTool: BizTalk Application Deployment Tool

    LinkedIn: LinkedIn


    Saturday, September 24, 2016 7:57 PM
    Answerer
  • I have a hierarchical message where a repeating node is under a repeating parent node.

    Now I want to first debatch at the parent node level, and then debatch each debatched messages at the repeating node level.

    This is why I wanted to use 2 custom disassemblers where first one will disassemble at the parent node level and 2nd one will disassemble at the repeating node level.

    Wednesday, October 12, 2016 2:06 PM
  • I have a hierarchical message where a repeating node is under a repeating parent node.

    Now I want to first debatch at the parent node level, and then debatch each debatched messages at the repeating node level.

    This is why I wanted to use 2 custom disassemblers where first one will disassemble at the parent node level and 2nd one will disassemble at the repeating node level.

    Wednesday, October 12, 2016 2:07 PM
  • I have a hierarchical message where a repeating node is under a repeating parent node.

    Now I want to first debatch at the parent node level, and then debatch each debatched messages at the repeating node level.

    This is why I wanted to use 2 custom disassemblers where first one will disassemble at the parent node level and 2nd one will disassemble at the repeating node level.

    Wednesday, October 12, 2016 2:07 PM
  • If the incoming document is Xml, the XmlDisassembler will do this automatically.

    It can 'chain' Envelope Schemas so if the first debatched child resolves to an Envelope Schema, it will then try to debatch that.

    It's like: Envelope Schema -> Envelope Schema -> Message Schema

    Wednesday, October 12, 2016 2:11 PM
    Moderator
  • But what if the schema is not an envelope schema and I am using Custom component for disassembling the message based on the xpath of the repeating node.
    Wednesday, October 12, 2016 2:33 PM
  • Well, if you've implanted a custom Disassmebler, then your custom Disassembler has to handle this situation internally.

    If the content is Xml, you can execute XmlDasm internally.

    Wednesday, October 12, 2016 3:05 PM
    Moderator