They are quite different bindings (even if they share a large implementation base in MsmqBindingBase ), and NetMsmqBinding can only be used with other .NET WCF clients. MsmqIntegrationBinding intended to be used when your application should interact with old applications (in any language) that use MSMQ for communication from MSDN:
This [MsmqIntegrationBinding] binding can be used to enable WCF applications to send and receive messages to and from existing MSMQ applications that use COM, native C ++ APIs, or types defined in the System.Messaging namespace.
The most obvious differences between these relationships can be summarized in that the MsmqIntegrationBinding is missing:
- Security support is pretty trivial (what about security channels?).
- The contract interface is more limited (because it should interact with non-.NET applications).
- The syntax for the addresses is different from other WCF bindings (look at
EndpointAddress in the examples on MSDN). - You cannot use all message functions (e.g. encoding).
See this blog post about MsmqIntegrationBinding in WCF for more on this.
Then when to use them? I think that any new WCF application should always use NetMsmqBinding , keeping MsmqIntegrationBinding only for compatibility with existing applications. From MSDN:
NetMsmqBinding provides queue support using Message Queuing (MSMQ) as a transport and allows you to support loosely coupled applications, fault tolerance, load balancing, and disconnected operations.
source share