Techbubbles

REST Based WCF Service in ASP.NET 3.5

Introduction

This post explains you about building a REST-based service using Windows Communication Foundation(WCF) and ASP.NET 3.5. We develop this service without using the SOAP.You can read the REST Overview to get an understanding of what REST is? In simple tetchier statement we can say REST is WCF Web programming model.

1. Create a new web site in VS 2008 as follows

EmptyWebsite

Select the HTTP from the location box and type the AdventureWeb in the name location box.

2. Add a new item by right clicking on the web site and select the LINQ to SQL Classes item from the dialogue box.

Newitem

3.Drag the Employee table from the server explorer to the DBdesigner as follows

DBscreen

4.Add the EmployeeService.cs file to the App_Code folder and add the System.ServiceModel assembly to the web site. Write the following using statements in the EmployeeService Class.

   1: using System.Web;
   2: using System.ServiceModel;
   3: using System.Runtime.Serialization;
   4: using System.Collections.Generic;
   5: using System.ServiceModel.Web;
   6: using System.ServiceModel.Activation;

5.Add the ServiceContract and AspNetCompatibilityRequirementsMode attributes to the above created class

   1: [ServiceContract()]
   2: [AspNetCompatibilityRequirements(
   3: RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
   4: public class EmployeeService
   5: {
   6:     public EmployeeService()
   7:     {
   8:  
   9:     }
  10: }

6.Add the new class EmployeeResult.cs file to the web site then Add the DataContract attribute and two public fields to this class as follows.

 

   1: using System.Runtime.Serialization;
   2:  
   3: [DataContract(Namespace = "", Name = "Employee")]
   4: public class EmployeeResults
   5: {
   6:     [DataMember]
   7:     public string EmployeeName;
   8:  
   9:     [DataMember]
  10:     public string Link;
  11: }

7.Add the following code to the EmployeeService class

   1: [OperationContract]
   2: [WebGet(UriTemplate = "/")]
   3: public EmployeeResults[] GetAllEmployee()
   4: {
   5:     string strConnection = ConfigurationManager.ConnectionStrings["AdventureWorksConnectionString"].ConnectionString;
   6:     DataClassesDataContext dc = new DataClassesDataContext(strConnection);
   7:     string strUrl = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri.ToString();
   8:     var result = from anEmp in dc.employee
   9:                  select new EmployeeResults
  10:                  {
  11:                    EmployeeName = dc.emp_name;
  12:                    Link = string.Format("{0}{1}",currentURL,dc.emp_name);
  13:                  }
  14:     return result.ToArray();
  15:  
  16: }

8.Add the new item to the web site by right clicking on solution explorer select the text file from the dialogue box then name it EmpService.svc.

9. Add the service host declaration with the following attributes

svc

10. Now you have the REST service that returns XML and it can be consumed by any REST client. It would not be a browser.

11. See the svc file in browser which returns the employee names in xml format.

Conclusion

We have developed REST based WCF service in ASP.NET 3.5 without using the SOAP and can be consumed by any client. We can also use this service in ASP.NET Web sites.

Share this post :





Related Posts:

  • Hoa

    Thanks for the REST WCF article and sample. Just one minor coment:
    It would be great if you can post code without the line numbers. That would allow novices/beginners to copy and set up sample much easier and faster.

    Keep up the good work. I enjoy the interesting articles from this web site. Thanks

  • Kalyan Bandarupalli

    Thanks for the feedback. In future articles you can find the code without line numbers.

  • Pingback: AJAX Enabled WCF Service | TechBubbles

  • Paul J Lay

    Could not get this sample to compile as follows:

    select new EmployeeResults
    {
    EmployeeName = dc.emp_name // emp_name not in dc
    Link = string.Format(“{0}{1}”, strUrl, dc.emp_name);
    }
    Both statements have the same error emp_name not defined in dc Everything else seemed to work up to this point. Any suggestions about this problem? Thanks.

  • Nadeem Zakaria

    You are cute.

  • Meqdadi

    thnx good example but I have downloaded REST starter kit preview 2 can u tell me what this starter kit with new Class HttpClient???

  • Jignesh

    Instead of below code:
    select new EmployeeResults
    {
    EmployeeName = dc.emp_name // emp_name not in dc
    Link = string.Format(”{0}{1}”, strUrl, dc.emp_name);
    }

    It should be as per below code:
    var Result = from anEmp in dc.Employees
    select new EmployeeResult
    {
    EmployeeName = anEmp.Name,
    Link = string.Format(“{0}{1}”,strUrl,anEmp. Name)
    };

  • Kalyan Bandarupalli

    Hi Jignesh,

    Thanks for the code correction.

  • Reader

    To the guy who does not like line numbers:
    You can remove them by holding ALT while selecting text in Visual Studio.
    This will give you a rubber band type of selection style.

  • http://www.igosb.com Rico

    Nice thanks for the sample code lots of great information

  • aki

    I am getting this error.

    A name was started with an invalid character. Error processing resource ‘http://localhost/AdventureWeb/EmpService.svc’. Li…

    <%@ServiceHost Language="C#" Service="EmpService"
    -^

    :(

  • http://blog.markkoltnuk.com Mark

    You can learn more @ http://blog.markkoltnuk.com

  • Sampath Kumar

    how can we go with mysql

  • Sampath Kumar

    i just removed all this code and

    [

    public EmployeeResults[] GetAllEmployee()

    {

    string strConnection = ConfigurationManager.ConnectionStrings["AdventureWorksConnectionString"].ConnectionString;

    DataClassesDataContext dc = new DataClassesDataContext(strConnection);

    string strUrl = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri.ToString();

    var result = from anEmp in dc.employee

    select new EmployeeResults
    {

    EmployeeName = dc.emp_name;

    Link = string.Format(“{0}{1}”,currentURL,dc.emp_name);

    }

    return result.ToArray();

    ]

    replce with

    [

    public DataTable GetAllEmployee()

    {

    DataTable dtProduct = new DataTable();

    MySqlDataAdapter daState = new MySqlDataAdapter();

    const string ConStr = @"Server=127.0.0.1;Database=sampath;User=root;Password=root;Convert Zero Datetime=true;Allow Zero Datetime=True;CharSet=utf8;Connect Timeout=10;port=3306";

    MySqlConnection conn = new MySqlConnection(ConStr);

    MySqlCommand cmd = new MySqlCommand();

    DataSet dsProducts = new DataSet();

    cmd.Connection = conn;

    string strSortOrder = string.Empty;

    string strBycategory = string.Empty;

    cmd.CommandText = @"select Name from sampath";

    daState = new MySqlDataAdapter(cmd);

    daState.Fill(dsProducts, "Products");

    dtProduct = dsProducts.Tables[0];

    conn.Close();

    return dtProduct;

    }
    is it k
    ]

%d bloggers like this: