Erste Schritte mit Azure-Clouddiensten und ASP.NETGet started with Azure Cloud Services and ASP.NET

ÜbersichtOverview

Dieses Tutorial behandelt die Erstellung einer .NET-Anwendung mit mehreren Ebenen und einem ASP.NET MVC-Front-End sowie die Bereitstellung dieser Anwendung in einem Azure-Clouddienst.This tutorial shows how to create a multi-tier .NET application with an ASP.NET MVC front-end, and deploy it to an Azure cloud service. Die Anwendung verwendet eine Azure SQL-Datenbank, den Azure-Blobdienst und den Azure-Warteschlangendienst.The application uses Azure SQL Database, the Azure Blob service, and the Azure Queue service. Sie können das Visual Studio-Projekt aus dem MSDN-Codekatalog herunterladen.You can download the Visual Studio project from the MSDN Code Gallery.

In diesem Tutorial erfahren Sie, wie Sie die Anwendung erstellen und lokal ausführen, in Azure bereitstellen und in der Cloud ausführen sowie von Grund auf erstellen können.The tutorial shows you how to build and run the application locally, how to deploy it to Azure and run in the cloud, and how to build it from scratch. Sie können auch mit der Erstellung von Grund auf beginnen und die Test- und Bereitstellungsschritte anschließend ausführen.You can start by building from scratch and then do the test and deploy steps afterward if you prefer.

Contoso Ads-AnwendungContoso Ads application

Bei dieser Anwendung handelt es sich um ein Bulletin Board für Werbung.The application is an advertising bulletin board. Benutzer können eine Werbung erstellen, indem sie Text eingeben und ein Bild hochladen.Users create an ad by entering text and uploading an image. Die Anwendung zeigt eine Liste mit Werbeeinblendungen mit Miniaturbildern an, und Benutzer können auf eine Werbung klicken, um das Bild in voller Größe anzuzeigen.They can see a list of ads with thumbnail images, and they can see the full-size image when they select an ad to see the details.

Werbungsliste

Die Anwendung verwendet das warteschlangenorientierte Arbeitsmuster , um die CPU-intensive Last der Erstellung von Miniaturbildern an einen Back-End-Prozess auszulagern.The application uses the queue-centric work pattern to off-load the CPU-intensive work of creating thumbnails to a back-end process.

Alternative Architektur: App Service und WebJobsAlternative architecture: App Service and WebJobs

In diesem Tutorial erfahren Sie, wie Sie Front-End und Back-End in einem Azure-Clouddienst ausführen können.This tutorial shows how to run both front-end and back-end in an Azure cloud service. Alternativ können Sie das Front-End in Azure App Service ausführen und die WebJobs-Funktion für das Back-End verwenden.An alternative is to run the front-end in Azure App Service and use the WebJobs feature for the back-end. Ein Lernprogramm zu WebJobs finden Sie unter Erste Schritte mit dem Azure WebJobs SDK.For a tutorial that uses WebJobs, see Get Started with the Azure WebJobs SDK. Informationen zur Auswahl der optimalen Dienste für Ihr Szenario finden Sie unter Azure App Service, Azure Virtual Machines, Service Fabric und Azure Cloud Services im Vergleich.For information about how to choose the services that best fit your scenario, see Azure App Service, Cloud Services, and virtual machines comparison.

Sie lernen FolgendesWhat you'll learn

  • Ermöglichen der Azure-Entwicklung auf Ihrem Computer durch Installieren des Azure SDKHow to enable your machine for Azure development by installing the Azure SDK.
  • Erstellen eines Clouddienst-Projekts in Visual Studio mit einer ASP.NET MVC-Webrolle und einer Workerrolle.How to create a Visual Studio cloud service project with an ASP.NET MVC web role and a worker role.
  • Lokale Tests des Clouddienstprojekts mithilfe des Azure-Speicheremulators.How to test the cloud service project locally, using the Azure storage emulator.
  • Veröffentlichen des Cloudprojekts in einem Azure-Clouddienst und Tests mit einem Azure-Speicherkonto.How to publish the cloud project to an Azure cloud service and test using an Azure storage account.
  • Hochladen von Dateien und Speicherung der Dateien im Azure-Blobdienst.How to upload files and store them in the Azure Blob service.
  • Verwenden des Azure-Warteschlangendiensts für die Kommunikation zwischen Ebenen.How to use the Azure Queue service for communication between tiers.

VoraussetzungenPrerequisites

Dieses Tutorial setzt voraus, dass Sie mit den Grundkonzepten von Azure-Clouddiensten, z.B. den Begriffen Webrolle und Workerrolle, vertraut sind.The tutorial assumes that you understand basic concepts about Azure cloud services such as web role and worker role terminology. Außerdem wird vorausgesetzt, dass Sie mit der Arbeit mit ASP.NET MVC- oder Web Forms-Projekten in Visual Studio vertraut sind.It also assumes that you know how to work with ASP.NET MVC or Web Forms projects in Visual Studio. Die Beispielanwendung verwendet MVC, aber ein Großteil des Tutorial gilt auch für Web Forms.The sample application uses MVC, but most of the tutorial also applies to Web Forms.

Sie können die Anwendung ohne Azure-Abonnement lokal ausführen, aber für die Bereitstellung der Anwendung in der Cloud benötigen Sie ein Abonnement.You can run the app locally without an Azure subscription, but you'll need one to deploy the application to the cloud. Wenn Sie kein Konto haben, können Sie Ihre MSDN-Abonnentenvorteile aktivieren oder sich für eine kostenlose Testversion registrieren.If you don't have an account, you can activate your MSDN subscriber benefits or sign up for a free trial.

Die Anweisungen im Tutorial funktionieren mit allen der folgenden Produkte:The tutorial instructions work with any of the following products:

  • Visual Studio 2013Visual Studio 2013
  • Visual Studio 2015Visual Studio 2015
  • Visual Studio 2017Visual Studio 2017
  • Visual Studio 2019Visual Studio 2019

Falls Sie keines dieser Produkte besitzen, wird Visual Studio möglicherweise zusammen mit dem Azure SDK installiert.If you don't have one of these, Visual Studio may be installed automatically when you install the Azure SDK.

AnwendungsarchitekturApplication architecture

Die Anwendung speichert Werbungen in einer SQL-Datenbank und verwendet Entity Framework Code First, um Tabellen zu erstellen und auf Daten zuzugreifen.The app stores ads in a SQL database, using Entity Framework Code First to create the tables and access the data. Pro Werbung werden in der Datenbank zwei URLs gespeichert: eine für das Bild in voller Größe und eine für die Miniaturansicht.For each ad, the database stores two URLs, one for the full-size image and one for the thumbnail.

Ad-Tabelle

Wenn ein Benutzer ein Bild hochlädt, speichert das in einer Webrolle ausgeführte Front-End das Bild in einem Azure-Blobund speichert die Werbeinformationen in der Datenbank zusammen mit einer URL, die auf das Blob zeigt.When a user uploads an image, the front-end running in a web role stores the image in an Azure blob, and it stores the ad information in the database with a URL that points to the blob. Gleichzeitig wird eine Nachricht in eine Azure-Warteschlange geschrieben.At the same time, it writes a message to an Azure queue. Ein in einer Workerrolle ausgeführter Back-End-Prozess prüft die Warteschlange regelmäßig auf neue Nachrichten.A back-end process running in a worker role periodically polls the queue for new messages. Wenn eine neue Nachricht vorhanden ist, erstellt die Workerrolle eine Miniaturansicht für das Bild und aktualisiert das entsprechende Datenbankfeld mit der URL für diese Werbung.When a new message appears, the worker role creates a thumbnail for that image and updates the thumbnail URL database field for that ad. Das folgende Diagramm zeigt die Interaktion der verschiedenen Anwendungskomponenten:The following diagram shows how the parts of the application interact.

Contoso Ads-Architektur

Einrichten der EntwicklungsumgebungSet up the development environment

Richten Sie zu Beginn Ihre Entwicklungsumgebung mit Visual Studio und dem Azure SDK ein.To start, set up your development environment with Visual Studio and the Azure SDK.

  • Visual Studio 2019 enthält das Azure SDK.Visual Studio 2019 includes the Azure SDK. Wenn Sie Visual Studio 2019 verwenden, ist keine zusätzliche Einrichtung für die Entwicklungsumgebung erforderlich.If you're using Visual Studio 2019, no additional setup is needed for the development environment.

  • Klicken Sie bei Visual Studio 2015 auf den folgenden Link, um das Azure SDK für Visual Studio 2015 zu installieren.For Visual Studio 2015, click the following link to install the Azure SDK for Visual Studio 2015.

  • Klicken Sie bei Visual Studio 2013 auf den folgenden Link, um das Azure SDK für Visual Studio 2013 zu installieren.For Visual Studio 2013, click the following link to install the Azure SDK for Visual Studio 2013.

  • Wenn Visual Studio nicht installiert ist, gehen Sie wie folgt vor, um Visual Studio 2019 mit dem Azure SDK zu installieren.If you don't have Visual Studio installed, use the following to install Visual Studio 2019 with the Azure SDK.

Hinweis

Abhängig von der Anzahl an bereits bestehenden SDK-Abhängigkeiten auf Ihrem Computer kann der Installationsvorgang des SDK von mehreren Minuten bis hin zu einer halben Stunde oder länger dauern.Depending on the number of the SDK dependencies already on your machine, installing the SDK could take a long time, from several minutes to a half hour or more.

