5
Deutschland 9,80 € Österreich 10,80 € Schweiz 19,50 sFr www.windowsdeveloper.de 8.2014 Wer suchet, der findet 25 Bing als Plattform der Möglichkeiten Augmented Reality mit Bing Maps 15 Entwicklung von AR-Apps Wo bin ich? 19 Location-based Services mit Bing Maps Bing | JavaScript | Azure | Sicherheit | Tools | SharePoint | Windows Phone 8.1 | Games Wolkig statt lokal Entwickeln und testen in der Microsoft-Cloud 67 Ausblick auf ASP.NET vNext Die neue Runtime: Alles bleibt besser 49 Die Plattform © S&S Media © iStockfoto.com/Blackmoon9 windows.developer 8.2014 Bing | JavaScript | Azure | Sicherheit | Tools | SharePoint | Windows Phone 8.1 | Games Google Hacking, the Bing Way Wie man Dinge anders findet 84

˜SELLER ComponentOne ActiveReports 8 inkl. MwSt...35 Real World Windows Azure . azure8.2014 Lösung Für Leser, die bereits meinen ersten Artikel gelesen ha-ben, liegt die Lösung

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ˜SELLER ComponentOne ActiveReports 8 inkl. MwSt...35 Real World Windows Azure . azure8.2014 Lösung Für Leser, die bereits meinen ersten Artikel gelesen ha-ben, liegt die Lösung

Deutschland 9,80 €Österreich 10,80 €Schweiz 19,50 sFr

www.windowsdeveloper.de

8.2014

Wer suchet, der findet 25Bing als Plattform der Möglichkeiten

Augmented Reality mit Bing Maps 15Entwicklung von AR-Apps

Wo bin ich? 19Location-based Services mit Bing Maps

Bing | JavaScript | Azure | Sicherheit | Tools | SharePoint | Windows Phone 8.1 | Games

Wolkig statt lokal

Entwickeln und testen in der Microsoft-Cloud

67

Ausblick auf ASP.NET vNext

Die neue Runtime: Alles bleibt besser

49

0800 186 07 06Vertriebs-Hotline:

/update/2014/08

Hauptsitz in den USA ComponentSource650 Claremore Prof WaySuite 100WoodstockGA 30188-5188USA

Zahlungen auf Rechnung und per Inlandsüberweisung auch gerne angenommen.

Hauptsitz in Europa ComponentSource30 Greyfriars RoadReadingBerkshireRG1 1PE Großbritannien

Hauptsitz in Japan ComponentSource3F Kojimachi Square Bldg3-3 Kojimachi Chiyoda-kuTokyoJapan102-0083 www.componentsource.com

www.componentsource.com

© 1996-2014 ComponentSource. Alle Rechte vorbehalten. Alle Preise waren zum Zeitpunkt der Veröffentlichung dieses Dokuments korrekt. Online-Preise können sich aufgrund von Schwankungen und online angebotenen Preisnachlässen ändern.

Xamarin.iOS and Xamarin.Android ab 862 € inkl. MwSt

Native iOS- und Android-Apps vollständig in Visual Studio schreiben.

• Den gesamten Code in C# schreiben

• Bis zu 90% des Codes für iOS, Android u. Windows Phone verwenden

• Enthält das optisch anspruchsvolle neue IDE Xamarin Studio

• Unterstützt App Store und Enterprise Distribution

• Vorentwickelte App-Komponenten zur Verkürzung der Entwicklungszeit

BEST-SELLER

Das komplette Angebot an DevExpress .NET-Controls und Bibliotheken für alle wichtigen Microsoft-Plattformen, einschließlich WinForms, ASP.NET, WPF, Silverlight und Windows 8.

• Neu! WinForms-Spreadsheet-Control bietet benutzerfreundliche Excel-ähnliche Funktionen

• Neu! WinForms Map Control unterstützt eine unbegrenzte Anzahl von Ebenen und Datenbindungen

• Neu! Live Tile Manager schlägt eine Brücke zwischen vorhandenen WinForms-Anwendungen und Windows 8

• Neu! WinForms-Editoren: Tree-List Lookup, Sparkline und Popup Gallery

• Neu! Touch-fähiges Theme für WPF & Silverlight

• ASP.NET GridView, DataView, NewsControl und ImageGallery unterstützen die endlose Paginierung

• Neu! ASP.NET-Bildgalerie-Control mit Unterstützung für Touch-Fingerbewegungen

• Neu! MVC Image Slider-, File Manager- und Captcha-Erweiterungen

• Neu! Diagramm-Assistent für WPF

• Visual Studio-Vorlagengalerie vereinheitlicht die Verwendung von DevExpress-Vorlagen

Mehr über DevExpress DXperience und preisgekrönte DevExpress-Produkte unter:www.componentsource.com/features/devexpress

