Delen via


Geavanceerde configuratie van de ASP.NET Core Module en IIS

Notitie

Dit is niet de nieuwste versie van dit artikel. Zie de .NET 9-versie van dit artikelvoor de huidige release.

Waarschuwing

Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie de .NET- en .NET Core-ondersteuningsbeleidvoor meer informatie. Zie de .NET 9-versie van dit artikelvoor de huidige release.

Belangrijk

Deze informatie heeft betrekking op een pre-releaseproduct dat aanzienlijk kan worden gewijzigd voordat het commercieel wordt uitgebracht. Microsoft geeft geen garanties, uitdrukkelijk of impliciet, met betrekking tot de informatie die hier wordt verstrekt.

Zie de .NET 9-versie van dit artikelvoor de huidige release.

In dit artikel worden geavanceerde configuratieopties en scenario's beschreven voor de ASP.NET Core Module en IIS.

De grootte van de stack wijzigen

Geldt alleen wanneer u het in-proces hostingmodel gebruikt.

Configureer de grootte van de beheerde stack met behulp van de stackSize instelling in hexadecimale bytes in het web.config bestand. De standaardgrootte is 0x100000 bytes (1 MB). In het volgende voorbeeld wordt de stackgrootte gewijzigd in 2 MB (2.097.152 bytes) in hexadecimale 0x200000:

<aspNetCore processPath="dotnet"
    arguments=".\MyApp.dll"
    stdoutLogEnabled="false"
    stdoutLogFile="\\?\%home%\LogFiles\stdout"
    hostingModel="inprocess">
  <handlerSettings>
    <handlerSetting name="stackSize" value="200000" />
  </handlerSettings>
</aspNetCore>

Rotatie bij configuratie niet tolereren

De instelling disallowRotationOnConfigChange is bedoeld voor blauw-groene scenario's waarbij een wijziging in globale configuratie niet tot gevolg mag hebben dat alle sites worden gerecycled. Wanneer deze vlag waar is, zullen alleen wijzigingen die relevant zijn voor de site zelf ertoe leiden dat deze wordt gerecycled. Een site wordt bijvoorbeeld gerecycled als de web.config wordt gewijzigd of als er veranderingen optreden die van invloed zijn op het pad van de site vanuit het perspectief van IIS. Maar een algemene wijziging in applicationHost.config zou ertoe leiden dat een app niet wordt gerecycled. In het volgende voorbeeld wordt deze instelling op true gezet:

<aspNetCore processPath="dotnet"
    arguments=".\MyApp.dll"
    stdoutLogEnabled="false"
    stdoutLogFile="\\?\%home%\LogFiles\stdout"
    hostingModel="inprocess">
  <handlerSettings>
    <handlerSetting name="disallowRotationOnConfigChange" value="true" />
  </handlerSettings>
</aspNetCore>

Deze instelling komt overeen met de API-ApplicationPoolRecycling.DisallowRotationOnConfigChange

Verminder de kans op 503 tijdens het recyclen van apps

Er is standaard een vertraging van één seconde tussen het moment dat IIS wordt op de hoogte gebracht van een recycleproces of afsluiting en het moment dat ANCM aangeeft dat de beheerde server moet beginnen met afsluiten. De vertraging kan worden geconfigureerd via de omgevingsvariabele ANCM_shutdownDelay of door de shutdownDelay handler-instelling in te stellen. Beide waarden bevinden zich in milliseconden. De vertraging is voornamelijk om de kans op een race te verminderen waarbij:

  • IIS is niet gestart met het in de wachtrij plaatsen van aanvragen om naar de nieuwe app te gaan.
  • ANCM begint met het weigeren van nieuwe aanvragen die in de oude app worden geleverd.

Deze instelling betekent niet dat binnenkomende aanvragen worden vertraagd door dit bedrag. De instelling geeft aan dat het oude app-exemplaar wordt afgesloten nadat de time-out is opgetreden. Tragere machines of machines met zwaarder CPU-gebruik moeten deze waarde mogelijk aanpassen om de kans op 503 te verminderen.

In het volgende voorbeeld wordt de vertraging ingesteld op 5 seconden:

