Validating Schemas During Runtime

I recently came across an interesting scenario.  In my application, we are transforming multiple incoming messages to a a canonical format.  We then take the output and place it in the MessageBox for some other downstream subscriber to process. 

The Mapper did the transformation and created the output, however, based on the processing that we were doing during the mapping we found that some of the output messages we created did not always get created so that they would pass validation against the canonical schema.  Since we were doing our processing without the use of an Orchestration we did not have the ability to call a pipeline component to do the validation.   In addition, since the canonical message was used as input to the next set of processes we couldn't use a pipeline on the send side either.

What we needed was the ability to validate against the output schema without requiring an Orchestration.

By adding the following items to the BizTalk config file on all of our servers we were able to achieve this behavior.

 <configSections>
    <section
        name="xlangs"
        type="Microsoft.XLANGs.BizTalk.CrossProcess.XmlSerializationConfigurationSectionHandler, Microsoft.XLANGs.BizTalk.CrossProcess" />
</configSections>

<xlangs>
    <Configuration>
        <Debugging
            ValidateSchemas="true"
            ExtendedLogging="false"
        />
    </Configuration>
</xlangs>

Once you make this change make sure that you test all of the messages that you are processing in your environment.  There is a good chance that you could end up generating suspended messages for interchanges that were just working.

An prime example is if you are using SQL UpdateGrams as outlined in this previous post.

In my next post I will talk about how to get around this issue and another very curious and frustrating UpdateGram behavior.