ObjectiveThis article provides a step to step explanation of how
to create a REST based service and how to consume that in a managed client.
Step 1Create a new project as
WCF Service
application type.
Step
2Delete all the default code from IService.cs and
Service.svc.cs
Now open Web.Config file and delete the highlighted code
below below in Visual Studio 2010. In other words delete all endpoints for
existing service.
If you are
using VS2010 then delete the code below from Web.Config
Step
3Right click on Service.svc and open
View markup.

In
Markup of RestService.cs, add the following code there
Factory="System.ServiceModel.Activation.WebServiceHostFactory"
So
after adding code the markup would look like
Markup of
RestService.cs
Step
4Add following referencesto the WCF Service Application project, if
you are using
VS2010
Microsoft.Http.dll
Microsoft.Http.Extension.dll
System.ServiceModel.Web.dll
Step 5Add a new project as of type class library and
give it name
UtilityClasses.

Add
a class Number to this class library.
Number.csusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace UtilityClasses
{
[Serializable]
public class NumberService
{
public int Number1 { get; set; }
public int Number2 { get; set; }
}
}Step 6Define the Service Contract as below,
IService1.cs using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.ServiceModel.Web;
using UtilityClasses;
namespace WcfService3
{
[ServiceContract]
public interface IService1
{
[OperationContract(Name="AddParameter")]
[WebInvoke(UriTemplate = "/",Method="POST")]
int Add(NumberService n1);
[OperationContract(Name = "Add")]
[WebGet(UriTemplate = "/")]
int Add();
}
}This code is used to construct URI for
REST service.

Method
parameter says what type of HTTP request; this URI is going to entertain. In
this case it is Http POST.
UriTemplate parameter says, what would be URI
for this particular method. In this case it is one back-slash, which means it is
the root URI of this service.
So, to invoke this method add (), the URI
address would be
http://localhost:3602/RestService.svc/Where 3602 is port
number of web server, where this service is running.
Let, if the above
code is modified as

Then
it would be invoked as
http://localhost:3602/RestService.svc/ADD/MyAddStep
7Now we need to implement the service
Service1.svc.csusing System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using UtilityClasses;
namespace WcfService3
{
public class Service1 : IService1
{
public int res = 100;
public int Add(NumberService n1)
{
res = Convert.ToInt32(n1.Number1) + Convert.ToInt32(n1.Number2);
return res;
}
public int Add()
{
return res;
}
}
}Step
8Test the Service in Browser
- Build the Service
- Right click on Service1.svc and select view in browser.

Output
100 is returned in the browser by the service. It is because, below service
method. URI of below GET method is mapped to root of the URI. And this method is
returning 100.

Step
9
Consume the service Add new console project in solution and
give it name as
ConsoleTestProject.

Add
reference of project UtilityClassesAdd following references to the console
project.
Microsoft.Http.dll
Microsoft.Http.Extension.dll
System.ServiceModel.Web.dll
Step 10Program.csusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using Microsoft.Http;
using Microsoft.ServiceModel.Web;
using Microsoft.ServiceModel.Web.SpecializedServices;
using System.Runtime.Serialization;
using UtilityClasses;
namespace ConsoleTestProject
{
class Program
{
static void Main(string[] args)
{
uri = "http://localhost:3602/RestService.svc/";
// Calling without parameter
Console.WriteLine(AddWithoutParameter());
Console.Read();
//Calling with parameter
NumberService obj = new NumberService() { Number1 = 7, Number2 = 2 };
Console.WriteLine(AddWithParameter(obj));
Console.Read();
}
public static string AddWithoutParameter()
{
using (HttpResponseMessage response = new HttpClient().Get(uri))
{
int res = response.Content.ReadAsDataContract();
return res.ToString();
}
}
public static string AddWithParameter(NumberService obj)
{
using (HttpResponseMessage response = new HttpClient().Post(uri,HttpContentExtensions.CreateDataContract(obj)))
{
int res = response.Content.ReadAsDataContract();
return res.ToString();
}
}
}
}
}There are two static methods
- AddWithoutParameter() -> To Invoke HTTP Get on Service URI. {In
Green}
- AddWithParameter() -> To Invoke HTTP POST on Service URI. {In
Yellow}
Output 