Herunterladen und Ausführen der abgeschlossenen LösungDownload and run the completed solution

  1. Laden Sie die abgeschlossene Lösungherunter und entzippen Sie das Archiv.Download and unzip the completed solution.

  2. Starten Sie Visual Studio.Start Visual Studio.

  3. Wählen Sie im Menü Datei die Option Projekt öffnen, navigieren Sie zu dem Ort, an dem Sie die Lösung gespeichert haben, und öffnen Sie die Lösungsdatei.From the File menu choose Open Project, navigate to where you downloaded the solution, and then open the solution file.

  4. Drücken Sie STRG+UMSCH+B, um die Lösung zu erstellen.Press CTRL+SHIFT+B to build the solution.

    Standardmäßig stellt Visual Studio den Inhalt des NuGet-Pakets automatisch wieder her, das nicht in der .zip -Datei enthalten war.By default, Visual Studio automatically restores the NuGet package content, which was not included in the .zip file. Wenn die Pakete nicht wiederhergestellt werden, installieren Sie diese manuell, indem Sie das Dialogfeld NuGet-Pakete verwalten öffnen und rechts oben auf Wiederherstellen klicken.If the packages don't restore, install them manually by going to the Manage NuGet Packages for Solution dialog box and clicking the Restore button at the top right.

  5. Vergewissern Sie sich im Projektmappen-Explorer, dass ContosoAdsCloudService als Startprojekt ausgewählt ist.In Solution Explorer, make sure that ContosoAdsCloudService is selected as the startup project.

  6. Wenn Sie Visual Studio 2015 oder höher verwenden, ändern Sie die SQL Server-Verbindungszeichenfolge in der Anwendungsdatei Web.config des ContosoAdsWeb-Projekts und in der Datei ServiceConfiguration.Local.cscfg des ContosoAdsCloudService-Projekts.If you're using Visual Studio 2015 or higher, change the SQL Server connection string in the application Web.config file of the ContosoAdsWeb project and in the ServiceConfiguration.Local.cscfg file of the ContosoAdsCloudService project. Ändern Sie in beiden Fällen „(localdb)\v11.0“ in „(localdb)\MSSQLLocalDB“.In each case, change "(localdb)\v11.0" to "(localdb)\MSSQLLocalDB".

  7. Drücken Sie STRG+F5, um die Anwendung auszuführen.Press CTRL+F5 to run the application.

    Wenn Sie ein Clouddienstprojekt lokal ausführen, startet Visual Studio automatisch Azure-Serveremulator und Azure-Speicheremulator.When you run a cloud service project locally, Visual Studio automatically invokes the Azure compute emulator and Azure storage emulator. Der Serveremulator verwendet die Ressourcen Ihres Computers, um die Umgebungen von Web- und Workerrolle zu simulieren.The compute emulator uses your computer's resources to simulate the web role and worker role environments. Der Speicheremulator verwendet eine SQL Server Express LocalDB -Datenbank, um den Azure-Cloudspeicher zu simulieren.The storage emulator uses a SQL Server Express LocalDB database to simulate Azure cloud storage.

    Wenn Sie ein Clouddienstprojekt zum ersten Mal ausführen, kann der Start der Emulatoren ca. eine Minute in Anspruch nehmen.The first time you run a cloud service project, it takes a minute or so for the emulators to start up. Wenn die Emulatoren gestartet sind, wird der Standardbrowser mit der Startseite der Anwendung geöffnet.When emulator startup is finished, the default browser opens to the application home page.

    Contoso Ads-Architektur

  8. Klicken Sie auf Werbung erstellen.Click Create an Ad.

  9. Geben Sie einige Testdaten ein, wählen Sie ein hochzuladendes .jpg -Bild aus, und klicken Sie auf Erstellen.Enter some test data and select a .jpg image to upload, and then click Create.

    Seite erstellen

    Die Anwendung wechselt zur Indexseite, zeigt jedoch noch keine Miniaturansicht für die neue Werbung an, da diese Verarbeitung noch nicht erfolgt ist.The app goes to the Index page, but it doesn't show a thumbnail for the new ad because that processing hasn't happened yet.

  10. Warten Sie einen Moment und aktualisieren Sie die Indexseite, um die Miniaturansicht zu sehen.Wait a moment and then refresh the Index page to see the thumbnail.

    Indexseite

  11. Klicken Sie auf Details für Ihre Werbung, um das Bild in voller Größe anzuzeigen.Click Details for your ad to see the full-size image.

    Detailseite

Sie haben die Anwendung bislang komplett auf Ihrem lokalen Computer ausgeführt, ohne Verbindung mit der Cloud.You've been running the application entirely on your local computer, with no connection to the cloud. Der Speicheremulator speichert die Warteschlangen- und Blobdaten in einer SQL Server Express LocalDB-Datenbank, und die Anwendung speichert die Werbedaten in einer weiteren LocalDB-Datenbank.The storage emulator stores the queue and blob data in a SQL Server Express LocalDB database, and the application stores the ad data in another LocalDB database. Entity Framework Code First hat die Werbedatenbank automatisch erstellt, als die Webanwendung zum ersten Mal versucht hat, darauf zuzugreifen.Entity Framework Code First automatically created the ad database the first time the web app tried to access it.

Im folgenden Abschnitt werden Sie die Lösung so konfigurieren, dass diese Azure-Cloudressourcen für Warteschlangen, Blobs und die Anwendungsdatenbank verwendet, wenn sie in der Cloud ausgeführt wird.In the following section you'll configure the solution to use Azure cloud resources for queues, blobs, and the application database when it runs in the cloud. Falls die Ausführung weiterhin lokal erfolgen soll, Sie aber Speicher- und Datenbankressourcen in der Cloud nutzen möchten, ist dies möglich.If you wanted to continue to run locally but use cloud storage and database resources, you could do that. Hierfür müssen lediglich die Verbindungszeichenfolgen entsprechend festgelegt werden. Dies wird weiter unten beschrieben.It's just a matter of setting connection strings, which you'll see how to do.

Bereitstellen der Anwendung für AzureDeploy the application to Azure

Führen Sie folgende Schritte aus, um die Anwendung in der Cloud auszuführen:You'll do the following steps to run the application in the cloud:

  • Erstellen eines Azure-ClouddienstsCreate an Azure cloud service.
  • Erstellen einer Azure SQL-DatenbankCreate an Azure SQL database.
  • Erstellen Sie ein Azure-Speicherkonto.Create an Azure storage account.
  • Konfigurieren der Lösung zur Verwendung Ihrer Azure SQL-Datenbank bei der Ausführung in AzureConfigure the solution to use your Azure SQL database when it runs in Azure.
  • Konfigurieren der Lösung zur Verwendung Ihres Azure-Speicherkontos bei der Ausführung in AzureConfigure the solution to use your Azure storage account when it runs in Azure.
  • Bereitstellen des Projekts in Ihrem Azure-ClouddienstDeploy the project to your Azure cloud service.

Erstellen eines Azure-ClouddienstsCreate an Azure cloud service

Ein Azure-Clouddienst ist die Umgebung, in der die Anwendung ausgeführt wird.An Azure cloud service is the environment the application will run in.

  1. Öffnen Sie das Azure-Portal in Ihrem Browser.In your browser, open the Azure portal.

  2. Klicken Sie auf „Ressource erstellen“ > „Compute“ > „Clouddienst“ .Click Create a resource > Compute > Cloud Service.

  3. Geben Sie im Eingabefeld für den DNS-Namen ein URL-Präfix für den Clouddienst ein.In the DNS name input box, enter a URL prefix for the cloud service.

    Diese URL muss eindeutig sein.This URL has to be unique. Sie erhalten eine Fehlermeldung, falls das eingegebene Präfix bereits verwendet wird.You'll get an error message if the prefix you choose is already in use.

  4. Geben Sie eine neue Ressourcengruppe für den Dienst an.Specify a new Resource group for the service. Klicken Sie auf Neu erstellen, und geben Sie dann einen Namen im Eingabefeld „Ressourcengruppe“ ein, z.B. „CS_contososadsRG“.Click Create new and then type a name in the Resource group input box, such as CS_contososadsRG.

  5. Wählen Sie die Region aus, in der Sie Ihre Anwendung bereitstellen möchten.Choose the region where you want to deploy the application.

    Dieses Feld gibt an, in welchem Datencenter der Clouddienst gehostet wird.This field specifies which datacenter your cloud service will be hosted in. Für eine Produktionsanwendung würden Sie die für Ihre Kunden am nächsten gelegene Region auswählen.For a production application, you'd choose the region closest to your customers. Wählen Sie für dieses Tutorial die Ihnen am nächsten gelegene Region aus.For this tutorial, choose the region closest to you.

  6. Klicken Sie auf Erstellen.Click Create.

    In der folgenden Abbildung wird ein Clouddienst mit der URL „CSvccontosoads.cloudapp.net“ erstellt.In the following image, a cloud service is created with the URL CSvccontosoads.cloudapp.net.

    Neuer Clouddienst

Erstellen einer Azure SQL-DatenbankCreate an Azure SQL database

Wenn die Anwendung in der Cloud ausgeführt wird, verwendet sie eine cloudbasierte Datenbank.When the app runs in the cloud, it will use a cloud-based database.

  1. Klicken Sie im Azure-Portal auf „Ressource erstellen“ > „Datenbanken“ > „SQL-Datenbank“ .In the Azure portal, click Create a resource > Databases > SQL Database.

  2. Geben Sie unter Datenbankname den Wert contosoadsein.In the Database Name box, enter contosoads.

  3. Klicken Sie in der Ressourcengruppe auf Vorhandene verwenden, und wählen Sie die Ressourcengruppe aus, die für den Clouddienst verwendet wird.In the Resource group, click Use existing and select the resource group used for the cloud service.

  4. Klicken Sie in der folgenden Abbildung auf Server – Erforderliche Einstellungen konfigurieren und dann auf Neuen Server erstellen.In the following image, click Server - Configure required settings and Create a new server.

    Tunnel zum Datenbankserver

    Falls Ihr Abonnement bereits einen Server enthält, können Sie auch diesen Server aus der Dropdownliste auswählen.Alternatively, if your subscription already has a server, you can select that server from the drop-down list.

  5. Geben Sie im Feld Servername den Namen csvccontosodbserver ein.In the Server name box, enter csvccontosodbserver.

  6. Geben Sie unter Anmeldename und Kennwort die Anmeldedaten eines Administrators ein.Enter an administrator Login Name and Password.

    Wenn Sie Neuen Server erstellen ausgewählt haben, geben Sie hier keinen vorhandenen Namen und kein Kennwort ein.If you selected Create a new server, you aren't entering an existing name and password here. Sie geben einen neuen Namen und das dazugehörige Kennwort ein. Diese Angaben werden hier zur späteren Verwendung für den Zugriff auf die Datenbank definiert.You're entering a new name and password that you're defining now to use later when you access the database. Wenn Sie einen zuvor erstellten Server ausgewählt haben, werden Sie aufgefordert, das Kennwort für den zuvor erstellten Administratorbenutzer einzugeben.If you selected a server that you created previously, you'll be prompted for the password to the administrative user account you already created.

  7. Wählen Sie denselben Standort wie für Ihren Clouddienst aus.Choose the same Location that you chose for the cloud service.

    Wenn sich Clouddienst und Datenbank in unterschiedlichen Datencentern (d. h. unterschiedlichen Regionen) befinden, steigt die Latenz an und Sie müssen für die Bandbreite außerhalb des Datencenters bezahlen.When the cloud service and database are in different datacenters (different regions), latency will increase and you will be charged for bandwidth outside the data center. Die Bandbreite innerhalb eines Datencenters ist kostenlos.Bandwidth within a data center is free.

  8. Aktivieren Sie die Option Azure-Diensten Zugriff auf den Server erlauben.Check Allow azure services to access server.

  9. Klicken Sie für den neuen Server auf Auswählen.Click Select for the new server.

    Neuer SQL-Datenbank-Server

  10. Klicken Sie auf Erstellen.Click Create.

