'Message order' and WCF-Custom Transport Properties dialog box RRS feed

  • Question

  • Created our own custom WCF adapter with WCF LOB Adapter SDK.

    Want it to support FIFO.

    Saw on the WCF-Custom Transport Properties dialog box, in the "Other" tab the frame "Message order" and within it:

    "Preserve message order when processing messages. (For use with

    NetMsmq binding.)

    [] Ordered processing"


    This is really, really, really a very bad presentation /wording to developers / users of WCF LOB Adapter SDK.


    Can someone from WCF LOB Adapter SDK please document (here and/or in a blog posting) steps that a WCF LOB Adapter SDK developer needs to take in order for an adapter to be able to run / function correctly with that 'Ordered processing' checkbox checked?


    If one has one's WCF LOB Adapter (that implements IInboundHandler) installed in BTS 2006 R2 receive location and have aforementioned checkbox checked, one gets something like:


    The Messaging Engine failed to add a receive location "xxxxxx"
           with URL "myscheme://fubar/?blah=xxxxxx" to the adapter "WCF-Custom".
    Reason: "System.InvalidOperationException: TransactedBatchingBehavior validation failed.
    The service endpoint cannot be started.

    TransactedBatchingBehavior requires a binding that contains a binding element ITransactedBindingElement that returns true for
    ITransactedBindingElement.TransactedReceiveEnabled. If you are using NetMsmqBinding or MsmqIntegrationBinding make sure that ExactlyOnce is set to true.
       at System.ServiceModel.Description.TransactedBatchingBehavior.System.ServiceModel.Description.IEndpointBehavior.Validate(ServiceEndpoint serviceEndpoint)
       at System.ServiceModel.Description.ServiceEndpoint.Validate(Boolean runOperationValidators, Boolean isForService)
       at System.ServiceModel.Description.DispatcherBuilder.ValidateDescription(ServiceDescription description, ServiceHostBase serviceHost)
       at System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost)
       at System.ServiceModel.ServiceHostBase.InitializeRuntime()
       at Microsoft.BizTalk.Adapter.Wcf.Runtime.BtsServiceHostBase.InitializeRuntime()
       at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout)
       at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
       at System.ServiceModel.Channels.CommunicationObject.Open()
       at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfReceiveEndpoint.Enable()
       at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfReceiveEndpoint..ctor(BizTalkEndpointContext endpointContext, IBTTransportProxy transportProxy, ControlledTermination control)
       at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfReceiver`2.AddReceiveEndpoint(String url, IPropertyBag adapterConfig, IPropertyBag bizTalkConfig)".

    Tuesday, April 1, 2008 4:24 AM



    I'm not quite familiar with WCF LOB SDK, but it looks like you're using WCF-Custom adapter with your custom binding element. By looking at the error, you either need to implement ITransactedbindingElement interface and return true from its TransactedReceiveEnabled method, or use NetMsmqBinding element and set its exactlyone property to true.


    Hope this helps,


    Monday, June 2, 2008 4:47 AM