Accessing Remote Queues with MSMQ

80 views
Skip to first unread message

Travis

unread,
Nov 4, 2009, 10:35:08 AM11/4/09
to masstransit-discuss
Our setup is something like...

Coordination (Runtime Services) on app1, msmq://app1/mt_subscriptions

From my local machine I can directly write a message a msmq://app1/mt_subscriptiosn
as FormatName:DIRECT=OS:app1\private$\mt_subscriptions

static void Main(string[] args)
{
using (var queue = new MessageQueue
(@"FormatName:DIRECT=OS:app1\private$\mt_subscriptions"))
{
var message = new Message
{
Body = DateTime.Now,
Priority = MessagePriority.Normal,
Label = "Test Message! Boyah!"
};

if (!queue.CanWrite)
throw new Exception("Cannot write queue: " +
queue.FormatName);

queue.Send(message);

Console.ReadLine();
}
}

However, when using SystemView program, I can see it sending to the
right queue (_address.FormatName = FormatName:DIRECT=OS:app1\private$
\mt_subscriptions)

(in AbstractMsmqTransport.cs)
public virtual void Send(Action<Message> sender)
{
if (_disposed) throw NewDisposedException();

using (var message = new Message())
{
sender(message);

try
{
using (var queue = new MessageQueue(_address.FormatName,
QueueAccessMode.Send))
{
SendMessage(queue, message);

if (_messageLog.IsDebugEnabled)
_messageLog.DebugFormat("SEND:{0}:{1}", Address, message.Id);
}
}
catch (MessageQueueException ex)
{
HandleMessageQueueException(ex, 2.Seconds());
}
}
}

But the message never appears.

So...

I made a minor change in TransactionalMsmqTransport.cs and it works.

protected override void SendMessage(MessageQueue queue, Message
message)
{
var tt = (Transaction.Current != null) ?
MessageQueueTransactionType.Automatic :
MessageQueueTransactionType.Single;

queue.Send(message);//, tt); removed the tt (which was .Single)
}

The queue is not set up as transactional, is that the issue?

-Travis
Reply all
Reply to author
Forward
0 new messages