Introduction to WCF Data service and ODATA

In this article we will see how to creating WCF Data Service and how to consume WCF Data Service.


You can see video tutorial of this article


WCF Data Service, Project Astoria, OData and ADO.Net Data Service are same thing. 

1.gif
 
What is ODATA? 

2.gif
  • ODATA is HTTP or web protocol to querying or manipulating data. 
  • ODATA uses HTTP, JOSN or ATOM.
  • ODATA can be implemented through any platform supports, HTTP, XML or JSON. 
  • ODATA can expose data/information from relational database, File systems, Web sites, services etc. 
  • ODATA specification available under Microsoft's Open Specification Promise (OSP) so third parties, including open source projects, can build Open Data Protocol clients and services.
What is WCF Data Service? 
  • WCF Data service framework provides an API that allows data to be created and consumed over HTTP using RESTful service. 
  • WCF Data service supports all database operations using URI. 
  • WCF Data service can expose an entity model via an URI. 
  • WCF Data service is RESTful service to support CRUD operations on database. 
  • WCF Data service could be consumed by any type of client like Windows, SilverLight, Web, AJAX and console. 
3.gif

Block diagram explaining working of WCF Data Service 

4.gif
  1. Create a Data Access layer using ADO.Net Entity model or LINQ. 
  2. Make sure Data model is implementing IQueryable and IUpdateable . 
  3. Expose the data model as REST service using WCF Data service. 
CRUD Operations and HTTP verb 
 
5.gif

Supported Message Format 

6.gif 

Sample on WCF Data Service 

7.gif 

Let us say, we have a table called Student of below structure below in our database 

8.gif
 
In Student table RollNumber is a primary key. 

Let us create WCF Data Service which will expose the above table as REST service 

Step 1: Create a Web Application

Create a new project and select ASP.Net Web Application project template from Web tab.  Give a meaning full name to the web application. 

9.gif
 
Step 2: Create a Data Model 

We can create a Data Model, which can be exposed as WCF Data Service in three ways 
  1. Using ADO.Net Entity model.
  2. Using LINQ to SQL class. 
  3. Custom Data Model. 
For our purpose, I am going to use ADO.Net Entity model to create the data model.  So to create an entity model 
  1. Right click on web application and add a new item 
  2. Select ADO.Net Entity model from Data tab. 

    10.gif

  3. Since we have table in data base. so we are going to choose option , select from database. 

    11.gif

  4. Either choose the data base from drop down or create a new data connection. 

    12.gif

    In above connection string StudentDBEntities is name of the connection string. If we want, we can change this connection string as per our requirement. If your required data base is not listed in drop down then, you can create a new data connection. To create new data connection click on New Connection.

    13.gif

    You can give the data base server name and press refresh.  After pressing Refresh, you can choose the data base from the drop down.  After selecting the data base click on Test Connection to test connection established successfully or not? 
  5. Select tables, views and stored procedure from data base you want to make as the part of your data model. Since we are having only one table so we are selecting one table. 

    14.gif

    If you want you can change name of the data model. By default it is name of the data base appended by the term model.  Click on Finish button to complete and create the data model. 
  6. Now we can see that StudentDataModel.edmx has been created in the designer. 

    15.gif

    Since there is only one table, so there is only one table model at design surface. 

    Now we have created the data model which can be exposed as WCF Data Service.  Now you can see in solution explorer, you have  StudentModel.edmx and StdentModel.Designer.cs  files. 

    16.gif
Step 3: Creating WCF Data Service 
  1. Right click on Web Application project and add a new item. 
  2. Select WCF Data Service from Web tab. Give any meaningful name. I am leaving the default name here. 

    17.gif

  3. After adding the WCF Data Service, we can see a service file with extension .svc has been added to the solution explorer. When we click on .svc.cs file, we can see the code generated for us.

    18.gif

    Very first we need to put data source name. To do so uncomment the first commented line and put the data source name. In our case name of the model, which we created in 2nd step is the data source. Our data source name is StudentDBEntities 

    19.gif

    Now we need to set access rules for entity or entity set.  Since we have only one table, so either we can give name of the table explicitly or  if we want to set the same access rule for all the table in the data model or data source we could put  *.

    20.gif
