Mobile Zone is brought to you in partnership with:

Karthikeyan Anbarasan (Karthik) has more than 5 years experience on Microsoft Technologies (ASP.Net, C#.net, VB.Net, ADO.Net, Ajax, SQL Server, SSIS, SSRS, SSAS, Biztalk Server, IBM MQ Server, WCF, WPF and some tools like Infragisitcs, Syncfusion, etc..) Karthikeyan is a DZone MVB and is not an employee of DZone and has posted 45 posts at DZone. You can read more from them at their website. View Full User Profile

Working with Consuming an ODATA Service in Windows Phone

05.07.2012
| 3624 views |
  • submit to reddit

01 Download ToolsDownload Source CodeDownload as PDF FileSubscribe to F5debug

Introduction:

In this article we are going to see how to consume a ODATA service in Windows Phone 7 application. ODATA is Open Data Protocol is an entity model used to access data as a REST service, which can be used to execute queries and to create, update and delete data on to the remote data service. ODATA service allows the consumers to query the data over the http protocol and retrieve the result in a plain XML format. Normally a mobile application development requires data that are available as a service which can be consumed and use on demand, where the ODATA Service plays a major role. We have variety of ODATA services that are available in market, rather we can create our ODATA service which can also be consumes as a WCF Data Services.

As per ODATA website, The Open Data Protocol (OData) is a Web protocol for querying and updating data that provides a way to unlock your data and free it from silos that exist in applications today. OData does this by applying and building upon Web technologies such as HTTP, Atom Publishing Protocol (AtomPub) and JSON to provide access to information from a variety of applications, services, and stores. The protocol emerged from experiences implementing AtomPub clients and servers in a variety of products over the past several years.  OData is being used to expose and access information from a variety of sources including, but not limited to, relational databases, file systems, content management systems and traditional Web sites.

We have a comprehensive list of public ODATA Services that can be consumed from the client devices using the link http://www.odata.org/producers. Let us see the step by step process on how to consume the ODATA Service in our Windows Phone 7 application and see how to make use of it efficiently.

Steps:

Open Visual Studio 2010 IDE in administrator mode and create a new Silverlight for Windows Phone 7 project with a valid project name as shown in the screen below.

2012-02-21 11h53_19

Now we need to design our XAML page where we want to show our consumed ODATA service, we can use the Listbox and dynamically bind the data which we consume. Copy the below XAML code to get the unique design in our sample project as shown in the screen below.

2012-02-21 15h40_06


<Grid x:Name="LayoutRoot" Background="Transparent">
 <Grid.RowDefinitions>
 <RowDefinition Height="Auto"/>
 <RowDefinition Height="*"/>
 </Grid.RowDefinitions>

<!--<span class="hiddenSpellError" pre="">TitlePanel</span> contains the name of the application and page title-->
 <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
 <TextBlock x:Name="ApplicationTitle" Text="F5DEBUG WP7 TUTORIALS" Style="{StaticResource PhoneTextNormalStyle}"/>
 <TextBlock x:Name="PageTitle" Text="OData Service" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
 <!--<span class="hiddenSpellError" pre=""-->StackPanel>

<!--<span class="hiddenSpellError" pre="">ContentPanel</span> - place additional content here-->
 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
 <button>OData" Margin="0,507,0,0" Click="Button_Click"></button>
 <ListBox x:Name="MainListBox"  ItemsSource="{Binding}" Margin="0,6,0,106">
 <ListBox.ItemTemplate>
 <DataTemplate>
 <StackPanel Margin="0,0,0,17" Width="432">
 <TextBlock Text="{Binding Path=Name}" TextWrapping="NoWrap"
 Style="{StaticResource PhoneTextExtraLargeStyle}"/>
 <TextBlock Text="{Binding Path=Description}" TextWrapping="NoWrap"
 Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
 <TextBlock Text="{Binding Path=Url}" TextWrapping="NoWrap" Margin="12,-6,12,0"
 Style="{StaticResource PhoneTextSubtleStyle}"/>
 </StackPanel>
 </DataTemplate>
 </ListBox.ItemTemplate>
 </ListBox>
 </Grid>
 </Grid>


Once we designed the XAML page, now we need to consume the ODATA service, in this sample application we will make use of the Telerik Video’s ODATA service which is available to public. The ODATA service is available using the URI http://tv.telerik.com/services/odata.svc/. To add the ODATA service right click on the project name and select Add Service Reference as shown in the screen below.
2012-02-21 12h04_08

Clicking on Add Service Reference will get a pop window where we need to provide the OATA Service uri and click on Go button to discover the service online. Once the service is discovered we need to change the namespace to a user defined name as ODataTelerik as shown in the screen below.

2012-02-21 15h24_54

On successfully adding the ODATA service reference to the project we can see a list of files added to the service reference folder. Now we are ready with the service, our next step is write some code that will do the necessary process to get the data from the service and show it to the user interface which we designed. Add the below 2 namespaces which are required to consume and get the data from the ODATA service as shown in the screen below.

Code Behind:

using System.Data.Services.Client;
 using F5debugWp7ODataConsule.ODataTelerik;

Once we added the above 2 namespaces we need to start with our code to consume the service, copy the below code and add it to the Mainpage class. This code creates an instance of the reference which we added to the project and get the ODATA service URI which is used to create a reference while consuming the service as shown in the code below.

2012-02-21 15h27_17

Code Behind:

private ODataDataSource TelerikEntity;
 private static string strODataURI = "<a href="http://tv.telerik.com/services/odata.svc/%22;">http://tv.telerik.com/services/odata.svc/";</a>
 private readonly Uri tURI = new Uri(strODataURI);
 private DataServiceCollection<Video> videos;

Now in the button click event we need to call the ODATA Service and get the data which is required to bind to the controls which we designed in our initial process. Once we created the instance we can query the data from the DataServiceCollection by just using the LINQ query as shown in the screen below. Just copy and paste the below code the button click event to step further.

2012-02-21 15h30_04

Code Behind:

private void Button_Click(object sender, RoutedEventArgs e)
 {
 TelerikEntity = new ODataDataSource(tURI);
 videos = new DataServiceCollection<video tabindex="0">(TelerikEntity);</video>

var queryvideo = from vid in TelerikEntity.Videos
 select vid;

videos.LoadCompleted += new EventHandler<LoadCompletedEventArgs>(videos_LoadCompleted);
 videos.LoadAsync(queryvideo);
 }

 Now we need to add the below code which is basically required to handle the event on the completion of loading the data to the user interface to scroll and have a better look for the end users as shown in the code below.

Code Behind:

void videos_LoadCompleted(object sender, LoadCompletedEventArgs e)
 {
 if (e.Error == null)
 {
 if (videos.Continuation != null)
 {
 videos.LoadNextPartialSetAsync();
 }
 else
 {
 this.MainListBox.DataContext = videos;
 }
 }
 else
 {
 MessageBox.Show("Error while fetching the data!!!");
 }
 }

Now we are done with our complete code, our final code behind class will look like the below code.

Code Behind:

using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Net;
 using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Documents;
 using System.Windows.Input;
 using System.Windows.Media;
 using System.Windows.Media.Animation;
 using System.Windows.Shapes;
 using Microsoft.Phone.Controls;

using System.Data.Services.Client;
 using F5debugWp7ODataConsule.ODataTelerik;

namespace F5debugWp7ODataConsule
 {
 public partial class MainPage : PhoneApplicationPage
 {
 private ODataDataSource TelerikEntity;
 private static string strODataURI = "<a href="http://tv.telerik.com/services/odata.svc/%22;">http://tv.telerik.com/services/odata.svc/";</a>
 private readonly Uri tURI = new Uri(strODataURI);
 private DataServiceCollection<Video> videos;

// Constructor
 public MainPage()
 {
 InitializeComponent();
 }

private void Button_Click(object sender, RoutedEventArgs e)
 {
 TelerikEntity = new ODataDataSource(tURI);
 videos = new DataServiceCollection<Video>(TelerikEntity);

var queryvideo = from vid in TelerikEntity.Videos
 select vid;

videos.LoadCompleted += new EventHandler<LoadCompletedEventArgs>(videos_LoadCompleted);
 videos.LoadAsync(queryvideo);
 }

void videos_LoadCompleted(object sender, LoadCompletedEventArgs e)
 {
 if (e.Error == null)
 {
 if (videos.Continuation != null)
 {
 videos.LoadNextPartialSetAsync();
 }
 else
 {
 this.MainListBox.DataContext = videos;
 }
 }
 else
 {
 MessageBox.Show("Error while fetching the data!!!");
 }
 }
 }
 }

 

Now build and execute the application by simply pressing F5 from the keyboard and we can see the expected results are shown in the screens below.

Output Screens:

image

Conclusion:

So in this article we have seen what is ODATA service and how to consume the service from the Windows Phone 7 application to get the data and process it as per the requirement. Hope this article is useful for the readers.

Thanks for reading my article. If you like my blog and if you are interested in getting the latest updates on new articles, kindly follow me through one of these options.

 

 

 

 

 

 

 

 

Published at DZone with permission of Karthikeyan Anbarasan, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)