Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
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
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
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
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
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