ASP.NET Core Anwendung auf IIS deployen

Was soll ich sagen, ich liebe den Web Server von Microsoft. Ich war damals in der Neuentwicklung nach IIS6 stark involviert. Das Team in Redmond klein und sehr interessiert an Feedback. Ich kenne jede Schraube, mag das XML in den Config Dateien. Die modularisierung und .NET.

Im folgenden Tutorial lernen Sie wie man einen ASP.NET Core Website auf dem IIS installiert und konfiguriert.

Der Webserver wird von Microsoft zum Proxy Server degradiert. Die eigentliche Web Server ist in dotnet integriert und heist Kestrel, wie man bei einem HTTP Debug Fiddler Trace Log auch erkennen kann.

image

Mein Eindruck ist, das es leichter ist eine ASP.NET Core App in einem Docker Container hochzuziehen als Windows Server IIS 10. Zunächst sollte man das .NET Core 2.2 runtime & Hosting Bundle for Windows installieren.

 

iiscore

Ich sage sollte, weil man .net core apps auch als Self Contained deployen kann, aber das lassen wir mal weg. Microsoft meint man sollte den Web Dienst des IIS neu starten oder besser die ganze Maschine.

 

coreiis2

das Erzeugen der Web Anwendung in der IIS Managment Console funktioniert zunächst wie gewohnt. Rechte Maustaste auf Site, Website Hinzufügen, Pfad auswählen usw. Natürlich muss noch der A Eintrag fürs DNS gesetzt sein. Das alles nicht hier Thema. Ein normale ASP.NET Anwendung, egal ob Webforms oder MVC, läuft in einem Application Pool. Man kann diese Website in einen Standard .NET Pool hinzufügen. Ich bin mir nicht sicher was das für konkrete Auswirkungen hat. Man kann aber auch einen Application Pool ohne .NET Framework anlegen und der Website zuweisen.

coreiis3

Stellt sich nur noch die Frage, wie kommt das Projekt aus Visual Studio auf den Webserver. Dazu kenne ich drei Wege

File Copy (Ordner), FTP und Webdeploy. Alles wird aus Visual Studio, Menüpunkt Erstellen, Projekt Veröffentlichen angestoßen.

image

Muss man nur vorher dem IIS mitteilen, das man das auch darf. Webdeploy läuft in meiner Installation noch nicht. Ich werde dazu noch extra bloggen (müssen). Bleibt nur FTP. Dies aktiviert man am Webserver in der Managment Console des IIS per Rechtsklick auf die Website. FTP Publishing hinzufügen. Achten Sie darauf, das der geplante User die erforderlichen Autorisierungsrechte (Lesen, Schreiben) hat.

image

Die Besonderheit hier ist, das FTP keine Hostheader kennt. In der Regel laufen auf einem Webserver sehr viele Websites mit unterschiedlichen Domains. Um dem FTP Dienst in das richtige Verzeichnis zu locken verwendet Microsoft eine Login Notation mit dem Pipe Symbol. Site.de|WebAutorUser

Das kann man auf der Kommandozeile auch testen, mit dem FTP Kommando.

image

Im Visual Studio Projekt lassen sich ein oder mehrere Publishing Profile anlegen. Hardcore Command Shell User können auch dotnet publish nutzen um das ganze irgendwie zu automatisieren. Hier wird aber Visual Studio genutzt.

image

Wenn der Verbindungstest erfolgreich war, den Veröffentlichen Button drücken und ein wenig warten. Es wird relativ viel kopiert (hier ca 20MB, 300 Dateien). Nur eines nicht, das Pages Verzeichnis und die cshtml Dateien. Die Logik und die Views werden in zwei DLL’s gelegt.

image

Die Web App funktioniert nun auch, wenn man sie im Browser aufruft http://coredemo.ppedv.de/

Allerdings sind Web Seiten keine Apps. Hier wird häufig vom Designer direkt in der ASPX Seite direkt eine Änderung vorgenommen. Kennt man von Webforms wenn man ohne dem Codebehind Page Attribut arbeitet. Also keine große DLL, die jedes Mal neu kompiliert werden muss. Sondern automatisch kompiliert, wenn sich die Page ändert.

Das sollte seit dotnet core 2.1 auch mit Razor Pages funktionieren, wenn man diese ohne Page Model anlegt.

image

Diese Datei wird in Visual Studio per Rechtsklick auf die Datei, veröffentlicht- der Pages Folder angelegt und kopiert.

Ruft man diese dann im Browser auf:

An unhandled exception occurred while processing the request.

InvalidOperationException: Cannot find compilation library location for package 'Microsoft.NETCore.App'

 

Hier scheint es einen Bug zu geben. Der ganze Komplex funktioniert nicht sauber, allerdings ist das der Weg, den Microsoft mit der ASP.NET Core 3 Version weiter beschreiten wird um eben auch ganz simple Websites sinnvoll mit dotnet core betreiben zu können. Der Workaround für den Moment ist das Refs Verzeichnis zu kopieren. Das taucht bei mir auf in

C:\websites\aspnetcoreupload\aspnetcoreupload\obj\Release\netcoreapp2.2\win-x64\PubTmp\Out

 

Nochmal 33MB und 350 Dateien später erscheint meine TinyPage auch korrekt im Browser. Und nun kann ich auch mit Notepad die Razor View Page am Web Server ändern oder neue anlegen ohne neu zu kompilieren.

 

Im Zuge der Recherchen bin ich noch auf den Hinweis gestoßen in der csproj Datei als SDK Microsoft.NET.Sdk.Razor statt Microsoft.NET.Sdk.Web zu verwenden, was auch die Option für core 3 sein soll. Leider weigert sich dann mein Visual Studio die Wizards für FTP oder Webdeploy anzuzeigen. Alles im Fluss oder noch Platz für weiteres forschen.

Kommentare sind geschlossen