Objective
In this article I am going to explain how to consume a REST service in windows 7 phone app.
We will achieve this is two steps
- Create and Host REST based WCF service
- Consume service in W7 phone application.
Create and host REST service
There are many article, I have written discussing REST service. All can be finding here. But again, I am showing it here for benefit of your readers.
What I am going to do is to create a very simple REST service. Service will have one operation contract. This will take one string as input and return greeting message appending the string.
- Open visual studio and from File menu select new project. Go to WCF tab and select WCF service application.
- Open Web.Config file and inside System.Servicemodel delete any existing endpoint settings.
-
Right click on your .svc file and select view markup.
Add as a Factory class to the markup of the service System.ServiceModel.Activation.WebServiceHostFactory. after adding markup should look like below
-
Define the contract. There is one operation contract. This will take a string as input parameter and return a string.
In WebGet attribute all settings are default for XML return and response. URI for the operation will be
http://hostserver:port/Service1.svc/GetData/[parameter] so if you want to pass your name as parameter then URL would be http://hostserver:port/Service1.svc/GetData/DhananjayKumar
-
Run the WCF service or right click on .svc file and select view in browser. Once you will run , you will see the below output
In address bar of browser you can see the URL and XML output would be as below
-
We are going to host the service for our sample in Cassini server.
For reference complete code for Web.Config , Contract and Service definition is as below
Contract (IService1.cs)
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Runtime.Serialization;
5 using System.ServiceModel;
6 using System.ServiceModel.Web;
7 using System.Text;
8 namespace RESTtoConsumeinWindwPhone
9 {
10 [ServiceContract]
11 public interface IService1
12 {
13 [OperationContract]
14 [WebGet(UriTemplate=“GetData/{a}”,
15 RequestFormat=WebMessageFormat.Xml ,
16 ResponseFormat=WebMessageFormat.Xml,
17 BodyStyle=WebMessageBodyStyle.Bare)]
18 String GetData(string a);
19
20
21 }
22 }
23
Service Definition (Service1.cs)
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Runtime.Serialization;
5 using System.ServiceModel;
6 using System.ServiceModel.Web;
7 using System.Text;
8 namespace RESTtoConsumeinWindwPhone
9 {
10 public class Service1 : IService1
11 {
12 public String GetData(string a)
13 {
14 return “Hello “ + a + “From REST Service “;
15 }
16 }
17 }
18
Web.Config
<?xml version=“1.0“?> <configuration> <system.web> <compilation debug=“true” targetFramework=“4.0“ /> </system.web> <system.serviceModel><behaviors><serviceBehaviors><behavior> <serviceMetadata httpGetEnabled=“true“/> <serviceDebug includeExceptionDetailInFaults=“false“/> </behavior> </serviceBehaviors> </behaviors> <serviceHostingEnvironment multipleSiteBindingsEnabled=“true“ /> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests=“true“/> </system.webServer> </configuration> |
Consuming REST service in Window 7 Phone application
Very first create Windows Phone Application. From Silverlight for Windows Phone tab select Windows Phone Application project type.
- In content grid place a textbox and a button.
-
User will eneter text and on clcik event we will pass this text to service and display retrun string into a message box. I am not designing the page very much it’s a very simple page.
MainPage.Xaml.cs
<phoneNavigation:PhoneApplicationPage x:Class=”RESTServiceConsuming.MainPage” xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation” xmlns:x=http://schemas.microsoft.com/winfx/2006/xamlxmlns:phoneNavigation=”clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Navigation” xmlns:d=http://schemas.microsoft.com/expression/blend/2008 xmlns:mc=http://schemas.openxmlformats.org/markup-compatibility/2006 mc:Ignorable=”d” d:DesignWidth=”480″ d:DesignHeight=”800″ FontFamily=”{StaticResource PhoneFontFamilyNormal}” FontSize=”{StaticResource PhoneFontSizeNormal}” Foreground=”{StaticResource PhoneForegroundBrush}”><Grid x:Name=”LayoutRoot” Background=”{StaticResource PhoneBackgroundBrush}”> <Grid.RowDefinitions> <RowDefinition Height=”Auto”/> <RowDefinition Height=”*”/> </Grid.RowDefinitions> <Grid x:Name=”TitleGrid” Grid.Row=”0″> <TextBlock Text=”MY APPLICATION” x:Name=”textBlockPageTitle” Style=”{StaticResource PhoneTextPageTitle1Style}”/> <TextBlock Text=”page title” x:Name=”textBlockListTitle” Style=”{StaticResource PhoneTextPageTitle2Style}”/> </Grid> <Grid x:Name=”ContentGrid” Grid.Row=”1″> <Button x:Name=”myButton” Height=”75″ Content=”Call REST service” Margin=”99,197,124,381″ /> <TextBox x:Name=”myTxtBox” Height=”31″ HorizontalAlignment=”Left” Margin=”20,96,0,0″ Text=” “ VerticalAlignment=”Top” Width=”434″ FontFamily=”Verdana” Foreground=”#FFCB4B4B” FontSize=”32″ /> <TextBox x:Name=”myTxtBoxDisplay” Height=”31″ HorizontalAlignment=”Left” Text=” “ VerticalAlignment=”Top” Width=”434″ FontFamily=”Verdana” Foreground=”#FFCB4B4B” FontSize=”20″ Margin=”20,319,0,0″ /> </Grid> </Grid></phoneNavigation:PhoneApplicationPage> |
Now I will be consuming REST service on click event of button.
- Using WebClient class will make the asynchronous calls.
-
On returning of the response as stream using DataContractSerliazer , I will de serialize the returned stream.
-
While constructing the URL to be called append input parameter. I am taking input parameter here from textbox.
MainPage.xaml.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Net;
5 using System.Windows;
6 using System.Windows.Controls;
7 using System.Windows.Documents;
8 using System.Windows.Input;
9 using System.Windows.Media;
10 using System.Windows.Media.Animation;
11 using System.Windows.Shapes;
12 using Microsoft.Phone.Controls;
13 using System.Xml;
14 using System.Runtime.Serialization;
15
16
17 namespace RESTServiceConsuming
18 {
19 public partial class MainPage : PhoneApplicationPage
20 {
21 public MainPage()
22 {
23 InitializeComponent();
24 SupportedOrientations = SupportedPageOrientation.Portrait | SupportedPageOrientation.Landscape;
25
26 myButton.Click += new RoutedEventHandler(myButton_Click);
27 }
28
29 void myButton_Click(object sender, RoutedEventArgs e)
30 {
31 WebClient proxy = new WebClient();
32 string strUri = “http://localhost:50841/Service1.svc/GetData/”+myTxtBox.Text;
33 proxy.OpenReadCompleted+=new OpenReadCompletedEventHandler(proxy_OpenReadCompleted);
34 proxy.OpenReadAsync(new Uri(strUri));
35 }
36
37 void proxy_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
38 {
39
40 DataContractSerializer ser = new DataContractSerializer(typeof(string));
41 String str = ser.ReadObject(e.Result).ToString();
42 myTxtBoxDisplay.Text = str;
43
44
45 }
46
47
48 }
49 }
Press F5 to get the result
So, in this article I explained about how to consume a REST service in Win7 mobile app. In later articles I shall explain image and streaming through REST service in Win7 mobile app. Thanks for reading. I hope it was useful. Happy Coding.
Leave a Reply