Now I have a new super PC to play with, I can try out testing that wasn't practical on my old test machine. For example, seeing what really happens when you have more than ten client machines trying to access a queue on a remote workstation machine.

This limitation (10 connections) is discussed in this KB article:

183666 INFO: CAL and Connection Usage by MSMQ

MSMQ Independent Client (IDC)

An IDC has a limit of ten concurrent sessions (MSMQ and remote-read combined) with other IDCs. The IDCs do not count the outbound sessions with MSMQ Servers. The MSMQ Servers will count the IDC connection as noted above.

There is an additional caveat for Windows NT Workstation IDCs: Windows NT Workstation imposes a total limit of ten inbound connections to the computer. Therefore if other computers have non-MSMQ inbound connections to the workstation computer, the workstation limit will be reached before the MSMQ limit.
   

Now I haven't got round to learning how to use HyperV and frankly VirtualPC has all I need for this test. So I'm using the internal build of Windows Vista that came with the machine from the IT department as VirtualPC doesn't work on server products {mutter, mutter}. I've installed Windows Server 2008 on the box (dual boot) so I can migrate to HyperV when the time is right.

Here are a dozen Windows XP clients:

  • 1 to host the queue
  • 10 to make remote connections
  • 1 more to exceed the connection limit on the host

 

Ten machines are running a simple app that opens a queue on the host workstation and waits for messages. NETSTAT shows that the host (MSMQXP1) has opened two ports (2103 and 2105) to handle the resulting RPC traffic from each client (10.0.0.2 through 10.0.0.11).

On the 11th client, running the application returns a slightly misleading error:

 

According to Message Queuing Error and Information Codes:

MQ_ERROR_DEPEND_WKS_LICENSE_OVERFLOW (0xC00E0067)
Returned when the number of dependent clients served by a Message Queuing server reaches its upper limit.

Now we are not using any dependent clients or a server - they are all independent clients on workstations. What is happening, though, is that both dependent clients and remote queue access use the RPC protocol but there is only one error code generated when an RPC connection is rejected.

Interestingly, I can't seem to hit the additional caveat documented above in KB 183666. If I open up a file on the host machine instead from one of the connected clients, the 12th machine can open up the remote queue for a total of 11 connections:

Obviously there is more to this than meets the eye and more research is required. 

[[Edited 14th October, 2009]]

Here's a screenshot of outgoing queues on a Windows XP MSMQ client to demonstrate being able to send to only 10 other Windows XP MSMQ clients.