WCF Best Practice #6: Know the limits of reliable Messaging with WCF
In addition to the WCF Best Practices that are already around. WCF Best Practice #6: Know the limits of reliable Messaging with WCF.
WCF has an implementation of WS-ReliableMessaging. Due to its name it’s often thrown in as the solution to all reliability problems. But messages still can get lost with this mechanism if for example the service is shutdown, IIS reset, etc, etc.
Clemens Vasters describes it here. The summary:
"If you need end-to-end durable reliable messaging with full support for transactional I/O you need an infrastructure that's in control of both ends of the communication path and as it happens, such an infrastructure is part of the Windows operating system family. If these are your requirements, your WCF binding of choice is likely the NetMsmqBinding. If you are mostly worried about not losing messages under less-than-optimal networking conditions or require session support – which are the more common use cases – the reliable session support in WCF is the right choice and a great leap forward when compared to the previous Web Services stacks."
Be aware though that MSMQ messages are limited to 4MB in size.
Reliable messaging also isn’t very handy with load balancers:
http://blogs.msdn.com/drnick/archive/2007/07/13/sticky-sessions.aspx
Sticky sessions can be become troublesome in intranet scenarios.