<aspNetCore processPath="dotnet"
    arguments=".\MyApp.dll"
    stdoutLogEnabled="false"
    stdoutLogFile="\\?\%home%\LogFiles\stdout"
    hostingModel="inprocess">
  <handlerSettings>
    <handlerSetting name="shutdownDelay" value="5000" />
  </handlerSettings>
</aspNetCore>

Proxyconfiguratie maakt gebruik van het HTTP-protocol en een koppelend token

Geldt alleen voor out-of-process hosting.

De proxy die is gemaakt tussen de ASP.NET Core-module en Kestrel maakt gebruik van het HTTP-protocol. Er is geen risico dat het verkeer tussen de module en Kestrel wordt afgeluisterd vanaf een locatie buiten de server.

Er wordt een koppelingstoken gebruikt om te garanderen dat de aanvragen die zijn ontvangen door Kestrel door IIS zijn geproxied en niet afkomstig zijn van een andere bron. Het koppelende token wordt gemaakt en ingesteld in een omgevingsvariabele (ASPNETCORE_TOKEN) door de module. Het koppelende token wordt ook ingesteld in een header (MS-ASPNETCORE-TOKEN) op elke geproxiede aanvraag. IIS Middleware controleert elke aanvraag die wordt ontvangen om te bevestigen dat de waarde van de koppelingstokenheader overeenkomt met de waarde van de omgevingsvariabele. Als de tokenwaarden niet overeenkomen, wordt de aanvraag geregistreerd en geweigerd. De omgevingsvariabele voor koppelings-token en het verkeer tussen de module en Kestrel zijn niet toegankelijk vanaf een locatie buiten de server. Zonder de waarde van het koppelende token te kennen, kan een cyberaanval geen aanvragen indienen die de controle in de IIS Middleware omzeilen.

ASP.NET Core-module met een gedeelde IIS-configuratie

Het ASP.NET Core Module-installatieprogramma wordt uitgevoerd met de bevoegdheden van het TrustedInstaller-account. Omdat het lokale systeemaccount geen wijzigingsmachtiging heeft voor het sharepad dat wordt gebruikt door de gedeelde IIS-configuratie, genereert het installatieprogramma een fout met geweigerde toegang bij het configureren van de module-instellingen in het applicationHost.config-bestand op de share.

Wanneer u een gedeelde IIS-configuratie gebruikt op dezelfde computer als de IIS-installatie, voert u het installatieprogramma ASP.NET Core Hosting Bundle uit met de parameter OPT_NO_SHARED_CONFIG_CHECK ingesteld op 1:

dotnet-hosting-{VERSION}.exe OPT_NO_SHARED_CONFIG_CHECK=1

Wanneer het pad naar de gedeelde configuratie zich niet op dezelfde computer bevindt als de IIS-installatie, voert u de volgende stappen uit:

  1. Schakel de gedeelde IIS-configuratie uit.
  2. Voer het installatieprogramma uit.
  3. Exporteer het bijgewerkte applicationHost.config-bestand naar de bestandsshare.
  4. Schakel de gedeelde IIS-configuratie opnieuw in.

Gegevensbescherming

De ASP.NET Core Data Protection-stack wordt gebruikt door verschillende ASP.NET Core middlewares, waaronder middleware die in verificatie wordt gebruikt. Zelfs als gegevensbeveiligings-API's niet worden aangeroepen door gebruikerscode, moet gegevensbeveiliging worden geconfigureerd met een implementatiescript of in gebruikerscode om een permanent cryptografisch sleutelarchief te maken. Als gegevensbeveiliging niet is geconfigureerd, worden de sleutels in het geheugen bewaard en verwijderd wanneer de app opnieuw wordt opgestart.

Als de sleutelring voor gegevensbeveiliging wordt opgeslagen in het geheugen wanneer de app opnieuw wordt opgestart:

  • Alle op cookiegebaseerde verificatietokens zijn ongeldig.
  • Gebruikers moeten zich opnieuw aanmelden bij hun volgende aanvraag.
  • Gegevens die met de sleutelring zijn beveiligd, kunnen niet meer worden ontsleuteld. Dit kan CSRF-tokens en ASP.NET Core MVC TempData-cookieszijn.

Gebruik één van de volgende methoden om gegevensbeveiliging onder IIS te configureren om de sleutelring te behouden:

  • Registersleutels voor gegevensbescherming maken

    ASP.NET Core Data Protection-sleutels die door ASP.NET Core-apps worden gebruikt, worden opgeslagen in het register buiten de apps. Als u de sleutels voor een bepaalde app wilt behouden, maakt u registersleutels voor de app-groep.

    Voor zelfstandige, niet-webfarm IIS-installaties kan het Data Protection-script Provision-AutoGenKeys.ps1 PowerShell-script worden gebruikt voor elke app-pool die wordt gebruikt met een ASP.NET Core-app. Dit script maakt een registersleutel in het HKLM-register die alleen toegankelijk is voor het werkprocesaccount van de toepassingspool van de app. Sleutels worden in rust versleuteld met DPAPI met een sleutel voor de hele machine.

    In webfarmscenario's kan een app worden geconfigureerd voor het gebruik van een UNC-pad voor het opslaan van de sleutelring voor gegevensbeveiliging. Standaard worden de sleutels niet versleuteld. Zorg ervoor dat de bestandsmachtigingen voor de netwerkshare zijn beperkt tot het Windows-account waaronder de app wordt uitgevoerd. Een X509-certificaat kan worden gebruikt om sleutels in rust te beveiligen. Overweeg een mechanisme om gebruikers toe te staan certificaten te uploaden. Plaats certificaten in het vertrouwde certificaatarchief van de gebruiker en zorg ervoor dat ze beschikbaar zijn op alle computers waarop de app van de gebruiker wordt uitgevoerd. Zie ASP.NET Core Data Protection configurerenvoor meer informatie.

  • de GROEP van IIS-toepassingen configureren om het gebruikersprofiel te laden

    Deze instelling bevindt zich in de sectie Procesmodel onder de Geavanceerde instellingen voor de app-pool. Stel het gebruikersprofiel laden in naar True. Wanneer deze is ingesteld op True, worden sleutels opgeslagen in de gebruikersprofielmap en beveiligd met DPAPI met een sleutel die specifiek is voor het gebruikersaccount. Sleutels worden bewaard in de map %LOCALAPPDATA%/ASP.NET/DataProtection-Keys.

    Het kenmerk setProfileEnvironment van de app-pool moet ook zijn ingeschakeld. De standaardwaarde van setProfileEnvironment is true. In sommige scenario's (bijvoorbeeld het Windows-besturingssysteem) is setProfileEnvironment ingesteld op false. Als sleutels niet zijn opgeslagen in de gebruikersprofielmap zoals verwacht:

    1. Navigeer naar de map %windir%/system32/inetsrv/config.
    2. Open het applicationHost.config-bestand.
    3. Zoek het element <system.applicationHost><applicationPools><applicationPoolDefaults><processModel>.
    4. Controleer of het kenmerk setProfileEnvironment niet aanwezig is. Deze waarde wordt standaard ingesteld op trueof stel de waarde van het kenmerk expliciet in op true.
  • Gebruik het bestandssysteem als een sleutelringopslag

    Pas de app-code aan om het bestandssysteem te gebruiken als een sleutelringsarchief. Gebruik een X509-certificaat om de sleutelring te beveiligen en ervoor te zorgen dat het certificaat een vertrouwd certificaat is. Als het certificaat zelfondertekend is, plaatst u het certificaat in de Trusted Root certificaatopslag.

    Wanneer u IIS gebruikt in een webfarm:

    • Gebruik een bestandsshare waartoe alle computers toegang hebben.
    • Implementeer een X509-certificaat op elke computer. Configureer Gegevensbescherming in code.
  • een machinebreed beleid instellen voor gegevensbescherming

    Het systeem voor gegevensbescherming biedt beperkte ondersteuning voor het instellen van een standaard beleid op systeemniveau voor alle apps die gebruikmaken van de Data Protection-API's. Voor meer informatie, zie ASP.NET Core Data Protection Overzicht.

IIS-configuratie

Windows Server-besturingssystemen

Schakel de Webserver (IIS) serverfunctie in en stel functieservices in.

  1. Gebruik de wizard Functies en Onderdelen Toevoegen vanuit het Beheren-menu of de koppeling in Serverbeheer. Schakel in de serverrollen stap het selectievakje aan voor webserver (IIS).

    De webserverrol IIS is geselecteerd in de stap Serverrollen selecteren.

  2. Na de functies stap wordt de rollendiensten stap geladen voor webserver (IIS). Selecteer de gewenste IIS-functieservices of accepteer de standaardfunctieservices die worden geleverd.

    De standaardrolservices zijn geselecteerd in de stap Functieservices selecteren.

    Windows-verificatie (optioneel)
    Als u Windows-verificatie wilt inschakelen, vouwt u de volgende knooppunten uit: Webserver>Security. Selecteer de functie Windows-verificatie. Zie Windows-verificatie <windowsAuthentication> en Windows-verificatie configurerenvoor meer informatie.

    WebSockets (optioneel)
    WebSockets wordt ondersteund met ASP.NET Core 1.1 of hoger. Als u WebSockets wilt inschakelen, vouwt u de volgende knooppunten uit: Webserver>Application Development. Selecteer de functie WebSocket Protocol. Zie WebSocketsvoor meer informatie.

  3. Doorloop de bevestigingsstap om de webserverfunctie en -services te installeren. Het opnieuw opstarten van een server/IIS is niet vereist nadat u de -functie van Webserver (IIS) hebt geïnstalleerd.

Windows-bureaubladbesturingssystemen

Schakel de IIS-beheerconsole en World Wide Web Servicesin.

  1. Ga naar Configuratiescherm>Programma's>Programma's en onderdelen>Windows-onderdelen in- of uitschakelen (links op het scherm).

  2. Open het knooppunt Internet Information Services. Open het knooppunt Web Management Tools.

  3. Schakel het selectievakje in voor IIS-beheerconsole.

  4. Schakel het selectievakje in voor World Wide Web Services.

  5. Accepteer de standaardfuncties voor World Wide Web Services of pas de IIS-functies aan.

    Windows-verificatie (optioneel)
    Als u Windows-verificatie wilt inschakelen, vouwt u de volgende knooppunten uit: World Wide Web Services>Security. Selecteer de functie Windows-verificatie. Zie Windows-verificatie <windowsAuthentication> en Windows-verificatie configurerenvoor meer informatie.

    WebSockets (optioneel)
    WebSockets wordt ondersteund met ASP.NET Core 1.1 of hoger. Als u WebSockets wilt inschakelen, vouwt u de volgende knooppunten uit: World Wide Web Services>Application Development Features. Selecteer de functie WebSocket Protocol. Zie WebSocketsvoor meer informatie.

  6. Als de IIS-installatie opnieuw moet worden opgestart, start u het systeem opnieuw op.

IIS-beheerconsole en World Wide Web Services zijn geselecteerd in Windows-functies.

Virtuele mappen

virtuele IIS-mappen worden niet ondersteund met ASP.NET Core-apps. Een app kan worden gehost als een subtoepassing.

Subtoepassingen

Een ASP.NET Core-app kan worden gehost als een IIS-subtoepassing (sub-app). Het pad van de sub-app wordt onderdeel van de URL van de hoofd-app.

Statische assetkoppelingen in de sub-app moeten gebruikmaken van tilde-slash -notatie (~/) in MVC en Razor Pages. Tilde-slash-notatie activeert een Tag Helper- om de padbasis van de sub-app vooraf te laten gaan aan de weergegeven relatieve koppeling. Voor een sub-app op /subapp_pathwordt een afbeelding die is gekoppeld aan src="~/image.png" weergegeven als src="/subapp_path/image.png". De statische bestands-middleware van de hoofd-app verwerkt de statische bestandsaanvraag niet. De aanvraag wordt verwerkt door de statische bestandsmiddleware van de subapp.

Notitie

Razor onderdelen (.razor) mogen geen tilde-slash-notatie gebruiken. Voor meer informatie, zie het basispad van de ASP.NET Core-appBlazor.

Als het kenmerk src van een statische asset is ingesteld op een absoluut pad (bijvoorbeeld src="/image.png"), wordt de koppeling weergegeven zonder de padbasis van de sub-app. De static File Middleware van de hoofd-app probeert de asset uit de hoofd-app webhoofdmapte leveren. Dit resulteert in een 404- Niet gevonden antwoord, tenzij de statische asset beschikbaar is in de hoofd-app.

Een ASP.NET Core-app hosten als sub-app onder een andere ASP.NET Core-app:

  1. Stel een app-groep in voor de sub-app. Stel de .NET CLR-versie in op Geen beheerde code omdat Core Common Language Runtime (CoreCLR) voor .NET Core wordt opgestart om de app in het werkproces te hosten, niet de desktop-CLR (.NET CLR).

  2. Voeg de hoofdsite toe in IIS-beheer met de sub-app in een map onder de hoofdsite.

  3. Klik met de rechtermuisknop op de map sub-app in IIS-beheer en selecteer Converteren naar toepassing.

  4. Gebruik in het dialoogvenster Toepassingsgroep toevoegen de knop Selecteer voor de groep van toepassingen om de app-groep toe te wijzen die u voor de sub-app hebt gemaakt. Kies OK.

De toewijzing van een afzonderlijke app-pool aan de sub-app is een vereiste bij het gebruik van het in-process hostingmodel.

Zie ASP.NET Core Module (ANCM) voor IIS-voor meer informatie over het in-process hostingmodel en het configureren van de ASP.NET Core Module .

Toepassingsgroepen

Isolatie van app-pools wordt bepaald door het hostingmodel:

  • In-process hosting: Apps moeten worden uitgevoerd in afzonderlijke app-pools.
  • Out-of-process hosting: we raden u aan de apps van elkaar te isoleren door elke app uit te voeren in een eigen app-pool.

Het dialoogvenster IIS Website toevoegen wordt standaard ingesteld op één app-groep per app. Wanneer een sitenaam wordt opgegeven, wordt de tekst automatisch overgebracht naar de groep van toepassingen tekstvak. Er wordt een nieuwe app-pool gemaakt met behulp van de sitenaam wanneer de site wordt toegevoegd.

Groep van toepassingen Identity

Met een id-account voor een app-pool kan een app worden uitgevoerd onder een uniek account zonder dat u domeinen of lokale accounts hoeft te maken en beheren. Op IIS 8.0 of hoger maakt het IIS Admin Worker Process (WAS) een virtueel account met de naam van de nieuwe app-pool en voert de werkprocessen van de app-pool standaard uit onder dit account. Controleer in de IIS-beheerconsole onder Geavanceerde instellingen voor de app-groep of de Identity is ingesteld op het gebruik van ApplicationPoolIdentity:

Dialoogvenster Geavanceerde instellingen voor groep van toepassingen

Het IIS-beheerproces maakt een beveiligde id met de naam van de app-groep in het Windows-beveiligingssysteem. Resources kunnen worden beveiligd met behulp van deze identiteit. Deze identiteit is echter geen echt gebruikersaccount en wordt niet weergegeven in de Windows User Management Console.

Als voor het IIS-werkproces verhoogde toegang tot de app is vereist, wijzigt u de toegangsbeheerlijst (ACL) voor de map met de app:

  1. Open Windows Verkenner en navigeer naar de directory.

  2. Klik met de rechtermuisknop op de map en selecteer Eigenschappen.

  3. Selecteer op het tabblad Security de knop Bewerken en klik vervolgens op de knop toevoegen.

  4. Selecteer de knop Locaties en zorg ervoor dat het systeem geselecteerd is.

  5. Voer het formaat IIS AppPool\{APP POOL NAME} in, waarbij de tijdelijke aanduiding {APP POOL NAME} de naam van de app-pool is, in het veld voer de objectnamen in om het-gebied te selecteren. Selecteer de knop Namen controleren. Controleer voor de DefaultAppPool de namen met behulp van IIS AppPool\DefaultAppPool. Wanneer de knop Namen controleren is geselecteerd, wordt een waarde van DefaultAppPool aangegeven in het gebied met objectnamen. Het is niet mogelijk om de naam van de app-pool rechtstreeks in het gebied met objectnamen in te voeren. Gebruik de IIS AppPool\{APP POOL NAME}-indeling, waarbij de tijdelijke aanduiding {APP POOL NAME} de naam van de app-pool is bij het controleren op de objectnaam.

    Dialoogvenster Gebruikers of groepen selecteren voor de app-map: de naam van de app-pool 'DefaultAppPool' wordt toegevoegd aan 'IIS AppPool' in het gebied objectnamen voordat u 'Namen controleren' selecteert.

  6. Kies OK.

    Dialoogvenster Gebruikers of groepen selecteren voor de app-map: Nadat u

  7. Lees-&-uitvoermachtigingen moeten standaard worden verleend. Geef indien nodig extra machtigingen op.

Toegang kan ook worden verleend via een opdrachtprompt met behulp van het hulpprogramma ICACLS. Met behulp van de DefaultAppPool- als voorbeeld wordt de volgende opdracht gebruikt om lees- en uitvoermachtigingen te verlenen aan de MyWebApp map, submappen en bestanden:

ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool:(OI)(CI)RX"

Zie het onderwerp icacls voor meer informatie.

HTTP/2-ondersteuning

HTTP/2- wordt ondersteund met ASP.NET Core in de volgende IIS-implementatiescenario's:

  • In behandeling
    • Windows Server 2016/Windows 10 of hoger; IIS 10 of hoger
    • TLS 1.2- of hogerverbinding
  • Buiten-proces
    • Windows Server 2016/Windows 10 of hoger; IIS 10 of hoger
    • Openbare edge-serververbindingen maken gebruik van HTTP/2, maar de omgekeerde proxyverbinding met de Kestrel-server http/1.1 gebruikt.
    • TLS 1.2- of hogerverbinding

Voor een in-process implementatie wanneer er een HTTP/2-verbinding tot stand is gebracht, HttpRequest.Protocol rapporteert HTTP/2. Voor een out-of-process-implementatie wanneer er een HTTP/2-verbinding tot stand is gebracht, HttpRequest.Protocol rapporteert HTTP/1.1.

Zie voor meer informatie over de in-process en out-of-process hostingmodellen ASP.NET Core Module (ANCM) voor IIS.

HTTP/2 is standaard ingeschakeld. Verbindingen vallen terug op HTTP/1.1 als er geen HTTP/2-verbinding tot stand is gebracht. Zie HTTP/2 op IIS-voor meer informatie over HTTP/2-configuratie met IIS-implementaties.

Voorafgaande CORS-aanvragen

Deze sectie is alleen van toepassing op ASP.NET Core-apps die gericht zijn op .NET Framework.

Voor een ASP.NET Core-app die is gericht op .NET Framework, worden OPTIES-aanvragen niet standaard doorgegeven aan de app in IIS. Zie web.configvoor meer informatie over het configureren van de IIS-handlers van de app in om OPTIONS-aanvragen door te geven.

Module voor initialisatie van toepassingen en time-out voor inactiviteit

Wanneer deze wordt gehost in IIS door de ASP.NET Core Module versie 2:

Module voor initialisatie van toepassingen

is van toepassing op apps die zowel binnen het proces als buiten het proces worden gehost.

IIS-toepassingsinitialisatie is een IIS-functie waarmee een HTTP-verzoek naar de app wordt verzonden wanneer de app-pool wordt gestart of gerecycled. De aanvraag activeert de app om te starten. IIS geeft standaard een aanvraag voor de hoofd-URL van de app (/) uit om de app te initialiseren (zie de aanvullende bronnen voor meer informatie over configuratie).

Controleer of de functie Initialisatie van IIS-toepassingen is ingeschakeld.

Op Windows 7- of hoger-desktopsystemen wanneer u IIS lokaal gebruikt:

  1. Ga naar Configuratiescherm>Programma's>Programma's en onderdelen>Windows-onderdelen in- of uitschakelen (links op het scherm).
  2. Open Internet Information Services>Wereldwijde Webservices>Applicatieontwikkeling functies.
  3. Selecteer het selectievakje voor toepassingsinitialisatie.

Op Windows Server 2008 R2 of hoger:

  1. Open de wizard Functies en onderdelen toevoegen.
  2. Open het knooppunt Toepassingsontwikkeling in het deelvenster Selecteer rolservices.
  3. Selecteer het selectievakje voor toepassingsinitialisatie.

Gebruik een van de volgende methoden om de module voor de initialisatie van toepassingen voor de site in te schakelen:

  • IIS-beheer gebruiken:

    1. Selecteer toepassingsgroepen in het deelvenster Verbindingen.
    2. Klik met de rechtermuisknop op de app-groep van de app in de lijst en selecteer Geavanceerde instellingen.
    3. De standaard startmodus is OnDemand. Stel de startmodus in op AlwaysRunning. Kies OK.
    4. Open het knooppunt Sites in het deelvenster Verbindingen.
    5. Klik met de rechtermuisknop op de app en selecteer Website beheren>Geavanceerde instellingen.
    6. De standaardinstelling Vooraf laden ingeschakeld is False. Stel Preload ingeschakeld in op True. Kies OK.
  • Voeg met behulp van web.confighet <applicationInitialization>-element toe met doAppInitAfterRestart ingesteld op true aan de <system.webServer> elementen in het web.config-bestand van de app:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="." inheritInChildApplications="false">
        <system.webServer>
          <applicationInitialization doAppInitAfterRestart="true" />
        </system.webServer>
      </location>
    </configuration>
    

Time-out voor inactiviteit

geldt alleen voor apps die in het proces worden gehost.

Als u wilt voorkomen dat de app inactief is, stelt u de time-out voor inactiviteit van de app-pool in met IIS-beheer:

  1. Selecteer toepassingsgroepen in het deelvenster Verbindingen.
  2. Klik met de rechtermuisknop op de app-groep van de app in de lijst en selecteer Geavanceerde instellingen.
  3. De standaardinstelling time-out voor inactiviteit (minuten) is 20 minuten. Stel de time-out voor inactiviteit (minuten) in op 0 (nul). Kies OK.
  4. Recycle het werkproces.

Gebruik een van de volgende benaderingen om te voorkomen dat apps die buiten het proces worden gehost, een time-out krijgen:

Aanvullende middelen voor module voor initialisatie van toepassingen en inactieve time-out.

Locaties van module-, schema- en configuratiebestanden

Moduul

IIS -(x86/amd64):

  • %windir%\System32\inetsrv\aspnetcore.dll

  • %windir%\SysWOW64\inetsrv\aspnetcore.dll

  • %ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll

  • %ProgramFiles(x86)%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll

IIS Express (x86/amd64):

  • %ProgramFiles%\IIS Express\aspnetcore.dll

  • %ProgramFiles(x86)%\IIS Express\aspnetcore.dll

  • %ProgramFiles%\IIS Express\Asp.Net Core Module\V2\aspnetcorev2.dll

  • %ProgramFiles(x86)%\IIS Express\Asp.Net Core Module\V2\aspnetcorev2.dll

Schema

IIS

  • %windir%\System32\inetsrv\config\schema\aspnetcore_schema.xml

  • %windir%\System32\inetsrv\config\schema\aspnetcore_schema_v2.xml

IIS Express

  • %ProgramFiles%\IIS Express\config\schema\aspnetcore_schema.xml

  • %ProgramFiles%\IIS Express\config\schema\aspnetcore_schema_v2.xml

Configuratie

IIS

  • %windir%\System32\inetsrv\config\applicationHost.config

IIS Express

  • Visual Studio: {APPLICATION ROOT}\.vs\config\applicationHost.config

  • iisexpress.exe CLI: %USERPROFILE%\Documents\IISExpress\config\applicationhost.config

De bestanden zijn te vinden door te zoeken naar aspnetcore in het applicationHost.config bestand.

Web deploy installeren bij publiceren met Visual Studio

Wanneer u apps implementeert op servers met Web Deploy, installeert u de nieuwste versie van Web Deploy op de server. Zie IIS-downloads: Web Deployom Web Deploy te installeren.

De IIS-site maken

  1. Maak op het hostingsysteem een map die de gepubliceerde mappen en bestanden van de app bevat. In een volgende stap wordt het pad van de map aan IIS verstrekt als het fysieke pad naar de app. Voor meer informatie over de implementatiemap en bestandsindeling van een app, zie ASP.NET Core directory structure.

  2. Open in IIS-beheer het knooppunt van de server in het deelvenster Verbindingen. Klik met de rechtermuisknop op de map Sites. Selecteer Website toevoegen in het contextmenu.

  3. Geef een sitenaam op en stel het fysiek pad in op de implementatiemap van de app. Geef de bindingsconfiguratie op en maak de website door OK-te selecteren:

    geef de sitenaam, het fysieke pad en de hostnaam op in de stap Website toevoegen.

    Waarschuwing

    Jokertekenbindingen op het hoogste niveau (http://*:80/ en http://+:80) mogen niet worden gebruikt. Wildcard-bindingen op het hoogste niveau maakt uw app kwetsbaar voor beveiligingsproblemen. Dit geldt zowel voor sterke als zwakke jokertekens. Gebruik expliciete hostnamen in plaats van het gebruik van jokertekens. Subdomeinbinding met jokertekens (bijvoorbeeld *.mysub.com) heeft dit beveiligingsrisico niet als u het hele bovenliggende domein bepaalt (in tegenstelling tot *.com, wat kwetsbaar is). Zie RFC 9110: HTTP Semantics (sectie 7.2: Host en :authority) voor meer informatie.

  4. Onder het knooppunt van de server selecteer Application Pools.

  5. Klik met de rechtermuisknop op de app-groep van de site en selecteer Basisinstellingen in het contextmenu.

  6. Stel in het venster Groep van toepassingen bewerken de .NET CLR-versie in op Geen beheerde code:

    Geen beheerde code instellen voor de .NET CLR-versie.

    ASP.NET Core wordt uitgevoerd in een afzonderlijk proces en beheert de runtime. ASP.NET Core is niet afhankelijk van het laden van de desktop-CLR (.NET CLR). Core Common Language Runtime (CoreCLR) voor .NET Core wordt opgestart om de app in het werkproces te hosten. Het instellen van de .NET CLR-versie op Geen beheerde code is optioneel, maar wordt aanbevolen.

    • Voor een 32-bits (x86) zelfstandige implementatie gepubliceerd met een 32-bits SDK die gebruikmaakt van het in-process hostingmodel, schakelt u de applicatiepool in voor 32-bits. Navigeer in IIS-beheer naar toepassingsgroepen in de zijbalk Verbindingen. Selecteer de groep van toepassingen van de app. Selecteer in de zijbalk ActiesGeavanceerde instellingen. Stel in om 32-bits toepassingen in te schakelen op True.

    • Voor een 64-bits (x64) zelfstandige implementatie die gebruikmaakt van het hostingmodel voor processen, schakelt u de app-pool uit voor 32-bits (x86)-processen. Navigeer in IIS-beheer naar toepassingsgroepen in de zijbalk Verbindingen. Selecteer de groep van toepassingen van de app. Selecteer in de zijbalk ActiesGeavanceerde instellingen. Stel in om 32-bits toepassingen in te schakelen op False.

  7. Controleer of de identiteit van het procesmodel de juiste machtigingen heeft.

    Als de standaardidentiteit van de app-groep (procesmodel>Identity) wordt gewijzigd van ApplicationPoolIdentity- naar een andere identiteit, controleert u of de nieuwe identiteit over de vereiste machtigingen beschikt voor toegang tot de map, database en andere vereiste resources van de app. De app-pool vereist bijvoorbeeld lees- en schrijftoegang tot mappen waarin de app bestanden leest en schrijft.

Windows-verificatieconfiguratie (optioneel)
Zie Windows-verificatie configurerenvoor meer informatie.

Schaduwkopie

Schaduwkopie van app-assembly's naar de ASP.NET Core Module (ANCM) voor IIS kan een betere eindgebruikerservaring bieden dan de app te stoppen door een offlinebestand voor een app te implementeren.

Wanneer een ASP.NET Core-app wordt uitgevoerd in Windows, worden de binaire bestanden vergrendeld, zodat ze niet kunnen worden gewijzigd of vervangen. Met schaduwkopie kunnen de app-assembly's worden bijgewerkt terwijl de app wordt uitgevoerd door een kopie van de assembly's te maken.

Schaduwkopie is niet bedoeld om implementatie zonder downtime mogelijk te maken, dus het is te verwachten dat IIS de app nog steeds herstart en dat sommige verzoeken mogelijk een 503 Service Unavailable antwoord krijgen. U wordt aangeraden een patroon te gebruiken, zoals blauwgroene implementaties of Azure-implementatieslots voor implementaties zonder downtime. Schaduwkopie helpt downtime bij implementaties te minimaliseren, maar kan deze niet volledig elimineren.

Schaduwkopie is ingeschakeld door de ANCM-handlerinstellingen in web.configaan te passen:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <remove name="aspNetCore"/>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".logsstdout">
      <handlerSettings>
        <handlerSetting name="enableShadowCopy" value="true" />
        <!-- Ensure that the IIS ApplicationPool identity has permission to this directory -->
        <handlerSetting name="shadowCopyDirectory" value="../ShadowCopyDirectory/" />
      </handlerSettings>
    </aspNetCore>
  </system.webServer>
</configuration>