ASP.NET Datenbank Website deploy nach Azure

Microsoft macht es einem ziemlich leicht Azure zu nutzen. Kompliziert ist höchstens aus den unzähligen Optionen zu wählen. Mit Visual Studio 2013 lässt sich eine SQL Server basierte Website mit allem Pipapo nach Azure publishen ohne das Azure Portal zu benötigen.

Eine übliche Website im ASP.NET Umfeld besteht aus einem HTML Part, Code per ASPX oder MVC Controller, einem EF Datenmodell und einer SQL Datenbank. Dabei spielt es keine Rolle ob das Datenmodell per Code First oder direkt in der Datenbank erstellt worden ist. Die bei Code Frist nötigen und durchaus nützlichen EF Migrations erzeugen einen mehr Aufwand, der in mini Projekten nicht zu rechtfertigen ist.

Mein ASP.NET Webforms Demo Projekt beginnt deshalb lokal und mit einer Datenbank. Im Verzeichnis APP_DATA wird eine SQL Server Database (database1.mdf) angelegt. Per Doppelklick wird diese dynamisch im SQL Express Attached und kann im SQL Server Object Explorer direkt in Visual Studio bearbeitet werden. Es wird eine Tabelle mit dem Namen table und Felder angelegt. Außerdem können dort direkt Daten erfasst werden. 

Anschließend wird aus den Daten ein Entity Framework Model erzeugt. Darin finden sich auch die Klassen für die Daten Objekte.

Meine Web Forms VB.NET Datenbank Anwendung ist supersimpel.

   1:  <h1>Hello World</h1>
   2:  <asp:ListView ID="ListView1" runat="server" 
ItemType="TestDBAzure.Table" SelectMethod="ListView1_GetData">
   3:              <ItemTemplate>
   4:                  <%#Item.Name%>
   5:              </ItemTemplate>
   6:   </asp:ListView>

Die Daten werden in einer Art Viewmodel aus dem EF Model geladen.

   1:   Public Function ListView1_GetData() As IQueryable(Of TestDBAzure.Table)
   2:          Dim ef As New Model1
   3:          Return ef.Table
   4:      End Function

Nun kommt der spannende Teil. Wie kommt meine Web Anwendung auf den Webserver? Wer diese selbst hostet auf z.B. einem IIS benötigt folgende Schritte

  • Web im IIS anlegen
  • DNS Namen konfigurieren
  • Verzeichnis auf Server per FTP kopieren
  • FTP Zugang konfigurieren
  • SQL Datenbank anlegen
  • SQL User anlegen
  • SQL Datenbank per SQL Skript anlegen
  • Connection Strings in Web.config ändern
  • Debug Option in Web.Config deaktivieren

Vermutlich wurde sogar die ein oder andere Option in der Auflistung vergessen.

Mit Visual Studio klappt das viel einfacher. Keine Admin Aufgaben am Webserver, keine Config Änderungen. Vorausgesetzt man setzt auf die Dienste Azure Web Apps (vormals Web Sites) und SQL Azure.

Im Visual Studio 2013 Web Projekt wird per Rechtsklick der Publish Assistent gestartet.

azure1

Dafür ist natürlich eine Microsoft ID und ein Azure Konto nötig. Die Basic Web App wird von Microsoft mit einem Übertragungslimit kostenfrei angeboten.

In diesem Dialog kann man auch die nötige Datenbank samt SQL Azure erzeugen lassen.

Der Publishing Dienst ist so clever, das er automatisch die Connection Strings in der Web.Config austauscht um statt der lokalen Datenbank die Web Datenbank zu verwenden. Die nötigen Einstellungen dazu werden im Assistenten vorgenommen.

Azure2

Dieser Schritt ist Segen und Fluch zugleich. Es existieren zwei unterschiedliche Versionen der Datei Web.config. Die lokale und eine Remote Version. Im Server Explorer (aus Visual Studio) finden sich im Bereich Azure – Web Sites – Files – eine Möglichkeit die Remote Dateien direkt zu öffnen und sogar zu editieren.

azure4

Die Einstellungen dazu werden in einem Publishing Profil abgelegt. Dieses basiert auf XML und endet auf pubxml.

image

Diese Deployment Deklaration ist mächtig und erlaubt es auch zusätzliche Inhalte per Publis zu deployen. XML typisch findet sich die Regeln für die Connections Strings auf leicht im Code.

   1:   <ItemGroup>
   2:      <MSDeployParameterValue Include="$(DeployParameterPrefix)DefaultConnection-Web.config Connection String">
   3:        <ParameterValue>Data Source=tcp:lm7utauvto.database.windows.net,1433;
   4:  Initial Catalog=ppedvdemo1_db;User Id=ppedv@lm7utauvto;Password=seherGeheim</ParameterValue>
   5:      </MSDeployParameterValue>

Mit Rechtsllick auf diese pubxml Datei im Visual Studio Solution Explorer öffnet sich ein weiteres Stück Redmonder Magie- “Add Config Transform” erzeugt für die debug und release Varianten der Web.Config Transformatonslogik in einer Schema Definitions Sprache. Wer für Release den Debug Switch entfernen möchte findet in der Datei Web.Release.Config folgende Anweisung.

   1:   <system.web>
   2:      <compilation xdt:Transform="RemoveAttributes(debug)" />

Beim ersten Deploy werden alle Assemblies kopiert und die leere Datenbank auf Azure angelegt. Dies dauert ein wenig länger und kann ganz gut im Visual Studio Output Window verfolgt werden.

Dabei fällt auf, das auch die .mdf Datei aus dem APP_DATA Verzeichnis kopiert wird. Da dies unnötig ist, kann man das in den Publish Web Settings auch deaktivieren.

image

Nun sollen die Daten aus der Azure Datenbank direkt editiert werden.  Im Server Explorer erscheint die neue SQL Azure Datenbank. Zwischen mir und Azure steht nun nur noch die Azure Firewall. Diese beschränkt den Zugriff auf bestimmte IP Adressen.  Um von zuhause den SQL Manager zu nutzen muss die dabei genutzte IP Adresse meines Providers beim Azure Dienst freigegeben werden. Auch das macht Visual Studio quasi von alleine.

Azure3

Das Einfügen von neuen Datensätzen geschieht dann auch ohne zusätzliche Software- nur Visual Studio.

azure5

Weitere Einstellungen, wie die Wahl des genutzten .NET Frameworks lassen sich in den Einstellungen der Azrure Web Site einrichten. Auch hier führt eine Rechtsklick auf einen weiteren Settings Dialog.

azure6

Dessen Möglichkeiten erinnern an die Management Console des IIS Webservers. So kann man das Logging dort aktivieren und auch die Logfiles sichten.

Jedes weiter Publishing erfordert lediglich einen Rechtsllick auf das Projekt oder auf einen einzelne Datei.

Kommentare sind geschlossen