[rabbitmq-discuss] RabbitMQ Windows 8 client incompatibility

Tim Watson tim at rabbitmq.com
Fri Apr 5 09:03:30 BST 2013

Hi Christopher,

On 4 Apr 2013, at 16:33, Christopher Carver wrote:

> This is a stab in the dark in finding a solution. I am currently using a consulting service to create a Windows 8 Live Tile application that will act as a RabbitMQ consumer retrieving messages from a RabbitMQ broker. However I got an odd response from the engineers of the consulting services.
> He said:
> The difficult is to convert the RabbitMQ .net client. it does not support .NetCore directly. NetCore is for the windows store app (which supports the mobile devices like Windows RT). The tiles feature is part of windows store app. in .net 4.5, the original .net becomes .NetCore and .NetFramework (see http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/aecf4846-6eca-444a-beb7-d4ba9d6ad754)
> I want to believe the engineer, but I'm taken a back that a .net driver for RabbitMQ is not usable within a Windows 8 application. Is the engineer telling the truth? 

The issue is that the .NET client is compiled against the full version of the .NET Framework class library (and runtime) and that isn't compatible with Metro applications (according to the thread you've posted). The .NETCore identifier is used for the new .NET framework for Windows Store applications. Windows Store is different from the desktop .NET 4.5 framework, which was released at the same time. In order to include a .NET assembly as a reference in your project, it has to target the same framework/assembly for binary compatibility. In order words *all assemblies in the project need to target the same framework* - and the RabbitMQ .NET client is built (and published on our website and via NuGet) against the desktop version of the framework.  

In theory, it might be possible to recompile the .NET client against .NetCore instead, although I'm not sure if our MSBuild configuration will support doing that without modification. It may be easier to try opening up the .NET client library in Visual Studio and recompiling with the correct "Client Profile" set up.

You should be aware however, that there's no guarantee that compiling the RabbitMQ client against another framework runtime/class-library will work either. It is possible that the RabbitMQ .NET client uses APIs that only exist in the desktop version of the framework, however I cannot confirm this and you'll have to get your engineers to try it and see.

If that approach doesn't work, another solution that you might consider is hosting a web service that uses the RabbitMQ .NET framework WCF bindings to expose RabbitMQ as a WFC service, and then consume that via the regular WCF bindings, which I assume are included in .NETCore (although I haven't checked).  
> I will posting this on a Windows 8 development forum too. But I still wanted to cover my basis from both sides of the aisle. 
Please confirm what I've said above with the guys on that forum, and if it's accurate please get them to point us to any documentation covering incompatibilities between the various different 'flavours' of .NET. I'd be interested in seeing that, as supporting as many of these as possible would make sense for us, as long as it doesn't require totally rewriting the client! :)

Kind regards,

Tim Watson
Staff Engineer
RabbitMQ (SpringSource/VMWare)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/attachments/20130405/2924c7b5/attachment.htm>

More information about the rabbitmq-discuss mailing list