So we are setting the access rule that, on the entity in data source perform all the operations. 

Step 4:  Run the WCF Data Service 

Just press F5 to run the WCF Data Service. Data Service will be hosted in the default ASP.Net server called Cassini. 

On running you can see, one table is listed. That table is Student 

21.gif
 
The above is the data in ATOM message format.

Note: If your browser is not showing the expected result, make sure Feed reading of browser is off.  To do from menu of IE and select tool and then Internet Option then Content 

22.gif

23.gif
 
MetaData
  • One feature of WCF data service is that, they provide operation to retrieve Metadata about the service and offer of the service.  
  • This is very useful in determining structure before requesting them. 
  • WCF Data service provides metadata accessible. 
  • Metadata expose all the resource and custom services. 
  • Metadata could be accessed by appending $metadata to service URI.
So, the URI to access metadata is 

http://localhost:29409/WcfDataService1.svc/$metadata

24.gif
 
URI Query options 

We can perform various queries in the browser itself using the URI query options. 

Options 

OptionsDescriptions
expandRequest set of related entities to be retrieved.
orderbyIndicates the sequence entity to be retrieved 
skipSkip number of data items.
topAt most returns top number of data items
filterApplies the filtering condition

Operators

Options Descriptions
eq Equal
ne Not Equal 
gt Greater Than
ge Greate than or equal to
lt Less than
le Less than or equal to
and Logical AND
or Logical OR
not Logical NOT

Math Operators

Operators Descriptions
add add
sub Subtract
mul multiply
div Division
mod remainder

Various queries 
  1. Fetch all the records from the table Student 

    URI: http://localhost:29409/WcfDataService1.svc/Students

    Result 

    25.gif

  2. Fetch the  student details with roll number 1

    URI: http://localhost:29409/WcfDataService1.svc/Students?$filter=RollNumber eq'1'

    26.gif

  3. Fetch  top 2 record from the student table 

    URI: http://localhost:29409/WcfDataService1.svc/Students?$top =2

    27.gif

  4. Fetch the records of the student with roll number 1 or 3

    URI: http://localhost:29409/WcfDataService1.svc/Students?($filter=RollNumber eq'1')or($filter=rollnumber eq '3')

    28.gif
Different Access rules on the entity set 

Enumerator Descriptions
All All Read and Write are permitted
AllRead All Read  permitted
AllWrite All Write is permitted 
None No access is permitted
ReadMultiple Reading multiple row is permitted
ReadSingle Reading a single row is permitted
WriteAppend Creating New data is permitted
WriteDelete Deleting data is permitted
WriteMerge Merge updating is permitted
WriteReplace Replace updating is permitted
 
As we discussed above we can set access rule for a particular entity or whole entity set in data source.

config.SetEntitySetAccessRule("*", EntitySetRights.All);

This will permit all right access on all entity set. 

config.SetEntitySetAccessRule("Students", EntitySetRights.AllWrite);

This will permit all write access on Student entity set. 

Creating a client to consume WCF Data Service

Step 1

Add a new project in the same solution of type console application. 

29.gif
 
Step 2

Add the service reference of WCF Data Service. To add right click on the console project and add a service reference. Since WCF Data Service and client project in the same solution , click on Discover to discover the service in the solution.

30.gif
 
Add the reference of System.Data.Service.Client in client project also. 

31.gif
 
Step 3

Add namespaces 

32.gif
 
Step 4

Need to create instance of DataContext and StudentDBEntities. These two classes take as parameter in their constructor. Parameter is base URI of the WCF Data Service.

33.gif
 
Retrieving all the records of table Students 

34.gif
 
Adding one record in the table Student

35.gif
 
Updating a record in the table Student 

36.gif
 
Delete a record in the table Student 

37.gif
 
I hope this article was useful. Thanks for reading. Happy Coding.