Walkthrough creating REST Service in WCF 4.0

No.of Views3068
Bookmarked0 times
Downloads 
Votes0
By  Dhananjay Kumar   On  26 Nov 2010 09:11:45
Tag : WCF , REST Services
This article will explain step to step explanation of, how to create a REST based service and how to consume that in a managed client.
emailbookmarkadd commentsprint

Images in this article missing? We recently lost them in a site migration. We're working to restore these as you read this. Should you need an image in an emergency, please contact us at info@codegain.com

 

Introduction

This article will explain step to step explanation of, how to create a REST based service and how to consume that in a managed client.

Step 1

Create a new project as WCF Service application type. 

Image Loading

Step 2

Delete all the default code from IService.cs and Service.svc.cs

Now open Web.Config file and delete below code in Visual Studio 2010.  In other words delete all endpoints for existing service

<system.serviceModel>
    <services>
      <service behaviorConfiguration="RestServicePublishing.Service1Behavior"
        name="RestServicePublishing.RestService">
        <endpoint address="" binding="wsHttpBinding" contract="RestServicePublishing.IRestService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="RestServicePublishing.Service1Behavior">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

If you are using VS2010 then delete  below code from Web.Config 

Image Loading

Step 3

Right click on Service.svc  and open View markup. 

Image Loading

In Markup of RestService.cs  , add below code there

Factory="System.ServiceModel.Activation.WebServiceHostFactory"

So after adding code the markup would look like

Markup of RestService.cs

Image Loading

Step 4

Add following references to the WCF Service Application project, if you are using VS2010

Microsoft.Http.dll
Microsoft.Http.Extension.dll
System.ServiceModel.Web.dll

Step 5

Add a new project as of type class library and give it name UtilityClasses.

Image Loading

Add a class Number to this class library.

Number.cs

using 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 6
Define 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.

Image Loading
 

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 means; it is 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

Image Loading

Then it would be invoked as
http://localhost:3602/RestService.svc/ADD/MyAdd

Step 7
Now we need to implement the service

Service1.svc.cs

using 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 8

Test the Service in Browser

1.    Build the Service
2.    Right click on Service1.svc and select view in browser. 

Image Loading

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. 

Image Loading

Step 9

Consume the service

Add new console project in solution and give it name as ConsoleTestProject.

Image Loading

Add reference of project UtilityClasses Add following references to the console project.

Microsoft.Http.dll
Microsoft.Http.Extension.dll
System.ServiceModel.Web.dll

Step 10

Program.cs

using 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<int>();
                return res.ToString();
            }
        }


        public static string  AddWithParameter(NumberService obj)
        {
            using (HttpResponseMessage  response = new HttpClient().Post(uri,HttpContentExtensions.CreateDataContract(obj)))
            {
                
                int res = response.Content.ReadAsDataContract<int>();
                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 

Image Loading

Summary

This article i have explained step to step explanation of, how to create a REST based service and how to consume that in a managed client.

 
Sign Up to vote for this article
 
About Author
 
Dhananjay Kumar
Occupation-Software Engineer
Company-Infosys Technolgies,Pune
Member Type-Gold
Location-India
Joined date-20 Jul 2009
Home Page-http://dhananjaykumar.net/
Blog Page-http://dhananjaykumar.net/
Dhananjay Kumar is Microsoft MVP on connected system. He blogs at http://dhananjaykumar.net/ . You can follow him http://twitter.com/debugmode_/ and reach him at dhananjay.25july@gmail.com
 
 
Other popularSectionarticles
Comments
There is no comments for this articles.
Leave a Reply
Title:
Display Name:
Email:
(not display in page for the security purphase)
Website:
Message:
Please refresh your screen using Ctrl+F5
If you can't read this number refresh your screen
Please input the anti-spam code that you can read in the image.
^ Scroll to Top