Erstellen eines Azure-SpeicherkontosCreate an Azure storage account

Azure-Speicherkonten bieten Ressourcen zum Speichern von Warteschlangen- und Blobdaten in der Cloud.An Azure storage account provides resources for storing queue and blob data in the cloud.

In einer tatsächlichen Anwendung würden Sie normalerweise separate Konten für Anwendungsdaten und Protokolldaten sowie für Test- und Produktionsdaten erstellen.In a real-world application, you would typically create separate accounts for application data versus logging data, and separate accounts for test data versus production data. In diesem Tutorial verwenden wir nur ein einzelnes Konto.For this tutorial, you'll use just one account.

  1. Klicken Sie im Azure-Portal auf „Ressource erstellen“ > „Storage“ > „Speicherkonto – Blob, Datei, Tabelle, Warteschlange“ .In the Azure portal, click Create a resource > Storage > Storage account - blob, file, table, queue.

  2. Geben Sie im Feld Name ein URL-Präfix ein.In the Name box, enter a URL prefix.

    Dieses Präfix zusammen mit dem Text unterhalb des Eingabefelds ergibt die eindeutige URL Ihres Speicherkontos.This prefix plus the text you see under the box will be the unique URL to your storage account. Falls das eingegebene Präfix bereits von einer anderen Person verwendet wird, müssen Sie ein anderes Präfix auswählen.If the prefix you enter has already been used by someone else, you'll have to choose a different prefix.

  3. Legen Sie das Bereitstellungsmodell auf Klassisch fest.Set the Deployment model to Classic.

  4. Wählen Sie in der Dropdownliste Replikation den Wert Lokal redundanter Speicher aus.Set the Replication drop-down list to Locally redundant storage.

    Wenn die Georeplikation für ein Speicherkonto aktiviert ist, werden dessen Inhalte in einem sekundären Datencenter repliziert, damit ein Failover möglich ist, falls es am primären Standort zu einem Katastrophenfall kommt.When geo-replication is enabled for a storage account, the stored content is replicated to a secondary datacenter to enable failover if a major disaster occurs in the primary location. Für die Georeplikation können zusätzliche Kosten anfallen.Geo-replication can incur additional costs. Für Test- und Entwicklungskonten macht es wenig Sinn, für Georeplikation zu bezahlen.For test and development accounts, you generally don't want to pay for geo-replication. Weitere Informationen finden Sie unter Erstellen, Verwalten oder Löschen eines Speicherkontos.For more information, see Create, manage, or delete a storage account.

  5. Klicken Sie in der Ressourcengruppe auf Vorhandene verwenden, und wählen Sie die Ressourcengruppe aus, die für den Clouddienst verwendet wird.In the Resource group, click Use existing and select the resource group used for the cloud service.

  6. Wählen Sie in der Dropdownliste Standort dieselbe Region aus, die Sie für den Clouddienst ausgewählt haben.Set the Location drop-down list to the same region you chose for the cloud service.

    Wenn sich Clouddienst und Speicherkonto in unterschiedlichen Datencentern (d. h. unterschiedlichen Regionen) befinden, steigt die Latenz an und Sie müssen für die Bandbreite außerhalb des Datencenters bezahlen.When the cloud service and storage account are in different datacenters (different regions), latency will increase and you will be charged for bandwidth outside the data center. Die Bandbreite innerhalb eines Datencenters ist kostenlos.Bandwidth within a data center is free.

    Mit Azure-Affinitätsgruppen können Sie die Distanz zwischen Ressourcen in einem Datencenter und somit die Latenz minimieren.Azure affinity groups provide a mechanism to minimize the distance between resources in a data center, which can reduce latency. Dieses Tutorial verwendet keine Affinitätsgruppen.This tutorial does not use affinity groups. Anweisungen finden Sie unter Erstellen einer Affinitätsgruppe in Azure.For more information, see How to Create an Affinity Group in Azure.

  7. Klicken Sie auf Erstellen.Click Create.

    Neues Speicherkonto

    In der Abbildung wird ein Speicherkonto mit der URL csvccontosoads.core.windows.neterstellt.In the image, a storage account is created with the URL csvccontosoads.core.windows.net.

Konfigurieren der Lösung zur Verwendung Ihrer Azure SQL-Datenbank bei der Ausführung in AzureConfigure the solution to use your Azure SQL database when it runs in Azure

Webprojekt und Workerrollenprojekt haben je eine eigene Verbindungszeichenfolge für die Datenbank. Beide müssen auf die Azure SQL-Datenbank zeigen, wenn die Anwendung in Azure ausgeführt wird.The web project and the worker role project each has its own database connection string, and each needs to point to the Azure SQL database when the app runs in Azure.

Sie werden eine Web.config-Transformation für die Webrolle und eine Clouddienst-Umgebungseinstellung für die Workerrolle verwenden.You'll use a Web.config transform for the web role and a cloud service environment setting for the worker role.

Hinweis

In diesem und im nächsten Abschnitt speichern Sie Anmeldeinformationen in Projektdateien.In this section and the next section, you store credentials in project files. Sie sollten keine sensiblen Daten in öffentlichen Quellcode-Repositorys speichern.Don't store sensitive data in public source code repositories.

  1. Öffnen Sie im ContosoAdsWeb-Projekt die Transformationsdatei Web.Release.config für die Anwendungsdatei Web.config, löschen Sie den Kommentarblock, der ein <connectionStrings>-Element enthält, und fügen Sie den folgenden Code an derselben Stelle ein.In the ContosoAdsWeb project, open the Web.Release.config transform file for the application Web.config file, delete the comment block that contains a <connectionStrings> element, and paste the following code in its place.

    <connectionStrings>
        <add name="ContosoAdsContext" connectionString="{connectionstring}"
        providerName="System.Data.SqlClient" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
    

    Lassen Sie die Datei geöffnet.Leave the file open for editing.

  2. Klicken Sie im Azure-Portal im linken Bereich auf SQL-Datenbanken, und klicken Sie auf die Datenbank, die Sie für dieses Tutorial erstellt haben, und dann auf Verbindungszeichenfolgen anzeigen.In the Azure portal, click SQL Databases in the left pane, click the database you created for this tutorial, and then click Show connection strings.

    Verbindungszeichenfolgen anzeigen

    Die Verbindungszeichenfolgen werden im Portal angezeigt, mit einem Platzhalter für das Kennwort.The portal displays connection strings, with a placeholder for the password.

    Verbindungszeichenfolgen

  3. Löschen Sie in der Transformationsdatei Web.Release.config den Teil {connectionstring}, und fügen Sie stattdessen die ADO.NET-Verbindungszeichenfolge aus dem Azure-Portal ein.In the Web.Release.config transform file, delete {connectionstring} and paste in its place the ADO.NET connection string from the Azure portal.

  4. Ersetzen Sie in der Verbindungszeichenfolge, die Sie in die Transformationsdatei Web.Release.config eingefügt haben, {your_password_here} durch das Kennwort, das Sie für die neue SQL-Datenbank eingerichtet haben.In the connection string that you pasted into the Web.Release.config transform file, replace {your_password_here} with the password you created for the new SQL database.

  5. Speichern Sie die Datei .Save the file.

  6. Kopieren Sie die Verbindungszeichenfolge (ohne die umgebenden Anführungszeichen), um diese in den folgenden Schritten bei der Konfiguration des Workerrollen-Projekts zur Verfügung zu haben.Select and copy the connection string (without the surrounding quotation marks) for use in the following steps for configuring the worker role project.

  7. Klicken Sie im Projektmappen-Explorer unter Rollen im Clouddienstprojekt mit der rechten Maustaste auf ContosoAdsWorker, und klicken Sie auf Eigenschaften.In Solution Explorer, under Roles in the cloud service project, right-click ContosoAdsWorker and then click Properties.

    Rolleneigenschaften

  8. Klicken Sie auf die Registerkarte Settings .Click the Settings tab.

  9. Ändern Sie die Dienstkonfiguration in Cloud.Change Service Configuration to Cloud.

  10. Wählen Sie für die ContosoAdsDbConnectionString-Einstellung das Feld Wert aus, und fügen Sie die Verbindungszeichenfolge ein, die Sie im vorherigen Abschnitt des Tutorials kopiert haben.Select the Value field for the ContosoAdsDbConnectionString setting, and then paste the connection string that you copied from the previous section of the tutorial.

    Datenbank-Verbindungszeichenfolge für Workerrolle

  11. Speichern Sie die Änderungen.Save your changes.

Konfigurieren der Lösung zur Verwendung Ihres Azure-Speicherkontos bei der Ausführung in AzureConfigure the solution to use your Azure storage account when it runs in Azure

