I’m trying to setup msmq communication between two services on two separate machines within the same domain.
The machines are a Primary – Secondary situation.
I need to be able to Send and Purge from the Primary, and Receive from the Secondary
I can’t seem to find a setup that allows for this. I had one setup where the queues existed on the Secondary and the Primary could Send and the Secondary Receive BUT I could not purge from the Primary as I need to. I believe this was due to the queues being private and remote.
So I tried to flip the situation. I put the queues on the Primary, but then I couldn’t Send to the private local queue, so I made them public, and now I cant get the secondary to find the remote public queues.
if (!MessageQueue.Exists(queueName))
{
//log they don't exist and exit
throw new Exception("One or more of the required queues do not exist");
}
syncQ = new MessageQueue(queueName){Formatter = new XmlMessageFormatter(new Type[] {typeof (String)})};
if (machineState == MachineState.Primary)
{
syncQ.SetPermissions(ASPConfiguration.SyncUser, MessageQueueAccessRights.FullControl, AccessControlEntryType.Allow);
syncQ.Purge();
}
Primary = “.\nw”
Secondary = “FormatName:Direct=OS:CACTEST-WS-D\nw”
It doesn’t really matter if the queues are private or public to me just as long as I can do what I need.
Thanks for the Help.
In answer to your queries:
The initial set up you had, with the queue on secondary and primary sending to secondary is the correct configuration. Unsure why you are unable to purge secondary queues from primary. This is probably just a simple case of queue permissions. Try granting full control to the service account running on primary.
Again, unsure why this is. What errors do you receive? You can enable MSMQ tracing which will give you any transmission errors on both machines. Anyhow, this is not the correct configuration. It’s always best to send remote – receive local.
It’s always better to use the fully formatted msmq address in all situations to avoid addressing problems.
Well it really really does matter. Public queues are for enterprise-scale configurations with high volume, clustering and/or routing requirements, and anyhow you have to register them with active directory for them to even work. If you just want to send stuff from place to place ALWAYS use private queues.
My advice is to revert back to you initial setup and concentrate on getting the remote purge working.