Consuming WCF Service in WPF Application

In this article, we will learn how to consume a WCF Service in WPF Application.

Background
 
In my previous article Creating WCF Service we learned how to create a simple WCF Service application. This article explains how to consume the WCF Service application in a WPF application.
 
And remember, I have written this article only focusing on beginners. So let us start step-by-step so beginners can understand it very easily.
 
Requirement
 
You need to keep a WCF service application in running mode so it can be accessible for use, so go to my article Creating WCF Service and create a WCF service and keep it in running mode. I hope you have done that.
 
Consuming
 
Many beginners are confused about what consuming means, but its very simple, it means to use the WCF Services in an application.
 
Example:
 
I have created a WCF Service and now I want to use it in a real requirement so I used it in a WPF application. In other words, I am consuming the WCF Service in a WPF application. Similarly, you can use the same WCF Service in a Windows, console application, Java and other applications.
 
I hope you understand the word "consuming".
 
So let us create the simple WPF application as:
  1. "Start" - "All Programs" - "Microsoft Visual Studio 2010".
  2. "File" - "New" - "Project..." then WPF  Application.
  3. Provide the project a name, such as "ConsumingWCFServiceInWPFApp" or another as you wish and specify the location. 
  4. Rename Form.cs to "AgeCalculator" or keep as it as you wish.
  5. Then drag three Text Boxes, one Button and one Label onto the "AgeCalculator" form.
Now the WPF Forms form will look as follows:
 
 
 
In the preceding source code, you have seen that I have taken three text boxes to get input from users because we know that our WCF  Service method created as in my article Creating WCF Service, takes the three input values day, month and year so I have taken the three text boxes and a button click event. We will call the WCF Service method and the output will be displayed in an alert Message box.
 
I hope you understand it.
 
Now your Solution Explorer of the WPF application will be as in the following:
 
 

Adding a WCF Service Reference in WPF Application 

 
The most important task when consuming a WCF Service in a WPF application is to add the WCF Service reference into the WPF application. So how to add it? Let us see the procedure.
 
1. Right-click on the WPF application and click on "Add Service Reference" as in the following:
 
AddServiRef.png 
 
Then after clicking on the preceding option, the following window will appear. Now this is a very important step, when adding the WCF service reference to the WPF  Application. Since you see the "URL" option in the following window, on that window we need to paste in or type in the WCF Service URL address.
 
 
 
So let us see the procedure again for adding the URL Reference in the preceding URL box.
  • Run the WCF Service we created in my article Creating WCF Service by clicking on F5 or whatever other option you are familiar with, it will then show the following WFC Client window and copy the address as:
 
 
Now you just need to copy the preceding URL that I circled in Red and paste it into the window URL option, as shown in the following and click on the Discover button, it will show the following output as:
 
 
 
After pasting the URL in the preceding window box, click on the Green right headed arrow button. It will discover the WCF Services available related to that URL address and you see that in that related URL a one WCF Service is found message is displayed along with the WCF Service name, "WCF Services" in the preceding right-hand side window.
  • WCF Service Reference Name
In the right-hand corner of the window you have seen the option for the Service reference name; the Service reference name is anything you wish and this name will be added to WPF Application as an allies name for the WCF service. In my article I have given the web reference name as "ServiceReference".
 
Then after adding the WCF Service reference in the WPF application the Solution Explorer will look as in the following:
 
 
In the preceding window, you have clearly seen that the WCF Service reference named "ServiceReference" is added into the WPF application. I hope you understand how to add the WCF Service reference into the WPF application.
 
Now after adding the WCF service Reference the following endpoints are by default added into the App.config file as: 
  1. <?xml version="1.0" encoding="utf-8" ?>    
  2. <configuration>    
  3.   <startup>    
  4.     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.3,Profile=Client" />    
  5.   </startup>    
  6.   <system.serviceModel>    
  7.     <bindings>    
  8.       <basicHttpBinding>    
  9.         <binding name="BasicHttpBinding_IService1" />    
  10.       </basicHttpBinding>    
  11.     </bindings>    
  12.     <client>    
  13.       <endpoint address="http://localhost:3901/Service1.svc" binding="basicHttpBinding"    
  14.           bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference.IService1"    
  15.           name="BasicHttpBinding_IService1" />    
  16.     </client>    
  17.   </system.serviceModel>    
  18. </configuration>  
