Endpoint references and WS-ReliableMessaging

Recently, I’ve been weighing the work required to update the MSMQ transport to support endpoint references.  At first, my sense was that the majority of the folks using Web services today weren’t ready for the increased burden that endpoint references create.

Don’t get me wrong, you can do Web services without knowing really anything about them in WSE 2.0, as we’ll take a URL and turn it into an endpoint reference for you.  But as you’ll see in a moment, you may really care a bit more about them when you start talking WS-ReliableMessaging.

WS-ReliableMessaging is built around the concept of the endpoint reference.  If you haven’t taken the time, I suggest you read through the specification just to familiarize yourself with their use.  With this in mind, it’s all the more important that the MSMQ transport is endpoint reference aware when delivering messages to channels in order to be forward thinking about WS-ReliableMessaging.

Comments (2)

  1. We’re actively working on a SoapMessageQueueTransport implementation ourselves and solved the EndPointReference.Via by converting a MessageQueue path to a Uri. So basically, you get "soap.msmq://<machine-id>[/private$]/<queuename>" as the MessageQueue Uri (a.k.a. Via). We also keep track of listeners (== MessageQueue which we already listen on) by converting back and forth between the Uri and MessageQueue path (you could also use format name, but this is not gonna survive MessageQueue recreation).

    Also, if you want to support transactions use BeginPeek instead of BeginReceive. In the OnPeekCompleted event, use ((MessageQueue)sender).ReceiveById(e.Message.Id).