Freigeben über


Ausführen von Asp.Net Core mit IIS unter Nano Server

von David So

In diesem Artikel werden die erforderlichen Schritte zum Abrufen einer ASP.Net Core-Anwendung beschrieben, die mit IIS unter Nano ausgeführt wird.

Kompatibilität

Version Hinweise
IIS 10.0 Die in diesem Artikel beschriebenen Features wurden in IIS 10.0 eingeführt.
IIS 8.5 und früher Die in diesem Artikel beschriebenen Features wurden vor IIS 10.0 nicht unterstützt.

Installieren von IIS

Zunächst müssen Sie IIS unter Nano installieren. Die hierfür erforderlichen Schritte werden bereits in der offiziellen Nano-Dokumentation behandelt. Weitere Informationen finden Sie in den folgenden Artikeln:

Installieren von Reverse Forwarders

Derzeit erfordern sowohl HttpPlatformHandler als auch der Asp.Net Core Kestrel-Host das Installieren eines Reverse Forwarders-Pakets auf dem Nano-Computer.

Reverse Forwarders kann offline (Computer aus) oder online (Computer an) installiert werden.

Offline kann Reverse Forwarders installiert werden, indem beim Aufrufen des New-NanoServerImage-cmdlets –ReverseForwarders-Parameter übergeben werden. Beispiel:

New-NanoServerImage -MediaPath f:\ -BasePath .\Base -TargetPath .\Nano1.vhd -GuestDrivers -Packages Microsoft-NanoServer-IIS-Package -ReverseForwarders

Online kann Reverse Forwarders installiert werden, indem für das entsprechende Paket „dism“ aufgerufen wird:

  • dism /online /add-package /packagepath:c:\packages\Microsoft-OneCore-ReverseForwarders-Package.cab
  • dism /online /add-package /packagepath:c:\packages\en-us\Microsoft-OneCore-ReverseForwarders-Package.cab
  • <reboot>

Mit dem 1. Befehl wird das Reverse Forwarders-Featurepaket installiert.

Der 2. Befehl installiert das zugehörige Sprachpaket des Pakets.

In diesem Fall ist C:\packages ein lokales Verzeichnis, das dort erstellt wurde, wo der Ordner „Pakete“ aus dem Speicherort der Nano Server-Medieninstallation kopiert wurde.

Überprüfen Sie nach der Installation des Reverse Forwarders-Pakets (ob offline oder online), ob IIS und Reverse Forwarders ordnungsgemäß installiert sind, indem Sie dism /online /get-packages ausführen.

Nun sollten die Feature- und Sprachpakete für Microsoft-NanoServer-IIS-Package und Microsoft-OneCore-ReverseForwarders-Package angezeigt werden.

Installieren von HttpPlatformHandler

Zurzeit muss die Installation von HttpPlatformHandler unter Nano manuell ausgeführt werden.

Das ist verständlicherweise eine Unannehmlichkeit… weshalb wir daran arbeiten, dies zu verbessern.

Nano ist nur als 64-Bit-Version verfügbar (kein WOW), weshalb Sie die neueste x64-Version von HttpPlatformHandler (https://www.iis.net/downloads/microsoft/httpplatformhandler) auf einem normalen Computer (nicht Nano) installieren müssen.

Nachdem Sie die x64-Bit-Version von HttpPlatformHandler auf Ihrem normalen Computer (nicht Nano) installiert haben, müssen Sie zwei Dateien zum Nano-Computer kopieren:

  • %windir%\System32\inetsrv\httpPlatformHandler.dll
  • %windir%\System32\inetsrv\config\schema\httpplatform_schema.xml

Auf dem Nano-Computer müssen Sie diese beiden Dateien in die entsprechenden Speicherorte kopieren (dll->inetsrv, schema file->inetsrv\config\schema)

  • copy .\httpPlatformHandler.dll c:\Windows\System32\inetsrv
  • copy .\httpplatform_schema.xml c:\Windows\System32\inetsrv\config\schema

Aktivieren von HttpPlatformHandler (PowerShell)

Sie können die nachstehenden Schritte in einer Remote-PowerShell-Sitzung auf dem Nano-Computer ausführen.

Beachten Sie, dass die nachstehenden Schritte auf einem unveränderten System funktionieren, aber nicht als idempotent gedacht sind. Wenn Sie dies mehrmals ausführen, werden mehrere Einträge hinzugefügt, und es treten Probleme auf! Wenn das Resultat ein fehlerhafter Zustand ist, finden Sie unter %systemdrive%\inetpub\history Sicherungen der applicationHost.config-Datei.

Import-Module IISAdministration
$sm = Get-IISServerManager

# Add AppSettings section (for Asp.Net Core)
$sm.GetApplicationHostConfiguration().RootSectionGroup.Sections.Add("appSettings")

# Unlock handlers section
$appHostconfig = $sm.GetApplicationHostConfiguration()
$section = $appHostconfig.GetSection("system.webServer/handlers")
$section.OverrideMode="Allow"

# Add httpPlatform section to system.webServer
$sectionHttpPlatform = $appHostConfig.RootSectionGroup.SectionGroups["system.webServer"].Sections.Add("httpPlatform")
$sectionHttpPlatform.OverrideModeDefault = "Allow"

# Add to globalModules
$globalModules = Get-IISConfigSection "system.webServer/globalModules" | Get-IISConfigCollection
New-IISConfigCollectionElement $globalModules -ConfigAttribute @{"name"="httpPlatformHandler";"image"="%SystemRoot%\system32\inetsrv\httpPlatformHandler.dll"}

# Add to modules
$modules = Get-IISConfigSection "system.webServer/modules" | Get-IISConfigCollection
New-IISConfigCollectionElement $modules -ConfigAttribute @{"name"="httpPlatformHandler"}
$sm.CommitChanges()

Aktivieren von HttpPlatformHandler (manuelle Bearbeitung von applicationHost.config)

Sie können diesen Abschnitt überspringen, wenn Sie die obigen PowerShell-Schritte bereits ausgeführt haben.

Es wird empfohlen, die PowerShell-Schritte auszuführen. Wenn Sie die applicationHost.config-Datei von IIS jedoch unbedingt bearbeiten müssen, um HttpPlatformHandler zu aktivieren, sind dies die Schritte.

Öffnen Sie c:\windows\system32\inetsrv\applicationHost.config.

(Wenn Sie PowerShell ISE v5 verwenden, können Sie dies mithilfe von psedit c:\windows\system32\inetsrv\applicationHost.config tun)

Fügen Sie unter <configSections> Folgendes hinzu:

<configSections>
<section name="appSettings" />

Entsperren Sie im Abschnitt „system.webServer“ Handler, indem Sie „Deny“ zu „Allow“ ändern.

<section name="handlers" overrideModeDefault="Allow" />

Fügen Sie im Abschnitt „system.webServer“ den neuen Abschnitt „httpPlatform“ hinzu.

<section name="httpPlatform" overrideModeDefault="Allow" />
</sectionGroup>

Fügen Sie globalModules Folgendes hinzu:

<add name="httpPlatformHandler" image="%SystemRoot%\system32\inetsrv\httpPlatformHandler.dll" />
</globalModules>

Fügen Sie den Modulen Folgendes hinzu:

<add name="httpPlatformHandler" />
</modules>

Installieren einer ASP.NET Core-Anwendung

Stellen Sie zunächst sicher, dass Ihre Asp.Net Core-Anwendung so erstellt wurde, dass sie coreclr and x64 ansteuert.

Dies ist sehr wichtig, da andere Kombinationen unter Nano nicht funktionieren.

Nach dem Erstellen für coreclr/x64 müssen Sie die gesamte Anwendung auf den Nano-Computer kopieren. In diesem Beispiel wird c:\HelloAspNetCore verwendet.

Als Nächstes wird mithilfe des Ports 8000 eine neue Site eingerichtet, die auf c:\HelloAspNetCore\wwwroot verweist (aus Gründen der Einfachheit wird der Standard-App-Pool verwendet)

Beim Ausführen der Asp.Net Core-Site unter dem Standardport 80 treten keine Probleme auf, jedoch können Sie in einer Testumgebung die Asp.Net Core-App von der Standardwebsite trennen, damit Sie Probleme einfacher beheben können, wenn ein Fehler auftritt (z. B. damit Sie überprüfen können, ob die IIS-Standardsite weiterhin einwandfrei funktioniert).

Verwenden von IIS PowerShell:

Import-module IISAdministration
New-IISSite -Name "AspNetCoreSite" -PhysicalPath c:\HelloAspNetcore\wwwroot -BindingInformation "*:8000:"

Manuelles Erstellen der Site durch Bearbeiten von c:\windows\system32\inetsrv\applicationHost.config (überspringen Sie dies, wenn Sie sie wie oben bereits mit PowerShell erstellt haben):

<sites>
<site name="Default Web Site" id="1">
    <application path="/">
        <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:80:" />
    </bindings>
</site>
<site name="AspNetCoreSite" id="2">
    <application path="/">
        <virtualDirectory path="/" physicalPath="C:\HelloAspNetCore\wwwroot" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:8000:" />
    </bindings>
</site>
… rest of xml…
</sites>

Der nächste Schritt besteht darin, Port 8000 in der Firewall zu öffnen.

New-NetFirewallRule -Name "AspNetCore" -DisplayName "HTTP on TCP/8000" -Protocol tcp -LocalPort 8000 -Action Allow -Enabled True

Problembehandlung

Stellen Sie zunächst sicher, dass IIS selbst ordnungsgemäß installiert ist. http://<ipaddress> sollte die Standardseite (Blaue IIS-Seite) abrufen, andernfalls ist etwas sehr grundlegendes nicht richtig eingerichtet.

Stellen Sie anschließend sicher, dass Ihre Anwendung eigenständig ausgeführt werden kann. Beispiel: c:\HelloAspNetCore\approot\web.cmd

Überprüfen Sie daraufhin, ob Protokolle angezeigt werden, die von HttpPlatformHandler erstellt wurden , z. B. c:\HelloAspNetCore\logs.