Calling the WCF Service method from the WPF Application
 
We have added the WCF Service reference into our WPF application. Now the next thing is how to call the WCF Service method that we created in our WCF Service Application from the WPF Application.
 
The following is the procedure:
 
    1. Go to the Agecalculator Form of our WPF application and double-click on the button that we have placed on the Agecalculator form.
    2. Now write the following code in the button click to create the object of the WCF Service class as:
          ServiceReference.Service1Client age = new ServiceReference.Service1Client();
 
In the code above, I have created the object named "age" of the WCF Service client followed by the Web reference name ("ServiveReference") and WCF  Service client. I hope you understand how to create the object of the WCF Service client.
 
The entire code of the MainWindow.xaml.cs form will be as follows:
  1. using System;    
  2. using System.Collections.Generic;    
  3. using System.Linq;    
  4. using System.Text;    
  5. using System.Windows;    
  6. using System.Windows.Controls;    
  7. using System.Windows.Data;    
  8. using System.Windows.Documents;    
  9. using System.Windows.Input;    
  10. using System.Windows.Media;    
  11. using System.Windows.Media.Imaging;    
  12. using System.Windows.Navigation;    
  13. using System.Windows.Shapes;    
  14.     
  15. namespace ConsumingWCFServiceInWPFApp    
  16. {    
  17.     /// <summary>    
  18.     /// Interaction logic for MainWindow.xaml    
  19.     /// </summary>    
  20.     public partial class MainWindow : Window    
  21.     {    
  22.         public MainWindow()    
  23.         {    
  24.             InitializeComponent();    
  25.         }    
  26.     
  27.         private void button1_Click(object sender, RoutedEventArgs e)    
  28.         {    
  29.             int day, Month, Year, TotalDays;    
  30.     
  31.             //creating the object of WCF service client         
  32.             ServiceReference.Service1Client age = new ServiceReference.Service1Client();    
  33.     
  34.             //assigning the input values to the variables         
  35.             day = int.Parse(textBox1.Text);    
  36.             Month = int.Parse(textBox2.Text);    
  37.             Year = int.Parse(textBox3.Text);    
  38.     
  39.             //assigning the output value from service Response         
  40.             TotalDays = age.calculateDays(day, Month, Year);    
  41.     
  42.             //assigning the output value to the lable to show user         
  43.             MessageBox.Show("You are Currently " + Convert.ToString(TotalDays) + " days old");    
  44.         }    
  45.     }    
  46. }  
Code Explanation
 
In the code above, I first created the object as "age" of the WCF Service class followed by the WCF service reference name ("ServiceReference") and WCF Service Client("service1client").
 
Then I declared the three integer variables "day", "Month" and "Year" to store the values provided by the user as input from the Textbox1, Textbox2 and Textbox3.
 
Now, in the next step, as you know our WCF Service method takes three parameters, so I ed the three input parameters "day", "Month" and "Year" to the WCF Service method "calculateDays". Then I declared another integer variable, "TotalDays", to store the values returned by the WCF Service method "calculateDays". And finally I displayed the values returned by the WCF Service method "calculateDays" on the Message box using the variable "TotalDays" because, as you know, we have stored the returned values of the method into the variable TotalDays, so the final result will be stored in the variable TotalDays.
 
Now, run the WPF  application and provide the input of day, Month and Year. I will enter my Date of Birth and then I will click on the "Calculate" button, it will show the output as in the following:
 
 
 
In the preceding screen, you see that currently, I am 9212 days old, which means that for the last 9212 days, I have been on this earth.
 
Note:
  • For detailed code please download the Zip file attached above.
  • Also refer to my previous article about Creating WCF Service.
Summary
 
I hope that beginners as well as students understand the creation and consumption of a WCF Service Application in a WPF application using my two articles. If you have any suggestion regarding this article then please contact me.