I was stalking the MSMQ topic on Twitter and found someone bemoaning the absence of MSMQ in Silverlight. This did cause me to reassess my (very limited) concept of what Silverlight actually was - a system for generating pretty graphical apps that competes with Adobe's Flash. Basically I found I had no idea what Silverlight could, or could not, do.

According to the Microsoft site, "Silverlight helps you create rich web applications that run on Mac OS, Windows, and Linux. Welcome to a new level of engaging, rich, safe, secure, and scalable cross-platform experience." and this helps to explain why MSMQ is not currently supported.

Bryant Likes on the Silverlight forum explained why quite succinctly:

MSMQ has a couple of issues that I think will prevent it from being accessible by Silverlight:

  1. MSMQ is Windows-only; Microsoft is trying to make Silverlight cross-platform.
  2. MSMQ takes quite a bit of code on the client. Silverlight is a 4MB download and I don't think there are plans to grow that size.
  3. Giving a browser application access to a service like MSMQ would also be a security risk and since users aren't very familiar with MSMQ (or at least not as familiar with them as files) it would be very hard to get them to understand what it is doing. Kind of hard to say "this application is trying to access the queue MyComputer\SomeMessageQueue, do you want to allow this access?".

You could try to implement something MSMQ-like using isolated storage by queuing up messages going out and storing incoming messages there before processing them. Not a perfect solution, but it works today.

I would add a 4th - On Windows, MSMQ is not installed by default and is not available on Windows XP Home.

I have, though, passed the suggestion onto the product groups to see what they think.