Die Verbindungszeichenfolgen für das Azure-Speicherkonto für das Web- und Workerrollenprojekt werden in Umgebungseinstellungen für das Clouddienstprojekt gespeichert.Azure storage account connection strings for both the web role project and the worker role project are stored in environment settings in the cloud service project. Für jedes Projekt existiert je ein separater Satz mit Einstellungen für die lokale Ausführung der Anwendung und für die Ausführung in der Cloud.For each project, there is a separate set of settings to be used when the application runs locally and when it runs in the cloud. Sie werden die Cloudumgebungseinstellungen für Web- und Workerrollenprojekt ändern.You'll update the cloud environment settings for both web and worker role projects.

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf ContosoAdsWeb unter Rollen im Projekt ContosoAdsCloudService, und klicken Sie dann auf Eigenschaften.In Solution Explorer, right-click ContosoAdsWeb under Roles in the ContosoAdsCloudService project, and then click Properties.

    Rolleneigenschaften

  2. Klicken Sie auf die Registerkarte Settings . Wählen Sie in der Dropdownliste Dienstkonfiguration den Wert Cloud aus.Click the Settings tab. In the Service Configuration drop-down box, choose Cloud.

    Cloudkonfiguration

  3. Wenn Sie den Eintrag StorageConnectionString auswählen, sehen Sie am Ende der Zeile eine Schaltfläche mit Auslassungspunkten ( ... ).Select the StorageConnectionString entry, and you'll see an ellipsis (...) button at the right end of the line. Klicken Sie auf die elliptische Schaltfläche, um das Dialogfeld Verbindungszeichenfolge für Speicherkonto erstellen zu öffnen.Click the ellipsis button to open the Create Storage Account Connection String dialog box.

    Erstellungsdialog für Verbindungszeichenfolge

  4. Klicken Sie im Dialogfeld Verbindungszeichenfolge für Speicherkonto auf Ihr Abonnement, wählen Sie das zuvor erstellte Speicherkonto aus, und klicken Sie auf OK.In the Create Storage Connection String dialog box, click Your subscription, choose the storage account that you created earlier, and then click OK. Falls Sie noch nicht angemeldet sind, werden Sie zur Eingabe Ihrer Azure-Anmeldeinformationen aufgefordert.If you're not already logged in, you'll be prompted for your Azure account credentials.

    Speicherkonto-Verbindungszeichenfolge erstellen

  5. Speichern Sie die Änderungen.Save your changes.

  6. Führen Sie zum Einrichten der Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString-Verbindungszeichenfolge die gleichen Schritte aus, die Sie auch für die StorageConnectionString-Verbindungszeichenfolge ausgeführt haben.Follow the same procedure that you used for the StorageConnectionString connection string to set the Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString connection string.

    Diese Verbindungszeichenfolge wird für die Protokollierung verwendet.This connection string is used for logging.

  7. Wiederholen Sie die Prozedur, die Sie für die ContosoAdsWeb-Rolle verwendet haben, um die beiden Verbindungszeichenfolgen für die ContosoAdsWorker-Rolle zu setzen.Follow the same procedure that you used for the ContosoAdsWeb role to set both connection strings for the ContosoAdsWorker role. Vergessen Sie nicht, die Dienstkonfiguration auf Cloud zu setzen.Don't forget to set Service Configuration to Cloud.

Die Einstellungen, die Sie für die Rollenumgebung in der Visual Studio-GUI konfiguriert haben, werden in den folgenden Dateien im ContosoAdsCloudService-Projekt gespeichert:The role environment settings that you have configured using the Visual Studio UI are stored in the following files in the ContosoAdsCloudService project:

  • ServiceDefinition.csdef - Definiert die Einstellungsnamen.ServiceDefinition.csdef - Defines the setting names.
  • ServiceConfiguration.Cloud.cscfg - Enthält die Werte für die Ausführung der Anwendung in der Cloud.ServiceConfiguration.Cloud.cscfg - Provides values for when the app runs in the cloud.
  • ServiceConfiguration.Local.cscfg - Enthält die Werte für die lokale Ausführung der Anwendung.ServiceConfiguration.Local.cscfg - Provides values for when the app runs locally.

Die Datei „Servicedefinition.csdef“ enthält beispielsweise die folgenden Definitionen:For example, the ServiceDefinition.csdef includes the following definitions:

<ConfigurationSettings>
    <Setting name="StorageConnectionString" />
    <Setting name="ContosoAdsDbConnectionString" />
</ConfigurationSettings>

Und die Datei ServiceConfiguration.Cloud.cscfg enthält die Werte, die Sie für diese Einstellungen in Visual Studio eingegeben haben:And the ServiceConfiguration.Cloud.cscfg file includes the values you entered for those settings in Visual Studio.

<Role name="ContosoAdsWorker">
    <Instances count="1" />
    <ConfigurationSettings>
        <Setting name="StorageConnectionString" value="{yourconnectionstring}" />
        <Setting name="ContosoAdsDbConnectionString" value="{yourconnectionstring}" />
        <!-- other settings not shown -->

    </ConfigurationSettings>
    <!-- other settings not shown -->

</Role>

Die <Instances> -Einstellung definiert die Anzahl der virtuellen Computer, auf denen Azure den Code der Workerrolle ausführt.The <Instances> setting specifies the number of virtual machines that Azure will run the worker role code on. Im Bereich Nächste Schritte finden Sie Links zu weiteren Hinweisen zur Skalierung von Clouddiensten.The Next steps section includes links to more information about scaling out a cloud service,

Bereitstellen des Projekts in AzureDeploy the project to Azure

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Cloudprojekt ContosoAdsCloudService, und wählen Sie Veröffentlichen aus.In Solution Explorer, right-click the ContosoAdsCloudService cloud project and then select Publish.

    Veröffentlichungsmenü

  2. Klicken Sie im Schritt Anmelden des Assistenten zum Veröffentlichen einer Azure-Anwendung auf Weiter.In the Sign in step of the Publish Azure Application wizard, click Next.

    Anmeldung

  3. Klicken Sie im Schritt Einstellungen des Assistenten auf Weiter.In the Settings step of the wizard, click Next.

    Schritt "Einstellungen"

    Die Standardeinstellungen in der Registerkarte Erweitert brauchen für dieses Tutorial nicht geändert werden.The default settings in the Advanced tab are fine for this tutorial. Weitere Informationen zur Registerkarte Erweitert finden Sie unter Assistent zum Veröffentlichen einer Azure-Anwendung.For information about the advanced tab, see Publish Azure Application Wizard.

  4. Klicken Sie auf der Seite Zusammenfassung auf Veröffentlichen.In the Summary step, click Publish.

    Zusammenfassung

    Das Azure-Aktivitätsprotokoll wird in Visual Studio geöffnet.The Azure Activity Log window opens in Visual Studio.

  5. Klicken Sie auf den Pfeil nach rechts, um die Bereitstellungsdetails zu erweitern.Click the right arrow icon to expand the deployment details.

    Die Bereitstellung kann 5 oder mehr Minuten in Anspruch nehmen.The deployment can take up to 5 minutes or more to complete.

    Azure-Aktivitätsprotokoll

  6. Klicken Sie nach Abschluss der Bereitstellung auf die Web-App-URL , um die Anwendung zu starten.When the deployment status is complete, click the Web app URL to start the application.

  7. Sie können die Anwendung nun testen und Werbungen erstellen, anzeigen und bearbeiten, wie Sie dies bereits bei der lokalen Ausführung getan haben.You can now test the app by creating, viewing, and editing some ads, as you did when you ran the application locally.

Hinweis

Nach Abschluss der Tests sollten Sie den Clouddienst anhalten oder löschen.When you're finished testing, delete or stop the cloud service. Selbst wenn Sie den Clouddienst nicht nutzen, fallen Kosten an, da Ressourcen auf virtuellen Computern für den Dienst reserviert sind.Even if you're not using the cloud service, it's accruing charges because virtual machine resources are reserved for it. Wenn Sie den Dienst laufen lassen, kann jeder, der die URL findet, Werbungen erstellen und anzeigen.And if you leave it running, anyone who finds your URL can create and view ads. Navigieren Sie im Azure-Portal zur Registerkarte Übersicht für Ihren Clouddienst, und klicken Sie dann oben auf der Seite auf die Schaltfläche Löschen.In the Azure portal, go to the Overview tab for your cloud service, and then click the Delete button at the top of the page. Klicken Sie stattdessen auf Anhalten , um vorübergehend zu verhindern, dass andere Personen auf die Website zugreifen.If you just want to temporarily prevent others from accessing the site, click Stop instead. In diesem Fall entstehen weiterhin Kosten.In that case, charges will continue to accrue. Sie können die SQL-Datenbank und das Speicherkonto auf ähnliche Weise löschen, wenn Sie diese nicht mehr benötigen.You can follow a similar procedure to delete the SQL database and storage account when you no longer need them.

Neuerstellen der AnwendungCreate the application from scratch

Falls Sie die komplette Anwendungnoch nicht heruntergeladen haben, tun Sie dies jetzt.If you haven't already downloaded the completed application, do that now. Sie kopieren Dateien aus dem heruntergeladenen Projekt in das neue Projekt.You'll copy files from the downloaded project into the new project.

Die Erstellung der Contoso-Werbeanwendung umfasst die folgenden Schritte:Creating the Contoso Ads application involves the following steps:

  • Erstellen einer Clouddienst-Lösung in Visual StudioCreate a cloud service Visual Studio solution.
  • Aktualisieren und Hinzufügen von NuGet-PaketenUpdate and add NuGet packages.
  • Projektverweise setzen.Set project references.
  • Konfigurieren von VerbindungszeichenfolgenConfigure connection strings.
  • Hinzufügen von CodedateienAdd code files.

Nach der Erstellung der Lösung werden Sie den Code prüfen, der speziell für Clouddienst-Projekte, Azure-Blobs und -Warteschlangen gilt.After the solution is created, you'll review the code that is unique to cloud service projects and Azure blobs and queues.