DevExpress DXperience 14.1 ab 1.293 € inkl. MwSt#1 SELLER

ComponentOne ActiveReports 8 ab 1.407 € inkl. MwSt

Preisgekröntes .NET-Reporting-Tool für HTML5, WPF, WinForms, ASP.NET & Windows Azure.

• Anspruchsvolle, schnelle und leistungsstarke Berichte erstellen

• Flexible Layouts mit Section-, Region- und Fixed-Seitendesignern generieren

• Neuen skalierbaren und verteilten Unternehmensserver mit Lastenausgleich testen

• Brandaktuelle HTML5- und touch-optimierte Report-Viewer für mobile Geräte nutzen

• Eine Vielzahl an Datenvisualisierungsoptionen, einschl. Diagramme, Karten usw., testen

BEST-SELLER

Die Plattform

© S

&S

Med

ia

© iS

tock

foto

.co

m/B

lack

mo

on

9

window

s.develop

er 8.20

14

Bin

g | JavaScript | Azu

re | Sicherh

eit | Tools | ShareP

oint | Win

dows P

hon

e 8.1 | G

ames

Google Hacking, the Bing Way

Wie man Dinge anders fi ndet

84

Page 2: ˜SELLER ComponentOne ActiveReports 8 inkl. MwSt...35 Real World Windows Azure . azure8.2014 Lösung Für Leser, die bereits meinen ersten Artikel gelesen ha-ben, liegt die Lösung

34

azure . Real World Windows Azure

8.2014

von Roland Krummenacher

Ziel dieser Serie ist, dass Sie die Möglichkeiten der Azure- Dienste für Ihre eigenen Applikationen erkennen und deren Konzept verstehen. Ich begleite die fünf Arti-kel auf meinem Blog, wo Sie weitere Informationen und Links für die technische Umsetzung �nden [1].

Das ProblemEin Kollege sagte mir einmal: „Die besten Client-Re-quests sind diejenigen, die gar nie bis zu unserem Ser-ver gelangen“. Was er damit meinte, erklärte er mir so: Eine Webapplikation liefert statischen und dynamischen Inhalt aus. Zum statischen Inhalt gehören Style-Sheet-Dateien, JavaScript-Dateien, Bilder, Videos und andere Mediendateien, aber auch statisches HTML wie Head-er, Footer und Layout. Dynamischer Inhalt wird zur Laufzeit generiert, typischerweise aus Daten, die in einer Datenbank gespeichert sind. Die Frage ist nun: Wieso muss unser Webserver den statischen Inhalt ausliefern? Ist das nicht eine Verschwendung von Bandbreite und CPU-Zeit unseres Webservers? Können wir diesen sta-tischen Inhalt nicht irgendwo im Internet auslagern, wenn möglich sogar näher zum Client, damit diese Da-ten schneller geladen werden?

Artikelserie

Teil 1: Azure Storage als Zwischenspeicher für den DatenaustauschTeil 2: Fernüberwachung via CloudTeil 3: Aufbereitung von Daten als JSON-Read Models in der CloudTeil 4: Taktgeber aus der CloudTeil 5: Sammeln von Client-Log-Dateien in der Cloud

Aufbereitung von statischen und dynamischen Daten in der Cloud

Von CDN nach CQRSIn dieser fünfteiligen Artikelserie beschäftigen wir uns mit der folgenden Frage: Wie kön-nen wir Azure-Dienste sinnvoll und sicher in Nicht-Cloud-Applikationen einsetzen? Ich zeige anhand von Beispielen aus meinem Projektalltag verschiedene Szenarien, in denen Cloud-Dienste eine Lösung für gängige Probleme lokaler Applikationen bieten. In diesem dritten Artikel der Serie geht es darum, wie wir Inhalte von unseren Applikationen in die Wolke auslagern können.

© iS

tock

pho

to.c

om

/po

lyg

rap

hus

Page 3: ˜SELLER ComponentOne ActiveReports 8 inkl. MwSt...35 Real World Windows Azure . azure8.2014 Lösung Für Leser, die bereits meinen ersten Artikel gelesen ha-ben, liegt die Lösung

35

Real World Windows Azure . azure

www.windowsdeveloper.de8.2014

Die LösungFür Leser, die bereits meinen ersten Artikel gelesen ha-ben, liegt die Lösung auf der Hand: Wir lagern stati-schen Inhalt in die Cloud aus (Abb. 1). Dafür verwenden wir den Dienst Azure Storage, der es uns erlaubt, diese statischen Dateien in der Cloud zu speichern und via HTTP direkt in den Browser zu laden. Listing 1 zeigt uns ein einfaches Beispiel anhand einer HTML-Seite, die statischen Inhalt aus der Cloud lädt. Im Header wer-den die JavaScript-Datei für jQuery und die CSS-Datei des Bootstrap-Frameworks von einem Content Delive-ry Network geladen (Kasten: „Content Delivery Net-work“). Dann wird ein Bild direkt vom Azure BLOB Storage geladen. Zum Schluss wird noch mittels jQue-ry-Get-Funktion statisches HTML vom Azure BLOB Storage in die Seite nachgeladen. Hierfür muss eine ent-sprechende Cross Origin Resource Sharing Policy auf dem BLOB Storage eingerichtet sein. Weitere Informati-onen dazu �nden Sie auf meinem Blog [1].

Das Auslagern von statischem Inhalt in die Cloud hat neben der Entlastung unseres Webservers noch weitere Vorteile: Mithilfe von Content Delivery Networks kann dieser Inhalt auf der ganzen Welt zwischengespeichert werden und ist damit sehr viel schneller geladen. Kun-den in Amerika oder Asien müssen nur noch den dyna-mischen Inhalt von unserem Webserver in Europa laden. Die großen Script- und Mediendaten werden hochper-formant von einem Content-Delivery-Datencenter in ihrer Nähe bereitgestellt. Auch öffentliche Daten aus dem Azure BLOB Storage können mittels Azure CDN weltweit verteilt werden. Ein weiterer Vorteil beim Aus-lagern von statischem Inhalt in die Cloud zeigt sich beim Verwalten und Streaming von Videodateien. Die Azure Media Services können Videodateien live oder On-Demand für Flash, HTML5, iOS, Android und Xbox streamen – inklusive Video-Encoding in der Cloud und wahlweise mit Digital Rights Management [3].

BeurteilungDass wir statischen Inhalt in die Cloud und auf ein Content Delivery Network auslagern können, ist nicht neu, und dank den Caching-Funktionalitäten der Brow-ser und Internet-Service-Provider ist das Sparpotenzial auch nicht riesig. Aber in dieser Artikelserie denken wir immer etwas über den Tellerrand hinaus: Wenn wir statischen Inhalt in die Cloud auslagern können, wieso nicht auch dynamischen Inhalt? Nehmen wir zum Bei-spiel den Produktkatalog eines Webshops. Er besteht aus verschiedenen Artikeln. Jeder Artikel besitzt eine Artikelnummer, eine Kurz- und eine Detailbeschreibung sowie mehrere Bilder. Diese Daten sind dynamischer Inhalt, sie werden aus der Artikeldatenbank geladen. Solche Daten können wir jedoch auch auf den Azure Storage auslagern. Abbildung 2 zeigt uns den Aufbau: Wir speichern nur noch die Artikelnummer in unserer Datenbank. Die gesamten Artikelinformationen stehen im BLOB Storage und werden via JavaScript direkt von dort in den Browser nachgeladen. Für Textinhalte kann

man wahlweise direkt HTML verwenden, XML oder JSON, wodurch sich diese Lösung auch ideal als Back-end für Single-Page-Applikationen anbietet. Ändert sich jetzt die Beschreibung eines Artikels, können die Infor-mationen direkt im Azure Storage geändert werden.

Abb. 1: Statischen Inhalt aus der Cloud laden

Abb. 2: Dynamischen Inhalt aus der Cloud laden

Listing 1

<html> <head> <script src="//code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> <link rel="stylesheet" media="screen" href="//netdna.bootstrapcdn.com/ bootstrap/3.1.1/css/bootstrap.min.css"> </head> <body> <img src="http://rwwa.blob.core.windows.net/rwwa3/myimage.jpg"> <div id="desc"></div> <script type="text/javascript"> $(document).ready(function () { $.get('http://rwwa.blob.core.windows.net/rwwa3/description.html', function (data) { $("#desc").html(data); }); }); </script> </body></html>

Von CDN nach CQRS

Page 4: ˜SELLER ComponentOne ActiveReports 8 inkl. MwSt...35 Real World Windows Azure . azure8.2014 Lösung Für Leser, die bereits meinen ersten Artikel gelesen ha-ben, liegt die Lösung

36

azure . Real World Windows Azure

8.2014

Stammt die Artikelbeschreibung von einem externen Lieferanten, kann der Azure Storage auch in den Enter-prise-Application-Integration-Prozess (EAI) aufgenom-men werden, zum Beispiel mit Microsoft BizTalk Server (lokal) oder Azure BizTalk Services (Cloud).

Read Models in der CloudGehen wir noch einen Schritt weiter und sagen: Alle Daten werden via Cloud Storage ausgeliefert. Wir un-terteilen unsere Applikation dazu nach dem Command-Query-Separation-Prinzip (CQS): Queries geben ein Resultat für eine Abfrage zurück, ändern aber nichts am Zustand eines Systems. Commands führen eine Zu-standsänderung aus, besitzen aber keinen Rückgabe-wert. In ASP.NET MVC ist diese Unterteilung in der Regel einfach: Wenn Sie ein Formular absenden, führen Sie einen Command aus, wenn Sie das Resultat einer Abfrage darstellen, eine Query. Wir können also Que-ry-Resultate aus der Datenbank laden, als so genannte Read Models für die Darstellung im Client aufbereiten und im Azure BLOB Storage zwischenspeichern. Abbil-dung 3 zeigt das Verfahren. Commands werden vom Client an den Server gesendet. Der Server verarbeitet

