WCF NetMSMQBinding Example

In this article, we will see how to expose NetMSMQBinding using WCF and how to use MSMQ with WCF Service Application.

MSMQ is Microsoft Message Queuing developed by Microsoft and deployed in windows operating system. MSMQ Queue ensures that reliable messaging between a client and a Windows Communication Foundation (WCF) service. So first we need to enable this feature in our operating system.
 

How to enable MSMQ

 
Press Window key + R, it will open Run window.
 
Enter ‘Control Panel’ and press ‘OK’ button, it will open control panel,
 
panel
 
Click on ‘Programs and Features’,
 
Programs and Features
 
From the left panel click on ‘Turn Windows features on or off’,
 
features
 
Select ‘Microsoft Message Queue (MSMQ) Server’ and all its child options.
 
Press ‘OK’ button, it will enable MSMQ for your operating system,
 
system
 

How to create a queue?

 
Press Window key + R, it will open Run window.
 
Enter ‘compmgmt.msc’ and press ‘OK’ button, it will open Computer Management window.
 
compmgmt
 
Under ‘Services and Applications’ expand ‘Message Queuing’.
 
Right click on ‘Private Queueus’, select ‘New’ and click on ‘Private Queue’.
 
Queue

Enter queue name, here I have entered ‘myqueue’, which we will use in our application later.
 
myqueue
 
You can find preceding queue under Private Queues.
 
Select ‘Private Queues’ and you will have list of all queues with details like Name, Label, Number of Messages and Number of Journal Messages.
 
Right click on ‘myqueue’ and select ‘Properties’,
 
Properties
 
Check ‘Journal Enabled’ checkbox,
 
Enabled 
 
Select the user and allow full permission for this queue,
 
permission
 

Verify Queue Service is started

 
After creating and setting permissions for the queue, we need to verify if queue service is running or not.
 
Press Window key + R, it will open Run window,
 
Enter ‘services.msc’ and press ‘OK’ button, it will open Services window.
 
Services
 
Change below services status to ‘Running’,
  • Message Queuing
  • Message Queuing Triggers
  • Net.Msmq Listener Adapter
Services
 
Now let us create Service Application
 

Create WCF Service Application

 
Open Visual Studio Editor,
 
Select ‘File’ menu, expand ‘New’ and click on ‘Projects’,
 
Select ‘WCF’ from left panel, select ‘WCF Service Application’,
 
Provide appropriate name, select the location and press ‘OK’ button,
 
button
 
Right click on interface IService1 and rename it to IQueueService,
 
IQueueService
 
Right click on Service1.svc and rename it to ‘QueueService.svc’,
 
QueueService
 
Right click on ‘QueueService.svc’ and click on ‘View Markup’,
 
Markup
 
Change the name of service to ‘WCFNetMSMQ.QueueService’,
  1. <%@ ServiceHost Language="C#" Debug="true" Service="WCFNetMSMQ.QueueService" CodeBehind="QueueService.svc.cs" %>  
Configure service and binding in the web.config under Service Model section. Under service we need to set endpoint with address, binding, contract and binding configuration,
  • Address – set queue address with net.msmq, use queuename which we have created previously in the last.
  • Binding – binding name which we will configure under bindings section.
  • Contract – Provide the interface name

  1. <services>  
  2.       <service name="WCFNetMSMQ.QueueService">  
  3.         <endpoint address="net.msmq://localhost/private/myqueue"   
  4.     binding="netMsmqBinding"   
  5.     bindingConfiguration="MsmqBindingConfig"   
  6.     contract="WCFNetMSMQ.IQueueService" />  
  7.       </service>  
  8.     </services>  

Configure binding under netMsmqBinding section. Set security as none.

  1. <bindings>  
  2.       <netMsmqBinding>  
  3.         <binding name="MsmqBindingConfig" exactlyOnce="false">  
  4.           <security mode="None" />  
  5.         </binding>  
  6.       </netMsmqBinding>  
  7.     </bindings>  

In the interface, we have operation contract namely ‘GetData’, Set ‘IsOneWay’ attribute as true and make return type as void.

  1. namespace WCFNetMSMQ  
  2. {  
  3.     [ServiceContract]  
  4.     public interface IQueueService  
  5.     {  
  6.         [OperationContract(IsOneWay=true)]  
  7.         void GetData(int value);  
  8.     }  
  9. }  

At the implementation part, trace the value which you are going to pass as parameter in the operation contract.

  1. namespace WCFNetMSMQ  
  2. {  
  3.     public class QueueService : IQueueService  
  4.     {  
  5.         public void GetData(int value)  
  6.         {  
  7.             System.Diagnostics.Trace.Write(string.Format("You entered: {0}", value));  
  8.         }  
  9.     }  
  10. }  

Now we are done with the service application having operation contract which accepts integer number and log it. In the next step we need to host our application in IIS.
 

Host WCF Service Application in IIS

 
Press Window key + R, it will open Run window.
 
Enter ‘inetmgr’ and press ‘OK’ button, it will open IIS window.
 
inetmgr
 
Expand the ‘Sites’ and you will find ‘Default Web Site’.
 
Right click on ‘Default Web Site’ and click on ‘Add Virtual Directory…’ in order to host the application,
 
application
 
Provide alias name and select our application physical path.
 
Press ‘OK’ button,
 
button
 
Right click on ‘WCFNetMSMQ’ and click on ‘Convert to Application’.
 
Convert
 
Click on ‘Select…’ button and select the application pool.
 
button
 
Select ‘.NET v4.5 Classic’ application pool and press ‘OK’ button.
 
button
 
In order to enable net.msmq protocol for this application, Right click on ‘WCFNetMSMQ’, expand ‘Manage Application’ and click on ‘Advanced Settings…’
 
Advanced
 
In Enabled Protocols add net.msmq along with http, It will enable net.msmq protocol for our application.
 
application
 
Now check whether configured site is working or not, Right click on ‘WCFNetMSMQ’, expand ‘Manage Application’ and click on ‘Browse’.
 
WCFNetMSMQ
 
In the browser we can see that service is running fine.
 
service
 
Now it’s time to create client application to consume service.
 

Create Client Application

 
Right click on Solution, expand ‘Add’ and click on ‘New Project…’.
 
new
 
Select ‘Visual C#’ from the left panel and select ‘Console Application’.
 
Provide appropriate name, select location and click on ‘OK’ button.
 
button
 
Add service reference in our client application, Right click on the project, expand ‘Add’ and click on ‘Service Reference…’,
 
Reference
 
Browse application from IIs and copy address from the address bar of the browser.
 
Paste same address in the ‘Add Service Reference’ window and press ‘Go’ Button.
 
Select ‘Queue Service’ from Services list.
 
Give the namespace and press ‘OK’ button.
 
namespace
 
Create an instance of QueueService client.
 
Call GetData operation contract using this instance,
  1. namespace WCFNetMSMQClient  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             QueueServiceReference.QueueServiceClient serviceClient = new QueueServiceReference.QueueServiceClient();  
  8.             serviceClient.GetData(5677);  
  9.         }  
  10.     }  
  11. }  
In order to set client application as startup project, right click on solution and click on ‘Properties’,
 
Properties
 
Select client application under ‘Single Startup Project’,
 
Project
 
Now run the project and check ‘myqueue’ queue.
 
You can see that one message is added in Journal Messages.
 
Messages
Select Journal Messages under myqueue and you can see the message details like label, priority, class, size and message id.

details
 
The main benefit of using queue mechanism is if the destination server is offline when the client sends a message, the message will be queued on the client until the server comes back online.
 
Read more articles on WCF: