Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Note
Dit is niet de nieuwste versie van dit artikel. Zie de .NET 10-versie van dit artikel voor de huidige release.
Warning
Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie het .NET- en .NET Core-ondersteuningsbeleid voor meer informatie. Zie de .NET 9-versie van dit artikel voor de huidige release.
Internet Information Services (IIS) is een flexibele, veilige en beheerbare webserver voor het hosten van web-apps, waaronder ASP.NET Core.
Ondersteunde platforms
De volgende besturingssystemen worden ondersteund:
- Windows 7 of hoger
- Windows Server 2012 R2 of hoger
Apps die zijn gepubliceerd voor de implementatie van 32-bits (x86) of 64-bits (x64) worden ondersteund. Implementeer een 32-bits app met een 32-bits .NET SDK (x86), tenzij de app:
- Vereist de grotere adresruimte voor virtueel geheugen die beschikbaar is voor een 64-bits app.
- Vereist de grotere GROOTTE van de IIS-stack.
- Heeft 64-bits systeemeigen afhankelijkheden.
De ASP.NET Core Module/Hostingbundel installeren
Download het meest recente installatieprogramma met behulp van de volgende koppeling:
Huidig installatieprogramma voor .NET Hosting Bundle (direct downloaden)
Zie De .NET Hosting Bundle installeren voor meer informatie over het installeren van de ASP.NET Core Module of het installeren van verschillende versies.
Als u eerdere versies van de hostingbundel wilt downloaden, raadpleegt u dit GitHub-probleem.
Get started
Raadpleeg onze introductiehandleiding voor het hosten van een website op IIS.
Zie onze handleiding voor het implementeren in Azure App Service voor informatie over het hosten van een website in Azure App Services.
Configuration
Zie Geavanceerde configuratie voor hulp bij de configuratie.
Implementatiebronnen voor IIS-beheerders
- IIS-documentatie
- Aan de slag met IIS-beheer in IIS
- .NET-toepassingsimplementatie
- ASP.NET Core Module (ANCM) voor IIS-
- ASP.NET Kernmapstructuur
- IIS-modules met ASP.NET Core
- Problemen met ASP.NET Core in Azure App Service en IIS- oplossen
- Veelvoorkomende fout oplossen voor Azure App Service en IIS met ASP.NET Core-
Overlappende recycling
Over het algemeen raden we u aan een patroon zoals blauw-groene implementaties te gebruiken voor implementaties zonder downtime. Functies zoals Overlapped Recycle helpen bij, maar garanderen niet dat u een implementatie zonder onderbreking kunt uitvoeren. Zie dit GitHub-probleem voor meer informatie.
Optionele clientcertificaten
Zie Optionele clientcertificatenvoor informatie over apps die een subset van de app met een certificaat moeten beveiligen.
Aanvullende bronnen
Zie Een ASP.NET Core-app publiceren naar IIS voor een zelfstudie over het publiceren van een ASP.NET Core-app naar een IIS-server.
De .NET Hosting Bundle installeren
Ondersteunde besturingssystemen
De volgende besturingssystemen worden ondersteund:
- Windows 7 of hoger
- Windows Server 2012 R2 of hoger
HTTP.sys server (voorheen WebListener genoemd) werkt niet in een omgekeerde proxyconfiguratie met IIS. Gebruik de Kestrel server.
Zie ASP.NET Core-apps implementeren in Azure App Service voor meer informatie over het hosten in Azure.
Zie Problemen oplossen en fouten opsporen ASP.NET Core-projecten voor hulp bij het oplossen van problemen.
Ondersteunde platforms
Apps die zijn gepubliceerd voor de implementatie van 32-bits (x86) of 64-bits (x64) worden ondersteund. Implementeer een 32-bits app met een 32-bits .NET SDK (x86), tenzij de app:
- Vereist de grotere adresruimte voor virtueel geheugen die beschikbaar is voor een 64-bits app.
- Vereist de grotere GROOTTE van de IIS-stack.
- Heeft 64-bits systeemeigen afhankelijkheden.
Apps die zijn gepubliceerd voor 32-bits (x86) moeten 32-bits ondersteuning ingeschakeld hebben voor hun IIS-toepassingsgroepen. Zie de sectie IIS-site maken voor meer informatie.
Gebruik een 64-bits .NET SDK (x64) om een 64-bits app te publiceren. Er moet een 64-bits runtime aanwezig zijn op het hostsysteem.
Hostingmodellen
In-process hostingmodel
Met in-process hosting wordt een ASP.NET Core-app uitgevoerd in hetzelfde proces als het IIS-werkproces. In-process hosting biedt verbeterde prestaties ten opzichte van out-of-process hosting, omdat aanvragen niet worden geproxied via de loopback-adapter, een netwerkinterface die uitgaand netwerkverkeer terugstuurt naar dezelfde computer. IIS verwerkt procesbeheer met de WAS-(Windows Process Activation Service).
- Hiermee wordt app-initialisatie uitgevoerd.
- Laadt de CoreCLR.
- Roept
Program.Mainaan.
- Beheert de levensduur van de inheemse IIS-aanvraag.
In het volgende diagram ziet u de relatie tussen IIS, de ASP.NET Core Module en een app die in het proces wordt gehost:
- Een verzoek van het web komt aan bij de kernelmodus HTTP.sys driver.
- Het stuurprogramma stuurt de systeemeigen aanvraag naar IIS op de geconfigureerde poort van de website, meestal 80 (HTTP) of 443 (HTTPS).
- De ASP.NET Core-module ontvangt de systeemeigen aanvraag en geeft deze door aan IIS HTTP Server (
IISHttpServer). IIS HTTP Server is een in-process server-implementatie voor IIS die de aanvraag converteert van systeemeigen naar beheerd.
Nadat de IIS HTTP-server de aanvraag heeft verwerkt:
- De aanvraag wordt verzonden naar de ASP.NET Core-middlewarepijplijn.
- De middleware-pijplijn verwerkt de aanvraag en geeft deze als een
HttpContextexemplaar door aan de logica van de app. - Het antwoord van de app wordt teruggegeven aan IIS via IIS HTTP Server.
- IIS verzendt het antwoord naar de client die de aanvraag heeft gestart.
Het gebruik van in-process hosting is optioneel voor bestaande apps. De ASP.NET Core-websjablonen maken gebruik van het in-process hostingmodel.
CreateDefaultBuilder voegt een IServer exemplaar toe door de UseIIS methode aan te roepen om de CoreCLR op te starten en de app binnen het IIS-werkproces (w3wp.exe of iisexpress.exe) te hosten. nl-NL: Prestatietests geven aan dat het hosten van een .NET-app in-proces aanzienlijk hogere aanvraagdoorvoer levert in vergelijking met het hosten van de app out-of-process en het proxien van aanvragen naar Kestrel.
Apps die zijn gepubliceerd als één uitvoerbaar bestand, kunnen niet worden geladen door het in-process hostingmodel.
Out-of-process hostingmodel
Omdat ASP.NET Core-apps worden uitgevoerd in een proces dat losstaat van het IIS-werkproces, verwerkt de ASP.NET Core Module procesbeheer. De module start het proces voor de ASP.NET Core-app wanneer de eerste aanvraag binnenkomt en start de app opnieuw als deze wordt afgesloten of vastloopt. Dit is in wezen hetzelfde gedrag als bij apps die in het proces worden uitgevoerd die worden beheerd door de WAS-(Windows Process Activation Service).
In het volgende diagram ziet u de relatie tussen IIS, de ASP.NET Core Module en een app die out-of-process wordt gehost:
- Aanvragen komen van het web naar het kernel-modus HTTP.sys stuurprogramma.
- Het stuurprogramma stuurt de aanvragen naar IIS op de geconfigureerde poort van de website. De geconfigureerde poort is meestal 80 (HTTP) of 443 (HTTPS).
- De module stuurt de aanvragen door naar Kestrel een willekeurige poort voor de app. De willekeurige poort is niet 80 of 443.
De ASP.NET Core-module geeft de poort op via een omgevingsvariabele bij het opstarten. De UseIISIntegration extensie configureert de server om op http://localhost:{PORT}te luisteren. Aanvullende controles worden uitgevoerd en aanvragen die niet afkomstig zijn van de module, worden geweigerd. De module biedt geen ondersteuning voor https-doorsturen. Aanvragen worden doorgestuurd via HTTP, zelfs als deze worden ontvangen door IIS via HTTPS.
Nadat Kestrel de aanvraag uit de module is opgehaald, wordt de aanvraag doorgestuurd naar de ASP.NET Core middleware-pijplijn. De middleware-pijplijn verwerkt de aanvraag en geeft deze als een HttpContext exemplaar door aan de logica van de app. Middleware die door IIS-integratie is toegevoegd, werkt het schema, externe IP en pathbase bij voor het doorsturen van de aanvraag naar Kestrel. Het antwoord van de app wordt teruggegeven aan IIS, waarmee deze wordt doorgestuurd naar de HTTP-client die de aanvraag heeft gestart.
Zie ASP.NET Core Module (ANCM) voor IIS voor configuratierichtlijnen voor ASP.NET Core Module.
Zie Host in ASP.NET Core voor meer informatie over hosting.
Toepassingsconfiguratie
De IISIntegration-onderdelen inschakelen
Bij het bouwen van een host in CreateHostBuilder (Program.cs), roept CreateDefaultBuilder u aan om IIS-integratie in te schakelen:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
...
Zie CreateDefaultBuilder voor meer informatie over.
IIS-opties
In-process hosting-model
Als u IIS-serveropties wilt configureren, moet u een serviceconfiguratie opnemen voor IISServerOptions in ConfigureServices. In het volgende voorbeeld wordt AutomaticAuthentication uitgeschakeld:
services.Configure<IISServerOptions>(options =>
{
options.AutomaticAuthentication = false;
});
| Option | Default | Setting |
|---|---|---|
AutomaticAuthentication |
true |
Als true, stelt de IIS-server HttpContext.User in die is geverifieerd door Windows-verificatie. Wanneer false, biedt de server uitsluitend een identiteit voor HttpContext.User en reageert op uitdagingen wanneer expliciet aangevraagd door de AuthenticationScheme. Windows-verificatie moet zijn ingeschakeld in IIS om AutomaticAuthentication te kunnen functioneren. Zie Windows-verificatie voor meer informatie. |
AuthenticationDisplayName |
null |
Hiermee stelt u de weergavenaam in die wordt weergegeven aan gebruikers op aanmeldingspagina's. |
AllowSynchronousIO |
false |
Of synchrone I/O is toegestaan voor de HttpContext.Request en de HttpContext.Response. |
MaxRequestBodySize |
30000000 |
Hiermee haalt of stelt u de maximale grootte van de aanvraagbody voor de HttpRequest. IIS zelf heeft de limiet maxAllowedContentLength die wordt verwerkt vóór de MaxRequestBodySize set in de IISServerOptions. Als u het MaxRequestBodySize wijzigt, heeft dit geen invloed op de maxAllowedContentLength. Verhoog maxAllowedContentLength door een vermelding toe te voegen in web.config om maxAllowedContentLength op een hogere waarde in te stellen. Zie Configuratie voor meer informatie. |
Hostingmodel buiten het proces
Als u IIS-opties wilt configureren, moet u een serviceconfiguratie opnemen voor IISOptions in ConfigureServices. In het volgende voorbeeld wordt voorkomen dat de app HttpContext.Connection.ClientCertificate vult:
services.Configure<IISOptions>(options =>
{
options.ForwardClientCertificate = false;
});
| Option | Default | Setting |
|---|---|---|
AutomaticAuthentication |
true |
Als true, stelt IIS Integration Middleware de HttpContext.User geauthenticeerd door Windows-verificatie in. Als false biedt de middleware alleen een identiteit voor HttpContext.User en beantwoordt uitdagingen wanneer expliciet aangevraagd door de AuthenticationScheme. Windows-verificatie moet zijn ingeschakeld in IIS om AutomaticAuthentication te kunnen functioneren. Zie het onderwerp Windows-verificatie voor meer informatie. |
AuthenticationDisplayName |
null |
Hiermee stelt u de weergavenaam in die wordt weergegeven aan gebruikers op aanmeldingspagina's. |
ForwardClientCertificate |
true |
Als true en de MS-ASPNETCORE-CLIENTCERT aanvraagheader aanwezig is, wordt de HttpContext.Connection.ClientCertificate aanvraag ingevuld. |
Scenario's voor proxyserver en load balancer
De IIS Integration Middleware en de ASP.NET Core Module zijn geconfigureerd voor het doorsturen van:
- Schema (HTTP/HTTPS).
- Extern IP-adres waar de aanvraag afkomstig is.
De IIS Integration Middleware configureert Doorgestuurde Headers-middleware.
Er is mogelijk extra configuratie vereist voor apps die worden gehost achter extra proxyservers en load balancers. Zie ASP.NET Core configureren voor gebruik met proxyservers en load balancers voor meer informatie.
web.config-bestand
Het web.config bestand configureert de ASP.NET Core-module. Het maken, transformeren en publiceren van het web.config bestand wordt verwerkt door een MSBuild-doel (_TransformWebConfig) wanneer het project wordt gepubliceerd. Dit doel is aanwezig in de Web SDK-doelen (Microsoft.NET.Sdk.Web). De SDK wordt boven aan het projectbestand ingesteld:
<Project Sdk="Microsoft.NET.Sdk.Web">
Als een web.config bestand niet aanwezig is in het project, wordt het bestand gemaakt met het juiste processPath en arguments om de ASP.NET Core-module te configureren en verplaatst naar gepubliceerde uitvoer.
Als een web.config bestand aanwezig is in het project, wordt het bestand getransformeerd met de juiste processPath en arguments om de ASP.NET Core Module te configureren en verplaatst naar gepubliceerde uitvoer. De transformatie wijzigt geen IIS-configuratie-instellingen in het bestand.
Het web.config bestand kan aanvullende IIS-configuratie-instellingen bieden voor het beheren van actieve IIS-modules. Zie het onderwerp iis-modules voor informatie over IIS-modules die aanvragen kunnen verwerken met ASP.NET Core-apps.
Als u wilt voorkomen dat de Web SDK het web.config bestand transformeert, gebruikt u de <IsTransformWebConfigDisabled> eigenschap in het projectbestand:
<PropertyGroup>
<IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>
Wanneer u het transformeren van het bestand uitschakelt in de web-SDK, moeten de processPath en arguments handmatig worden ingesteld door de ontwikkelaar. Zie ASP.NET Core Module (ANCM) voor IIS-voor meer informatie.
web.config bestandslocatie
Als u de ASP.NET Core-module correct wilt instellen, moet het web.config bestand aanwezig zijn op het hoofdpad van de inhoud (meestal het basispad van de app) van de geïmplementeerde app. Dit is dezelfde locatie als het fysieke pad van de website dat aan IIS is verstrekt. Het web.config bestand is vereist in de hoofdmap van de app om het publiceren van meerdere apps met behulp van Web Deploy in te schakelen.
Gevoelige bestanden bestaan op het fysieke pad van de app, zoals {ASSEMBLY}.runtimeconfig.json, {ASSEMBLY}.xml (XML-documentatieopmerkingen) en {ASSEMBLY}.deps.json, waarbij de tijdelijke aanduiding {ASSEMBLY} de assemblynaam is. Wanneer het web.config bestand aanwezig is en de site normaal wordt gestart, worden deze gevoelige bestanden niet door IIS gebruikt als ze worden aangevraagd. Als het web.config bestand ontbreekt, een onjuiste naam heeft of de site niet kan configureren voor normaal opstarten, kan IIS gevoelige bestanden openbaar verwerken.
Het web.config bestand moet altijd aanwezig zijn in de implementatie, correct benoemd en de site kunnen configureren voor normaal opstarten. Verwijder het web.config bestand nooit uit een productie-implementatie.
Transformeer web.config
Zie web.config als u wilt transformeren bij publiceren. Mogelijk moet u web.config transformeren bij publiceren om omgevingsvariabelen in te stellen op basis van de configuratie, het profiel of de omgeving.
IIS-configuratie
Windows Server-besturingssystemen
Schakel de Webserver (IIS) serverfunctie in en stel functieservices in.
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).
Na de functies stap wordt de rollendiensten stap geladen voor webserver (IIS). Selecteer de gewenste IIS-functieservices of accepteer de standaardfunctieservices die worden geleverd.
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.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.
Ga naar Configuratiescherm>Programma's>Programma's en onderdelen>Windows-onderdelen in- of uitschakelen (links op het scherm).
Open het knooppunt Internet Information Services. Open het knooppunt Web Management Tools.
Schakel het selectievakje in voor IIS-beheerconsole.
Schakel het selectievakje in voor World Wide Web Services.
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 configureren voor 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.Als de IIS-installatie opnieuw moet worden opgestart, start u het systeem opnieuw op.
De .NET Hosting Bundle installeren
Installeer de .NET Hosting Bundle op het hostingsysteem. De bundel installeert de .NET Runtime, .NET-bibliotheek en de ASP.NET Core-module. Met de module kunnen ASP.NET Core-apps achter IIS worden uitgevoerd.
Important
Als de hostingbundel vóór IIS is geïnstalleerd, moet de bundelinstallatie worden hersteld. Voer het installatieprogramma voor hostingbundel opnieuw uit nadat u IIS hebt geïnstalleerd.
Als de hostingbundel is geïnstalleerd nadat de 64-bits (x64)-versie van .NET is geïnstalleerd, lijken SDK's mogelijk te ontbreken (er zijn geen .NET SDK's gedetecteerd). Zie Problemen oplossen en fouten opsporen ASP.NET Core-projecten om het probleem op te lossen.
Direct downloaden (huidige versie)
Download het installatieprogramma met behulp van de volgende koppeling:
Huidig installatieprogramma voor .NET Hosting Bundle (direct downloaden)
Eerdere versies van het installatieprogramma
Een eerdere versie van het installatieprogramma verkrijgen:
- Navigeer naar de pagina .NET downloaden .
- Selecteer de gewenste .NET-versie.
- Zoek in de kolom Uitvoeren-apps - Runtime de rij van de gewenste .NET Runtime-versie.
- Download het installatieprogramma met behulp van de koppeling Hostingbundel .
Warning
Sommige installatieprogramma's bevatten releaseversies die hun einde van de levensduur (EOL) hebben bereikt en die niet meer worden ondersteund door Microsoft. Zie het ondersteuningsbeleid voor meer informatie.
De hostingbundel installeren
Voer het installatieprogramma uit op de server. De volgende parameters zijn beschikbaar bij het uitvoeren van het installatieprogramma vanuit een beheerdersopdrachtshell:
-
OPT_NO_ANCM=1: Sla de installatie van de ASP.NET Core-module over. -
OPT_NO_RUNTIME=1: Sla de installatie van de .NET-runtime over. Wordt gebruikt wanneer de server alleen zelfstandige implementaties (SCD) host. -
OPT_NO_SHAREDFX=1: Sla het installeren van het ASP.NET Shared Framework (ASP.NET runtime) over. Wordt gebruikt wanneer de server alleen zelfstandige implementaties (SCD) host. -
OPT_NO_X86=1: Sla het installeren van x86-runtimes over. Gebruik deze parameter als u weet dat u geen 32-bits apps host. Als er een kans is dat u in de toekomst zowel 32-bits als 64-bits apps host, gebruikt u deze parameter niet en installeert u beide runtimes. -
OPT_NO_SHARED_CONFIG_CHECK=1: Schakel de controle uit voor het gebruik van een gedeelde IIS-configuratie wanneer de gedeelde configuratie (applicationHost.config) zich op dezelfde computer bevindt als de IIS-installatie. Alleen beschikbaar voor ASP.NET Core 2.2 of hoger Hosting Bundler installers. Zie ASP.NET Core Module (ANCM) voor IIS-voor meer informatie.
-
Als u IIS opnieuw start, wordt een wijziging in het systeemPAD, een omgevingsvariabele, opgehaald die door het installatieprogramma is gemaakt. Als u de webserver opnieuw wilt starten, stopt u de Windows Process Activation Service (WAS) en start u de World Wide Web Publishing Service (W3SVC) opnieuw op. Start het systeem opnieuw op of voer de volgende opdrachten uit in een opdrachtshell met verhoogde bevoegdheid:
net stop was /y net start w3svc
ASP.NET Core hanteert geen roll-forward-gedrag voor patchreleases van gedeelde frameworkpakketten. Nadat u het gedeelde framework hebt geupdate door een nieuwe hostingbundel te installeren, start u het systeem opnieuw op of voert u de volgende opdrachten uit in een opdrachtshell met verhoogde bevoegdheid:
net stop was /y
net start w3svc
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. Als u Web Deploy wilt installeren, gebruikt u het webplatforminstallatieprogramma (WebPI) of raadpleegt u IIS-downloads: Web Deploy. De voorkeursmethode is het gebruik van WebPI. WebPI biedt een zelfstandige installatie en een configuratie voor hostingproviders.
De IIS-site maken
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.
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.
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:
Warning
Jokertekenbindingen op het hoogste niveau (
http://*:80/enhttp://+: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.Onder het knooppunt van de server selecteer Application Pools.
Klik met de rechtermuisknop op de app-groep van de site en selecteer Basisinstellingen in het contextmenu.
Stel in het venster Groep van toepassingen bewerken de .NET CLR-versie in op Geen beheerde code:
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 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.
ASP.NET Core 2.2 of hoger:
Voor een 32-bits (x86) zelfstandige implementatie die is gepubliceerd met een 32-bits SDK die gebruikmaakt van het in-process hostingmodel, schakelt u de groep van toepassingen 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 in-process hostingmodel, schakelt u de app-pool uit voor 32-bits processen (x86). 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.
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.
De app implementeren
Implementeer de app in de map IIS fysiek pad dat is ingesteld in de sectie De IIS-site maken.
Web Deploy is het aanbevolen mechanisme voor implementatie, maar er zijn verschillende opties voor het verplaatsen van de app van de map van publish het project naar de implementatiemap van het hostingsysteem.
Web implementeren met Visual Studio
Zie het onderwerp over het publiceren van Visual Studio-profielen voor ASP.NET Core-app voor meer informatie over het maken van een publicatieprofiel voor gebruik met Web Deploy. Als de hostingprovider een publicatieprofiel of ondersteuning biedt voor het maken van een profiel, downloadt u het profiel en importeert u het met behulp van het dialoogvenster Publiceren van Visual Studio:
Web implementeren buiten Visual Studio
Web Deploy kan ook buiten Visual Studio worden gebruikt vanaf de opdrachtregel. Zie Het webimplementatieprogramma voor meer informatie.
Alternatieven voor Web Deploy
Gebruik een van de verschillende methoden om de app te verplaatsen naar het hostingsysteem, zoals handmatig kopiëren, Xcopy, Robocopy of PowerShell.
Zie de sectie Implementatieresources voor IIS voor meer informatie over ASP.NET Core-implementatie naar IIS .
Door de website bladeren
Nadat de app is geïmplementeerd in het hostingsysteem, dient u een aanvraag in bij een van de openbare eindpunten van de app.
In het volgende voorbeeld is de site gebonden aan een IIS-hostnaam op www.mysite.compoort80. Er wordt een aanvraag ingediend bij http://www.mysite.com:
Vergrendelde implementatiebestanden
Bestanden in de implementatiemap worden vergrendeld wanneer de app wordt uitgevoerd. Vergrendelde bestanden kunnen niet worden overschreven tijdens de implementatie. Als u vergrendelde bestanden in een implementatie wilt vrijgeven, stopt u de app-pool met een van de volgende methoden:
Gebruik Web Deploy en verwijs naar
Microsoft.NET.Sdk.Webin het projectbestand. Er wordt eenapp_offline.htmbestand in de hoofddirectory van de webapplicatie geplaatst. Wanneer het bestand aanwezig is, wordt de app door de ASP.NET Core-module correct afgesloten en wordt hetapp_offline.htmbestand tijdens de implementatie verwerkt. Zie de referentie voor de configuratie van de ASP.NET Core Module voor meer informatie.Stop de app-groep handmatig in IIS-beheer op de server.
Gebruik PowerShell om te verwijderen
app_offline.htm(hiervoor is PowerShell 5 of hoger vereist):$pathToApp = 'PATH_TO_APP' # Stop the AppPool New-Item -Path $pathToApp app_offline.htm # Provide script commands here to deploy the app # Restart the AppPool Remove-Item -Path $pathToApp app_offline.htm
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 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 gegevensbeveiliging maken
Gegevensbeveiligingssleutels die worden gebruikt door ASP.NET Core-apps 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. Met dit script maakt u een registersleutel in het HKLM-register dat alleen toegankelijk is voor het werkprocesaccount van de app-pool van de app. Sleutels worden in rust versleuteld met DPAPI met een sleutel voor de hele machine.
In scenario's voor webfarms kan een app worden geconfigureerd om een UNC-pad te gebruiken voor het opslaan van zijn gegevensbeschermingssleutelring. Standaard worden de sleutels voor gegevensbeveiliging 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 configureren voor 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 opTrue, 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
setProfileEnvironmentistrue. In sommige scenario's (bijvoorbeeld het Windows-besturingssysteem) issetProfileEnvironmentingesteld opfalse. Als sleutels niet zijn opgeslagen in de gebruikersprofielmap zoals verwacht:- Navigeer naar de map %windir%/system32/inetsrv/config.
- Open het bestand applicationHost.config.
- Zoek het element
<system.applicationHost><applicationPools><applicationPoolDefaults><processModel>. - Controleer of het kenmerk
setProfileEnvironmentniet aanwezig is. Deze waarde wordt standaard ingesteld optrueof stel de waarde van het kenmerk expliciet in optrue.
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 gegevensbeveiliging in code.
Een machinebreed beleid instellen voor gegevensbeveiliging
Het systeem voor gegevensbeveiliging biedt beperkte ondersteuning voor het instellen van een standaardbeleid voor de hele machine voor alle apps die gebruikmaken van de Api's voor gegevensbescherming. Voor meer informatie, zie ASP.NET Core Data Protection Overzicht.
Virtuele mappen
virtuele IIS-mappen worden niet ondersteund met ASP.NET Core-apps. Een app kan worden gehost als een subtoepassing.
Sub-applications
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 subapplicatie moeten gebruikmaken van tilde-slash-notatie (~/). 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.
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:
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 wordt opgestart om de app in het werkproces te hosten, niet de desktop-CLR (.NET CLR).
Voeg de hoofdsite toe in IIS-beheer met de sub-app in een map onder de hoofdsite.
Klik met de rechtermuisknop op de map sub-app in IIS-beheer en selecteer Converteren naar toepassing.
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 .
Configuratie van IIS met web.config
IIS-configuratie wordt beïnvloed door het <system.webServer> gedeelte van web.config voor IIS-scenario's die functioneel zijn voor ASP.NET Core-apps met de ASP.NET Core-module. IIS-configuratie is bijvoorbeeld functioneel voor dynamische compressie. Als IIS is geconfigureerd op serverniveau om dynamische compressie te gebruiken, kan het <urlCompression> element in het web.config-bestand van de app dit uitschakelen voor een ASP.NET Core-app.
Zie de volgende onderwerpen voor meer informatie:
- Configuratiereferentie voor <system.webServer>
- ASP.NET Core Module (ANCM) voor IIS-
- IIS-modules met ASP.NET Core
Als u omgevingsvariabelen wilt instellen voor afzonderlijke apps die worden uitgevoerd in geïsoleerde app-pools (ondersteund voor IIS 10.0 of hoger), raadpleegt u de sectieAppCmd.exe opdracht van het onderwerp Environment Variables <environmentVariables> in de IIS-referentiedocumentatie.
Secties die niet worden gebruikt door ASP.NET Core
Configuratiesecties van ASP.NET-apps in web.config worden niet gebruikt door ASP.NET Core-apps voor configuratie:
<system.web><appSettings><connectionStrings><location>
ASP.NET Core-apps zijn geconfigureerd met andere configuratieproviders. Zie Configuratie- en .NET-runtimeconfiguratie-instellingen voor meer informatie
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 app is ingesteld op het gebruik van ApplicationPoolIdentity:
Dialoogvenster Geavanceerde instellingen voor 
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:
Open Windows Verkenner en navigeer naar de directory.
Klik met de rechtermuisknop op de map en selecteer Eigenschappen.
Selecteer op het tabblad Security de knop Bewerken en klik vervolgens op de knop toevoegen.
Selecteer de knop Locaties en zorg ervoor dat het systeem geselecteerd is.
Voer
IIS AppPool\{APP POOL NAME}in, waarbij de tijdelijke aanduiding{APP POOL NAME}de naam van de app-pool is, in het gebied Voer de objectnamen in om te selecteren. Selecteer de knop Namen controleren. Controleer voor de DefaultAppPool de namen met behulp vanIIS AppPool\DefaultAppPool. Wanneer de knop Namen controleren is geselecteerd, wordt een waarde vanDefaultAppPoolaangegeven 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 deIIS 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.
Kies OK.
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 het DefaultAppPool voorbeeld wordt de volgende opdracht gebruikt:
ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool":F
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-process
- Windows Server 2016/Windows 10 of hoger; IIS 10 of hoger
- TLS 1.2- of hogerverbinding
- Out-of-process
- 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 de initialisatie van toepassingen: Gehoste toepassingen in het proces of buiten het proces kunnen worden geconfigureerd om automatisch te starten bij het opnieuw opstarten van een werkproces of de server.
- Time-out voor inactiviteit: het gehoste proces van de app kan niet worden geconfigureerd voor time-outs tijdens perioden van inactiviteit.
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:
- Ga naar Configuratiescherm>Programma's>Programma's en onderdelen>Windows-onderdelen in- of uitschakelen (links op het scherm).
- Open Internet Information Services>Wereldwijde Webservices>Applicatieontwikkeling functies.
- Selecteer het selectievakje voor toepassingsinitialisatie.
Op Windows Server 2008 R2 of hoger:
- Open de wizard Functies en onderdelen toevoegen.
- Open het knooppunt Toepassingsontwikkeling in het deelvenster Selecteer rolservices.
- 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:
- Selecteer toepassingsgroepen in het deelvenster Verbindingen.
- Klik met de rechtermuisknop op de app-groep van de app in de lijst en selecteer Geavanceerde instellingen.
- De standaardstartmodus is OnDemand. Stel de startmodus in op AlwaysRunning. Kies OK.
- Open het knooppunt Sites in het deelvenster Verbindingen.
- Klik met de rechtermuisknop op de app en selecteer Website beheren>Geavanceerde instellingen.
- De standaardinstelling Preload Enabled is False. Stel Preload ingeschakeld in op True. Kies OK.
Voeg met behulp van
web.confighet element<applicationInitialization>toe datdoAppInitAfterRestartis ingesteld optrueaan de<system.webServer>elementen in het bestand web.config 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:
- Selecteer toepassingsgroepen in het deelvenster Verbindingen.
- Klik met de rechtermuisknop op de app-groep van de app in de lijst en selecteer Geavanceerde instellingen.
- De standaard time-out voor inactiviteit (minuten) is 20 minuten. Stel de time-out voor inactiviteit (minuten) in op 0 (nul). Kies OK.
- Recycle het werkproces.
Gebruik een van de volgende benaderingen om te voorkomen dat apps die buiten het proces worden gehost, een time-out krijgen:
- Ping de app vanuit een externe service om deze actief te houden.
- Als de app alleen achtergrondservices host, vermijdt u IIS-hosting en gebruikt u een Windows-service om de ASP.NET Core-app te hosten.
Aanvullende middelen voor module voor initialisatie van toepassingen en inactieve time-out.
- IIS 8.0-applicatie-initialisatie
- Applicatie-initialisatie <applicatie-initialisatie>.
- Procesmodelinstellingen voor een procesmodel< voor een groep van toepassingen>.
Implementatiebronnen voor IIS-beheerders
- IIS-documentatie
- Aan de slag met IIS-beheer in IIS
- .NET-toepassingsimplementatie
- ASP.NET Core Module (ANCM) voor IIS-
- ASP.NET Kernmapstructuur
- IIS-modules met ASP.NET Core
- Problemen met ASP.NET Core in Azure App Service en IIS- oplossen
- Veelvoorkomende fout oplossen voor Azure App Service en IIS met ASP.NET Core-
Aanvullende bronnen
Zie Een ASP.NET Core-app publiceren naar IIS voor een zelfstudie over het publiceren van een ASP.NET Core-app naar een IIS-server.
De .NET Hosting Bundle installeren
Ondersteunde besturingssystemen
De volgende besturingssystemen worden ondersteund:
- Windows 7 of hoger
- Windows Server 2008 R2 of hoger
HTTP.sys server (voorheen WebListener genoemd) werkt niet in een omgekeerde proxyconfiguratie met IIS. Gebruik de Kestrel server.
Zie ASP.NET Core-apps implementeren in Azure App Service voor meer informatie over het hosten in Azure.
Zie Problemen oplossen en fouten opsporen ASP.NET Core-projecten voor hulp bij het oplossen van problemen.
Ondersteunde platforms
Apps die zijn gepubliceerd voor de implementatie van 32-bits (x86) of 64-bits (x64) worden ondersteund. Implementeer een 32-bits app met een 32-bits .NET SDK (x86), tenzij de app:
- Vereist de grotere adresruimte voor virtueel geheugen die beschikbaar is voor een 64-bits app.
- Vereist de grotere GROOTTE van de IIS-stack.
- Heeft 64-bits systeemeigen afhankelijkheden.
Gebruik een 64-bits .NET SDK (x64) om een 64-bits app te publiceren. Er moet een 64-bits runtime aanwezig zijn op het hostsysteem.
ASP.NET Core wordt geleverd met Kestrel server, een standaard, platformoverschrijdende HTTP-server.
Wanneer u IIS- of IIS Express-gebruikt, wordt de app uitgevoerd in een proces gescheiden van het IIS-werkproces (out-of-process) met de Kestrel-server.
Omdat ASP.NET Core-apps worden uitgevoerd in een proces dat losstaat van het IIS-werkproces, verwerkt de module procesbeheer. De module start het proces voor de ASP.NET Core-app wanneer de eerste aanvraag binnenkomt en start de app opnieuw als deze wordt afgesloten of vastloopt. Dit is in wezen hetzelfde gedrag als bij apps die in het proces worden uitgevoerd die worden beheerd door de WAS-(Windows Process Activation Service).
In het volgende diagram ziet u de relatie tussen IIS, de ASP.NET Core Module en een app die out-of-process wordt gehost:
Aanvragen komen van het web naar het kernel-modus HTTP.sys stuurprogramma. Het stuurprogramma stuurt de aanvragen naar IIS op de geconfigureerde poort van de website, meestal 80 (HTTP) of 443 (HTTPS). De module stuurt de aanvragen door naar Kestrel op een willekeurige poort voor de app, die geen poort 80 of 443 is.
De module specificeert de poort via een omgevingsvariabele bij het opstarten en de IIS Integration Middleware configureert de server om te luisteren op http://localhost:{port}. Aanvullende controles worden uitgevoerd en aanvragen die niet afkomstig zijn van de module, worden geweigerd. De module biedt geen ondersteuning voor HTTPS-doorsturen, dus aanvragen worden doorgestuurd via HTTP, zelfs niet als deze worden ontvangen door IIS via HTTPS.
Nadat Kestrel de aanvraag uit de module heeft opgehaald, wordt de aanvraag naar de ASP.NET Core middleware-pijplijn gepusht. De middleware-pijplijn verwerkt de aanvraag en geeft deze als een HttpContext exemplaar door aan de logica van de app. Middleware die door IIS-integratie is toegevoegd, werkt het schema, externe IP en pathbase bij voor het doorsturen van de aanvraag naar Kestrel. Het antwoord van de app wordt teruggegeven aan IIS, waardoor deze terug wordt gepusht naar de HTTP-client die de aanvraag heeft gestart.
CreateDefaultBuilder configureert Kestrel de server als de webserver en schakelt IIS-integratie in door het basispad en de poort voor de ASP.NET Core-module te configureren.
De ASP.NET Core-module genereert een dynamische poort om toe te wijzen aan het back-endproces.
CreateDefaultBuilder roept de UseIISIntegration methode aan.
UseIISIntegration configureert Kestrel zodat deze luistert naar de dynamische poort op het IP-adres van localhost (127.0.0.1). Als de dynamische poort 1234 is, luistert Kestrel op 127.0.0.1:1234. Deze configuratie vervangt andere URL-configuraties die worden geleverd door:
UseUrls- Kestrel's Listen-API
- Configuratie (of opdrachtregel --urls-optie)
Aanroepen naar UseUrls of Kestrel's Listen API zijn niet vereist bij het gebruik van de module. Als UseUrls of Listen wordt aangeroepen, luistert Kestrel alleen op de poort die is opgegeven tijdens het uitvoeren van de app zonder IIS.
Zie ASP.NET Core Module (ANCM) voor IIS voor configuratierichtlijnen voor ASP.NET Core Module.
Zie Host in ASP.NET Core voor meer informatie over hosting.
Toepassingsconfiguratie
De IISIntegration-onderdelen inschakelen
Bij het bouwen van een host in CreateWebHostBuilder (Program.cs), roept CreateDefaultBuilder u aan om IIS-integratie in te schakelen:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
...
Zie CreateDefaultBuilder voor meer informatie.
IIS-opties
| Option | Default | Setting |
|---|---|---|
AutomaticAuthentication |
true |
Als true, stelt de IIS-server HttpContext.User in die is geverifieerd door Windows-verificatie. Wanneer false, biedt de server uitsluitend een identiteit voor HttpContext.User en reageert op uitdagingen wanneer expliciet aangevraagd door de AuthenticationScheme. Windows-verificatie moet zijn ingeschakeld in IIS om AutomaticAuthentication te kunnen functioneren. Zie Windows-verificatie voor meer informatie. |
AuthenticationDisplayName |
null |
Hiermee stelt u de weergavenaam in die wordt weergegeven aan gebruikers op aanmeldingspagina's. |
Als u IIS-opties wilt configureren, moet u een serviceconfiguratie opnemen voor IISOptions in ConfigureServices. In het volgende voorbeeld wordt voorkomen dat de app HttpContext.Connection.ClientCertificate vult:
services.Configure<IISOptions>(options =>
{
options.ForwardClientCertificate = false;
});
| Option | Default | Setting |
|---|---|---|
AutomaticAuthentication |
true |
Als true, stelt IIS Integration Middleware de HttpContext.User geauthenticeerd door Windows-verificatie in. Als false biedt de middleware alleen een identiteit voor HttpContext.User en beantwoordt uitdagingen wanneer expliciet aangevraagd door de AuthenticationScheme. Windows-verificatie moet zijn ingeschakeld in IIS om AutomaticAuthentication te kunnen functioneren. Zie het onderwerp Windows-verificatie voor meer informatie. |
AuthenticationDisplayName |
null |
Hiermee stelt u de weergavenaam in die wordt weergegeven aan gebruikers op aanmeldingspagina's. |
ForwardClientCertificate |
true |
Als true en de MS-ASPNETCORE-CLIENTCERT aanvraagheader aanwezig is, wordt de HttpContext.Connection.ClientCertificate aanvraag ingevuld. |
Scenario's voor proxyserver en load balancer
De IIS Integration Middleware, die de Forwarded Headers Middleware en de ASP.NET Core-module configureert, is geconfigureerd om het schema (HTTP/HTTPS) en het externe IP-adres van waar de aanvraag afkomstig is door te sturen. Er is mogelijk extra configuratie vereist voor apps die worden gehost achter extra proxyservers en load balancers. Zie ASP.NET Core configureren voor gebruik met proxyservers en load balancers voor meer informatie.
web.config-bestand
Het web.config-bestand configureert de ASP.NET Core-module. Het maken, transformeren en publiceren van het web.config-bestand wordt verwerkt door een MSBuild-doel (_TransformWebConfig) wanneer het project wordt gepubliceerd. Dit doel is aanwezig in de Web SDK-doelen (Microsoft.NET.Sdk.Web). De SDK wordt boven aan het projectbestand ingesteld:
<Project Sdk="Microsoft.NET.Sdk.Web">
Als een web.config bestand niet aanwezig is in het project, wordt het bestand gemaakt met het juiste processPath en de juiste argumenten om de ASP.NET Core-module te configureren en verplaatst naar gepubliceerde uitvoer.
Als een web.config-bestand aanwezig is in het project, wordt het bestand getransformeerd met het juiste processPath en de juiste argumenten om de ASP.NET Core-module te configureren en verplaatst naar gepubliceerde uitvoer. De transformatie wijzigt geen IIS-configuratie-instellingen in het bestand.
Het web.config-bestand kan aanvullende IIS-configuratie-instellingen bieden die actieve IIS-modules beheren. Zie het onderwerp iis-modules voor informatie over IIS-modules die aanvragen kunnen verwerken met ASP.NET Core-apps.
Als u wilt voorkomen dat de Web-SDK het web.config-bestand transformeert, gebruikt u de <eigenschap IsTransformWebConfigDisabled> in het projectbestand:
<PropertyGroup>
<IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>
Wanneer u de web-SDK uitschakelt voor het transformeren van het bestand, moeten de processPath en argumenten handmatig worden ingesteld door de ontwikkelaar. Zie ASP.NET Core Module (ANCM) voor IIS-voor meer informatie.
locatie van web.config bestand
Als u de ASP.NET Core-module correct wilt instellen, moet het web.config-bestand aanwezig zijn op het hoofdpad van de inhoud (meestal het basispad van de app) van de geïmplementeerde app. Dit is dezelfde locatie als het fysieke pad van de website dat aan IIS is verstrekt. Het web.config-bestand is vereist in de hoofdmap van de app om het publiceren van meerdere apps mogelijk te maken met behulp van Web Deploy.
Gevoelige bestanden bestaan op het fysieke pad van de app, zoals <assembly> -.runtimeconfig.json, <assembly> -.xml (opmerkingen bij XML-documentatie) en <assembly> -.deps.json. Wanneer het web.config bestand aanwezig is en de site normaal start, serveert IIS deze gevoelige bestanden niet als ze worden opgevraagd. Als het web.config bestand ontbreekt, een onjuiste naam heeft of de site niet kan configureren voor normaal opstarten, kan IIS gevoelige bestanden openbaar verwerken.
Het web.config-bestand moet altijd aanwezig zijn in de implementatie, correct benoemd en de site kunnen configureren voor normaal opstarten. Verwijder het web.config bestand nooit uit een productie-implementatie.
Transformeer web.config
Als u web.config moet transformeren bij publicatie (bijvoorbeeld omgevingsvariabelen instellen op basis van de configuratie, het profiel of de omgeving), raadpleeg dan Transform web.config.
IIS-configuratie
Windows Server-besturingssystemen
Schakel de Webserver (IIS) serverfunctie in en stel functieservices in.
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).
Na de functies stap wordt de rollendiensten stap geladen voor webserver (IIS). Selecteer de gewenste IIS-functieservices of accepteer de standaardfunctieservices die worden geleverd.
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 configureren voor 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.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.
Ga naar Configuratiescherm>Programma's>Programma's en onderdelen>Windows-onderdelen in- of uitschakelen (links op het scherm).
Open het knooppunt Internet Information Services. Open het knooppunt Web Management Tools.
Schakel het selectievakje in voor IIS-beheerconsole.
Schakel het selectievakje in voor World Wide Web Services.
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 configureren voor 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.Als de IIS-installatie opnieuw moet worden opgestart, start u het systeem opnieuw op.
De .NET Hosting Bundle installeren
Installeer de .NET Hosting Bundle op het hostingsysteem. De bundel installeert de .NET Runtime, .NET-bibliotheek en de ASP.NET Core-module. Met de module kunnen ASP.NET Core-apps achter IIS worden uitgevoerd.
Important
Als de hostingbundel vóór IIS is geïnstalleerd, moet de bundelinstallatie worden hersteld. Voer het installatieprogramma voor hostingbundel opnieuw uit nadat u IIS hebt geïnstalleerd.
Als de hostingbundel is geïnstalleerd nadat de 64-bits (x64)-versie van .NET is geïnstalleerd, lijken SDK's mogelijk te ontbreken (er zijn geen .NET SDK's gedetecteerd). Zie Problemen oplossen en fouten opsporen ASP.NET Core-projecten om het probleem op te lossen.
Download
- Navigeer naar de pagina .NET downloaden .
- Selecteer de gewenste .NET-versie.
- Zoek in de kolom Uitvoeren-apps - Runtime de rij van de gewenste .NET Runtime-versie.
- Download het installatieprogramma met behulp van de koppeling Hostingbundel .
Warning
Sommige installatieprogramma's bevatten releaseversies die hun einde van de levensduur (EOL) hebben bereikt en die niet meer worden ondersteund door Microsoft. Zie het ondersteuningsbeleid voor meer informatie.
De hostingbundel installeren
Voer het installatieprogramma uit op de server. De volgende parameters zijn beschikbaar bij het uitvoeren van het installatieprogramma vanuit een beheerdersopdrachtshell:
-
OPT_NO_ANCM=1: Sla de installatie van de ASP.NET Core-module over. -
OPT_NO_RUNTIME=1: Sla de installatie van de .NET-runtime over. Wordt gebruikt wanneer de server alleen zelfstandige implementaties (SCD) host. -
OPT_NO_SHAREDFX=1: Sla het installeren van het ASP.NET Shared Framework (ASP.NET runtime) over. Wordt gebruikt wanneer de server alleen zelfstandige implementaties (SCD) host. -
OPT_NO_X86=1: Sla het installeren van x86-runtimes over. Gebruik deze parameter als u weet dat u geen 32-bits apps host. Als er een kans is dat u in de toekomst zowel 32-bits als 64-bits apps host, gebruikt u deze parameter niet en installeert u beide runtimes. -
OPT_NO_SHARED_CONFIG_CHECK=1: Schakel de controle uit voor het gebruik van een gedeelde IIS-configuratie wanneer de gedeelde configuratie (applicationHost.config) zich op dezelfde computer bevindt als de IIS-installatie. Alleen beschikbaar voor ASP.NET Core 2.2 of hoger Hosting Bundler installers. Zie ASP.NET Core Module (ANCM) voor IIS-voor meer informatie.
-
Start het systeem opnieuw of voer de volgende opdrachten uit in een opdrachtshell:
net stop was /y net start w3svcAls u IIS opnieuw start, wordt een wijziging in het systeemPAD, een omgevingsvariabele, opgehaald die door het installatieprogramma is gemaakt.
Het is niet nodig om afzonderlijke sites in IIS handmatig te stoppen bij het installeren van de hostingbundel. Gehoste apps (IIS-sites) worden opnieuw opgestart wanneer IIS opnieuw wordt opgestart. Apps worden opnieuw opgestart wanneer ze hun eerste aanvraag ontvangen, waaronder van de module Voor initialisatie van toepassingen.
ASP.NET Core implementeert roll-forward-gedrag voor patchreleases van gedeelde frameworkpakketten. Wanneer apps die worden gehost door IIS opnieuw worden opgestart met IIS, worden de apps geladen met de nieuwste patchversies van hun pakketten waarnaar wordt verwezen wanneer ze hun eerste aanvraag ontvangen. Als IIS niet opnieuw wordt opgestart, worden apps opnieuw opgestart en vertonen ze roll-forward gedrag wanneer hun werkprocessen worden gerecycled en ze hun eerste aanvraag ontvangen.
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. Als u Web Deploy wilt installeren, gebruikt u het webplatforminstallatieprogramma (WebPI) of IIS-downloads: Web Deploy. De voorkeursmethode is het gebruik van WebPI. WebPI biedt een zelfstandige installatie en een configuratie voor hostingproviders.
De IIS-site maken
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.
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.
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:
Warning
Jokertekenbindingen op het hoogste niveau (
http://*:80/enhttp://+: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.Onder het knooppunt van de server selecteer Application Pools.
Klik met de rechtermuisknop op de app-groep van de site en selecteer Basisinstellingen in het contextmenu.
Stel in het venster Groep van toepassingen bewerken de .NET CLR-versie in op Geen beheerde code:
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 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.
ASP.NET Core 2.2 of hoger: Voor een 64-bits (x64) zelfstandige implementatie die gebruikmaakt van het in-process hostingmodel, schakelt u de app-pool uit voor 32-bits (x86)-processen.
Selecteer in de zijbalk Acties van GROEPEN voor IIS-beheertoepassingen >de optie Standaardinstellingen voor groep van toepassingen instellen of Geavanceerde instellingen. Zoek 32-bits toepassingen inschakelen en stel de waarde in op
False. Deze instelling heeft geen invloed op apps die zijn geïmplementeerd voor out-of-process hosting.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.
De app implementeren
Implementeer de app in de map IIS fysiek pad dat is ingesteld in de sectie De IIS-site maken. Web Deploy is het aanbevolen mechanisme voor implementatie, maar er zijn verschillende opties voor het verplaatsen van de app vanuit de publicatiemap van het project naar de implementatiemap van het hostingsysteem.
Web implementeren met Visual Studio
Zie het onderwerp over het publiceren van Visual Studio-profielen voor ASP.NET Core-app voor meer informatie over het maken van een publicatieprofiel voor gebruik met Web Deploy. Als de hostingprovider een publicatieprofiel of ondersteuning biedt voor het maken van een profiel, downloadt u het profiel en importeert u het met behulp van het dialoogvenster Publiceren van Visual Studio:
Web implementeren buiten Visual Studio
Web Deploy kan ook buiten Visual Studio worden gebruikt vanaf de opdrachtregel. Zie Het webimplementatieprogramma voor meer informatie.
Alternatieven voor Web Deploy
Gebruik een van de verschillende methoden om de app te verplaatsen naar het hostingsysteem, zoals handmatig kopiëren, Xcopy, Robocopy of PowerShell.
Zie de sectie Implementatieresources voor IIS voor meer informatie over ASP.NET Core-implementatie naar IIS .
Door de website bladeren
Nadat de app is geïmplementeerd in het hostingsysteem, dient u een aanvraag in bij een van de openbare eindpunten van de app.
In het volgende voorbeeld is de site gebonden aan een IIS-hostnaam op www.mysite.compoort80. Er wordt een aanvraag ingediend bij http://www.mysite.com:
Vergrendelde implementatiebestanden
Bestanden in de implementatiemap worden vergrendeld wanneer de app wordt uitgevoerd. Vergrendelde bestanden kunnen niet worden overschreven tijdens de implementatie. Als u vergrendelde bestanden in een implementatie wilt vrijgeven, stopt u de app-pool met een van de volgende methoden:
Gebruik Web Deploy en verwijs naar
Microsoft.NET.Sdk.Webin het projectbestand. Er wordt eenapp_offline.htmbestand in de hoofddirectory van de webapplicatie geplaatst. Wanneer het bestand aanwezig is, wordt de app door de ASP.NET Core-module correct afgesloten en wordt hetapp_offline.htmbestand tijdens de implementatie verwerkt. Zie de referentie voor de configuratie van de ASP.NET Core Module voor meer informatie.Stop de app-groep handmatig in IIS-beheer op de server.
Gebruik PowerShell om te verwijderen
app_offline.htm(hiervoor is PowerShell 5 of hoger vereist):$pathToApp = 'PATH_TO_APP' # Stop the AppPool New-Item -Path $pathToApp app_offline.htm # Provide script commands here to deploy the app # Restart the AppPool Remove-Item -Path $pathToApp app_offline.htm
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 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 gegevensbeveiliging maken
Gegevensbeveiligingssleutels die worden gebruikt door ASP.NET Core-apps 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. Met dit script maakt u een registersleutel in het HKLM-register dat alleen toegankelijk is voor het werkprocesaccount van de app-pool van de app. Sleutels worden in rust versleuteld met DPAPI met een sleutel voor de hele machine.
In scenario's voor webfarms kan een app worden geconfigureerd om een UNC-pad te gebruiken voor het opslaan van zijn gegevensbeschermingssleutelring. Standaard worden de sleutels voor gegevensbeveiliging 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 configureren voor 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 opTrue, 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
setProfileEnvironmentistrue. In sommige scenario's (bijvoorbeeld het Windows-besturingssysteem) issetProfileEnvironmentingesteld opfalse. Als sleutels niet zijn opgeslagen in de gebruikersprofielmap zoals verwacht:- Navigeer naar de map %windir%/system32/inetsrv/config.
- Open het bestand applicationHost.config.
- Zoek het element
<system.applicationHost><applicationPools><applicationPoolDefaults><processModel>. - Controleer of het kenmerk
setProfileEnvironmentniet aanwezig is. Deze waarde wordt standaard ingesteld optrueof stel de waarde van het kenmerk expliciet in optrue.
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 gegevensbeveiliging in code.
Een machinebreed beleid instellen voor gegevensbeveiliging
Het systeem voor gegevensbeveiliging biedt beperkte ondersteuning voor het instellen van een standaardbeleid voor de hele machine voor alle apps die gebruikmaken van de Api's voor gegevensbescherming. Voor meer informatie, zie ASP.NET Core Data Protection Overzicht.
Virtuele mappen
virtuele IIS-mappen worden niet ondersteund met ASP.NET Core-apps. Een app kan worden gehost als een subtoepassing.
Sub-applications
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.
Een sub-app mag de ASP.NET Core-module niet opnemen als handler. Als de module wordt toegevoegd als handler in het web.config-bestand van een sub-app, wordt een interne serverfout van 500.19 die verwijst naar het foutieve configuratiebestand ontvangen bij een poging om door de sub-app te bladeren.
In het volgende voorbeeld ziet u een gepubliceerd web.config-bestand voor een ASP.NET Core-sub-app:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
Wanneer u een non-ASP.NET Core-sub-app host onder een ASP.NET Core-app, verwijdert u expliciet de overgenomen handler in het web.config-bestand van de sub-app:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<remove name="aspNetCore" />
</handlers>
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
Statische assetkoppelingen in de subapplicatie moeten gebruikmaken van tilde-slash-notatie (~/). 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.
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:
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 wordt opgestart om de app in het werkproces te hosten, niet de desktop-CLR (.NET CLR).
Voeg de hoofdsite toe in IIS-beheer met de sub-app in een map onder de hoofdsite.
Klik met de rechtermuisknop op de map sub-app in IIS-beheer en selecteer Converteren naar toepassing.
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 .
Configuratie van IIS met web.config
IIS-configuratie wordt beïnvloed door het <system.webServer> gedeelte van web.config voor IIS-scenario's die functioneel zijn voor ASP.NET Core-apps met de ASP.NET Core-module. IIS-configuratie is bijvoorbeeld functioneel voor dynamische compressie. Als IIS is geconfigureerd op serverniveau om dynamische compressie te gebruiken, kan het <urlCompression> element in het web.config-bestand van de app dit uitschakelen voor een ASP.NET Core-app.
Zie de volgende onderwerpen voor meer informatie:
- Configuratiereferentie voor <system.webServer>
- ASP.NET Core Module (ANCM) voor IIS-
- IIS-modules met ASP.NET Core
Als u omgevingsvariabelen wilt instellen voor afzonderlijke apps die worden uitgevoerd in geïsoleerde app-pools (ondersteund voor IIS 10.0 of hoger), raadpleegt u de sectieAppCmd.exe opdracht van het onderwerp Environment Variables <environmentVariables> in de IIS-referentiedocumentatie.
Secties die niet worden gebruikt door ASP.NET Core
Configuratiesecties van ASP.NET 4.x-apps in web.config worden niet gebruikt door ASP.NET Core-apps voor configuratie:
<system.web><appSettings><connectionStrings><location>
ASP.NET Core-apps zijn geconfigureerd met andere configuratieproviders. Zie Configuratie voor meer informatie.
Toepassingsgroepen
Wanneer u meerdere websites op een server host, raden we u aan de apps van elkaar te isoleren door elke app in een eigen app-pool uit te voeren. Het dialoogvenster IIS Website toevoegen is standaard ingesteld op deze configuratie. 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 app is ingesteld op het gebruik van ApplicationPoolIdentity:
Dialoogvenster Geavanceerde instellingen voor 
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:
Open Windows Verkenner en navigeer naar de directory.
Klik met de rechtermuisknop op de map en selecteer Eigenschappen.
Selecteer op het tabblad Security de knop Bewerken en klik vervolgens op de knop toevoegen.
Selecteer de knop Locaties en zorg ervoor dat het systeem geselecteerd is.
Voer IIS AppPool\<app_pool_name> in Voer de objectnamen in om het gebied te selecteren . Selecteer de knop Namen controleren. Voor de DefaultAppPool controleert u 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 vormaat IIS AppPool\<app_pool_name> bij het controleren van de objectnaam.
Kies OK.
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 de DefaultAppPool als voorbeeld wordt de volgende opdracht gebruikt:
ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool":F
Zie het onderwerp icacls voor meer informatie.
HTTP/2-ondersteuning
HTTP/2 wordt ondersteund voor out-of-process-implementaties die voldoen aan de volgende basisvereisten:
- 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.
- Doelframework: Niet van toepassing op out-of-process-implementaties, omdat de HTTP/2-verbinding volledig wordt verwerkt door IIS.
- TLS 1.2- of hogerverbinding
Als er een HTTP/2-verbinding tot stand is gebracht, rapporteert HttpRequest.ProtocolHTTP/1.1.
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 Cross-Origin-aanvragen inschakelen in ASP.NET Web API 2: Hoe CORS werkt om te leren hoe je de IIS-handlers van de app configureert in web.config om OPTIONS-aanvragen door te geven.
Implementatiebronnen voor IIS-beheerders
- IIS-documentatie
- Aan de slag met IIS-beheer in IIS
- .NET-toepassingsimplementatie
- ASP.NET Core Module (ANCM) voor IIS-
- ASP.NET Kernmapstructuur
- IIS-modules met ASP.NET Core
- Problemen met ASP.NET Core in Azure App Service en IIS- oplossen
- Veelvoorkomende fout oplossen voor Azure App Service en IIS met ASP.NET Core-