Content Delivery Network

Ein Content Delivery Network, abgekürzt CDN, erlaubt es Softwareent-wicklern, öffentliche Daten an verschiedenen Orten auf der Welt zu cachen. CDNs bestehen aus verschiedenen Datencentern, so genannten CDN Edges oder Endpoints. Diese Datencenter sind im Internet strate-gisch zentral gelegen und dafür optimiert, die Inhalte mit möglichst wenig Latenzzeit und möglichst großer Bandbreite ausliefern zu können. Fragt ein Benutzer nach einem bestimmten Inhalt, wird er via DNS-Protokoll an den nächstgelegenen verfügbaren CDN Endpoint geroutet. Dabei wer-den die Latenzzeit und weitere Faktoren, wie die aktuelle Belastung des Internets, berücksichtigt. CDNs können nur für öffentliche Inhalte genutzt werden, also Daten, die im Internet von allen eingesehen werden dürfen. Nicht öffentliche Daten sollten aus Sicherheitsgründen nicht via CDN übermittelt werden. Das Microsoft Azure CDN besteht zum Zeitpunkt des Verfassens dieses Artikels aus 29 Endpoints [2].

Abb. 3: Read Models in der Cloud

das Command und speichert die Zustandsänderung in der Datenbank. Die geänderten Daten werden dann in der Cloud gespeichert. Für eine Abfrage (Query) holt sich der Client das entsprechende JSON Read Model vom Azure Storage und stellt es dar. Der Server wird davon entlastet.

Diese Lösung lässt sich noch weiter optimieren: Man könnte anstelle des Azure BLOB Storage den Azure Table Storage verwenden, der ebenfalls über eine JSON/REST-Schnittstelle verfügt, aber im Gegensatz zum BLOB Storage die Daten strukturiert ablegt und damit rudimentäre Abfrageoperationen wie Filtern oder Projektionen auf den Daten ermöglicht. Weiter wäre es auch denkbar, die Commands asynchron via Cloud an den Server zu senden, zum Beispiel über den Azure- Service-Bus-Messaging-Dienst. Dies führt letzt-lich zu einer Architektur, die am Command Query-Responsibility-Segregation-Prinzip (CQRS) angelehnt ist. Informationen zu CQRS �nden Sie unter [4] und im Zusammenhang mit Azure auf meinem Blog [1].

FazitDieser dritte Artikel in der Serie „Real World Azure“ zeigt, wie wir statischen und dynamischen Inhalt in die Cloud auslagern können, um unsere Applikationen per-formanter und skalierbarer zu machen. Dazu verwen-den wir den Azure Storage und, für öffentliche Inhalte, Content-Delivery-Netzwerke. Das Prinzip wurde in diesem Artikel anhand von Webapplikationen vorge-stellt. Es lässt sich aber auch auf Desktop-, Service- oder Embedded-Applikationen adaptieren, die Daten von ei-nem Backend beziehen. Im nächsten Artikel werden wir sehen, wie die Zuverlässigkeit und Skalierbarkeit von zeitgesteuerten Prozessen dank dem Azure Scheduler verbessert werden kann.

Links & Literatur

[1] http://rolandkru.azurewebsites.net/rwwa3

[2] http://msdn.microsoft.com/en-us/library/azure/gg680302.aspx

[3] http://azure.microsoft.com/en-us/solutions/media/#getstarted

[4] http://codebetter.com/gregyoung/2009/08/13/command-query-separation/

Roland Krummenacher arbeitet als Softwarearchitekt und Win-dows-Azure-Experte bei der bbv Software Services AG. Seine Schwerpunkte sind .NET-Architekturen, Cloud Computing und agi-le Prozesse.

[email protected] @rolandkru

Page 5: ˜SELLER ComponentOne ActiveReports 8 inkl. MwSt...35 Real World Windows Azure . azure8.2014 Lösung Für Leser, die bereits meinen ersten Artikel gelesen ha-ben, liegt die Lösung

WindoWs3

developer Jetzt 3 Top-VorTeile sichern!

Alle Printausgaben frei Haus erhalten

Intellibook-ID kostenlos anfordern (www.intellibook.de)

Abo-Nr. (aus Rechnung oder Auftrags bestätigung) eingeben

Zugriff auf das komplette PDF-Archiv mit der Intellibook-ID

www.windowsdeveloper.de

1

2

3

Jetzt abonnieren!

www.windowsdeveloper.de