Search code examples
biztalksubscriptionbiztalk-2013biztalk-orchestrations

Inexplicable routing failures for a direct-bound orchestration receiving XmlDocument


I've created an orchestration project with a property schema that contains a boolean property IsForFramework. My aim is to have an orchestration receive all messages of type System.Xml.XmlDocument that have the aformentioned property promoted with a value of true.

This is part of the property schema:

<xs:schema xmlns="http://Bakker.Framework.Orchestrations.Framework" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://Bakker.Framework.Orchestrations.Framework" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:annotation>
    <xs:appinfo>
      <b:schemaInfo schema_type="property" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" /> 
    </xs:appinfo>
  </xs:annotation>
  <xs:element name="IsForFramework" type="xs:boolean">
    <xs:annotation>
      <xs:appinfo>
        <b:fieldInfo propertyGuid="9358dd05-92f7-4c84-8dc1-8427bea580a6" propSchFieldBase="MessageContextPropertyBase" /> 
      </xs:appinfo>
    </xs:annotation>
  </xs:element>
</xs:schema>

The filter expression on the receive shape:

(Bakker.Framework.Orchestrations.IsForFramework == true)

The actual subscription queried from the BizTalk console:

http://Bakker.Framework.Orchestrations.Framework.IsForFramework == True

In the routing failure report context:

IsForFramework  True    Promoted    http://Bakker.Framework.Orchestrations.Framework

I can't, for the life of me, figure out what could possible be going wrong here.


Solution

  • After some discussion with MDeSchaepmeester it was determined that the underlying issue is that the Pipeline component that was promoting that context property and all the others it was promoting as strings, however this context property was defined as a Boolean in the Property Schema. From IBaseMessageContext.Promote Method "If the types of the promoted properties do not match the values specified in subscription, the comparison fails and the message subscription does not occur. "

    In this case you have two options

    1) Either make sure that the object is cast to Boolean when you are promoting it.

    2) Change the field type to String and change the filter expression to Bakker.Framework.Orchestrations.IsForFramework == "True" as suggested by Johns-305 (if they match type you won't get the error)