Erstellen einer Clouddienst-Lösung in Visual StudioCreate a cloud service Visual Studio solution

  1. Klicken Sie in Visual Studio im Menü Neues Projekt from the Neues Projekt .In Visual Studio, choose New Project from the File menu.

  2. Erweitern Sie im linken Bereich des Dialogfelds Neues Projekt den Eintrag Visual C# , wählen Sie den Vorlagentyp Cloud aus, und klicken Sie auf die Vorlage Azure Cloud Service.In the left pane of the New Project dialog box, expand Visual C# and choose Cloud templates, and then choose the Azure Cloud Service template.

  3. Geben Sie den Namen ContosoAdsCloudService für Projekt und Lösung ein, und klicken Sie auf OK.Name the project and solution ContosoAdsCloudService, and then click OK.

    Neues Projekt

  4. Fügen Sie im Dialogfeld Neuer Azure-Clouddienst eine Web- und eine Workerrolle hinzu.In the New Azure Cloud Service dialog box, add a web role and a worker role. Nennen Sie die Webrolle ContosoAdsWeb und die Workerrolle ContosoAdsWorker.Name the web role ContosoAdsWeb, and name the worker role ContosoAdsWorker. (Klicken Sie auf das Stiftsymbol auf der rechten Seite, um die Standardnamen der Rollen zu ändern.)(Use the pencil icon in the right-hand pane to change the default names of the roles.)

    Neues Clouddienst-Projekt

  5. Wenn das Dialogfeld Neues ASP.NET-Projekt für die Webrolle angezeigt wird, wählen Sie die MVC-Vorlage aus, und klicken Sie auf Authentifizierung ändern.When you see the New ASP.NET Project dialog box for the web role, choose the MVC template, and then click Change Authentication.

    Authentifizierung ändern

  6. Klicken Sie im Dialogfeld Authentifizierung ändern auf Keine Authentifizierung und dann auf OK.In the Change Authentication dialog box, choose No Authentication, and then click OK.

    Keine Authentifizierung

  7. Klicken Sie im Dialogfeld Neues ASP.Net-Projekt auf OK.In the New ASP.NET Project dialog, click OK.

  8. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Lösung (nicht auf eines der Projekte), und klicken Sie auf Hinzufügen – Neues Projekt.In Solution Explorer, right-click the solution (not one of the projects), and choose Add - New Project.

  9. Klicken Sie im Dialogfeld Neues Projekt hinzufügen unter Visual C# im linken Bereich auf Windows, und klicken Sie auf die Vorlage Klassenbibliothek.In the Add New Project dialog box, choose Windows under Visual C# in the left pane, and then click the Class Library template.

  10. Benennen Sie das Projekt ContosoAdsCommon, und klicken Sie auf OK.Name the project ContosoAdsCommon, and then click OK.

    Sie müssen in Web- und Workerrolle auf den Entity Framework-Kontext und das Datenmodell verweisen.You need to reference the Entity Framework context and the data model from both web and worker role projects. Alternativ könnten Sie die EF-bezogenen Klassen im Webrollenprojekt definieren und im Workerrollenprojekt auf dieses Projekt verweisen.As an alternative, you could define the EF-related classes in the web role project and reference that project from the worker role project. In diesem Fall würde Ihr Workerrollenprojekt aber auf Webassemblys verweisen, die es nicht benötigt.But in the alternative approach, your worker role project would have a reference to web assemblies that it doesn't need.

Aktualisieren und Hinzufügen von NuGet-PaketenUpdate and add NuGet packages

  1. Öffnen Sie das Dialogfeld NuGet-Pakete verwalten für die Lösung.Open the Manage NuGet Packages dialog box for the solution.

  2. Wählen Sie oben im Fenster Updatesaus.At the top of the window, select Updates.

  3. Suchen Sie nach dem Paket WindowsAzure.Storage. Wenn es sich in der Liste befindet, wählen Sie es aus, und wählen Sie anschließend die Web- und Workerprojekte aus, in denen es aktualisiert werden soll. Klicken Sie dann auf Aktualisieren.Look for the WindowsAzure.Storage package, and if it's in the list, select it and select the web and worker projects to update it in, and then click Update.

    Die Speicherclientbibliothek wird häufiger aktualisiert als die Visual Studio-Projektvorlagen. Daher wird es öfter vorkommen, dass Sie die Version in einem neu erstellten Projekt aktualisieren müssen.The storage client library is updated more frequently than Visual Studio project templates, so you'll often find that the version in a newly-created project needs to be updated.

  4. Wählen Sie oben im Fenster Durchsuchenaus.At the top of the window, select Browse.

  5. Suchen Sie das NuGet-Paket EntityFramework und installieren Sie es in allen drei Projekten.Find the EntityFramework NuGet package, and install it in all three projects.

  6. Suchen Sie das NuGet-Paket Microsoft.WindowsAzure.ConfigurationManager , und installieren Sie es im Workerrollenprojekt.Find the Microsoft.WindowsAzure.ConfigurationManager NuGet package, and install it in the worker role project.

Setzen von ProjektverweisenSet project references

  1. Fügen Sie im Projekt ContosoAdsWeb einen Verweis auf das Projekt ContosoAdsCommon ein.In the ContosoAdsWeb project, set a reference to the ContosoAdsCommon project. Klicken Sie mit der rechten Maustaste auf das Projekt ContosoAdsWeb, und klicken Sie auf Verweise - Verweise hinzufügen.Right-click the ContosoAdsWeb project, and then click References - Add References. Wählen Sie im Dialogfeld Verweis-Manager im linken Bereich Projektmappe – Projekte und dann ContosoAdsCommon aus, und klicken Sie auf OK.In the Reference Manager dialog box, select Solution – Projects in the left pane, select ContosoAdsCommon, and then click OK.

  2. Fügen Sie im Projekt ContosoAdsWorker einen Verweis auf das Projekt ContosoAdsCommon ein.In the ContosoAdsWorker project, set a reference to the ContosoAdsCommon project.

    ContosoAdsCommon wird Datenmodell und Kontextklasse für das Entity Framework enthalten, das sowohl von Front-End als auch von Back-End verwendet wird.ContosoAdsCommon will contain the Entity Framework data model and context class, which will be used by both the front-end and back-end.

  3. Fügen Sie im Projekt "ContosoAdsWorker" einen Verweis auf System.Drawingein.In the ContosoAdsWorker project, set a reference to System.Drawing.

    Diese Assembly wird vom Back-End für die Konvertierung von Bildern zu Miniaturansichten verwendet.This assembly is used by the back-end to convert images to thumbnails.

Konfigurieren von VerbindungszeichenfolgenConfigure connection strings

In diesem Abschnitt konfigurieren Sie die Verbindungszeichenfolgen für Azure Storage und SQL für lokale Tests.In this section, you configure Azure Storage and SQL connection strings for testing locally. In den Bereitstellungsanweisungen weiter oben in diesem Tutorial wurde beschrieben, wie Sie die Verbindungszeichenfolgen für die Ausführung der Anwendung in der Cloud einrichten.The deployment instructions earlier in the tutorial explain how to set up the connection strings for when the app runs in the cloud.

  1. Öffnen Sie im Projekt "ContosoAdsWeb" die Datei "Web.config" der Anwendung, und fügen Sie das folgende connectionStrings-Element nach dem configSections-Element ein.In the ContosoAdsWeb project, open the application Web.config file, and insert the following connectionStrings element after the configSections element.

    <connectionStrings>
        <add name="ContosoAdsContext" connectionString="Data Source=(localdb)\v11.0; Initial Catalog=ContosoAds; Integrated Security=True; MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
    </connectionStrings>
    

    Wenn Sie Visual Studio 2015 oder höher verwenden, ersetzen Sie „v11.0“ durch „MSSQLLocalDB“.If you're using Visual Studio 2015 or higher, replace "v11.0" with "MSSQLLocalDB".

  2. Speichern Sie die Änderungen.Save your changes.

  3. Klicken Sie im Projekt ContosoAdsCloudService unter Rollen mit der rechten Maustaste auf ContosoAdsWeb, und klicken Sie auf Eigenschaften.In the ContosoAdsCloudService project, right-click ContosoAdsWeb under Roles, and then click Properties.

    Rolleneigenschaften

  4. Klicken Sie im Eigenschaftenfenster ContosoAdsWeb [Rolle] auf die Registerkarte Einstellungen, und klicken Sie auf Einstellung hinzufügen.In the ContosoAdsWeb [Role] properties window, click the Settings tab, and then click Add Setting.

    Behalten Sie für Dienstkonfiguration die Einstellung Alle Konfigurationen bei.Leave Service Configuration set to All Configurations.

  5. Fügen Sie eine Einstellung mit dem Namen StorageConnectionString hinzu.Add a setting named StorageConnectionString. Legen Sie Typ auf ConnectionString fest, und legen Sie den Wert auf UseDevelopmentStorage=true fest.Set Type to ConnectionString, and set Value to UseDevelopmentStorage=true.

    Neue Verbindungszeichenfolge

  6. Speichern Sie die Änderungen.Save your changes.

  7. Wiederholen Sie die Prozedur, mit der Sie eine Speicher-Verbindungszeichenfolge zu den ContosoAdsWorker-Rolleneigenschaften hinzugefügt haben.Follow the same procedure to add a storage connection string in the ContosoAdsWorker role properties.

  8. Fügen Sie ebenfalls im ContosoAdsWorker [Role] -Eigenschaftenfenster eine weitere Verbindungszeichenfolge hinzu:Still in the ContosoAdsWorker [Role] properties window, add another connection string:

    • Name: ContosoAdsDbConnectionStringName: ContosoAdsDbConnectionString

    • Typ: StringType: String

    • Wert: Fügen Sie dieselbe Verbindungszeichenfolge ein, die Sie auch für das Webrollenprojekt verwendet haben.Value: Paste the same connection string you used for the web role project. (Das folgende Beispiel bezieht sich auf Visual Studio 2013.(The following example is for Visual Studio 2013. Wenn Sie Visual Studio 2015 oder höher verwenden und dieses Beispiel kopieren, sollten sich daran denken, den Wert für „Data Source“ zu ändern.)Don't forget to change the Data Source if you copy this example and you're using Visual Studio 2015 or higher.)

      Data Source=(localdb)\v11.0; Initial Catalog=ContosoAds; Integrated Security=True; MultipleActiveResultSets=True;
      

