bert

Consuming webservices with Portable Class Library (PCL)

This a sample to consume a webservice using Portable Class Library (PCL). In this sample we are retrieving some geographical information from the

http://geonames.org site. Because we use portable class libraries, we can reuse this code on the different .NET platforms: Silverlight, .NET Framework 4.5, Windows Phone 7.5/8 and Windows 8 Store Apps.

Support for PCL is coming for platforms like Mono, Xamarin.iOS and Xamarin.Android. Write once, run everywhere!

 

Step 1/5: Create Portable Class Library project in Visual Studio 2012

File –> New-> Project –> Visual C# –> Portable Class Library

Be sure to select .NET Framework 4.5:

image

 

Set target frameworks as follows:

image

 

Step 2/5: Install nuget packages

In the NuGet package manager console type:

1: ‘install-package microsoft.net.http –pre’ : installs the PCL version of HttpClient

Result should be (without license text):

PM> install-package microsoft.net.http -pre

Attempting to resolve dependency ‘Microsoft.Bcl (≥ 1.0.16-rc)’.

Attempting to resolve dependency ‘Microsoft.Bcl.Build (≥ 1.0.0-rc)’.

Successfully installed ‘Microsoft.Bcl.Build 1.0.0-rc’.

Successfully installed ‘Microsoft.Bcl 1.0.16-rc’.

Successfully installed ‘Microsoft.Net.Http 2.1.3-beta’.

Successfully added ‘Microsoft.Bcl.Build 1.0.0-rc’ to PortableClassLibrary4.

Successfully added ‘Microsoft.Bcl 1.0.16-rc’ to PortableClassLibrary4.

Successfully added ‘Microsoft.Net.Http 2.1.3-beta’ to PortableClassLibrary4.

 

2: ‘install-package newtonsoft.json – pre’: installs the PCL version of JSON.NET

 

image

 

Step 3/5: Write some code in the PCL

In this sample we are retrieving some information about earthquakes:

http://api.geonames.org/earthquakesJSON?north=44.1&south=-9.9&east=-22.4&west=55.2&username=bertt

Copy the json result of the earthquakes in a new c# file. Use paste –> paste special –> paste JSON as classes.

 

image

Results should be:

Geonames models

 

Now write the code to request the webservice and parse the results:

GeoNames Webservice Client Api

 

public Earthquake[] GetEarthquakes() {

var client = new HttpClient();

client.BaseAddress = new Uri(http://api.geonames.org/);

var response = client.GetAsync("earthquakesJSON?north=44.1&south=-9.9&east=-22.4&west=55.2&username=bertt").Result;

var earthquakesJson = response.Content.ReadAsStringAsync().Result;

var rootobject = JsonConvert.DeserializeObject<Rootobject>(earthquakesJson);

return rootobject.earthquakes;

}

 

Step 4/5:  Add a Windows 8 client

Add a Windows 8 client to the solution

Solution-> Add new Project… –> Windows Store –>  Blank App Xaml

Add a reference to the portable class library:

Select Project –> add reference –> select the new portable class library

 

Step 5/5: Add 1 line of code to the Windows 8 client

Open the mainpage.xaml.cs file and add to the OnNavigatedTo method:

var earthquakes = new GeonamesApi().GetEarthquakes();

if everything works ok, there will be some earthquakes coming back. Or there are no earthquakes in this area Glimlach . Otherwise inspect with

Fiddler to see whats going on.

image

 

Next step is to put the results somewhere in the user interface but I’ll leave that for another post. Good candidate for this is the MVVM Cross Library:

https://github.com/slodge/MvvmCross

 

Code:

About these ads

March 19, 2013 - Posted by | Uncategorized

5 Comments »

  1. A note for other readers: To install microsoft.net.http I had to update the NuGet package manager from 2.0 to 2.2

    This was the error it solved: Could not install package ‘Microsoft.Bcl 1.0.16-rc’. You are trying to install this package into a project that targets ‘.NETPortable,Version=v4.0,Profile=Profile104′, but
    the package does not contain any assembly references that are compatible with that framework.

    Comment by Paul den Dulk | March 21, 2013 | Reply

  2. [...] Great webservices example – Earthquake data with Portable Class Libraries (PCLs) [...]

    Pingback by NuGet Package of the Week #13 - Portable HttpClient makes portable libraries more useful - Scott Hanselman | March 24, 2013 | Reply

  3. [...] · 超赞的webservice示例——Portable Class Libraries在地震数据的应用(PCLs) [...]

    Pingback by 第13周的NuGet包—Portable HttpClient使得portable libraries更加好用 - Scott Hanselman的中文博客 - Site Home - MSDN Blogs | March 28, 2013 | Reply

  4. Also make sure you chose “Windows Phone 7.5 and higher” (and NOT WP 7). I overlooked this and then it does not work.

    Comment by harmens | April 3, 2013 | Reply

  5. Really thanx a lot.. its helped a lottttttttt..

    Comment by Ganesh R | December 26, 2013 | Reply


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: