Partager via


Exécution de Asp.Net Core avec IIS sur Nano Server

par David So

Cet article décrit les étapes requises pour obtenir une application ASP.Net Core s’exécutant avec IIS sur Nano.

Compatibilité

Version Notes
IIS 10.0 Les fonctionnalités décrites dans cet article ont été introduites dans IIS 10.0
IIS 8.5 et versions antérieures Les fonctionnalités décrites dans cet article n’ont pas été prises en charge avant IIS 10.0.

Installation d’IIS

Tout d’abord, vous devez installer IIS sur Nano, et les étapes à suivre sont déjà traitées dans la documentation officielle de Nano. Pour plus d’informations, consultez les articles suivants :

Installation des redirecteurs inverses

Actuellement, HttpPlatformHandler et Asp.Net hôte Kestrel Core nécessitent l’installation du package redirecteurs inverses sur l’ordinateur Nano.

Les fowarders inversés peuvent être installés hors connexion (la machine est désactivée) ou en ligne (machine en cours d’exécution).

Hors connexion, les redirecteurs inverses peuvent être installés en passant –ReverseForwarders des paramètres lors de l’appel de l’applet de commande New-NanoServerImage. Par exemple :

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

Les redirecteurs inverses peuvent être installés en appelant dism sur le package approprié :

  • 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>

La 1ère commande installe le package de fonctionnalités des redirecteurs inverses.

La 2e commande installe le module linguistique associé pour le package.

Dans ce cas, C:\packages est un répertoire local que j’ai créé où j’ai copié le dossier Packages à partir de l’emplacement d’installation du support Nano Server.

Après avoir installé le package de redirecteurs inverses (hors connexion ou en ligne), vérifiez que IIS et les redirecteurs inverses sont correctement installés en exécutant dism /online /get-packages.

Vous devez voir les modules de fonctionnalité et de langue pour Microsoft-NanoServer-IIS-Package et Microsoft-OneCore-ReverseForwarders-Package.

Installation de HttpPlatformHandler

À ce stade, l’installation de HttpPlatformHandler sur Nano est manuelle.

Il est compréhensible que ce soit embêtant.... c’est donc quelque chose que nous essayons d’améliorer.

Nano est 64 bits uniquement (pas WOW), vous devez donc installer la dernière version x64 de HttpPlatformHandler (https://www.iis.net/downloads/microsoft/httpplatformhandler) sur un ordinateur standard (et non Nano).

Une fois que vous avez installé la version x64 de HttpPlatformHandler sur votre ordinateur standard (et non Nano), il existe 2 fichiers que nous devons copier sur la machine Nano :

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

Sur la machine Nano, vous devez copier ces 2 fichiers vers les emplacements respectifs (dll-inetsrv>, schema file-inetsrv>\config\schema)

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

Activation de HttpPlatformHandler (PowerShell)

Vous pouvez exécuter les étapes ci-dessous dans une session PowerShell distante sur l’ordinateur Nano.

Notez que les étapes ci-dessous fonctionnent sur un système propre, mais ne sont pas destinées à être idempotentes. Si vous exécutez cette opération plusieurs fois, elle ajoute plusieurs entrées et vous rencontrerez des problèmes ! Si vous vous trouvez dans un mauvais état, vous pouvez trouver des sauvegardes du fichier applicationHost.config à l’adresse %systemdrive%\inetpub\history.

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()

Activation de HttpPlatformHandler (modification manuelle d’applicationHost.config)

Vous pouvez ignorer cette section si vous avez déjà effectué les étapes PowerShell ci-dessus.

Je vous recommande de suivre les étapes PowerShell, bien que si vous devez absolument modifier le fichier IIS applicationHost.config pour activer HttpPlatformHandler, il s’agit des étapes.

Ouvrir c:\windows\system32\inetsrv\applicationHost.config

(si vous utilisez PowerShell ISE v5, vous pouvez le faire à l’aide psedit c:\windows\system32\inetsrv\applicationHost.configde )

Sous <configSections> ajouter

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

Dans la section system.webServer, déverrouillez les gestionnaires de Deny to Allow

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

Dans la section system.webServer, ajoutez une nouvelle section httpPlatform

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

Ajoutez ce qui suit à globalModules

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

Ajoutez les éléments suivants aux modules

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

Création d’une application ASP.NET Core

Tout d’abord, assurez-vous que votre application Asp.Net Core est générée en ciblant coreclr and x64.

Cela est très important, car toute autre combinaison ne fonctionnera pas sur Nano.

Après avoir généré pour coreclr/x64, vous devez copier l’application entière sur la machine Nano . Dans cet exemple, j’utilise c:\HelloAspNetCore.

Ensuite, je vais configurer un nouveau site pointant vers l’utilisation du c:\HelloAspNetCore\wwwroot port 8000 (par souci de simplicité, nous allons utiliser le pool d’applications par défaut)

Il n’existe aucun problème lors de l’exécution du site Asp.Net Core sur le port 80 par défaut, bien que dans un environnement de test, j’aime séparer l’application Asp.Net Core du site web par défaut, afin qu’il soit plus facile de résoudre les problèmes en cas de problème (par exemple, vous pouvez vérifier que le site IIS par défaut fonctionne toujours correctement).

Utilisation d’IIS PowerShell :

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

Création manuelle du site (omettre si vous avez déjà créé à l’aide de PowerShell ci-dessus) en modifiant c:\windows\system32\inetsrv\applicationHost.config:

<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>

L’étape suivante consiste à ouvrir le port 8000 dans le pare-feu.

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

Dépannage

Vérifiez d’abord que IIS lui-même est correctement installé. http://<ipaddress> doit vous obtenir la page par défaut (page Blue IIS) sinon quelque chose de très basique n’est pas configuré correctement.

Ensuite, assurez-vous que votre application peut exécuter en mode autonome. Exemple : c:\HelloAspNetCore\approot\web.cmd

Troisièmement, assurez-vous que vous voyez les journaux créés par HttpPlatformHandler, par exemple.c:\HelloAspNetCore\logs