Hinzufügen von CodedateienAdd code files

In diesem Abschnitt kopieren Sie Codedateien aus der heruntergeladenen Lösung in die neue Lösung.In this section, you copy code files from the downloaded solution into the new solution. In den folgenden Abschnitten werden die wichtigsten Bereiche des Codes erläutert.The following sections will show and explain key parts of this code.

Um Dateien einem Projekt oder einem Ordner hinzuzufügen, klicken Sie mit der rechten Maustaste auf das Projekt bzw. den Ordner und klicken dann auf Hinzufügen - Vorhandenes Element.To add files to a project or a folder, right-click the project or folder and click Add - Existing Item. Wählen Sie die gewünschten Dateien aus, und klicken Sie auf Hinzufügen.Select the files you want and then click Add. Klicken Sie auf Ja, wenn Sie gefragt werden, ob Sie vorhandene Dateien ersetzen möchten.If asked whether you want to replace existing files, click Yes.

  1. Löschen Sie im Projekt ContosoAdsCommon die Datei Class1.cs, und fügen Sie stattdessen die Dateien Ad.cs und ContosoAdscontext.cs aus dem heruntergeladenen Projekt hinzu.In the ContosoAdsCommon project, delete the Class1.cs file and add in its place the Ad.cs and ContosoAdscontext.cs files from the downloaded project.

  2. Fügen Sie im Projekt ContosoAdsWeb die folgenden Dateien aus dem heruntergeladenen Projekt hinzu.In the ContosoAdsWeb project, add the following files from the downloaded project.

    • Global.asax.cs.Global.asax.cs.
    • Im Ordner Views\Shared: _Layout.cshtml.In the Views\Shared folder: _Layout.cshtml.
    • Im Ordner Views\Home: Index.cshtml.In the Views\Home folder: Index.cshtml.
    • Im Ordner Controllers: AdController.cs.In the Controllers folder: AdController.cs.
    • Im Ordner Views\Ad (Ordner zuerst erstellen): fünf CSHTML-Dateien.In the Views\Ad folder (create the folder first): five .cshtml files.
  3. Fügen Sie im Projekt ContosoAdsWorker die Datei WorkerRole.cs aus dem heruntergeladenen Projekt hinzu.In the ContosoAdsWorker project, add WorkerRole.cs from the downloaded project.

Sie können die Anwendung nun anhand der weiter oben in diesem Tutorial beschriebenen Prozedur erstellen und ausführen, und die Anwendung wird eine lokale Datenbank und den Speicheremulator verwenden.You can now build and run the application as instructed earlier in the tutorial, and the app will use local database and storage emulator resources.

In den folgenden Abschnitten wird der Code für die Arbeit mit Azure-Umgebung, Blobs und Warteschlangen beschrieben.The following sections explain the code related to working with the Azure environment, blobs, and queues. Dieses Tutorial befasst sich nicht mit der Erstellung von MVC-Controllern und -Ansichten mithilfe eines Gerüsts, dem Entity Framework-Code für die Arbeit mit SQL Server-Datenbanken und den Grundsätzen asynchroner Programmierung in ASP.NET 4.5.This tutorial does not explain how to create MVC controllers and views using scaffolding, how to write Entity Framework code that works with SQL Server databases, or the basics of asynchronous programming in ASP.NET 4.5. Informationen zu diesen Themen finden Sie in den folgenden Ressourcen:For information about these topics, see the following resources:

ContosoAdsCommon - Ad.csContosoAdsCommon - Ad.cs

Die Datei Ad.cs definiert eine Enumeration für Werbekategorien und eine POCO-Entitätsklasse für Werbeinformationen.The Ad.cs file defines an enum for ad categories and a POCO entity class for ad information.

public enum Category
{
    Cars,
    [Display(Name="Real Estate")]
    RealEstate,
    [Display(Name = "Free Stuff")]
    FreeStuff
}

public class Ad
{
    public int AdId { get; set; }

    [StringLength(100)]
    public string Title { get; set; }

    public int Price { get; set; }

    [StringLength(1000)]
    [DataType(DataType.MultilineText)]
    public string Description { get; set; }

    [StringLength(1000)]
    [DisplayName("Full-size Image")]
    public string ImageURL { get; set; }

    [StringLength(1000)]
    [DisplayName("Thumbnail")]
    public string ThumbnailURL { get; set; }

    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime PostedDate { get; set; }

    public Category? Category { get; set; }
    [StringLength(12)]
    public string Phone { get; set; }
}

ContosoAdsCommon - ContosoAdsContext.csContosoAdsCommon - ContosoAdsContext.cs

Die Klasse ContosoAdsContext gibt an, dass die Ad-Klasse in einer DbSet-Sammlung verwendet wird, die von Entity Framework in einer SQL-Datenbank gespeichert wird.The ContosoAdsContext class specifies that the Ad class is used in a DbSet collection, which Entity Framework will store in a SQL database.

public class ContosoAdsContext : DbContext
{
    public ContosoAdsContext() : base("name=ContosoAdsContext")
    {
    }
    public ContosoAdsContext(string connString)
        : base(connString)
    {
    }
    public System.Data.Entity.DbSet<Ad> Ads { get; set; }
}

Die Klasse besitzt zwei Konstruktoren.The class has two constructors. Der erste Konstruktor wird vom Webprojekt verwendet und gibt den Namen einer Verbindungszeichenfolge an, die in der Datei Web.config gespeichert ist.The first of them is used by the web project, and specifies the name of a connection string that is stored in the Web.config file. Mit dem zweiten Konstruktor können Sie die tatsächliche Verbindungszeichenfolge übergeben, die vom Workerrollenprojekt verwendet wird, weil dafür keine Web.config-Datei vorhanden ist.The second constructor enables you to pass in the actual connection string used by the worker role project, since it doesn't have a Web.config file. Sie haben weiter oben gesehen, wo diese Verbindungszeichenfolge gespeichert wird, und weiter unten werden Sie sehen, wie der Code die Verbindungszeichenfolge beim Instanziieren der DbContext-Klasse abruft.You saw earlier where this connection string was stored, and you'll see later how the code retrieves the connection string when it instantiates the DbContext class.

ContosoAdsWeb - Global.asax.csContosoAdsWeb - Global.asax.cs

Der aus der Application_Start-Methode aufgerufene Code erstellt einen images-Blobcontainer und eine images-Warteschlange, falls diese noch nicht vorhanden sind.Code that is called from the Application_Start method creates an images blob container and an images queue if they don't already exist. Damit wird sichergestellt, dass Blobcontainer und Warteschlange immer automatisch erstellt werden, wenn Sie ein neues Speicherkonto verwenden oder den Speicheremulator auf einem neuen Computer verwenden.This ensures that whenever you start using a new storage account, or start using the storage emulator on a new computer, the required blob container and queue will be created automatically.

Der Code verwendet die Speicher-Verbindungszeichenfolge aus der .cscfg -Datei für den Zugriff auf das Speicherkonto.The code gets access to the storage account by using the storage connection string from the .cscfg file.

var storageAccount = CloudStorageAccount.Parse
    (RoleEnvironment.GetConfigurationSettingValue("StorageConnectionString"));

Anschließend ruft er einen Verweis auf den images -Blobcontainer ab, erstellt den Container, falls dieser noch nicht existiert, und setzt die Zugriffsberechtigungen für den neuen Container.Then it gets a reference to the images blob container, creates the container if it doesn't already exist, and sets access permissions on the new container. Standardmäßig erlauben neue Container nur Clients mit Speicherkonto-Anmeldeinformationen den Zugriff auf Blobs.By default, new containers only allow clients with storage account credentials to access blobs. Für die Website müssen die Blobs öffentlich sein, um die Bilder mithilfe der URLs anzuzeigen, die auf die Bild-Blobs zeigen.The website needs the blobs to be public so that it can display images using URLs that point to the image blobs.

var blobClient = storageAccount.CreateCloudBlobClient();
var imagesBlobContainer = blobClient.GetContainerReference("images");
if (imagesBlobContainer.CreateIfNotExists())
{
    imagesBlobContainer.SetPermissions(
        new BlobContainerPermissions
        {
            PublicAccess =BlobContainerPublicAccessType.Blob
        });
}

Ein ähnlicher Codeteil ruft einen Verweis auf die images -Warteschlange ab und erstellt eine neue Warteschlange.Similar code gets a reference to the images queue and creates a new queue. In diesem Fall sind keine Berechtigungsänderungen erforderlich.In this case, no permissions change is needed.

CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
var imagesQueue = queueClient.GetQueueReference("images");
imagesQueue.CreateIfNotExists();

ContosoAdsWeb – _Layout.cshtmlContosoAdsWeb - _Layout.cshtml

Die Datei _Layout.cshtml legt den App-Namen in der Kopf- und Fußzeile fest und erstellt den Menüeintrag „Ads“.The _Layout.cshtml file sets the app name in the header and footer, and creates an "Ads" menu entry.

ContosoAdsWeb - Views\Home\Index.cshtmlContosoAdsWeb - Views\Home\Index.cshtml

Die Datei Views\Home\Index.cshtml zeigt Links zu den Kategorien auf der Startseite an.The Views\Home\Index.cshtml file displays category links on the home page. Die Links übergeben den ganzzahligen Wert aus der Category -Enumeration in einer querystring-Variable an die Ads-Indexseite.The links pass the integer value of the Category enum in a querystring variable to the Ads Index page.

<li>@Html.ActionLink("Cars", "Index", "Ad", new { category = (int)Category.Cars }, null)</li>
<li>@Html.ActionLink("Real estate", "Index", "Ad", new { category = (int)Category.RealEstate }, null)</li>
<li>@Html.ActionLink("Free stuff", "Index", "Ad", new { category = (int)Category.FreeStuff }, null)</li>
<li>@Html.ActionLink("All", "Index", "Ad", null, null)</li>

ContosoAdsWeb - AdController.csContosoAdsWeb - AdController.cs

