I have just started working up a sample application using Rhino
Service Bus. So far I am very impressed and have managed to get
everything working how I want with very little code and configuration.
Due to the type of system I am building I need to use Request/Reply
functionality for some things. The issue I have hit is that the reply
messages do not seem to be getting sent/recieved properly
The environment I am using is:
Rhino Service Bus v1.9.0.0 (although I have also tried 1.8)
Windows XP SP3 (MSMQ 3)
.Net 4.0
I have done some investigation and managed to get sending replies
working using a custom message IMessageModule to change the format of
the queue endpoint for the reply messages. However if someone could
explain what I am doing wrong or how I can figure out why this custom
code is needed it would be greatly appreciated.
When the message is recieved and I do a reply I can see that the queue
the reply will be sent to is of the format
'FORMATNAME:PRIVATE=81bf40d1-a337-4ee6-80e8-e198f6b5cdac\0000007b'. It
appears that when the message is sent it never makes it to this queue.
The way I managed to get this working was to change the queue the
reply message would be sent to so that it is of the format
'FormatName:DIRECT=OS:pc7262\private$\rhinotesting.testing1'. This
format change makes everything suddenly start working.
The message module I am having to use at the moment which fixes the
format is as follows:
public class ReplyQueueFixerMessageModule : IMessageModule
{
public void Init(ITransport transport, IServiceBus bus)
{
transport.MessageArrived += TransportOnMessageArrived;
}
public void Stop(ITransport transport, IServiceBus bus)
{
transport.MessageArrived -= TransportOnMessageArrived;
}
private static bool
TransportOnMessageArrived(CurrentMessageInformation
currentMessageInformation)
{
var sourceEndpoint = new Endpoint { Uri =
currentMessageInformation.Source };
var sourceQueuePath =
MsmqUtil.GetQueuePath(sourceEndpoint);
Uri sourceQueueUri;
using (var sourceMessageQueue = new
MessageQueue(sourceQueuePath.QueuePath))
{
sourceMessageQueue.Path =
string.Format("FormatName:DIRECT=OS:{0}\\{1}",
sourceMessageQueue.MachineName, sourceMessageQueue.QueueName);
sourceQueueUri =
MsmqUtil.GetQueueUri(sourceMessageQueue);
}
currentMessageInformation.Source = sourceQueueUri;
return false;
}
}
Is anyone able to suggest anything?
--
You received this message because you are subscribed to the Google Groups
"Rhino Tools Dev" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rhino-tools-dev?hl=en.