Windows Azure eignet sich hervorragend als skalierbares Backend für mobile Anwendungen. Für letztere wiederum steht mit Windows 8 ein großartiges Betriebssystem für mobile Anwendungen zur Verfügung. Wie kann nun das eine mit dem anderen kommunizieren. Windows Azure Mobile Services sind hier ein sehr einfacher und schneller Weg, um die Brücke vom mobilen Client in die Cloud zu schlagen, um Daten zu persistieren, Nachrichten zu verschicken, Benutzer zu authentifizieren etc.
So weit möchte ich in diesem Blobpost aber gar nicht gehen. Hier möchte ich zeigen, wie in einer Windows Azure Website ein Web-API-basierter Service bereitgestellt und von einer Windows Store Anwendung heraus mittels HttpClient zugegriffen werden kann. Das Ganze erfolgt in drei Schritten:
Zu jedem Arbeitsschritt gibt es auch ein Videotutorial, in dem ich die einzelnen Schritte vorführe. Um die Arbeitsschritte nachzuvollziehen, kann ein kostenloser 90-Tage Windows Azure Testaccount verwendet werden, der die verwendeten Funktionalitäten von Windows Azure kostenlos zugänglich macht.
Und los geht’s…
Zunächst soll ein kleiner Web-API basierter Service implementiert werden. Dieser soll (sehr einfach, hier geht’s ja nur um den “proof-of-concept”) Kundendaten bereitstellen.
namespace CustomerWebApi.Models
{
public class Customer
public int Id { get; set; }
public string Name { get; set; }
public string Firstname { get; set; }
public string Address { get; set; }
public string Email { get; set; }
}
using WebApiDemo1.Models;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Http;
namespace WebApiDemo1.Controllers
public class CustomerController : ApiController
private Customer[] customers = new Customer[]
new Customer { Id = 1, Name = "Mustermann", Firstname = "Max", Address = "Musterstraße 1, 12345 Musterstadt", Email = "max.mustermann@mail.de" },
new Customer { Id = 2, Name = "Testfrau", Firstname = "Tina", Address = "Testweg 1, 54321 Testhausen", Email = "tina.testfrau@mail.de" },
new Customer { Id = 3, Name = "Demomann", Firstname = "Daniel", Address = "Demoallee 1, 98765 Demo", Email = "daniel.demomann@mail.de" },
};
public IEnumerable<Customer> GetAllCustomers()
return customers;
public Customer GetCustomerById(int id)
var customer = customers.FirstOrDefault((c) => c.Id == id);
if (customer == null)
throw new HttpResponseException(HttpStatusCode.NotFound);
return customer;
Damit ist die Erstellung des Service abgeschlossen. Theoretisch könnte die später zu implementierende Windows-8-Anwendung auf diesen schon lokal zugreifen. Mein Ziel ist aber, diesen auf Windows Azure in Form einer Website bereitzustellen. Dies soll im folgenden Abschnitt erfolgen.
Die Bereitstellung des oben erstellten Services als Windows Azure Website ist denkbar einfach: Voraussetzung ist zunächst, dass Sie einen gültigen Windows Azure Account haben. Falls dies nicht der Fall ist, empfehle ich die Registrierung für einen kostenlosen 90-Tage-Testaccount. Die Bereitstellung des Service kann dann sehr einfach mittels folgender Schritte durchgeführt werden:
Damit ist die Bereitstellung des Web-API-Service in der Cloud auf Windows Azure abgeschlossen. Nun soll eine einfache Windows 8 Anwendung auf den bereitgestellten Service zugreifen und die Daten anzeigen.
Mit folgenden Schritten legen Sie eine neue Windows 8 Anwendung an und lassen diese die Daten des Web-API-Service anzeigen:
<Page.Resources>
<!-- TODO: Delete this line if the key AppName is declared in App.xaml -->
<x:String x:Key="AppName">Customer Details</x:String>
</Page.Resources>
<GridView
Name="customer_details"
Grid.Row="1"
ItemsSource="{Binding}"
Padding="116,0,40,46">
<GridView.ItemTemplate>
<DataTemplate>
<StackPanel Width="350" Height="150" Margin="10" Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}">
<TextBlock Padding="10" Style="{StaticResource SubtitleTextStyle}">
<Run Text="{Binding Id}"/>
</TextBlock>
<TextBlock Margin="10,0" Style="{StaticResource TitleTextStyle}">
<Run Text="{Binding Name}" FontSize="28" />, <Run Text="{Binding Firstname}" FontSize="28" />
<TextBlock Margin="10,0" Style="{StaticResource ItemTextStyle}">
<Run Text="{Binding Address}"/>
<Run Text="{Binding Email}"/>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
private HttpClient httpClient;
public MainPage()
this.InitializeComponent();
httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("http://hsirtlwebapi.azurewebsites.net/");
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.MaxResponseContentBufferSize = 266000;
protected override void OnNavigatedTo(NavigationEventArgs e)
GetCustomer();
private async void GetCustomer()
var response = await httpClient.GetAsync("api/customer");
if (response.IsSuccessStatusCode)
var customer = await response.Content.ReadAsStringAsync();
var cust = JsonArray.Parse(customer);
var qry = from c in cust
select new
Id = c.GetObject()["Id"].GetNumber(),
Name = c.GetObject()["Name"].GetString(),
Firstname = c.GetObject()["Firstname"].GetString(),
Address = c.GetObject()["Address"].GetString(),
Email = c.GetObject()["Email"].GetString()
customer_details.DataContext = qry;
Die Windows 8 Anwendung sollte nun die vom Web-API-Service zurückgegebenen Werte (also die, die wir auch vorhin über die JSON-Ausgabe gesehen haben) anzeigen. Damit haben wir erfolgreich eine Windows 8 Anwendung erstellt, die Daten eines über eine Windows Azure Website bereitgestellten Service anzeigen kann.
Kurz und knapp auf den Punkt gebracht, Danke.