In der Datei AdController.cs ruft der Konstruktor die InitializeStorage-Methode auf, um Objekte der Azure Storage-Clientbibliothek zu erstellen, die eine API für die Arbeit mit Blobs und Warteschlangen bereitstellen.In the AdController.cs file, the constructor calls the InitializeStorage method to create Azure Storage Client Library objects that provide an API for working with blobs and queues.

Anschließend ruft der Code einen Verweis auf den images-Blobcontainer ab, wie weiter oben in Global.asax.cs gezeigt.Then the code gets a reference to the images blob container as you saw earlier in Global.asax.cs. Gleichzeitig wird eine angemessene Standard- Wiederholungs-Richtlinie für eine Webanwendung gesetzt.While doing that it sets a default retry policy appropriate for a web app. Mit der Standardrichtlinie (exponentiell ansteigende Wartezeiten) kann es passieren, dass die Webanwendung im Fall eines vorübergehenden Fehlers über eine Minute lang stehen bleibt.The default exponential backoff retry policy could hang the web app for longer than a minute on repeated retries for a transient fault. Bei der hier gezeigten Richtlinie wird nach jedem Versuch drei Sekunden lang gewartet (für bis zu drei Versuche).The retry policy specified here waits three seconds after each try for up to three tries.

var blobClient = storageAccount.CreateCloudBlobClient();
blobClient.DefaultRequestOptions.RetryPolicy = new LinearRetry(TimeSpan.FromSeconds(3), 3);
imagesBlobContainer = blobClient.GetContainerReference("images");

Ein ähnlicher Codeteil ruft einen Verweis auf die images -Warteschlange ab.Similar code gets a reference to the images queue.

CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
queueClient.DefaultRequestOptions.RetryPolicy = new LinearRetry(TimeSpan.FromSeconds(3), 3);
imagesQueue = queueClient.GetQueueReference("images");

Ein Großteil des Controller-Codes ist typisch für die Arbeit mit einem Entity Framework-Datenmodell und einer DbContext-Klasse.Most of the controller code is typical for working with an Entity Framework data model using a DbContext class. Eine Ausnahme ist die HttpPost Create -Methode, die eine Datei hochlädt und im Blobspeicher ablegt.An exception is the HttpPost Create method, which uploads a file and saves it in blob storage. Die Modellbindung stellt ein HttpPostedFileBase -Objekt für die Methode bereit.The model binder provides an HttpPostedFileBase object to the method.

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create(
    [Bind(Include = "Title,Price,Description,Category,Phone")] Ad ad,
    HttpPostedFileBase imageFile)

Wenn ein Benutzer eine hochzuladende Datei auswählt, lädt der Code die Datei hoch, speichert sie in einem Blob und aktualisiert den Ad-Datenbankeintrag mit einer URL, die auf den Blob zeigt.If the user selected a file to upload, the code uploads the file, saves it in a blob, and updates the Ad database record with a URL that points to the blob.

if (imageFile != null && imageFile.ContentLength != 0)
{
    blob = await UploadAndSaveBlobAsync(imageFile);
    ad.ImageURL = blob.Uri.ToString();
}

Der Code für den Upload befindet sich in der UploadAndSaveBlobAsync -Methode.The code that does the upload is in the UploadAndSaveBlobAsync method. Er erstellt einen GUID-Namen für den Blob, lädt die Datei hoch und speichert sie, und gibt einen Verweis auf den gespeicherten Blob zurück.It creates a GUID name for the blob, uploads and saves the file, and returns a reference to the saved blob.

private async Task<CloudBlockBlob> UploadAndSaveBlobAsync(HttpPostedFileBase imageFile)
{
    string blobName = Guid.NewGuid().ToString() + Path.GetExtension(imageFile.FileName);
    CloudBlockBlob imageBlob = imagesBlobContainer.GetBlockBlobReference(blobName);
    using (var fileStream = imageFile.InputStream)
    {
        await imageBlob.UploadFromStreamAsync(fileStream);
    }
    return imageBlob;
}

Nachdem mit HttpPost Create -Methode ein Blob hochgeladen und die Datenbank aktualisiert wurde, wird eine Nachricht in der Warteschlange erstellt, um den Back-End-Prozess darüber zu informieren, dass ein Bild für die Konvertierung in eine Miniaturansicht vorliegt.After the HttpPost Create method uploads a blob and updates the database, it creates a queue message to inform that back-end process that an image is ready for conversion to a thumbnail.

string queueMessageString = ad.AdId.ToString();
var queueMessage = new CloudQueueMessage(queueMessageString);
await queue.AddMessageAsync(queueMessage);

Der Code für die HttpPost Edit -Methode ist ähnlich, nur müssen hier alle vorhandenen Blobs gelöscht werden, wenn der Benutzer eine neue Bilddatei auswählt.The code for the HttpPost Edit method is similar except that if the user selects a new image file any blobs that already exist must be deleted.

if (imageFile != null && imageFile.ContentLength != 0)
{
    await DeleteAdBlobsAsync(ad);
    imageBlob = await UploadAndSaveBlobAsync(imageFile);
    ad.ImageURL = imageBlob.Uri.ToString();
}

Das nächste Beispiel zeigt den Code, der Blobs löscht, wenn Sie eine Werbeanzeige löschen.The next example shows the code that deletes blobs when you delete an ad.

private async Task DeleteAdBlobsAsync(Ad ad)
{
    if (!string.IsNullOrWhiteSpace(ad.ImageURL))
    {
        Uri blobUri = new Uri(ad.ImageURL);
        await DeleteAdBlobAsync(blobUri);
    }
    if (!string.IsNullOrWhiteSpace(ad.ThumbnailURL))
    {
        Uri blobUri = new Uri(ad.ThumbnailURL);
        await DeleteAdBlobAsync(blobUri);
    }
}
private static async Task DeleteAdBlobAsync(Uri blobUri)
{
    string blobName = blobUri.Segments[blobUri.Segments.Length - 1];
    CloudBlockBlob blobToDelete = imagesBlobContainer.GetBlockBlobReference(blobName);
    await blobToDelete.DeleteAsync();
}

ContosoAdsWeb - Views\Ad\Index.cshtml und Details.cshtmlContosoAdsWeb - Views\Ad\Index.cshtml and Details.cshtml

Die Datei Index.cshtml zeigt Miniaturansichten zusammen mit den restlichen Werbedaten an.The Index.cshtml file displays thumbnails with the other ad data.

<img src="@Html.Raw(item.ThumbnailURL)" />

Die Datei Details.cshtml zeigt das Bild in voller Größe an.The Details.cshtml file displays the full-size image.

<img src="@Html.Raw(Model.ImageURL)" />

ContosoAdsWeb - Views\Ad\Create.cshtml und Edit.cshtmlContosoAdsWeb - Views\Ad\Create.cshtml and Edit.cshtml

Die Dateien Create.cshtml und Edit.cshtml geben die Formularcodierung an, mit der der Controller das HttpPostedFileBase-Objekt abruft.The Create.cshtml and Edit.cshtml files specify form encoding that enables the controller to get the HttpPostedFileBase object.

@using (Html.BeginForm("Create", "Ad", FormMethod.Post, new { enctype = "multipart/form-data" }))

Ein <input> -Element weist den Browser an, ein Dateiauswahl-Dialogfeld zu öffnen.An <input> element tells the browser to provide a file selection dialog.

<input type="file" name="imageFile" accept="image/*" class="form-control fileupload" />

ContosoAdsWorker - WorkerRole.cs - OnStart-MethodeContosoAdsWorker - WorkerRole.cs - OnStart method

Die Azure Workerrollen-Umgebung ruft die OnStart-Methode in der WorkerRole-Klasse auf, wenn die Workerrolle gestartet wird, und ruft die Run-Methode auf, wenn die OnStart-Methode abgeschlossen wird.The Azure worker role environment calls the OnStart method in the WorkerRole class when the worker role is getting started, and it calls the Run method when the OnStart method finishes.

Die OnStart -Methode ruft die Datenbank-Verbindungszeichenfolge aus der CSCFG -Datei ab und übergibt sie an die DbContext-Klasse des Entity Framework.The OnStart method gets the database connection string from the .cscfg file and passes it to the Entity Framework DbContext class. Der SQLClient-Anbieter wird standardmäßig verwendet, daher muss kein Anbieter angegeben werden.The SQLClient provider is used by default, so the provider does not have to be specified.

var dbConnString = CloudConfigurationManager.GetSetting("ContosoAdsDbConnectionString");
db = new ContosoAdsContext(dbConnString);

Anschließend ruft die Methode einen Verweis auf das Speicherkonto ab und erstellt den Blobcontainer und die Warteschlange, falls diese Elemente noch nicht vorhanden sind.After that, the method gets a reference to the storage account and creates the blob container and queue if they don't exist. Dieser Code ähnelt dem Code, den Sie bereits in der Application_Start -Methode der Webrolle gesehen haben.The code for that is similar to what you already saw in the web role Application_Start method.

ContosoAdsWorker - WorkerRole.cs - Run-MethodeContosoAdsWorker - WorkerRole.cs - Run method

Die Run-Methode wird aufgerufen, wenn die Initialisierung der OnStart-Methode abgeschlossen ist.The Run method is called when the OnStart method finishes its initialization work. Die Methode führt eine Endlosschleife aus, die nach neuen Nachrichten in der Warteschlange sucht und diese beim Eintreffen verarbeitet.The method executes an infinite loop that watches for new queue messages and processes them when they arrive.

public override void Run()
{
    CloudQueueMessage msg = null;

    while (true)
    {
        try
        {
            msg = this.imagesQueue.GetMessage();
            if (msg != null)
            {
                ProcessQueueMessage(msg);
            }
            else
            {
                System.Threading.Thread.Sleep(1000);
            }
        }
        catch (StorageException e)
        {
            if (msg != null && msg.DequeueCount > 5)
            {
                this.imagesQueue.DeleteMessage(msg);
            }
            System.Threading.Thread.Sleep(5000);
        }
    }
}

Nach jedem Durchgang der Schleife geht das Programm für eine Sekunde in den Ruhezustand, wenn keine Nachricht gefunden wurde.After each iteration of the loop, if no queue message was found, the program sleeps for a second. So wird verhindert, dass die Workerrolle übermäßige Kosten für CPU-Zeit und Speichertransaktionen verursacht.This prevents the worker role from incurring excessive CPU time and storage transaction costs. Das Microsoft-Kundenberatungsteam weiß von einem Entwickler zu berichten, der diesen Mechanismus vergessen hat, seine Anwendung bereitgestellt hat und in den Urlaub gefahren ist.The Microsoft Customer Advisory Team tells a story about a developer who forgot to include this, deployed to production, and left for vacation. Als er zurückkam, war sein Versehen teurer als der gesamte Urlaub.When they got back, their oversight cost more than the vacation.

Manchmal kann der Inhalt einer Nachricht in der Warteschlange einen Verarbeitungsfehler verursachen.Sometimes the content of a queue message causes an error in processing. Dies nennt man eine nicht verarbeitbare Nachricht. Wenn Sie in diesem Fall nur einen Fehler protokollieren und die Schleife neu starten, kann es passieren, dass Sie endlos versuchen, diese Nachricht zu verarbeiten.This is called a poison message, and if you just logged an error and restarted the loop, you could endlessly try to process that message. Daher enthält der catch-Block eine Anweisung, die prüft, wie oft die Anwendung bereits versucht hat, die aktuelle Nachricht zu verarbeiten. Wenn diese Anzahl größer als 5 ist, wird die Nachricht aus der Warteschlange gelöscht.Therefore the catch block includes an if statement that checks to see how many times the app has tried to process the current message, and if it has been more than 5 times, the message is deleted from the queue.

ProcessQueueMessage wird aufgerufen, wenn eine Warteschlangennachricht gefunden wurde.ProcessQueueMessage is called when a queue message is found.

private void ProcessQueueMessage(CloudQueueMessage msg)
{
    var adId = int.Parse(msg.AsString);
    Ad ad = db.Ads.Find(adId);
    if (ad == null)
    {
        throw new Exception(String.Format("AdId {0} not found, can't create thumbnail", adId.ToString()));
    }

    CloudBlockBlob inputBlob = this.imagesBlobContainer.GetBlockBlobReference(ad.ImageURL);

    string thumbnailName = Path.GetFileNameWithoutExtension(inputBlob.Name) + "thumb.jpg";
    CloudBlockBlob outputBlob = this.imagesBlobContainer.GetBlockBlobReference(thumbnailName);

    using (Stream input = inputBlob.OpenRead())
    using (Stream output = outputBlob.OpenWrite())
    {
        ConvertImageToThumbnailJPG(input, output);
        outputBlob.Properties.ContentType = "image/jpeg";
    }

    ad.ThumbnailURL = outputBlob.Uri.ToString();
    db.SaveChanges();

    this.imagesQueue.DeleteMessage(msg);
}

Der Code liest die Bild-URL aus der Datenbank, konvertiert das Bild zu einer Miniaturansicht, speichert die Miniaturansicht in einem Blob, aktualisiert die Datenbank mit der URL der Miniaturansicht und löscht die Warteschlangen-Nachricht.This code reads the database to get the image URL, converts the image to a thumbnail, saves the thumbnail in a blob, updates the database with the thumbnail blob URL, and deletes the queue message.

Hinweis

Der Code in der ConvertImageToThumbnailJPG-Methode verwendet zur Vereinfachung Klassen aus dem System.Drawing-Namespace.The code in the ConvertImageToThumbnailJPG method uses classes in the System.Drawing namespace for simplicity. Die Klassen in diesem Namespace wurden jedoch für den Einsatz mit Windows Forms entwickelt.However, the classes in this namespace were designed for use with Windows Forms. Sie werden nicht für die Verwendung in einem Windows- oder ASP.NET-Dienst unterstützt.They are not supported for use in a Windows or ASP.NET service. Weitere Informationen zu Bildverarbeitungsoptionen finden Sie unter Dynamic Image Generation (Dynamische Imageerstellung) und Deep Inside Image Resizing (Ausführliche Informationen zur Bildgrößenanpassung).For more information about image-processing options, see Dynamic Image Generation and Deep Inside Image Resizing.

ProblembehandlungTroubleshooting

Falls bei der Ausführung der Anweisungen in diesem Tutorial Probleme auftreten, finden Sie hier einige gängige Fehler und Ansätze zu deren Lösung.In case something doesn't work while you're following the instructions in this tutorial, here are some common errors and how to resolve them.

ServiceRuntime.RoleEnvironmentExceptionServiceRuntime.RoleEnvironmentException

Das RoleEnvironment -Objekt wird von Azure bereitgestellt, wenn Sie eine Anwendung in Azure ausführen oder den Azure-Serveremulator lokal verwenden.The RoleEnvironment object is provided by Azure when you run an application in Azure or when you run locally using the Azure compute emulator. Wenn Sie diesen Fehler bei der lokalen Ausführung erhalten, vergewissern Sie sich, dass Sie das ContosoAdsCloudService-Projekt als Startprojekt gesetzt haben.If you get this error when you're running locally, make sure that you have set the ContosoAdsCloudService project as the startup project. Damit wird festgelegt, dass die Anwendung im Azure-Serveremulator ausgeführt werden soll.This sets up the project to run using the Azure compute emulator.

Die Anwendung verwendet die Azure-Rollenumgebung z.B. zum Abrufen der Verbindungszeichenfolgen aus den CSCFG-Dateien. Diese Ausnahme kann also auch durch eine fehlende Verbindungszeichenfolge verursacht werden.One of the things the application uses the Azure RoleEnvironment for is to get the connection string values that are stored in the .cscfg files, so another cause of this exception is a missing connection string. Stellen Sie sicher, dass Sie die StorageConnectionString-Einstellung sowohl für die lokale als auch für die Cloudkonfiguration im ContosoAdsWeb-Projekt erstellt haben und dass Sie beide Verbindungszeichenfolgen für beide Konfigurationen im ContosoAdsWorker-Projekt erstellt haben.Make sure that you created the StorageConnectionString setting for both Cloud and Local configurations in the ContosoAdsWeb project, and that you created both connection strings for both configurations in the ContosoAdsWorker project. Mit einer Alles durchsuchen-Suche nach StorageConnectionString in der gesamten Lösung sollten Sie die Zeichenfolge neunmal in sechs Dateien finden.If you do a Find All search for StorageConnectionString in the entire solution, you should see it 9 times in 6 files.

Port xxx kann nicht überschrieben werden.Cannot override to port xxx. Neuer Port unterhalb des zulässigen Mindestwerts 8080 für das HTTP-ProtokollNew port below minimum allowed value 8080 for protocol http

Versuchen Sie, die Portnummer für das Webprojekt zu ändern.Try changing the port number used by the web project. Klicken Sie mit der rechten Maustaste auf das ContosoAdsWeb-Projekt, und klicken Sie auf Eigenschaften.Right-click the ContosoAdsWeb project, and then click Properties. Klicken Sie auf die Registerkarte Web, und ändern Sie die Portnummer in der Einstellung Projekt-URL.Click the Web tab, and then change the port number in the Project Url setting.

Eine weitere Möglichkeit zur Behebung dieses Problems finden Sie im nächsten Abschnitt.For another alternative that might resolve the problem, see the following section.

Sonstige Fehler bei der lokalen AusführungOther errors when running locally

Standardmäßig verwenden neue Clouddienstprojekte den Azure-Serveremulator Express, um die Azure-Umgebung zu simulieren.By default new cloud service projects use the Azure compute emulator express to simulate the Azure environment. Dies ist eine abgespeckte Version der Serveremulator-Vollversion. Unter bestimmten Umständen kann es passieren, dass die Vollversion funktioniert und die Express-Version einen Fehler verursacht.This is a lightweight version of the full compute emulator, and under some conditions the full emulator will work when the express version does not.

Um das Projekt mit der Emulator-Vollversion zu verwenden, klicken Sie mit der rechten Maustaste auf das ContosoAdsCloudService-Projekt, und klicken anschließend auf Eigenschaften.To change the project to use the full emulator, right-click the ContosoAdsCloudService project, and then click Properties. Klicken Sie im Fenster Eigenschaften auf die Registerkarte Web, und klicken Sie auf das Optionsfeld Emulator-Vollversion verwenden.In the Properties window click the Web tab, and then click the Use Full Emulator radio button.

Um die Anwendung mit der Emulator-Vollversion zu verwenden, müssen Sie Visual Studio mit Administratorrechten öffnen.In order to run the application with the full emulator, you have to open Visual Studio with administrator privileges.

Nächste SchritteNext steps

Die Contoso Ads-Anwendung wurde für dieses Tutorial bewusst einfach gehalten.The Contoso Ads application has intentionally been kept simple for a getting-started tutorial. Sie implementiert z.B. keine Abhängigkeitsinjektion oder Repository und Arbeitseinheit, verwendet keine Schnittstelle für die Protokollierung und keine EF Code First-Migrationen zur Verwaltung von Datenmodellen oder EF-Verbindungsstabilität für vorübergehende Verbindungsfehler usw.For example, it doesn't implement dependency injection or the repository and unit of work patterns, it doesn't use an interface for logging, it doesn't use EF Code First Migrations to manage data model changes or EF Connection Resiliency to manage transient network errors, and so forth.

Hier finden Sie einige Beispielanwendungen für Clouddienste mit realitätsnäheren Programmierpraktiken, geordnet vom einfachsten hin zum komplexesten Projekt:Here are some cloud service sample applications that demonstrate more real-world coding practices, listed from less complex to more complex:

Weitere Informationen zur Entwicklung für die Cloud finden Sie unter Erstellen von Cloud-Apps mit Azure.For general information about developing for the cloud, see Building Real-World Cloud Apps with Azure.

Ein Einführungsvideo zu bewährten Methoden und Vorlagen für Azure Storage finden Sie unter Microsoft Azure Storage – Neuigkeiten, bewährte Methoden und Vorlagen.For a video introduction to Azure Storage best practices and patterns, see Microsoft Azure Storage – What's New, Best Practices and Patterns.

Weitere Informationen finden Sie in den folgenden Ressourcen:For more information, see the following resources: