Click here to Skip to main content
15,867,594 members
Articles / Mobile Apps / Windows Phone 7

Web Service on Windows Phone

Rate me:
Please Sign up or sign in to vote.
4.97/5 (11 votes)
16 Aug 2012CPOL2 min read 57.7K   3.3K   21   8
Using a web service in Windows Phone

Introduction

Mobile devices are becoming more and more connected to the internet. That's encouraging developers to develop applications that use this advantage. Web services are on the top of these apps. Nowadays, web services are a must known technology for every developer.

Requirements

As it is a Windows Phone Application, you will need to have Visual Studio for Windows Phone Express installed or Visual Studio 2010, which you can download from:

About this Application  

This app is going to use Bing Maps to show the route between two points on the map and display its length. As I will focus more on the web service, you could find Bing Maps and Bing Maps v2 helpful to start manipulating Bing Maps. Bing Maps in Windows Phone is a simple article to start with.

Assuming that you have dropped and dragged the Map control from the Toolbox to the main page and had inserted the following code related to the ApplicationBar:

XML
<phone:PhoneApplicationPage.ApplicationBar>
    <shell:ApplicationBar IsVisible="True" 
    IsMenuEnabled="True" Opacity="0.9">
        <shell:ApplicationBarIconButton IconUri="/Icons/plus.png" 
        Text="Zoom In" Click="zoomIn_click"/>
        <shell:ApplicationBarIconButton IconUri="/Icons/minus.png" Text="Zoom out" 
         Click="zoomOut_click"/>
        <shell:ApplicationBarIconButton IconUri="/Icons/A.png" 
        Text="Aerial mode" Click="Aerial_click"/>
        <shell:ApplicationBarIconButton IconUri="/Icons/R.png" 
        Text="Road mode" Click="Road_click"/>
        <shell:ApplicationBar.MenuItems>
            <shell:ApplicationBarMenuItem Text="Choose my position" 
            Click="chooseMyPosition_click"/>
            <shell:ApplicationBarMenuItem Text="Locate Me" Click="locateMe_click"/>
            <shell:ApplicationBarMenuItem Text="Set Pushpin" Click="setPin_click"/>
            <shell:ApplicationBarMenuItem Text="Add Pushpin" Click="addPin_click"/>
            <shell:ApplicationBarMenuItem Text="Show Route" Click="showRoute_click"/>
        </shell:ApplicationBar.MenuItems>
    </shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>

Let's add these using statements to use the Maps features:

C#
using Microsoft.Phone.Controls;
using Microsoft.Phone.Controls.Maps;
using System.Device.Location;

After that, we wil be able to write this code:

C#
//declaring the two Pushpins and the Polyline
Pushpin pin1 = new Pushpin();
Pushpin pin2 = new Pushpin();
MapPolyline poly = new MapPolyline(); 

Some initialization is required to display the Polyline in the Map:

C#
//Initialization for polyline
poly.Locations = new LocationCollection();
poly.Opacity = 1.0;
poly.StrokeThickness = 3;
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = Colors.Green;
poly.Stroke = mySolidColorBrush; 

Now, we will start using the web service. So, first of all, let's right click on our project and click on Add Service Reference:

Image 1

On the address field, paste this reference to the route web service http://dev.virtualearth.net/webservices/v1/routeservice/routeservice.svc/mex and click "Go", then the services will appear in the Services field, to prove it's not a wrong reference.

Image 2

When clicking the OK button, some files will be generated in your project. So now, we can use that distributed service through its reference.

C#
private void showRoute_click(object sender, EventArgs e)
{
    //creating the reference to the service
    ServiceReference1.RouteServiceClient proxy = 
      new ServiceReference1.RouteServiceClient("BasicHttpBinding_IRouteService");
    ServiceReference1.RouteRequest rr = new ServiceReference1.RouteRequest();
    
    //this service requires a key
    rr.Credentials = new ServiceReference1.Credentials();
    rr.Credentials.ApplicationId = 
        "Asa2x7ZzhYIHauji6TzIkcf3TIDznTgBaPKQehsyE4taOz19Mx4fP4lyihqbTj7D";
    rr.Options = new ServiceReference1.RouteOptions();
    rr.Options.RoutePathType = ServiceReference1.RoutePathType.Points;

    //declaring the two points
    ServiceReference1.Waypoint wp1 = new ServiceReference1.Waypoint();
    ServiceReference1.Waypoint wp2 = new ServiceReference1.Waypoint();

    //the first location is my location (from)
    wp1.Location = new ServiceReference1.Location();
    wp1.Location.Latitude = SharedInformation.myLatitude;
    wp1.Location.Longitude = SharedInformation.myLongitude;
    wp1.Description = "";
    //the second location is the destination (to)
    wp2.Location = new ServiceReference1.Location();
    wp2.Location.Latitude = SharedInformation.pinLat;
    wp2.Location.Longitude = SharedInformation.pinLong;
    wp2.Description = "";

    //setting the parameter to send
    rr.Waypoints = 
      new System.Collections.ObjectModel.ObservableCollection<ServiceReference1.Waypoint>();
    rr.Waypoints.Add(wp1);
    rr.Waypoints.Add(wp2);

    //invoking the web service
    proxy.CalculateRouteAsync(rr);
    proxy.CalculateRouteCompleted += 
      new EventHandler<ServiceReference1.CalculateRouteCompletedEventArgs>
                                            (proxy_CalculateRouteCompleted);  
}

It's very important to know that the web service in Windows Phone is called in an asynchronized way. That's why the expression "Async" is added to the end of the method's name. That avoids the interface's thread to be blocked.

The IntelliSence could help you to show the different methods you can invoke from the web service with its full signature, as shown here:

Image 3

The result returned by this web service is returned through the second parameter of the proxy_CalculateRouteCompleted method, which will be executed when there is a response from the service. This result is a list of points. Linked one to the next, they will draw the route we need to show using the polyline.

C#
public void proxy_CalculateRouteCompleted
(object obj, ServiceReference1.CalculateRouteCompletedEventArgs e)
{
    try
    {
        foreach (ServiceReference1.Location location in e.Result.Result.RoutePath.Points)
        {

            poly.Locations.Add(new GeoCoordinate(location.Latitude, location.Longitude));
        }

        //add the Polyline to the Map
        map1.Children.Add(poly);
        
        //display the distance between the two Pushpins
        pin2.Content = "It's " + e.Result.Result.Summary.Distance.ToString() + "Km far away!";
    }
    catch (Exception exc)
    {
        MessageBox.Show(exc.Message);
    }
}

The use of the try catch block is because the service may return some exceptions such as Point so far away from any road..

Some screenshots of the final app:

Image 4

So that the result will be like this:

  Image 5

I hope you liked my article.

If you need any more information, please let me know.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer Microsoft
Tunisia Tunisia
I'm a Software Engineer and MVP (Client Development). I like writing articles and developing open source software in C#, Windows Phone and Windows 8 applications droidcon.tn/speakers.php.
http://houssemdellai.net

Comments and Discussions

 
Generalperfect Pin
Ronny_jair22-May-15 6:24
Ronny_jair22-May-15 6:24 
QuestionWeb Service for Windows Phone SDK 7.1.1 Pin
Memberrrrrrrr5-Jan-15 1:39
Memberrrrrrrr5-Jan-15 1:39 
GeneralMy vote of 5 Pin
roger.wang_9-Aug-13 4:44
professionalroger.wang_9-Aug-13 4:44 
QuestionPraise Pin
Member 999252816-Apr-13 7:15
Member 999252816-Apr-13 7:15 
GeneralMy vote of 5 Pin
Kanasz Robert21-Sep-12 1:40
professionalKanasz Robert21-Sep-12 1:40 
GeneralMy vote of 5 Pin
2374125-Aug-12 3:59
2374125-Aug-12 3:59 
GeneralMy vote of 5 Pin
Christian Amado13-Aug-12 9:11
professionalChristian Amado13-Aug-12 9:11 
GeneralRe: My vote of 5 Pin
Houssem_Dellai6-Oct-12 9:23
Houssem_Dellai6-Oct-12 9:23 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.