Windows Azure

Entwickeln und Bereitstellen von Windows Azure-Anwendungen in Visual Studio 2010

Jim Nakashima, Hani Atassi, Danny Thorpe

Es gibt viele Gründe, Anwendungen oder Dienste auf Windows Azure, der Microsoft Cloud-Dienste-Plattform, bereitzustellen. Dazu gehören Reduzierung der Betriebs- und Hardwarekosten, indem Sie nur das bezahlen, was Sie tatsächlich nutzen, Erstellen von Anwendungen, die fast unbegrenzt skaliert werden können, riesige Speicherkapazitäten, geografischer Standort und vieles mehr.

Doch eine Plattform ist nur dann intellektuell ansprechend, wenn Entwickler sie tatsächlich verwenden können. Entwickler sind das Herz und die Seele jeder Plattformversion – die Definition einer erfolgreichen Version ist die große Anzahl von Entwicklern, die Anwendungen und Dienste darauf bereitstellen. Microsoft hat sich immer bemüht, mit Visual Studio die beste Entwicklungsumgebung für verschiedene Plattformen zu bieten – ob nun etablierte oder neue – und das gilt auch für das Cloud Computing. Microsoft hat direkte Unterstützung für Windows Azure-Anwendungen in Visual Studio 2010 und Visual Web Developer 2010 Express hinzugefügt.

In diesem Artikel werden Sie durch die Verwendung von Visual Studio 2010 während des gesamten Entwicklungsprozesses der Windows Azure-Anwendung geführt. Selbst wenn Sie derzeit kein Visual Studio verwenden, können Sie die Entwicklung mit Windows Azure unter Verwendung der Windows Azure-Unterstützung in Visual Web Developer 2010 Express kostenlos testen.

Erstellen eines Cloud-Diensts

Klicken Sie in Visual Studio 2010 im Menü File auf New | Project, um das Dialogfeld New Project anzuzeigen. Wählen Sie unter Installed Templates | Visual C# (oder Visual Basic) den Knoten Cloud aus. Daraufhin wird die Projektvorlage Enable Windows Azure Tools angezeigt. Klicken Sie darauf, um eine Seite mit einer Schaltfläche anzuzeigen, mit der Sie die Windows Azure-Tools für Visual Studio installieren können.

Vor der Installation der Windows Azure-Tools müssen Sie IIS auf dem Rechner installieren. IIS wird von der lokalen Entwicklungssimulation der Cloud verwendet. Die einfachste Möglichkeit zur Installation von IIS ist der Web Platform Installer, der unter microsoft.com/web verfügbar ist. Wählen Sie die Registerkarte Platform, und klicken Sie, um die empfohlenen Produkte im Webserver zu übernehmen.

Laden Sie die Windows Azure-Tools herunter, installieren Sie sie und starten Sie Visual Studio neu. Sie sehen nun, dass die Projektvorlage Enable Windows Azure Tools durch die Projektvorlage Windows Azure Cloud Service ersetzt wurde. Wählen Sie diese Vorlage aus, um das in Abbildung 1 dargestellte Dialogfeld New Cloud Service Project anzuzeigen. In diesem Dialogfeld können Sie einem Cloud-Dienst Rollen hinzufügen.

Abbildung: Hinzufügen von Rollen zu einem neuen Cloud-Dienst-Projekt

Abbildung 1 Hinzufügen von Rollen zu einem neuen Cloud-Dienst-Projekt

Eine Windows Azure-Rolle ist eine individuell skalierbare Komponente, die in der Cloud ausgeführt wird, wobei jede Instanz einer Rolle einer virtuellen Computer-Instanz (VM-Instanz) entspricht.

Es gibt zwei Arten von Rollen:

  • Eine Web-Rolle ist eine Webanwendung, die auf IIS ausgeführt wird. Der Zugriff erfolgt über einen HTTP- oder HTTPS-Endpunkt.
  • Eine Worker-Rolle ist eine Hintergrundverarbeitungs-Anwendung, die beliebigen .NET-Code ausführt. Sie hat außerdem die Fähigkeit, mit dem Internet verbundene und interne Endpunkte zur Verfügung zu stellen.

Ein praktisches Beispiel: Man kann eine Web-Rolle in seinem Cloud-Dienst haben, die eine Website implementiert, welche die Benutzer über eine URL wie beispielsweise "http://[name].cloudapp.net" erreichen können. Außerdem kann man über eine Worker-Rolle verfügen, die Daten verarbeitet, die von dieser Web-Rolle verwendet werden.

Man kann die Anzahl der Instanzen pro Rolle unabhängig voneinander festlegen, z. B. drei Web-Rolleninstanzen und zwei Worker-Rolleninstanzen; dies entspricht drei VMs in der Cloud, die die Web-Rolle ausführen, und zwei VMs in der Cloud, die die Worker-Rolle ausführen.

Sie können das Dialogfeld New Cloud Service Project verwenden, um einen Cloud-Dienst mit einer beliebigen Anzahl von Web- und Worker-Rollen zu erstellen, und eine andere Vorlage für jede Rolle anwenden. Sie können festlegen, mit welcher Vorlage Sie die jeweilige Rolle erstellen möchten. Sie können eine Web-Rolle beispielsweise mit folgenden Vorlagen erstellen: ASP.NET Web Role, WCF Service Role, ASP.NET MVC Role.

Nachdem Sie die Rollen zum Cloud-Dienst hinzugefügt und auf OK geklickt haben, erstellt Visual Studio eine Lösung, die das Cloud-Dienstprojekt sowie ein Projekt für jede von Ihnen hinzugefügte Rolle umfasst. In Abbildung 2 sehen Sie ein Beispiel für einen Cloud-Dienst, der zwei Web-Rollen und eine Worker-Rolle enthält.

Abbildung: Für Rollen im Cloud-Dienst erstellte Projekte

Abbildung 2 Für Rollen im Cloud-Dienst erstellte Projekte

Die Web-Rollen sind ASP.NET Web-Anwendungsprojekte mit nur wenigen Unterschieden. WebRole1 enthält Verweise auf die folgenden Assemblys, die in einer standardmäßigen ASP.NET Web-Anwendung nicht referenziert sind:

  • Microsoft.WindowsAzure.Diagnostics (Diagnose und Protokollierung von APIs)
  • Microsoft.WindowsAzure.ServiceRuntime (Umgebungs- und Laufzeit-APIs)
  • Microsoft.WindowsAzure.StorageClient (.NET-API zum Zugriff auf die Windows Azure-Speicherdienste für BLOBs, Tabellen und Warteschlangen)

Die Datei WebRole.cs enthält Code zum Einrichten von Protokollierung und Diagnose sowie eines Ablaufverfolgungslisteners in web.config/app.config, mit dessen Hilfe Sie die standardmäßige .NET-Protokollierungs-API verwenden können.

Das Cloud-Dienstprojekt dient als Bereitstellungsprojekt; es listet die im Cloud-Dienst enthaltenen Rollen sowie die Definitions- und Konfigurationsdateien auf. Es stellt Windows Azure-spezifische Ausführungs-, Debugging- und Veröffentlichungsfunktionen bereit.

Nachdem die Projekterstellung abgeschlossen ist, ist es ganz einfach, Rollen im Cloud-Dienst hinzuzufügen oder zu entfernen. Um weitere Rollen zu diesem Cloud-Dienst hinzuzufügen, klicken Sie mit der rechten Maustaste auf den Knoten Roles, und wählen Sie Add | New Web Role Project oder Add | New Worker Role Project aus. Bei Auswahl einer dieser beiden Optionen wird das Dialogfeld Add New Role geöffnet, in dem Sie festlegen können, welche Projektvorlage Sie beim Hinzufügen der Rolle verwenden möchten.

Sie können ein ASP.NET Web-Rollenprojekt zur Lösung hinzufügen, indem Sie mit der rechten Maustaste auf den Knoten Roles klicken, in der Lösung Add | New Web Role Project auswählen und das Projekt angeben, das als Web-Rolle verknüpft werden soll.

Zum Löschen wählen Sie die Rolle einfach aus und drücken die Taste ENTF. Anschließend kann das Projekt entfernt werden.

Sie können auch mit der rechten Maustaste auf die Rollen unter dem Knoten Roles klicken und Properties wählen, um die Registerkarte Configuration für diese Rolle anzuzeigen (siehe Abbildung 3). Auf der Registerkarte Configuration können Sie ganz einfach die Werte in den Dateien ServiceConfiguration.cscfg und ServiceDefinition.csdef ändern oder hinzufügen.

Abbildung 3: Konfigurieren einer Rolle

Abbildung 3: Konfigurieren einer Rolle

Beim Entwickeln für Windows Azure muss das Cloud-Dienstprojekt in Ihrer Lösung das Startprojekt sein, damit das Debugging ordnungsgemäß funktioniert. Ein Projekt ist das Startprojekt, wenn es im Projektmappen-Explorer fett dargestellt ist. Um das aktive Projekt festzulegen, klicken Sie mit der rechten Maustaste auf das Projekt und legen es als Startprojekt fest.

Daten in der Cloud

Nachdem Sie nun Ihre Lösung für Windows Azure eingerichtet haben, können Sie Ihre ASP.NET-Erfahrung nutzen, um Ihre Anwendung zu entwickeln.

Während der Codierung sollten Sie das Windows Azure-Modell berücksichtigen, damit Ihre Anwendung skalierbar wird. Zur Handhabung von zusätzlichem Verkehr für Ihre Anwendung erhöhen Sie die Anzahl der Instanzen für jede Rolle. Das bedeutet, dass Anforderungen mittels Lastenausgleich auf die Rollen verteilt werden – und dies wirkt sich darauf aus, wie Sie Ihre Anwendung konzipieren und implementieren.

Insbesondere wirkt es sich darauf aus, wie Sie Ihre Daten aufrufen und speichern. Viele herkömmliche Datenspeicherungs- und -abrufmethoden sind nicht skalierbar und somit für Clouds ungeeignet. Beispielsweise sollten Daten in einer Cloud nicht im lokalen Dateisystem gespeichert werden, da dieses nicht skaliert werden kann.

Um die Skalierungsmöglichkeiten der Cloud nutzen zu können, müssen Sie die neuen Speicherdienste berücksichtigen. Windows Azure Storage bietet skalierbare BLOB-, Warteschlangen- und Tabellenspeicherdienste, und Microsoft SQL Azure stellt einen Cloud-basierten relationalen Datenbankdienst zur Verfügung, der auf SQL Server-Technologien aufbaut. BLOBs werden für die Speicherung von benannten Dateien zusammen mit Metadaten verwendet. Der Warteschlangendienst bietet zuverlässige Speicherung und Übermittlung von Nachrichten. Der Tabellendienst stellt einen strukturierten Speicher zur Verfügung, in dem eine Tabelle einem Satz von Entitäten entspricht, die jeweils einen Satz Eigenschaften enthalten.

Um Entwickler bei der Verwendung dieser Dienste zu unterstützen, wird das Windows Azure-SDK mit einem Entwicklungsspeicherdienst geliefert, der simuliert, wie diese Speicherdienste in der Cloud funktionieren. Das heißt, Entwickler können ihre Anwendungen mit Ausrichtung auf die Entwicklungsspeicherdienste schreiben und dabei dieselben APIs verwenden, die auf die Cloud-Speicherdienste ausgerichtet sind.

Debuggen

Um das lokale Ausführen und Debuggen unter Windows Azure zu demonstrieren, verwenden wir einige Beispiele aus code.msdn.microsoft.com/windowsazuresamples. Diese MSDN-Codesammlung enthält eine Reihe von Codebeispielen, die Ihnen den Einstieg in die Erstellung von skalierbaren Webanwendungen und -diensten, die unter Windows Azure laufen, erleichtern. Laden Sie die Beispiele für Visual Studio 2010 herunter und extrahieren Sie dann alle Dateien in ein Verzeichnis, auf das Sie Zugriff haben, z. B. Ihren Dokumentordner.

Development Fabric erfordert die Ausführung im erweiterten Modus, starten Sie deshalb Visual Studio 2010 als Administrator. Navigieren Sie dann zu dem Verzeichnis, in das Sie die Beispiele extrahiert haben, und öffnen Sie die Lösung "Thumbnails", einen Beispieldienst, der die Verwendung einer Web-Rolle und einer Worker-Rolle sowie die Verwendung der StorageClient-Bibliothek zur Interaktion mit dem Warteschlangen- und dem BLOB-Dienst veranschaulicht.

Wenn Sie die Lösung öffnen, werden Sie drei verschiedene Projekte sehen. Thumbnails ist der Cloud-Dienst, der zwei Rollen beinhaltet: Thumbnails_WebRole und Thumbnails_WorkerRole. Thumbnails_WebRole ist das Web-Rollenprojekt, das Benutzern eine Front-End-Anwendung zum Hochladen bereitstellt; dies fügt ein Arbeitselement zur Warteschlange hinzu. Thumbnails_WorkerRole ist das Worker-Rollenprojekt, das das Arbeitselement aus der Warteschlange abruft und im vorgegebenen Verzeichnis Miniaturansichten (Thumbnails) erstellt.

Fügen Sie einen Haltepunkt zur Methode submitButton_Click in der Datei Default.aspx.cs hinzu. Dieser Haltepunkt wird ausgelöst, wenn der Benutzer ein Bild auf der Seite auswählt und absendet.

protected void submitButton_Click(
  object sender, EventArgs e) {
  if (upload.HasFile) {
    var name = string.Format("{0:10}", DateTime.Now.Ticks, 
      Guid.NewGuid());
    GetPhotoGalleryContainer().GetBlockBlob(name).UploadFromStream(upload.FileContent);

Fügen Sie nun einen Haltepunkt in die Run-Methode der Worker-Datei (WorkerRole.cs) ein, direkt nach dem Code, der versucht, eine Nachricht aus der Warteschlange abzurufen und überprüft, ob tatsächlich eine vorhanden ist. Dieser Haltepunkt wird ausgelöst, wenn die Web-Rolle eine Nachricht in die Warteschlange stellt, die vom Worker abgerufen wird.

while (true) {
  try {
    CloudQueueMessage msg = queue.GetMessage();
    if (msg != null) {
      string path = msg.AsString

Zum Debuggen der Anwendung rufen Sie das Menü Debug auf und wählen Debuggen starten. Visual Studio erstellt das Projekt, startet Development Fabric, initialisiert den Entwicklungsspeicher (bei der ersten Ausführung), erstellt das Paket für die Bereitstellung, hängt es an alle Rolleninstanzen an und startet dann den Browser mit Verweis auf die Web-Rolle (siehe Abbildung 4).

Abbildung: Ausführen des Beispiels Thumbnails

Abbildung 4 Ausführen des Beispiels Thumbnails

An diesem Punkt sehen Sie, dass der Browser auf die Web-Rolle verweist und dass im Infobereich der Taskleiste angezeigt wird, dass die Development Fabric gestartet wurde. Development Fabric ist eine Simulationsumgebung, die Rolleninstanzen auf Ihrem Computer in etwa so ausführt wie in einer echten Cloud.

Klicken Sie mit der rechten Maustaste auf das Windows Azure-Infosymbol in der Taskleiste, und wählen Sie Show Development Fabric UI. Daraufhin wird die Anwendung Development Fabric gestartet, mit deren Hilfe Sie verschiedene Vorgänge für Ihre Bereitstellungen durchführen können, z. B. Protokolle anzeigen und Bereitstellungen neu starten oder löschen (siehe Abbildung 5). Beachten Sie, dass Development Fabric eine neue Bereitstellung enthält, die eine Web-Rolleninstanz und eine Worker-Rolleninstanz beinhaltet.

Abbildung: Development Fabric

Abbildung 5 Development Fabric

Werfen Sie einen Blick auf die Prozesse, die Visual Studio angehängt hat (Debug/Windows/Processes); es sind drei vorhanden: WaWebHost.exe, WaWorkerHost.exe, iexplore.exe.

WaWebHost (Windows Azure Webinstanz-Host) und WaWorkerHost (Windows Azure Workerinstanz-Host) beinhaltet die Web-Rolleninstanz bzw. die Worker-Rolleninstanz. In der Cloud wird jede Instanz auf ihrer eigenen VM gehostet, während bei der lokalen Entwicklungssimulation jede Rolleninstanz in einem separaten Prozess gehostet wird und Visual Studio allen einen Anhang hinzufügt.

Standardmäßig verwendet Visual Studio den Managed Debugger zum Anhängen. Wenn Sie einen anderen verwenden möchten, z. B. den systemeigenen Debugger, wählen Sie ihn in den Eigenschaften des entsprechenden Rollenprojekts aus. Für Web-Rollenprojekte befindet sich die Debugger-Option auf der Registerkarte Web der Projekteigenschaften. Für Worker-Rollenprojekte befindet sich die Option auf der Registerkarte Debug der Projekteigenschaften.

Standardmäßig verwendet Visual Studio das Skriptmodul zum Anhängen an Internet Explorer. Zum Debuggen von Silverlight-Anwendungen müssen Sie den Silverlight-Debugger in den Web-Rollenprojekteigenschaften aktivieren.

Wählen Sie ein Bild aus, das Sie hochladen möchten, und klicken Sie auf Submit. Visual Studio stoppt an dem Haltepunkt, den Sie in die Methode submitButton_Click eingefügt haben, und stellt Ihnen alle Debuggingfunktionen zur Verfügung, die Sie von Visual Studio erwarten. Drücken Sie F5, um fortzufahren. Die Methode submitButton_Click erzeugt einen eindeutigen Namen für die Datei, lädt den Bild-Stream in den BLOB-Speicher hoch und fügt eine Nachricht in die Warteschlange ein.

Nun sehen Sie, dass Visual Studio an dem in der Worker-Rolle festgelegten Haltepunkt pausiert, was bedeutet, dass der Worker eine Nachricht aus der Warteschlange empfangen hat und zur Bildverarbeitung bereit ist. Auch hier stehen Ihnen alle zu erwartenden Debuggingfunktionen zur Verfügung.

Drücken Sie F5, um fortzufahren. Der Worker ruft den Dateinamen aus der Nachrichtenwarteschlange ab, empfängt den Bild-Stream vom BLOB-Dienst, erstellt ein Miniaturbild und lädt das neue Miniaturbild in das Thumbnail-Verzeichnis des BLOB-Diensts, das von der Web-Rolle angezeigt wird.

Bereitstellung

Nachdem Sie nun Ihre Anwendung lokal erstellt, bearbeitet und debuggt haben, können Sie sie in der Cloud bereitstellen. Wir empfehlen folgende Vorgehensweise beim Bereitstellen einer Anwendung in Windows Azure:

  • Machen Sie die Anwendung lokal in der Windows Azure Development Fabric unter Verwendung des lokalen Speichers ausführungsbereit.
  • Führen Sie die Anwendung lokal in der Development Fabric unter Verwendung eines Windows Azure-Speicherkontos aus.
  • Führen Sie die Anwendung auf Windows Azure unter Verwendung eines Windows Azure-Speicherkontos aus.

In der ersten Phase können Sie die gesamte Entwicklung auf dem lokalen Computer mit der Development Fabric und dem Entwicklungsspeicher als Ersatz für die Windows Azure Cloud-Infrastruktur durchführen. Sie benötigen nicht einmal eine Netzwerkverbindung; Sie können die Windows Azure-Anwendungen und -Dienste komplett offline entwickeln und debuggen. In dieser ersten Phase schließen Sie etwa 70 Prozent der Projektentwicklung ab.

In der zweiten Phase ersetzen Sie den lokalen Speicherersatz durch den echten Windows Azure-Speicher, behalten aber die Debugging- und Diagnosevorteile der Ausführung des Windows Azure-Anwendungscodes in der lokalen Development Fabric bei. Sie können Haltepunkte in den Quellcode einfügen, den Quellcode Zeile für Zeile ausführen, Ausdrücke auswerten und Aufruflisten überprüfen, während die Windows Azure-Anwendung mit dem Cloud-Speicher interagiert. Sie verbringen etwa 20 bis 25 Prozent des Projektzyklus in dieser Phase, während Sie den Code weiterentwickeln und mit echten asynchronen Vorgängen aus der Praxis testen.

Wenn Sie bei Phase 3 angelangt sind, sollte die Windows Azure-Anwendung so gut wie fertig sein. Die Funktionen und der Code sollten vollständig abgeschlossen sein, bis auf die Fehlerbehebung. Konzentrieren Sie sich in dieser Phase auf das Testen und die Leistungsoptimierung. Wenn Ihre Windows Azure-Anwendung in der Cloud ausgeführt wird, haben Sie kein Quellcode-Debugging mehr zur Verfügung, dann müssen Sie die Diagnoseprotokolle auswerten.

Sie möchten wahrscheinlich nicht, dass die ganze Welt Ihre brandneue Windows Azure-Anwendung an der Ziel-URL sieht, sobald Sie sie in die Windows Azure-Cloud hochladen. Der Windows Azure Hosted Service erkennt mehrere Bereitstellungen im selben gehosteten Dienst. Jeder Windows Azure Hosted Service hat einen privaten Staging-Bereitstellungsbereich, in dem Sie Ihren Code in Ruhe in der Cloud testen können, und einen öffentlichen Produktionsbereitstellungsbereich, in dem Sie den getesteten Code zur Verwendung durch Ihre Kunden veröffentlichen können.

Auf die Staging-Bereitstellungen kann nur über eine eindeutige URL zugegriffen werden, die eine vom System zugewiesene GUID als Präfix aufweist. Produktionsbereitstellungen können das Ziel von benutzerdefinierten Domänennamenzuordnungen sein, um den Zugriff zu erleichtern.

Wechsel zum Windows Azure-Speicher

Nachdem der Thumbnails-Dienst auf dem lokalen Computer in der Developer Fabric läuft, lassen Sie uns mit einem Windows Azure-Speicherkonto in der Cloud weiterarbeiten. Dazu gehört, dass Sie ein Speicherkonto eröffnen und die Konfigurationsänderungen vornehmen, um den Thumbnails-Dienst mit dem Speicherkonto auszuführen. Die lokale Ausführung unter Verwendung eines Cloud-Speichers für die Daten ist eine großartige Möglichkeit, zu testen, ob der Code bei der Bereitstellung auf Windows Azure ausgeführt werden kann.

Navigieren Sie zuerst zum Windows Azure-Entwicklerportal (azure.microsoft.com/de-de/), und melden Sie sich mit Ihrer Live ID an. Wählen Sie auf der Seite New Service aus, und klicken Sie auf Storage Account. Geben Sie auf der Seite Create a Service (siehe Abbildung 6) einen Anzeigenamen für das Speicherkonto ein (dies ist nicht der Dienst-/Domänenname; diesen müssen Sie auf der nächsten Seite eingeben). Geben Sie optional eine Projektbeschreibung ein. Füllen Sie anschließend den Dienst-/Domänennamen auf der nächsten Seite aus (siehe Abbildung 7). Der Domänenname ist global, deshalb müssen Sie möglicherweise ein wenig probieren, bis Sie einen Namen haben, der nicht bereits von einem anderen Dienst verwendet wird. Klicken Sie auf Check Availability, um die Verfügbarkeit zu überprüfen.

Abbildung: Konfigurieren eines Speicherdiensts

Abbildung 6 Konfigurieren eines Speicherdiensts

 

Abbildung: Konfigurieren einer Speicherdomäne

Abbildung 7 Konfigurieren einer Speicherdomäne

Es empfiehlt sich, eine Zugehörigkeitsgruppe zu erstellen, um sicherzugehen, dass sich der Speicher und die gehosteten Dienste, die ihn verwenden, wenn möglich im selben Datencenter befinden. Zugehörigkeitsgruppen können auch eine Präferenz für eine geografische Region festlegen, sodass Dienst und Speicher so nahe wie möglich an der Zielgruppe sind, um die Netzwerkübertragungszeit zu minimieren.

Klicken Sie auf Create, um eine Zusammenfassung des neuen Speicherkontos anzuzeigen.

Nun müssen Sie dem Thumbnails-Dienst mitteilen, dass er das neue Speicherkonto verwenden soll, um die Miniaturansichten und die Bilder zu speichern. Doppelklicken Sie im Projektmappen-Explorer von Visual Studio unter Roles auf den Knoten Thumbnails_WebRole, um die Eigenschaftenseite zu öffnen. Klicken Sie auf die Registerkarte Settings, wählen Sie DataConnectionString, und klicken Sie auf die Bearbeitungsschaltfläche auf der rechten Seite der Rasterzeile. Daraufhin wird das Dialogfeld Storage Connection String (siehe Abbildung 8) geöffnet.

Abbildung: Eigenschaften der Speicherverbindungszeichenfolge

Abbildung 8 Eigenschaften der Speicherverbindungszeichenfolge

 Use development storage ist die Standardeinstellung für neue Azure-Projekte. Klicken Sie auf Enter storage credentials, und geben Sie Ihre Anmeldedaten für den Speicherdienst ein. Geben Sie im Feld Account name den Dienst-/Domänennamen an, den Sie beim Erstellen des Speicherdiensts gewählt haben. Dies ist der erste Teil der Domäne, im Beispiel thumbnails1138 (alles in Kleinbuchstaben).

Geben Sie im Feld Account key unter Primary Access Key den primären Zugriffsschlüssel ein, der auf der Zusammenfassungs-Webseite des Speicherdiensts angezeigt wird. Sie können den Text für den Schlüssel im Browser auswählen, kopieren und in das Bearbeitungsfeld AccountSharedKey einfügen.

Beachten Sie, dass Secondary Access Key denselben Zugriff auf Ihr Speicherkonto wie Primary Access Key ermöglicht und als Sicherheit dient, falls die Sicherheit des primären Zugriffsschlüssels beeinträchtigt wird. Durch Neuerstellen eines Schlüssels wird der alte Schlüssel ungültig gemacht, und man erhält mit dem alten Schlüssel keinen Zugriff mehr auf den Speicher.

Behalten Sie die Einstellungen für die Verbindungsendpunkte bei, um die standardmäßigen HTTPS-Endpunkte zu verwenden, und klicken Sie auf OK.

Wiederholen Sie diese Schritte unter Roles für Thumbnails_WorkerRole, sodass die Web-Rolle mit demselben Speicherdienst wie die Worker-Rolle kommuniziert. Wenn Sie mehrere Rollen aktualisieren möchten, können Sie die Verbindungszeichenfolge in die Zwischenablage kopieren und sie einfach in die Zelle DataConnectionString der anderen Rolleneigenschaftenseiten einfügen, um Zeit zu sparen.

Nachdem Sie festgelegt haben, dass die Web- und die Worker-Rolle den Windows Azure-Speicher verwenden, drücken Sie in Visual Studio die Taste F5, um den Cloud-Dienst zu debuggen und sicherzustellen, dass alles ordnungsgemäß funktioniert.

Die Webseiten-URL, die Sie debuggen, wird immer noch lokal gehostet, aber die URLs der Miniaturansichten (angezeigt im Eigenschaftendialogfeld) verweisen jetzt auf den Windows Azure-Speicher.

Beachten Sie, dass in dieser Entwicklungsphase (lokaler Dienst mit Cloud-Speicher) wahrscheinlich die geringste Leistung der drei Entwicklungsphasen zu erwarten ist. Phase 1 (lokal/lokal) funktioniert ganz flott, da sich alles auf demselben Computer befindet und die Benutzergruppe aus einer Person (Ihnen!) besteht. Phase 3 (Cloud/Cloud) hat den Vorteil der Cloud-Hardware und der Datencenter-Zugehörigkeit. In Phase 2 dagegen (lokal/Cloud) wird Code ausgeführt, der davon ausgeht, dass sich der Speicher in der Nähe befindet, doch die Daten liegen wahrscheinlich mehrere Netzwerk-Hops von der lokalen Ausführungsumgebung entfernt.

Bewerten Sie die Leistung Ihrer Anwendung nicht in der lokalen/Cloud-Konfiguration. Sie können diese Netzwerkverzögerung jedoch zu Ihren Gunsten nutzen: Verwenden Sie diese Phase als Belastungstest, um zu sehen, wie der Code mit langen Reaktionszeiten vom Speicherdienst umgeht. Wenn Sie für etwas einen synchronen Aufruf angegeben haben, der eigentlich asynchron sein sollte, werden Sie es sehr schnell bemerken.

Sobald in der lokalen/Cloud-Konfiguration alles läuft, können Sie den Code in einem gehosteten Windows Azure-Dienst bereitstellen.

Erstellen eines gehosteten Diensts

Um einen vollständig gehosteten Dienst zu erstellen, wechseln Sie zuerst zurück zum Windows Azure-Entwicklerportal und melden sich mit Ihrer Live ID an. Klicken Sie auf New Service und dann auf Hosted Services. Daraufhin gelangen Sie zu einer Seite, auf der Sie einen projektbezogenen Namen und eine Beschreibung angeben können, die im Entwicklerportal verwendet werden. Geben Sie eine Dienstbezeichnung (Label) und optional eine Dienstbeschreibung ein. Klicken Sie auf Next. Nun können Sie einen Domänennamen für das gehostete Dienstprojekt eingeben (siehe Abbildung 9). Legen Sie als Zugehörigkeitsgruppe die Thumbnails-Zugehörigkeitsgruppe fest, die Sie vorher für den Speicherdienst erstellt haben. Nachdem das Projekt erstellt wurde, wird eine Zusammenfassung für das Projekt angezeigt.

Abbildung: Konfigurieren eines gehosteten Diensts

Abbildung 9 Konfigurieren eines gehosteten Diensts

Zur Bereitstellung des Projekts von Visual Studio aus klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Thumbnails-Projektknoten und wählen Publish. Dieser Befehl erstellt ein Paket der Windows Azure-Binärdateien und der zugehörigen Dateien, öffnet Windows Explorer, um das lokale Verzeichnis anzuzeigen, in dem das Paket erstellt wurde, und startet den standardmäßigen Webbrowser, um zum Entwicklerportal zu gelangen.

Navigieren Sie von der Webseite des Entwicklerportals zur Zusammenfassungsseite für den gehosteten Thumbnails-Dienst, und klicken Sie unter Staging auf Deploy, um die Bereitstellungsseite Staging Deployment anzuzeigen (siehe Abbildung 10). Hier geben Sie das hochzuladende Paket und die Konfigurationsdatei an.

Abbildung: Auswahl des bereitzustellenden Pakets

Abbildung 10 Auswahl des bereitzustellenden Pakets

Sie können den Pfad aus dem von Visual Studio geöffneten Windows Explorer-Fenster in das Dialogfeld File Open kopieren, um die Auswahl des Dienstpakets (.cspkg) und der Dienstkonfigurationsdateien zu erleichtern.

Anschließend lädt das Portal das Paket hoch und stellt den Cloud-Service für das Staging bereit, wobei die Rollen den Status "Allocated" erhalten. Das bedeutet, dass die Windows Azure-Anwendung mit Datencenter-Hardware bereitgestellt wurde, aber noch nicht zur Ausführung geplant ist.

Um den Cloud-Dienst im Staging-Bereich zu testen, müssen Sie ihn ausführen. Klicken Sie auf Ausführen. Daraufhin wird die Web-Rolle initialisiert. Sobald die Web-Rolle bereit ist, ändert sich der Status in Started.

Es gibt Pläne, die Bereitstellung in der Cloud von Visual Studio künftig noch einfacher zu gestalten, aber dieser Ablauf bleibt bestehen, auch mit den neuen Funktionen.

Nachdem Ihre Rollen gestartet wurden, können Sie sie testen, indem Sie zur Staging-URL navigieren (die cloudapp.net-URL, die mit einer GUID beginnt).

Wenn Sie eine Anwendung im Datencenter bereitstellen, ist hinter den Kulissen Schwerstarbeit nötig. Geben Sie der Anwendung mindestens 10 Minuten Zeit, um vom Status Initializing zu Started zu wechseln. Sind Sie jetzt nicht froh, dass Sie die Developer Fabric auf Ihrem lokalen Computer haben?

Sobald Sie mit dem Cloud-Dienst beim Staging zufrieden sind, können Sie ihn in die Produktion übernehmen, indem Sie auf die in Abbildung 11 gezeigte Schaltfläche klicken.

Abbildung: Promotion-Schaltfläche

Abbildung 11 Promotion-Schaltfläche

Wenn die Details Ihrer Bereitstellung auf der Seite unter Production angezeigt werden, ist der Dienst in Betrieb und wird unter der endgültigen URL ausgeführt.

Wenn Sie ein Hotfix für die Anwendung testen müssen oder die Entwicklung parallel zur Ausführung der Produktionsbereitstellung weiterführen möchten, können Sie ein neues Paket für das Staging hochladen und es über die Staging-URL testen. Die Weiterleitung zur Produktion ist eigentlich ein Tausch: das Staging wechselt zur Produktion und die Version aus der Produktion wechselt zum Staging.

Obwohl Sie auch direkt in die Produktion hochladen können, ist es unbedingt zu empfehlen, die Anwendung immer zuerst im Staging auf Akzeptanz zu testen, bevor Sie sie in die Produktion übernehmen.

Beachten Sie, dass mehrere Bereitstellungen standardmäßig denselben Speicherdienst verwenden. Wenn Sie eine Datenisolation zwischen Produktion und Staging benötigen (beispielsweise damit die Datenbank für das Staging gelöscht werden kann, ohne die Produktionsdaten zu beeinflussen), müssen Sie die Speicherbindungen für jede Bereitstellung ändern, bevor Sie sie bereitstellen. Dies erfolgt normalerweise durch die Verwendung von zwei Speichersätzen und die Migration von Produktionsdaten in das Staging, bevor das Staging in die Produktion übernommen wird.

Aktualisieren der Dienstkonfiguration

Wenn Sie in Erwartung weiterer Lasten zusätzliche Instanzen Ihres Diensts zur Verfügung stellen möchten oder ungenutzte Instanzen herunterfahren möchten, können Sie die Entwicklungskonfiguration zu diesem Zweck im Handumdrehen ändern. Sie müssen nicht das gesamte Paket erneut bereitstellen, nur die Konfigurationsdatei für den Dienst. Klicken Sie im Portal auf Configure, um die Dienstkonfiguration (cscfg) zu aktualisieren, indem Sie entweder eine neue in Visual Studio erstellte Dienstkonfigurationsdatei hochladen oder den im Entwicklerportal verfügbaren Editor verwenden.

Fügen Sie nun einen HTTPS-Endpunkt zur Thumbnails-Anwendung hinzu. Dieser Vorgang erfolgt in drei Schritten. Sie müssen den Endpunkt konfigurieren, das Zertifikat konfigurieren und das Zertifikat hochladen.

Zur Konfiguration des Endpunkts öffnen Sie die Konfigurationsoberfläche der Web-Rolle, indem Sie im Projektmappen-Explorer unter Roles auf den Knoten Thumbnails_WebRole klicken und die Eigenschaften aufrufen. Wählen Sie die Registerkarte Endpoints, und aktivieren Sie das Kontrollkästchen für HTTPS. Daraufhin wird der HTTPS-Endpunkt hinzugefügt, jedoch ohne Angabe des Zertifikats.

Wechseln Sie auf die Seite Configuration, und deaktivieren Sie die Option Launch browser for: HTTP endpoint. Wenn Sie diese Option deaktivieren, wird beim Ausführen oder Debuggen des Cloud-Diensts der Standardbrowser für den HTTPS-Endpunkt gestartet.

Klicken Sie in Visual Studio auf Debug | Start Debugging, um den Cloud-Dienst zu verpacken und in der lokalen Entwicklungssimulation auszuführen. Die Entwicklungssimulation verwendet immer ein selbst signiertes Zertifikat, das von und an 127.0.0.1 ausgegeben wurde (entspricht dem lokalen Host). Da dieses Zertifikat nicht vertrauenswürdig ist, zeigt der Webbrowser einen Zertifikatsfehler an. Dies ist zu erwarten. Klicken Sie auf Continue to this website (not recommended), um zur Website zu gelangen.

Um das Zertifikat vertrauenswürdig zu machen und somit keinen Zertifikatfehler zu verursachen, können Sie das Zertifikat im Zertifikatspeicher Trusted Root Certification Authorities installieren. Führen Sie dies nur durch, wenn Sie ausreichend Kenntnisse über die Sicherheitsauswirkungen haben.

Um ein Zertifikat für die Verwendung in der Cloud zu konfigurieren, benötigen Sie ein Zertifikat, das in die Cloud hochgeladen wird, und müssen dieses Zertifikat für die Rolle konfigurieren. Im Rahmen dieses Artikels werden wir ein selbst signiertes Zertifikat erstellen und verwenden. Öffnen Sie dazu den IIS Manager, wählen Sie Server Certificates, und klicken Sie rechts im Dialogfeld unter Actions auf Create Self-Signed Certificate. Nachdem Sie das Zertifikat erstellt haben, klicken Sie auf Export, um das Zertifikat in eine PFX-Datei zu exportieren.

Navigieren Sie zum Windows Azure-Entwicklerportal, und wählen Sie die gehostete Dienstkomponente für die Bereitstellung aus. Wählen Sie unter Certificates die Option Manage aus. Laden Sie das Zertifikat hoch, indem Sie den Namen der PFX-Datei und das zugehörige Kennwort eingeben, das Sie während des Exportvorgangs festgelegt haben. Kopieren Sie den Fingerabdruck des Zertifikats, nachdem Sie es in der gehosteten Dienstkomponente installiert haben.

Zur Konfiguration des Zertifikats wechseln Sie zurück zu Visual Studio, öffnen die Konfigurationsoberfläche für Thumbnails_WebRole, klicken auf die Registerkarte Certificates und wählen Add Certificate. Geben Sie einen Namen für das Zertifikat an (z. B. sslCert), fügen Sie den Fingerabdruck ein, und lassen Sie Speicherort (LocalMachine) und Name (My) unverändert.

Auf der Konfigurationsseite für die Zertifikate können Sie festlegen, welche Zertifikate auf den VM-Instanzen für eine bestimmte Rolle installiert werden sollen und in welchen Speichern diese Zertifikate installiert werden sollen. Anders gesagt, dieser Prozess kann für jedes Zertifikat verwendet werden, das Sie für die VMs in der Cloud verwenden möchten, nicht nur für SSL-Zertifikate.

Klicken Sie abschließend auf die Registerkarte Endpoints, und wählen Sie sslCert für das HTTPS-Zertifikat.

Stellen Sie nun Ihre Anwendung bereit. Sie können nun über HTTP und HTTPS auf Ihre Website zugreifen. Da wir ein selbst signiertes Zertifikat hochgeladen haben, zeigt der Browser einen Zertifikatsfehler an, wenn Sie den HTTPS-Endpunkt aufrufen. Dieses Problem wird durch ein echtes signiertes Zertifikat behoben.

Zusammenfassung

Die Windows Azure-Tools und Visual Studio 2010 erleichtern das Bearbeiten, Konfigurieren, Debuggen und Bereitstellen von Anwendungen, die unter Windows Azure ausgeführt werden. Damit können Sie Ihre vorhandenen Kenntnisse aus ASP.NET und Visual Studio nutzen.

Das Windows Azure-Tools-Add-In ist sowohl für Visual Studio 2010 als auch für Visual Studio 2008 geeignet. Die einfachste Möglichkeit zur Installation der Windows Azure-Tools für Visual Studio 2008 ist die Verwendung von Web Platform Installer unter microsoft.com/web. Fügen Sie die Optionen für die Entwicklertools hinzu.

Aktuelle Informationen zu Windows Azure finden Sie unter windowsazure.com and blogs.msdn.com/jnak.

Hani Atassi ist Softwareentwickler im Windows Azure-Tools-Team. Vor seiner Arbeit mit Cloud-Tools arbeitete Atassi bei der Entwicklung von Windows Vista und Microsoft.com mit.

Danny Thorpe ist leitender Softwareentwickler im Windows Azure-Tools-Team. In der Vergangenheit war er an der Gründung von Google Gears bei Google beteiligt und arbeitete als Delphi-Compilerarchitekt bei Borland.

Jim Nakashima ist Programm-Manager für das Windows Azure-Tools-Team und arbeitet hauptsächlich an den End-to-End-Entwicklerfunktionalitäten für Windows Azure. Nakashima hat einige Jahre für die Windows Presentation Foundation und Silverlight Designer gearbeitet, bevor er die unendlichen Möglichkeiten der Cloud für sich entdeckte.

Unser Dank gilt den folgenden technischen Experten für die Durchsicht dieses Artikels: Anson Horton und Gus Perez