The purpose of this tutorial is to explain the basics of WCF in a manner as simple as possible. This tutorial explains WCF Services and why we use a WCF Service and how to create a basic WCF Service and consume it and and many more things related to WCF.
In the tutorial we will talk about the following points:
- What a Service is
- What a WCF Service is
- Why to use a WCF Service
- Advantages of WCF over a Web Service
- Components of Web Services
- WCF Service class
- WCF Service host
- WCF Service endpoints with address, binding and contract
- WCF Service file Structure
- Features of WCF
- Interoperability
- Service Orientation
- Multiple Message Patterns
- Security
- Transactions
- AJAX and REST Support
- Creating a Web Service
1. What a Service is
A Service is a program or application that is used by other applications. In other words, a service that is directly consumed by the end user to do their work and is something they ask for and recognize. or. It's just self-contained business functionality.
Service-Oriented Architecture (SOA)
SOA is an architectural approach to the distributed systems to integrate flexibility with interoperability. The following figure illustrates a basic Service-Oriented Architecture.
The preceding figure shows a service consumer sending a service request message to a service provider. The service provider returns a response message to the service consumer. The request and response connections are defined in some way that is understandable to both the service consumer and service provider. The service consumer will not have a direct interaction with the service provider, instead the messages are formed out of the value of the input parameters, return parameters and the data are formatted by the SOAP. The service response will be in XML, which is understandable to both the service consumer and service provider.
2. What a WCF Service is
Windows Communication Foundation (WCF) was introduced in .NET 3.0. This is a great network distributed system developed by Microsoft for communication between applications. WCF is meant for designing and deploying distributed applications under a Service-Oriented Architecture (SOA) implementation. From MSDN: Windows Communication Foundation is a part of the .NET Framework that provides a unified programming model for rapidly building service-oriented applications that communicate across the web and the enterprise. WCF is a combined feature of Web Service, Remoting, MSMQ and COM+. The following figure illustrates WCF architecture.
3. Why use WCF Service?
WCF is a replacement for all earlier web service technologies from Microsoft. It also does much more than what is traditionally considered as web services. The major limitation with web services is that the communication can happen over HTTP only. In WCF you can access using HTTP, TCP, Named pipes, MSMQ, P2P and so on. A second limitation with web services is that it provides simplex communication and there is no way to have half duplex or full duplex communication using web services and a third limitation with web services is that it can be hosted in IIS. In WCF, the service can be hosted in IIS, Windows Activation Service, self-hosted, or a Windows Service.
We will also learn some great features of WCF Service later in the article.
4. Components of WCF Services
There are the following three main components of a WCF application.
- WCF Service class: A WCF Service class implements some service as a set of methods.
- WCF Service host: WCF supports four types of hosting, IIS, Windows Process Activation Services (WAS), self-hosting and Windows Services.
- WCF Service endpoints: All communication with a Windows Communication Foundation (WCF) service occurs through the endpoints of the service. Usually the name of the Interface will be specified in the contract, so the client application will be aware of the operations that are exposed to the client.
Each endpoint contains:
- Address: An address that indicates where to find the service.
- Binding: A binding that specifies how a client can communicate with the service.
- Contract: A Contract that specifies what can the service do for us
5. Advantage of WCF over Web Service
The following are the advantages of a WCF over a Web Service.
- WCF supports more of the WS-* standards than Web Services.
- Web services provide simplex communication. In WCF we can also use half duplex or full duplex communication.
- WCF supports multiple bindings, such as HTTP, WSHTTP, TCP and MSMQ. ASP.NET Web Services has only HTTP.
- It can be hosted on IIS, WAS, self hosted or Windows Services
- WCF Services have instance management.
- WCF Services can control concurrency.
6. WCF Service File Structure
Visual Studio includes WCF Service by default to use. You need to open Visual Studio and select WCF Service. It will look such as in the following:
You will get the following 3 files in the solution.
- IService.cs
- Service.svc
1. The IService1.cs file contains the two sections:
- OperationContract
- DataContract
The OperationContract section is used to add service operations and DataContract is used to add types to service operations.
2. Service.svc.cs File
In this file we define the definition of the function.
7. WCF Service Important Features
WCF includes the following set of features.
- Interoperability
WCF is interoperable with other services when compared to .Net Remoting where the client and service must be .Net.
- Multiple Message Patterns
The Message Exchange Pattern describes how the client and server should exchange messages. There are three types of message exchange patterns.
- Request-Response
- One Way
- Duplex
- Service Orientation
Service-Oriented Architecture (SOA) is the reliance on Web services to send and receive data.
- Security
Messages can be encrypted to protect privacy and you can require users to authenticate themselves before being allowed to receive messages. Security can be implemented using well-known standards such as SSL or WS-SecureConversation.
- Durable Messages
A durable message is one that is never lost due to a disruption in the communication. You can also create a durable message using the Windows Workflow Foundation (WF).
- Transactions
WCF also supports transactions using one of the following three transaction models:
- WS-AtomicTtransactions
- APIs in the System.Transactions namespace
- Microsoft Distributed Transaction Coordinator
- AJAX and REST Support
WCF can be configured to process plain XML data that is not wrapped in a SOAP envelope. WCF can also be extended to support specific XML formats, such as ATOM (a popular RSS standard) and even non-XML formats, such as JavaScript Object Notation (JSON).
8. Creating a Web Service
Now we create a service to insert data into a database using a WCF Service, we must do the following 3 things:
- Create Database Table
- Create WCF Service
- Create web application
In the first step we will create a table in SQL Server, then we create a simple function to insert data into the database using a WCF Service. In a web application, add a reference of the service and the data to be inserted will be sent to the web services function that will be inserted into the database table. Let's have a look at a practical example. The example application is developed in Visual Studio 2010 and SQL Server 2008.
Step 1: Creating Database Table
- Database name: Registration
- Database table name: RegistrationTable
RegistrationTable Table
- CREATE TABLE [dbo].[RegistrationTable]
- (
- [UserName] [varchar](100) NOT NULL,
- [Password] [varchar](20) NOT NULL,
- [Country] [varchar](100) NOT NULL,
- [Email] [varchar](200) NOT NULL
- )
Step 2: Creating WCF Service
Now you need to create a WCF Service:
- Go to Visual Studio 2010
- New-> Select a project
Now click on the project and select WCF Service Application and provide a name for the service:
Now click on the Ok Button. Then you will get the following 3 files in the solution.
- IService.cs
- Service.svc
- Service.svc.cs
The following image shows the files:
Iservice1.cs File
Now we create a function in the OperationContract section of the Iservice1.cs file:
- public interface IService1
- {
- [OperationContract]
- string InsertUserDetails(UserDetails userInfo);
- }
Now add types to service operations in the DataContract section:
- public class UserDetails
- {
string username = string.Empty;
- string password = string.Empty;
- string country = string.Empty;
- string email = string.Empty;
- [DataMember]
- public string UserName
- {
- get { return username; }
- set { username = value; }
- }
- [DataMember]
- public string Password
- {
- get { return password; }
- set { password = value; }
- }
- [DataMember]
- public string Country
- {
- get { return country; }
- set { country = value; }
- }
- [DataMember]
- public string Email
- {
-
- get { return email; }
- set { email = value; }
- }
Service.svc.cs File
In this file we define the definition of the function InsertUserDetails(UserDetails userInfo).
And replace the code with the following:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Runtime.Serialization;
- using System.ServiceModel;
- using System.ServiceModel.Web;
- using System.Text;
- using System.Data.SqlClient;
- using System.Data;
-
- namespace WCFServiceForInsert
- {
-
- public class Service1 : IService1
- {
- public string InsertUserDetails(UserDetails userInfo)
- {
- string Message;
- SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Rajesh;User ID=sa;Password=wintellect");
- con.Open();
- SqlCommand cmd = new SqlCommand("insert into RegistrationTable(UserName,Password,Country,Email) values(@UserName,@Password,@Country,@Email)", con);
- cmd.Parameters.AddWithValue("@UserName", userInfo.UserName);
- cmd.Parameters.AddWithValue("@Password", userInfo.Password);
- cmd.Parameters.AddWithValue("@Country", userInfo.Country);
- cmd.Parameters.AddWithValue("@Email", userInfo.Email);
- int result = cmd.ExecuteNonQuery();
- if (result == 1)
- {
- Message = userInfo.UserName + " Details inserted successfully";
- }
- else
- {
- Message = userInfo.UserName + " Details not inserted successfully";
- }
- con.Close();
- return Message;
- }
- }
- }
Testing the Service
Press F5 to run the service. A WCF Test Client form will be displayed and it will load the service.
Now double-click the InserUserDetails() method under IService1. The InserUserDetails tab will be displayed.
The service was added successfully.
Now open the service in the browser.
Now right-click on the service1.vcs-> open in the browser:
Now copy the URL.
http://localhost:2268/Service1.svc
Step 3: Create web application (Accessing the Service)
Now, you need to create a web site.
- Go to Visual Studio 2010
- New-> Select a website application
- Click OK
Now add a new page to the website:
- Go to the Solution Explorer
- Right-click on the Project name
- Select add new item
- Add new web page and provide it a name
- Click OK
Add the service reference in web application
Now add the service reference.
When we click on the add the service reference the following window will be opened:
Now paste the preceding URL in the address and click on the go Button.
Click on the OK Button. Now the reference has been added to the solution.
Now create a new website and drag and drop controls onto the aspx page. The aspx code is the following:
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Registration.aspx.cs" Inherits="Registration" %>
-
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head runat="server">
- <title></title>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- <table width="84%" cellpadding="0" cellspacing="0" style="border: solid 1px #3366CC;">
- <tr>
- <td colspan="4" style="height: 30px; background-color: #f5712b;">
- <span class="TextTitle" style="color: #FFFFFF;">Registration Form</span>
- </td>
- </tr>
- <tr>
- <td height="20px" colspan="0">
- </td>
- </tr>
- <tr>
- <td width="50%" valign="top">
- <table id="TableLogin" class="HomePageControlBGLightGray" cellpadding="4" cellspacing="4"
- runat="server" width="100%">
- <tr>
- <td colspan="3" align="center">
- <asp:Label ID="LabelMessage" ForeColor="Red" runat="server" EnableViewState="False"
- Visible="False"></asp:Label><br>
- </td>
- </tr>
- <tr style="font-weight: normal; color: #000000">
- <td align="right">
- <span>UserName:</span>;
- </td>
- <td align="left" style="padding-left: 10px;">
- <asp:TextBox ID="TextBoxUserName" runat="server" CssClass="textbox" Width="262px"
- MaxLength="50" Height="34px"></asp:TextBox>
- </td>
- </tr>
- <tr>
- <td align="right">
- <span class="TextTitle">Password:</span>
- </td>
- <td align="left" style="padding-left: 10px;">
- <asp:TextBox ID="TextBoxPassword" runat="server" CssClass="textbox" Width="261px"
- MaxLength="50" TextMode="Password" Height="34px"></asp:TextBox>
- <br />
- </td>
- </tr>
- <tr>
- <td align="right">
- <span class="TextTitle">Country:</span>
- </td>
- <td align="left" style="padding-left: 10px;">
- <asp:TextBox ID="TextBoxCountry" runat="server" CssClass="textbox" Width="258px"
- MaxLength="50" Height="34px"></asp:TextBox>
- <br />
- </td>
- </tr>
- <tr>
- <td align="right">
- <span class="TextTitle">Email:</span>
- </td>
- <td align="left" style="padding-left: 10px;">
- <asp:TextBox ID="TextBoxEmail" runat="server" CssClass="textbox" Width="258px"
- MaxLength="50" Height="34px"></asp:TextBox>
- <br />
- </td>
- </tr>
- <tr>
- <td align="right">
- </td>
- <td align="left" style="padding-left: 10px;">
- <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" Width="87px" />
- <br />
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </div>
- </form>
- </body>
- </html>
The form looks like:
Double-click the button and add the following code to the Click event handler:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using ServiceReference1;
-
- public partial class Registration : System.Web.UI.Page
- {
- ServiceReference1.Service1Client objServiceClientobjService = new ServiceReference1.Service1Client();
- protected void Page_Load(object sender, EventArgs e)
- {
-
- }
- protected void Button1_Click(object sender, EventArgs e)
- {
- UserDetails userInfo = new UserDetails();
- userInfo.UserName = TextBoxUserName.Text;
- userInfo.Password = TextBoxPassword.Text;
- userInfo.Country = TextBoxCountry.Text;
- userInfo.Email = TextBoxEmail.Text;
- string result = objServiceClientobjService.InsertUserDetails(userInfo);
- LabelMessage.Text = result;
- }
- }
Now run the application.
Press CTRL+F5 to run the project and enter the UserName, Password, country and Email and click on the button.
Data has been inserted into the SQL Server database table and check it.