Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anmärkning
Det här är inte den senaste versionen av den här artikeln. Den aktuella versionen finns i .NET 10-versionen av den här artikeln.
Varning
Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i supportpolicyn för .NET och .NET Core. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
ASP.NET Core Module (ANCM) är en inbyggd IIS-modul som ansluts till IIS-pipelinen, vilket gör att ASP.NET Core-program kan fungera med IIS. Kör ASP.NET Core-appar med IIS genom att antingen:
- Värd för en ASP.NET Core-app i IIS-arbetsprocessen (
w3wp.exe), som kallas för den pågående värdmodellen. - Vidarebefordra webbbegäranden till en backend ASP.NET Core-app som kör Kestrel-servern, kallad out-of-process-värdmodell.
Det finns kompromisser mellan var och en av värdmodellerna. Som standard används den processbaserade värdmodellen på grund av bättre prestanda och diagnostik.
Mer information och konfigurationsvägledning finns i följande avsnitt:
Installera ASP.NET Core Module (ANCM)
ANCM (ASP.NET Core Module) installeras med .NET Core Runtime från .NET Core Hosting Bundle. ASP.NET Core-modulen är framåt och bakåtkompatibel med versioner av .NET som stöds.
Störande ändringar och säkerhetsrekommendationer rapporteras i meddelandeförvaret. Meddelanden kan begränsas till en viss version genom att välja ett etikettfilter .
Ladda ned installationsprogrammet med hjälp av följande länk:
Aktuellt installationspaket för .NET Core Hosting Bundle (direkt nedladdning)
Mer information, inklusive installation av en tidigare version av modulen, finns i Värdpaket.
En självstudie om hur du publicerar en ASP.NET Core-app till en IIS-server finns i Publicera en ASP.NET Core-app till IIS.
ASP.NET Core Module (ANCM) är en intern IIS-modul som ansluts till IIS-pipelinen till antingen:
- Kör en ASP.NET Core-app i IIS-arbetsprocessen (
w3wp.exe), som kallas in-process hostingmodellen. - Vidarebefordra webbbegäranden till en backend ASP.NET Core-applikation som kör Kestrel servern, kallad värdmodellen för körning utanför processen.
Windows-versioner som stöds:
- Windows 7 eller senare
- Windows Server 2012 R2 eller senare
När du är värd för en process använder modulen en processbaserad serverimplementering för IIS, kallad IIS HTTP Server (IISHttpServer).
När du är värd för out-of-process fungerar modulen bara med Kestrel. Modulen fungerar inte med HTTP.sys.
Servervärdmodeller
In-process-värdmodell
ASP.NET Core-applikationer använder som standard hostingmodellen in-process.
Följande egenskaper gäller när du är värd för en process:
IIS HTTP Server (
IISHttpServer) används i stället för Kestrel server. För processen, anrop till CreateDefaultBuilder sker via UseIIS för att:- Registrera
IISHttpServer. - Konfigurera porten och basvägen som servern ska lyssna på när den ska använda ASP.NET Core-modulen.
- Konfigurera värden för att fånga in startfel.
- Registrera
Attributet requestTimeout gäller inte för pågående värdtjänster.
Det går inte att dela en apppool mellan appar. Använd en apppool per app.
När du använder Webbdistribution eller manuellt placerar en
app_offline.htmfil i distributionen kanske appen inte stängs av omedelbart om det finns en öppen anslutning. En WebSocket-anslutning kan till exempel fördröja att appen stängs av.Arkitekturen (bitness) för appen och installerad runtime (x64 eller x86) måste matcha arkitekturen för apppoolen.
Klientfrånkopplingar identifieras. Avbrytartoken
HttpContext.RequestAbortedavbryts när klienten kopplas från.I ASP.NET Core 2.2.1 eller tidigare GetCurrentDirectory returnerar arbetskatalogen för processen som startades av IIS i stället för appens katalog (till exempel
C:\Windows\System32\inetsrvförw3wp.exe).Exempelkod som anger appens aktuella katalog finns i
CurrentDirectoryHelpersklassen . AnropaSetCurrentDirectorymetoden. Efterföljande anrop till GetCurrentDirectory ger appens katalog.När du är värd för en process AuthenticateAsync anropas inte internt för att initiera en användare. Därför aktiveras inte en IClaimsTransformation implementering som används för att omvandla anspråk efter varje autentisering som standard. När du omvandlar anspråk med en IClaimsTransformation implementering anropar du AddAuthentication för att lägga till autentiseringstjänster:
public void ConfigureServices(IServiceCollection services) { services.AddTransient<IClaimsTransformation, ClaimsTransformer>(); services.AddAuthentication(IISServerDefaults.AuthenticationScheme); } public void Configure(IApplicationBuilder app) { app.UseAuthentication(); }- Webbpaketdistributioner (en fil) stöds inte.
Out-of-process-värdmodell
Om du vill konfigurera en app för out-of-process-värdmiljö, ställ in värdet på egenskapen <AspNetCoreHostingModel> till OutOfProcess i projektfilen (.csproj):
<PropertyGroup>
<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>
In-process hosting anges med InProcess, vilket är standardvärdet.
Värdet <AspNetCoreHostingModel> för är skiftlägesokänsligt, så inprocess och outofprocess är giltiga värden.
Kestrel används i stället för IIS HTTP Server (IISHttpServer).
För out-of-process anropar CreateDefaultBuilder du UseIISIntegration till:
- Konfigurera porten och basvägen som servern ska lyssna på när den ska använda ASP.NET Core-modulen.
- Konfigurera värden för att fånga in startfel.
Ändringar i värdmodell
Om inställningen hostingModel ändras i web.config filen (förklaras i avsnittet Konfiguration med web.config ) återanvänder modulen arbetsprocessen för IIS.
För IIS Express återanvänder modulen inte arbetsprocessen utan utlöser i stället en graciös avstängning av den aktuella IIS Express-processen. Nästa begäran till appen skapar en ny IIS Express-process.
Processnamn
Process.GetCurrentProcess().ProcessName rapporterar w3wp/iisexpress (pågående) eller dotnet (utanför process).
Många inbyggda moduler, till exempel Windows-autentisering, förblir aktiva. Mer information om IIS-moduler som är aktiva med ASP.NET Core-modulen finns i IIS-moduler med ASP.NET Core.
ASP.NET Core-modulen kan också:
- Ange miljövariabler för arbetsprocessen.
- Logga stdout-data till filhistorik för felsökning av uppstartsproblem.
- Vidarebefordra Windows-autentiseringstoken.
Installera och använda ASP.NET Core Module (ANCM)
Anvisningar om hur du installerar ASP.NET Core-modulen finns i Installera .NET Core Hosting Bundle. ASP.NET Core-modulen är framåt och bakåtkompatibel med versioner av .NET som stöds.
Störande ändringar och säkerhetsrekommendationer rapporteras i meddelandeförvaret. Meddelanden kan begränsas till en viss version genom att välja ett etikettfilter .
Konfiguration med web.config
ASP.NET Core-modulen konfigureras med aspNetCore avsnittet i system.webServer noden i webbplatsens web.config-fil .
Följande web.config fil publiceras för en ramverksberoende distribution och konfigurerar ASP.NET Core-modulen för att hantera platsbegäranden:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>
Följande web.config publiceras för en fristående distribution:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\MyApp.exe"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>
Egenskapen InheritInChildApplications är inställd på för false att indikera att de inställningar som anges i elementet <location> inte ärvs av appar som finns i en underkatalog i appen.
När en app distribueras till Azure App ServicestdoutLogFile är sökvägen inställd på \\?\%home%\LogFiles\stdout. Sökvägen sparar stdout-loggfiler till mappen LogFiles, som är en plats som skapas automatiskt av tjänsten.
Information om konfiguration av IIS-underprogram finns i Host ASP.NET Core on Windows with IIS (Värd ASP.NET Core i Windows med IIS).
Attribut för aspNetCore-elementet
| Attribute | Description | Förinställning |
|---|---|---|
arguments |
Valfritt strängattribut. Argument till den körbara fil som anges i processPath. |
|
disableStartUpErrorPage |
Valfritt booleskt attribut. Om det är sant ignoreras sidan 502.5 – Processfel och sidan 502-statuskod som konfigurerats i web.config har företräde. |
false |
forwardWindowsAuthToken |
Valfritt booleskt attribut. I så fall vidarebefordras token till den underordnade processen som lyssnar på |
true |
hostingModel |
Valfritt strängattribut. Anger värdmodellen som processbaserad ( |
InProcessinprocess |
processesPerApplication |
Valfritt heltalsattribut. Anger antalet instanser av processen som anges i inställningen processPath som kan spunnas upp per app. †För in-process hosting är värdet begränsat till Inställningen |
Förval: 1Min: 1Max: 100† |
processPath |
Obligatoriskt strängattribut. Sökväg till den körbara fil som startar en process som lyssnar efter HTTP-begäranden. Relativa sökvägar stöds. Om sökvägen börjar med |
|
rapidFailsPerMinute |
Valfritt heltalsattribut. Anger hur många gånger processen som anges i processPath tillåts krascha per minut. Om den här gränsen överskrids slutar modulen att starta processen under resten av minuten. Stöds inte med pågående värdtjänster. |
Förval: 10Min: 0Max: 100 |
requestTimeout |
Valfritt tidsintervallattribut. Anger hur länge ASP.NET Core-modulen väntar på ett svar från processen som lyssnar på %ASPNETCORE_PORT%. I versioner av ASP.NET Core-modulen som levererades med versionen av ASP.NET Core 2.1 eller senare anges den Gäller inte för pågående värdtjänster. För pågående värdtjänster väntar modulen på att appen ska bearbeta begäran. Giltiga värden för minuter och sekunder i strängen ligger i intervallet 0–59. Användning av 60 i värdet för minuter eller sekunder resulterar i ett 500 - internt serverfel. |
Förval: 00:02:00Min: 00:00:00Max: 360:00:00 |
shutdownTimeLimit |
Valfritt heltalsattribut. Varaktighet i sekunder som modulen väntar på att den körbara filen ska stängas av korrekt när |
Förval: 10Min: 0Max: 600 |
startupTimeLimit |
Valfritt heltalsattribut. Varaktighet i sekunder som modulen väntar på att den körbara filen ska starta en process som lyssnar på porten. Om den här tidsgränsen överskrids avlöser modulen processen. Vid värdskap av in-process: Processen startas inte om och använder inte inställningen rapidFailsPerMinute. När du är värd för out-of-process: Modulen försöker starta om processen när den tar emot en ny begäran och fortsätter att försöka starta om processen vid efterföljande inkommande begäranden såvida inte appen misslyckas med att starta rapidFailsPerMinute antal gånger under den senaste rullande minuten. Värdet 0 (noll) anses inte vara en oändlig timeout. |
Förval: 120Min: 0Max: 3600 |
stdoutLogEnabled |
Valfritt booleskt attribut. Om sant omdirigeras stdout och stderr för den process som anges i processPath till filen som anges i stdoutLogFile. |
false |
stdoutLogFile |
Valfritt strängattribut. Anger den relativa eller absoluta filsökvägen för vilken stdout och stderr från den process som anges i processPath loggas. Relativa sökvägar är relativa till webbplatsens rot. Alla sökvägar som börjar med |
aspnetcore-stdout |
Ange miljövariabler
Miljövariabler kan anges för processen i attributet processPath . Ange en miljövariabel med det <environmentVariable> underordnade elementet i ett <environmentVariables> samlingselement. Miljövariabler som anges i det här avsnittet har företräde framför systemmiljövariabler.
I följande exempel anges två miljövariabler i web.config.
ASPNETCORE_ENVIRONMENT konfigurerar appens miljö till Development. En utvecklare kan tillfälligt ange det här värdet i web.config filen för att tvinga undantagssidan för utvecklare att läsas in när ett appfelfel felsöks.
CONFIG_DIR är ett exempel på en användardefinierad miljövariabel, där utvecklaren har skrivit kod som läser värdet vid start för att skapa en sökväg för att läsa in appens konfigurationsfil.
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
<environmentVariable name="CONFIG_DIR" value="f:\application_config" />
</environmentVariables>
</aspNetCore>
Anmärkning
Ett alternativ till att ange miljön direkt i web.config är att inkludera <EnvironmentName> egenskapen i publiceringsprofilen (.pubxml) eller projektfilen. Den här metoden anger miljön i web.config när projektet publiceras:
<PropertyGroup>
<EnvironmentName>Development</EnvironmentName>
</PropertyGroup>
Varning
Ange ASPNETCORE_ENVIRONMENT endast miljövariabeln till Development på mellanlagrings- och testservrar som inte är tillgängliga för ej betrodda nätverk, till exempel Internet.
app_offline.htm
Om en fil med namnet app_offline.htm identifieras i rotkatalogen för en app försöker ASP.NET Core-modulen att stänga av appen på ett korrekt sätt och sluta bearbeta inkommande begäranden. Om appen fortfarande körs efter det antal sekunder som definierats i shutdownTimeLimit, tar ASP.NET Core Module bort den process som körs.
app_offline.htm När filen finns svarar ASP.NET Core-modulen på begäranden genom att skicka tillbaka innehållet i app_offline.htm filen.
app_offline.htm När filen tas bort startar nästa begäran appen.
När man använder en värdmodell utanför processen kanske appen inte stängs av direkt om det finns en öppen anslutning. En WebSocket-anslutning kan till exempel fördröja att appen stängs av.
Startfelsida
Både "in-process" och "out-of-process" hosting producerar anpassade felsidor när de misslyckas med att starta appen.
Om ASP.NET Core-modulen inte hittar hanteraren för antingen in-process eller out-of-process-begäran visas en statuskodssida för 500.0 – In-process/Out-of-process hanterarens inläsningsfel.
För in-process-hosting, om ASP.NET Core-modulen misslyckas med att starta appen visas en 500.30 - Startfel-statuskodssida.
Om ASP.NET Core-modulen inte kan starta serverdelsprocessen eller om serverdelsprocessen startar men inte lyssnar på den konfigurerade porten visas en statussida med koden 502.5 – Processfel.
Använd attributet om du vill ignorera den här sidan och återgå till standardsidan disableStartUpErrorPage för IIS 5xx-statuskod. Mer information om hur du konfigurerar anpassade felmeddelanden finns i HTTP-fel <httpErrors>.
Skapa och omdirigera loggar
ASP.NET Core Module omdirigerar konsolutdata för stdout och stderr till disk om attributen stdoutLogEnabled och stdoutLogFile för elementet aspNetCore är inställda. Alla mappar i stdoutLogFile sökvägen skapas av modulen när loggfilen skapas. Apppoolen måste ha skrivåtkomst till den plats där loggarna skrivs (används IIS AppPool\<app_pool_name> för att ge skrivbehörighet).
Loggar roteras inte, såvida inte processåterställningen/omstarten sker. Det är hosters ansvar att begränsa det diskutrymme som loggarna förbrukar.
Användning av stdout-loggen rekommenderas endast för felsökning av startproblem för appar när du är värd för IIS eller när du använder stöd för utvecklingstid för IIS med Visual Studio, inte när du felsöker lokalt och kör appen med IIS Express.
Använd inte stdout-loggen för allmänna apploggningsändamål. För rutinmässig loggning i en ASP.NET Core-app använder du ett loggningsbibliotek som begränsar loggfilens storlek och roterar loggar. För mer information, se loggtjänstleverantörer från tredje part.
En tidsstämpel och filnamnstillägg läggs till automatiskt när loggfilen skapas. Loggfilens namn består av att tidsstämpeln, process-ID och filnamnstillägget (.log) läggs till i det sista segmentet av stdoutLogFile sökvägen (vanligtvis stdout) avgränsat med understreck.
stdoutLogFile Om sökvägen slutar med stdouthar en logg för en app med en PID på 1934 som skapades den 2/5/2018 kl. 19:42:32 filnamnet stdout_20180205194132_1934.log.
Om stdoutLogEnabled är falskt registreras fel som inträffar vid appstart och skickas till händelseloggen upp till 30 kB. Efter start ignoreras alla ytterligare loggar.
Följande exempelelement aspNetCore konfigurerar stdout-loggning på den relativa sökvägen .\log\. Bekräfta att AppPool-användaridentiteten har behörighet att skriva till den angivna sökvägen.
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="true"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess">
</aspNetCore>
När du publicerar en app för distribution via Azure App Service, sätter Web SDK värdet till stdoutLogFile. Miljövariabeln %home är fördefinierad för appar som hanteras av Azure App Service.
Information om hur du skapar regler för loggningsfilter finns i avsnittet Tillämpa loggfilterregler i kodavsnittet i dokumentationen om ASP.NET Core-loggning.
Mer information om sökvägsformat finns i Filsökvägsformat i Windows-system.
Förbättrade diagnostikloggar
ASP.NET Core-modulen kan konfigureras för att tillhandahålla förbättrade diagnostikloggar. Lägg till elementet <handlerSettings> i elementet <aspNetCore> i web.config. Genom att ställa in debugLevel till TRACE exponeras en högre noggrannhet av diagnostikinformation.
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile="\\?\%home%\LogFiles\stdout"
hostingModel="inprocess">
<handlerSettings>
<handlerSetting name="debugFile" value=".\logs\aspnetcore-debug.log" />
<handlerSetting name="debugLevel" value="FILE,TRACE" />
</handlerSettings>
</aspNetCore>
Alla mappar i sökvägen (logs i föregående exempel) skapas av modulen när loggfilen skapas. Apppoolen måste ha skrivbehörighet till den plats där loggarna skrivs (använd IIS AppPool\{APP POOL NAME}, där platshållaren {APP POOL NAME} är namnet på apppoolen, för att ge skrivbehörighet).
Felsökningsnivåvärden (debugLevel) kan innehålla både nivån och platsen.
Nivåer (i ordning från minst till mest utförlig):
- FEL
- VARNING
- INFORMATION
- SPÅRA
Platser (flera platser tillåts):
- Konsol
- EVENTLOG
- FILE
Hanterarens inställningar kan också anges via miljövariabler:
-
ASPNETCORE_MODULE_DEBUG_FILE: Sökväg till felsökningsloggfilen. (Standard:aspnetcore-debug.log) -
ASPNETCORE_MODULE_DEBUG: Inställning för felsökningsnivå.
Varning
Låt inte felsökningsloggningen vara aktiverad i distributionen längre än vad som krävs för att felsöka ett problem. Loggens storlek är inte begränsad. Om felsökningsloggen är aktiverad kan det leda till att det tillgängliga diskutrymmet tar slut och att servern eller apptjänsten kraschar.
Se Konfiguration med web.config för ett exempel på elementet aspNetCoreweb.config i filen.
Ändra stackstorleken
Gäller endast när du använder den processbaserade värdmodellen.
Konfigurera den hanterade stackstorleken i byte med stackSize-inställningen i web.config. Standardstorleken är 1 048 576 byte (1 MB).
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile="\\?\%home%\LogFiles\stdout"
hostingModel="inprocess">
<handlerSettings>
<handlerSetting name="stackSize" value="2097152" />
</handlerSettings>
</aspNetCore>
Proxykonfiguration använder HTTP-protokoll och en parkopplingstoken
Gäller endast för out-of-process hosting.
Proxyn som skapas mellan ASP.NET Core-modulen och Kestrel använder HTTP-protokollet. Det finns ingen risk för att avlyssning av trafiken mellan modulen och Kestrel från en plats utanför servern.
En parkopplingstoken används för att garantera att de begäranden som tas emot av Kestrel har dirigerats genom IIS och inte kommer från någon annan källa. Parkopplingstoken skapas och anges till en miljövariabel (ASPNETCORE_TOKEN) av modulen. Parkopplingstoken anges också i en rubrik (MS-ASPNETCORE-TOKEN) för varje proxied-begäran. IIS Middleware kontrollerar varje begäran som den tar emot för att bekräfta att värdet för parkopplingstoken matchar miljövariabelvärdet. Om tokenvärdena är matchningsfel loggas och avvisas begäran. Miljövariabeln för parkopplingstoken och trafiken mellan modulen och Kestrel är inte tillgängliga från en plats utanför servern. Utan att känna till värdet för parkopplingstoken kan en cyberattacker inte skicka begäranden som kringgår kontrollen i IIS Middleware.
ASP.NET Core-modul med en delad IIS-konfiguration
Installationsprogrammet för ASP.NET Core Module körs med behörigheterna för TrustedInstaller-kontot . Eftersom det lokala systemkontot inte har ändringsbehörighet för resurssökvägen som används av den delade IIS-konfigurationen genererar installationsprogrammet ett felmeddelande om nekad åtkomst när modulinställningarna i applicationHost.config filen på resursen konfigureras.
När du använder en delad IIS-konfiguration på samma dator som IIS-installationen kör du installationsprogrammet ASP.NET Core Hosting Bundle med parametern OPT_NO_SHARED_CONFIG_CHECK inställd på 1:
dotnet-hosting-{VERSION}.exe OPT_NO_SHARED_CONFIG_CHECK=1
Följ dessa steg när sökvägen till den delade konfigurationen inte finns på samma dator som IIS-installationen:
- Inaktivera den delade IIS-konfigurationen.
- Kör installationsprogrammet.
- Exportera den uppdaterade
applicationHost.configfilen till den delade mappen. - Återaktivera den delade IIS-konfigurationen.
Installationsloggar för modulversion och värdpaket
Så här avgör du vilken version av den installerade ASP.NET Core-modulen:
- I värdsystemet navigerar du till
%windir%\System32\inetsrv. -
aspnetcore.dllLeta upp filen. - Högerklicka på filen och välj Egenskaper på snabbmenyn.
- Välj fliken Information . Filversionen och produktversionen representerar den installerade versionen av modulen.
Installationsloggarna för Hosting Bundle för modulen finns på C:\Users\%UserName%\AppData\Local\Temp. Filen heter dd_DotNetCoreWinSvrHosting__{TIMESTAMP}_000_AspNetCoreModule_x64.log.
Plats för modul-, schema- och konfigurationsfiler
Modul
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 (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
Konfiguration
IIS (IIS)
%windir%\System32\inetsrv\config\applicationHost.config
IIS Express
Visual Studio:
{APPLICATION ROOT}\.vs\config\applicationHost.configiisexpress.exe CLI:
%USERPROFILE%\Documents\IISExpress\config\applicationhost.config
Filerna kan hittas genom att söka efter aspnetcore i applicationHost.config filen.
ASP.NET Core Module (ANCM) är en intern IIS-modul som ansluts till IIS-pipelinen till antingen:
- Kör en ASP.NET Core-app i IIS-arbetsprocessen (
w3wp.exe), som kallas in-process hostingmodellen. - Vidarebefordra webbbegäranden till en backend ASP.NET Core-applikation som kör Kestrel servern, kallad värdmodellen för körning utanför processen.
Windows-versioner som stöds:
- Windows 7 eller senare
- Windows Server 2008 R2 eller senare
När du är värd för en process använder modulen en processbaserad serverimplementering för IIS, kallad IIS HTTP Server (IISHttpServer).
När du är värd för out-of-process fungerar modulen bara med Kestrel. Modulen fungerar inte med HTTP.sys.
Servervärdmodeller
In-process-värdmodell
Om du vill konfigurera en app för in-process hosting lägger du till <AspNetCoreHostingModel> egenskapen i appens projektfil med värdet InProcess (out-of-process hosting anges med OutOfProcess):
<PropertyGroup>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
Den processbaserade värdmodellen stöds inte för ASP.NET Core-appar som riktar sig mot .NET Framework.
Värdet <AspNetCoreHostingModel> för är skiftlägesokänsligt, så inprocess och outofprocess är giltiga värden.
Om egenskapen <AspNetCoreHostingModel> inte finns i filen är OutOfProcessstandardvärdet .
Följande egenskaper gäller när du är värd för en process:
IIS HTTP Server (
IISHttpServer) används i stället för Kestrel server. För processen, anrop till CreateDefaultBuilder sker via UseIIS för att:- Registrera
IISHttpServer. - Konfigurera porten och basvägen som servern ska lyssna på när den ska använda ASP.NET Core-modulen.
- Konfigurera värden för att fånga in startfel.
- Registrera
Attributet requestTimeout gäller inte för pågående värdtjänster.
Det går inte att dela en apppool mellan appar. Använd en apppool per app.
När du använder Webbdistribution eller placerar en app_offline.htm fil manuellt i distributionen kanske appen inte stängs av omedelbart om det finns en öppen anslutning. En websocket-anslutning kan till exempel fördröja att appen stängs av.
Arkitekturen (bitness) för appen och installerad runtime (x64 eller x86) måste matcha arkitekturen för apppoolen.
Klientfrånkopplingar identifieras. Annulleringstoken HttpContext.RequestAborted avbryts när klienten kopplas från.
I ASP.NET Core 2.2.1 eller tidigare GetCurrentDirectory returnerar arbetskatalogen för den process som startades av IIS i stället för appens katalog (till exempel C:\Windows\System32\inetsrv för w3wp.exe).
Exempelkod som anger appens aktuella katalog finns i klassen CurrentDirectoryHelpers. Anropa
SetCurrentDirectorymetoden. Efterföljande anrop till GetCurrentDirectory ger appens katalog.När du är värd för en process AuthenticateAsync anropas inte internt för att initiera en användare. Därför aktiveras inte en IClaimsTransformation implementering som används för att omvandla anspråk efter varje autentisering som standard. När du omvandlar anspråk med en IClaimsTransformation implementering anropar du AddAuthentication för att lägga till autentiseringstjänster:
public void ConfigureServices(IServiceCollection services) { services.AddTransient<IClaimsTransformation, ClaimsTransformer>(); services.AddAuthentication(IISServerDefaults.AuthenticationScheme); } public void Configure(IApplicationBuilder app) { app.UseAuthentication(); }
Out-of-process-värdmodell
För att konfigurera en app för värdskap utanför processen, använd någon av följande metoder i projektfilen:
- Ange inte egenskapen
<AspNetCoreHostingModel>. Om egenskapen<AspNetCoreHostingModel>inte finns i filen ärOutOfProcessstandardvärdet . - Ange värdet för
<AspNetCoreHostingModel>egenskapen tillOutOfProcess(in-process hosting anges medInProcess):
<PropertyGroup>
<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>
Värdet är skiftlägesokänsligt, så inprocess och outofprocess är giltiga värden.
Kestrel används i stället för IIS HTTP Server (IISHttpServer).
För out-of-process anropar UseIISIntegration till:
- Konfigurera porten och basvägen som servern ska lyssna på när den ska använda ASP.NET Core-modulen.
- Konfigurera värden för att fånga in startfel.
Ändringar i värdmodell
Om inställningen hostingModel ändras i web.config -filen (förklaras i avsnittet Konfiguration med web.config ) återanvänder modulen arbetsprocessen för IIS.
För IIS Express återanvänder modulen inte arbetsprocessen utan utlöser i stället en graciös avstängning av den aktuella IIS Express-processen. Nästa begäran till appen skapar en ny IIS Express-process.
Processnamn
Process.GetCurrentProcess().ProcessName rapporterar w3wp/iisexpress (pågående) eller dotnet (utanför process).
Många inbyggda moduler, till exempel Windows-autentisering, förblir aktiva. Mer information om IIS-moduler som är aktiva med ASP.NET Core-modulen finns i IIS-moduler med ASP.NET Core.
ASP.NET Core-modulen kan också:
- Ange miljövariabler för arbetsprocessen.
- Logga stdout-data till filhistorik för felsökning av uppstartsproblem.
- Vidarebefordra Windows-autentiseringstoken.
Installera och använda ASP.NET Core Module (ANCM)
Anvisningar om hur du installerar ASP.NET Core-modulen finns i Installera .NET Core Hosting Bundle. ASP.NET Core-modulen är framåt och bakåtkompatibel med versioner av .NET som stöds.
Störande ändringar och säkerhetsrekommendationer rapporteras i meddelandeförvaret. Meddelanden kan begränsas till en viss version genom att välja ett etikettfilter .
Konfiguration med web.config
ASP.NET Core-modulen konfigureras med aspNetCore avsnittet i system.webServer noden i webbplatsens web.config-fil .
Följande web.config-fil publiceras för en ramverksberoende distribution och konfigurerar ASP.NET Core-modulen för att hantera platsbegäranden:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>
Följande web.config publiceras för en fristående distribution:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\MyApp.exe"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>
Egenskapen InheritInChildApplications är inställd på för false att indikera att de inställningar som anges i <platselementet> inte ärvs av appar som finns i en underkatalog i appen.
När en app distribueras till Azure App ServicestdoutLogFile är sökvägen inställd på \\?\%home%\LogFiles\stdout. Sökvägen sparar stdout-loggar till mappen LogFiles , som är en plats som skapas automatiskt av tjänsten.
Information om konfiguration av IIS-underprogram finns i Host ASP.NET Core on Windows with IIS (Värd ASP.NET Core i Windows med IIS).
Attribut för aspNetCore-elementet
| Attribute | Description | Förinställning |
|---|---|---|
arguments |
Valfritt strängattribut. Argument till den körbara fil som anges i |
|
disableStartUpErrorPage |
Valfritt booleskt attribut. Om det är sant ignoreras sidan 502.5 – Processfel och sidan 502-statuskod som konfigurerats i web.config har företräde. |
false |
forwardWindowsAuthToken |
Valfritt booleskt attribut. Om det är sant vidarebefordras token till den underordnade processen som lyssnar på %ASPNETCORE_PORT% som en header "MS-ASPNETCORE-WINAUTHTOKEN" för varje begäran. Det är den processens ansvar att anropa CloseHandle på den här tokenen för varje begäran. |
true |
hostingModel |
Valfritt strängattribut. Anger värdmodellen som processbaserad ( |
OutOfProcessoutofprocess |
processesPerApplication |
Valfritt heltalsattribut. Anger antalet instanser av processen som anges i inställningen †För in-process hosting är värdet begränsat till Inställningen |
Förval: 1Min: 1Max: 100† |
processPath |
Obligatoriskt strängattribut. Sökväg till den körbara fil som startar en process som lyssnar efter HTTP-begäranden. Relativa sökvägar stöds. Om sökvägen börjar med |
|
rapidFailsPerMinute |
Valfritt heltalsattribut. Anger hur många gånger processen som anges i Stöds inte med pågående värdtjänster. |
Förval: 10Min: 0Max: 100 |
requestTimeout |
Valfritt tidsintervallattribut. Anger hur länge ASP.NET Core-modulen väntar på ett svar från processen som lyssnar på %ASPNETCORE_PORT%. I versioner av ASP.NET Core-modulen som levererades med versionen av ASP.NET Core 2.1 eller senare anges den Gäller inte för pågående värdtjänster. För pågående värdtjänster väntar modulen på att appen ska bearbeta begäran. Giltiga värden för minuter och sekunder i strängen ligger i intervallet 0–59. Användning av 60 i värdet för minuter eller sekunder resulterar i ett 500 - internt serverfel. |
Förval: 00:02:00Min: 00:00:00Max: 360:00:00 |
shutdownTimeLimit |
Valfritt heltalsattribut. Varaktighet i sekunder som modulen väntar på att den körbara filen ska stängas av korrekt när |
Förval: 10Min: 0Max: 600 |
startupTimeLimit |
Valfritt heltalsattribut. Varaktighet i sekunder som modulen väntar på att den körbara filen ska starta en process som lyssnar på porten. Om den här tidsgränsen överskrids avlöser modulen processen. När du kör i processen: Processen startas inte om och använder inte När du är värd för out-of-process: Modulen försöker starta om processen när den tar emot en ny begäran och fortsätter att försöka starta om processen på efterföljande inkommande begäranden såvida inte appen misslyckas med att starta Värdet 0 (noll) anses inte vara en oändlig timeout. |
Förval: 120Min: 0Max: 3600 |
stdoutLogEnabled |
Valfritt booleskt attribut. Om det är sant omdirigeras stdout och stderr för den process som anges i |
false |
stdoutLogFile |
Valfritt strängattribut. Specificerar den relativa eller absoluta filsökvägen för vilka |
aspnetcore-stdout |
Ange miljövariabler
Miljövariabler kan anges för processen i attributet processPath . Ange en miljövariabel med det <environmentVariable> underordnade elementet i ett <environmentVariables> samlingselement. Miljövariabler som anges i det här avsnittet har företräde framför systemmiljövariabler.
I följande exempel anges två miljövariabler.
ASPNETCORE_ENVIRONMENT konfigurerar appens miljö till Development. En utvecklare kan tillfälligt ange det här värdet i web.config filen för att tvinga undantagssidan för utvecklare att läsas in när ett appfelfel felsöks.
CONFIG_DIR är ett exempel på en användardefinierad miljövariabel, där utvecklaren har skrivit kod som läser värdet vid start för att skapa en sökväg för att läsa in appens konfigurationsfil.
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
<environmentVariable name="CONFIG_DIR" value="f:\application_config" />
</environmentVariables>
</aspNetCore>
Anmärkning
Ett alternativ till att ange miljön direkt i web.config är att inkludera <EnvironmentName> egenskapen i publiceringsprofilen (.pubxml) eller projektfilen. Den här metoden anger miljön i web.config när projektet publiceras:
<PropertyGroup>
<EnvironmentName>Development</EnvironmentName>
</PropertyGroup>
Varning
Ange ASPNETCORE_ENVIRONMENT endast miljövariabeln till Development på mellanlagrings- och testservrar som inte är tillgängliga för ej betrodda nätverk, till exempel Internet.
app_offline.htm
Om en fil med namnet app_offline.htm identifieras i rotkatalogen för en app försöker ASP.NET Core-modulen att stänga av appen på ett korrekt sätt och sluta bearbeta inkommande begäranden. Om appen fortfarande körs efter det antal sekunder som definierats i shutdownTimeLimit, tar ASP.NET Core Module bort den process som körs.
app_offline.htm När filen finns svarar ASP.NET Core-modulen på begäranden genom att skicka tillbaka innehållet i app_offline.htm filen.
app_offline.htm När filen tas bort startar nästa begäran appen.
När man använder en värdmodell utanför processen kanske appen inte stängs av direkt om det finns en öppen anslutning. En websocket-anslutning kan till exempel fördröja att appen stängs av.
Startfelsida
Både "in-process" och "out-of-process" hosting producerar anpassade felsidor när de misslyckas med att starta appen.
Om ASP.NET Core-modulen inte hittar hanteraren för antingen in-process eller out-of-process-begäran visas en statuskodssida för 500.0 – In-process/Out-of-process hanterarens inläsningsfel.
För in-process-hosting, om ASP.NET Core-modulen misslyckas med att starta appen visas en 500.30 - Startfel-statuskodssida.
Om ASP.NET Core-modulen inte kan starta serverdelsprocessen eller om serverdelsprocessen startar men inte lyssnar på den konfigurerade porten visas en statussida med koden 502.5 – Processfel.
Använd attributet om du vill ignorera den här sidan och återgå till standardsidan disableStartUpErrorPage för IIS 5xx-statuskod. Mer information om hur du konfigurerar anpassade felmeddelanden finns i HTTP-fel <httpErrors>.
Skapa och omdirigera loggar
ASP.NET Core Module omdirigerar konsolutdata för stdout och stderr till disk om attributen stdoutLogEnabled och stdoutLogFile för elementet aspNetCore är inställda. Alla mappar i stdoutLogFile sökvägen skapas av modulen när loggfilen skapas. Apppoolen måste ha skrivåtkomst till den plats där loggarna skrivs (används IIS AppPool\{APP POOL NAME} för att ge skrivbehörighet, där platshållaren {APP POOL NAME} är namnet på apppoolen).
Loggar roteras inte, såvida inte processåterställningen/omstarten sker. Det är hosters ansvar att begränsa det diskutrymme som loggarna förbrukar.
Användning av stdout-loggen rekommenderas endast för felsökning av startproblem för appar när du är värd för IIS eller när du använder stöd för utvecklingstid för IIS med Visual Studio, inte när du felsöker lokalt och kör appen med IIS Express.
Använd inte stdout-loggen för allmänna apploggningsändamål. För rutinmässig loggning i en ASP.NET Core-app använder du ett loggningsbibliotek som begränsar loggfilens storlek och roterar loggar. För mer information, se loggtjänstleverantörer från tredje part.
En tidsstämpel och filnamnstillägg läggs till automatiskt när loggfilen skapas. Loggfilens namn består av att tidsstämpeln, process-ID och filnamnstillägget (.log) läggs till i det sista segmentet av stdoutLogFile sökvägen (vanligtvis stdout) avgränsat med understreck.
stdoutLogFile Om sökvägen slutar med stdouthar en logg för en app med en PID på 1934 som skapades den 2/5/2018 kl. 19:42:32 filnamnet stdout_20180205194132_1934.log.
Om stdoutLogEnabled är falskt registreras fel som inträffar vid appstart och skickas till händelseloggen upp till 30 kB. Efter start ignoreras alla ytterligare loggar.
Följande exempelelement aspNetCore konfigurerar stdout-loggning på den relativa sökvägen .\log\. Bekräfta att apppoolens användaridentitet har behörighet att skriva till sökvägen.
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="true"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess">
</aspNetCore>
När du publicerar en app för distribution via Azure App Service, sätter Web SDK värdet till stdoutLogFile. Miljövariabeln %home är fördefinierad för appar som hanteras av Azure App Service.
Mer information om sökvägsformat finns i Filsökvägsformat i Windows-system.
Förbättrade diagnostikloggar
ASP.NET Core-modulen kan konfigureras för att tillhandahålla förbättrade diagnostikloggar. Lägg till elementet <handlerSettings> i elementet <aspNetCore> i web.config. Genom att ställa in debugLevel till TRACE exponeras en högre noggrannhet av diagnostikinformation.
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile="\\?\%home%\LogFiles\stdout"
hostingModel="inprocess">
<handlerSettings>
<handlerSetting name="debugFile" value=".\logs\aspnetcore-debug.log" />
<handlerSetting name="debugLevel" value="FILE,TRACE" />
</handlerSettings>
</aspNetCore>
Mappar i sökvägen till <handlerSetting> värdet (logs i föregående exempel) skapas inte automatiskt av modulen och bör redan finnas i systemet innan de distribueras. Apppoolen måste ha skrivåtkomst till den plats där loggarna skrivs (används IIS AppPool\{APP POOL NAME} för att ge skrivbehörighet, där platshållaren {APP POOL NAME} är namnet på apppoolen).
Felsökningsnivåvärden (debugLevel) kan innehålla både nivån och platsen.
Nivåer (i ordning från minst till mest utförlig):
- FEL
- VARNING
- INFORMATION
- SPÅRA
Platser (flera platser tillåts):
- Konsol
- EVENTLOG
- FILE
Hanterarens inställningar kan också anges via miljövariabler:
-
ASPNETCORE_MODULE_DEBUG_FILE: Sökväg till felsökningsloggfilen. (Standard:aspnetcore-debug.log) -
ASPNETCORE_MODULE_DEBUG: Inställning för felsökningsnivå.
Varning
Låt inte felsökningsloggningen vara aktiverad i distributionen längre än vad som krävs för att felsöka ett problem. Loggens storlek är inte begränsad. Om felsökningsloggen är aktiverad kan det leda till att det tillgängliga diskutrymmet tar slut och att servern eller apptjänsten kraschar.
Se Konfiguration med web.config för ett exempel på elementet aspNetCoreweb.config i filen.
Proxykonfiguration använder HTTP-protokoll och en parkopplingstoken
Gäller endast för out-of-process hosting.
Proxyn som skapas mellan ASP.NET Core-modulen och Kestrel använder HTTP-protokollet. Det finns ingen risk för att avlyssning av trafiken mellan modulen och Kestrel från en plats utanför servern.
En parkopplingstoken används för att garantera att de begäranden som tas emot av Kestrel har dirigerats genom IIS och inte kommer från någon annan källa. Parkopplingstoken skapas och anges till en miljövariabel (ASPNETCORE_TOKEN) av modulen. Parkopplingstoken anges också i en rubrik (MS-ASPNETCORE-TOKEN) för varje proxied-begäran. IIS Middleware kontrollerar varje begäran som den tar emot för att bekräfta att värdet för parkopplingstoken matchar miljövariabelvärdet. Om tokenvärdena är matchningsfel loggas och avvisas begäran. Miljövariabeln för parkopplingstoken och trafiken mellan modulen och Kestrel är inte tillgängliga från en plats utanför servern. Utan att känna till värdet för parkopplingstoken kan en cyberattacker inte skicka begäranden som kringgår kontrollen i IIS Middleware.
ASP.NET Core-modul med en delad IIS-konfiguration
Installationsprogrammet för ASP.NET Core Module körs med kontots behörigheter TrustedInstaller . Eftersom det lokala systemkontot inte har ändringsbehörighet för resurssökvägen som används av den delade IIS-konfigurationen genererar installationsprogrammet ett felmeddelande om nekad åtkomst när modulinställningarna i applicationHost.config filen på resursen konfigureras.
När du använder en delad IIS-konfiguration på samma dator som IIS-installationen kör du installationsprogrammet ASP.NET Core Hosting Bundle med parametern OPT_NO_SHARED_CONFIG_CHECK inställd på 1:
dotnet-hosting-{VERSION}.exe OPT_NO_SHARED_CONFIG_CHECK=1
Följ dessa steg när sökvägen till den delade konfigurationen inte finns på samma dator som IIS-installationen:
- Inaktivera den delade IIS-konfigurationen.
- Kör installationsprogrammet.
- Exportera den uppdaterade
applicationHost.configfilen till den delade mappen. - Återaktivera den delade IIS-konfigurationen.
Installationsloggar för modulversion och värdpaket
Så här avgör du vilken version av den installerade ASP.NET Core-modulen:
- I värdsystemet navigerar du till
%windir%\System32\inetsrv. -
aspnetcore.dllLeta upp filen. - Högerklicka på filen och välj Egenskaper på snabbmenyn.
- Välj fliken Information . Filversionen och produktversionen representerar den installerade versionen av modulen.
Installationsloggarna för Hosting Bundle för modulen finns på C:\\Users\\%UserName%\\AppData\\Local\\Temp. Filen heter dd_DotNetCoreWinSvrHosting__\{TIMESTAMP}_000_AspNetCoreModule_x64.log, där platshållaren {TIMESTAMP} är tidsstämpeln.
Plats för modul-, schema- och konfigurationsfiler
Modul
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 (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
Konfiguration
IIS (IIS)
%windir%\System32\inetsrv\config\applicationHost.config
IIS Express
Visual Studio:
{APPLICATION ROOT}\.vs\config\applicationHost.configiisexpress.exe CLI:
%USERPROFILE%\Documents\IISExpress\config\applicationhost.config
Filerna kan hittas genom att söka efter aspnetcore i applicationHost.config filen.
ASP.NET Core Module (ANCM) är en intern IIS-modul som ansluts till IIS-pipelinen för att vidarebefordra webbbegäranden till serverdelen ASP.NET Core-appar.
Windows-versioner som stöds:
- Windows 7 eller senare
- Windows Server 2008 R2 eller senare
Modulen fungerar bara med Kestrel. Modulen är inte kompatibel med HTTP.sys.
Eftersom ASP.NET Core-appar körs i en process som är separat från IIS-arbetsprocessen hanterar modulen även processhantering. Modulen startar processen för ASP.NET Core-appen när den första begäran kommer och startar om appen om den kraschar. Detta är i stort sett samma beteende som med ASP.NET 4.x-appar som körs i processen i IIS som hanteras av Windows Process Activation Service (WAS).
Följande diagram illustrerar relationen mellan IIS, ASP.NET Core Module och en app:
Begäranden skickas från webben till drivrutinen för kernelläge HTTP.sys. Drivrutinen dirigerar begäranden till IIS på webbplatsens konfigurerade port, vanligtvis 80 (HTTP) eller 443 (HTTPS). Modulen vidarebefordrar begäranden till Kestrel på en slumpmässig port för appen, som inte är port 80 eller 443.
Modulen anger porten via en miljövariabel vid start och IIS Integration Middleware konfigurerar servern att lyssna på http://localhost:{port}. Ytterligare kontroller utförs och begäranden som inte kommer från modulen avvisas. Modulen stöder inte HTTPS-vidarebefordring, så begäranden vidarebefordras via HTTP även om de tas emot av IIS via HTTPS.
Efter att Kestrel har hämtat begäran från modulen skickas begäran till ASP.NET Core-mellanlager pipeline. Pipelinen för mellanprogram hanterar begäran och skickar den som en HttpContext instans till appens logik. Mellanprogram som läggs till av IIS-integrering uppdaterar schemat, fjärr-IP och pathbase för att ta hänsyn till vidarebefordran av begäran till Kestrel. Appens svar skickas tillbaka till IIS, vilket skickar tillbaka det till HTTP-klienten som initierade begäran.
Många inbyggda moduler, till exempel Windows-autentisering, förblir aktiva. Mer information om IIS-moduler som är aktiva med ASP.NET Core-modulen finns i IIS-moduler med ASP.NET Core.
ASP.NET Core-modulen kan också:
- Ange miljövariabler för arbetsprocessen.
- Logga stdout-data till filhistorik för felsökning av uppstartsproblem.
- Vidarebefordra Windows-autentiseringstoken.
Installera och använda ASP.NET Core Module (ANCM)
Anvisningar om hur du installerar ASP.NET Core-modulen finns i Installera .NET Core Hosting Bundle.
Konfiguration med web.config
ASP.NET Core-modulen konfigureras med aspNetCore avsnittet i system.webServer noden i webbplatsens web.config-fil .
Följande web.config-fil publiceras för en ramverksberoende distribution och konfigurerar ASP.NET Core-modulen för att hantera platsbegäranden:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
Följande web.config publiceras för en fristående distribution:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\MyApp.exe"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
När en app distribueras till Azure App ServicestdoutLogFile är sökvägen inställd på \\?\%home%\LogFiles\stdout. Sökvägen sparar stdout-loggar till mappen LogFiles , som är en plats som skapas automatiskt av tjänsten.
Information om konfiguration av IIS-underprogram finns i Host ASP.NET Core on Windows with IIS (Värd ASP.NET Core i Windows med IIS).
Attribut för aspNetCore-elementet
| Attribute | Description | Förinställning |
|---|---|---|
arguments |
Valfritt strängattribut. Argument till den körbara fil som anges i processPath. |
|
disableStartUpErrorPage |
Valfritt booleskt attribut. Om det är sant ignoreras sidan 502.5 – Processfel och sidan 502-statuskod som konfigurerats i web.config har företräde. |
false |
forwardWindowsAuthToken |
Valfritt booleskt attribut. Om det är sant vidarebefordras token till den underordnade processen som lyssnar på %ASPNETCORE_PORT% som en header "MS-ASPNETCORE-WINAUTHTOKEN" för varje begäran. Det är den processens ansvar att anropa CloseHandle på den här tokenen för varje begäran. |
true |
processesPerApplication |
Valfritt heltalsattribut. Anger antalet instanser av processen som anges i inställningen processPath som kan spunnas upp per app. Inställningen |
Förval: 1Min: 1Max: 100 |
processPath |
Obligatoriskt strängattribut. Sökväg till den körbara fil som startar en process som lyssnar efter HTTP-begäranden. Relativa sökvägar stöds. Om sökvägen börjar med |
|
rapidFailsPerMinute |
Valfritt heltalsattribut. Anger hur många gånger processen som anges i processPath tillåts krascha per minut. Om den här gränsen överskrids slutar modulen att starta processen under resten av minuten. |
Förval: 10Min: 0Max: 100 |
requestTimeout |
Valfritt tidsintervallattribut. Anger hur länge ASP.NET Core-modulen väntar på ett svar från processen som lyssnar på %ASPNETCORE_PORT%. I versioner av ASP.NET Core-modulen som levererades med versionen av ASP.NET Core 2.1 eller senare anges den |
Förval: 00:02:00Min: 00:00:00Max: 360:00:00 |
shutdownTimeLimit |
Valfritt heltalsattribut. Varaktighet i sekunder som modulen väntar på att den körbara filen ska stängas av korrekt när |
Förval: 10Min: 0Max: 600 |
startupTimeLimit |
Valfritt heltalsattribut. Varaktighet i sekunder som modulen väntar på att den körbara filen ska starta en process som lyssnar på porten. Om den här tidsgränsen överskrids avlöser modulen processen. Modulen försöker starta om processen när den tar emot en ny begäran och fortsätter att försöka starta om processen vid efterföljande inkommande begäranden såvida inte appen inte startar rapidFailsPerMinute antal gånger under den senaste rullande minuten. Värdet 0 (noll) anses inte vara en oändlig timeout. |
Förval: 120Min: 0Max: 3600 |
stdoutLogEnabled |
Valfritt booleskt attribut. Om sant omdirigeras stdout och stderr för den process som anges i processPath till filen som anges i stdoutLogFile. |
false |
stdoutLogFile |
Valfritt strängattribut. Anger den relativa eller absoluta filsökvägen för vilken stdout och stderr från den process som anges i processPath loggas. Relativa sökvägar är relativa till webbplatsens rot. Alla sökvägar som börjar med |
aspnetcore-stdout |
Ange miljövariabler
Miljövariabler kan anges för processen i attributet processPath . Ange en miljövariabel med det <environmentVariable> underordnade elementet i ett <environmentVariables> samlingselement.
Varning
Miljövariabler som anges i det här avsnittet är i konflikt med systemmiljövariabler som angetts med samma namn. Om en miljövariabel anges i både web.config-filen och på systemnivå i Windows läggs värdet från web.config-filen till i variabelvärdet för systemmiljön (till exempel ASPNETCORE_ENVIRONMENT: Development;Development), vilket hindrar appen från att starta.
I följande exempel anges två miljövariabler.
ASPNETCORE_ENVIRONMENT konfigurerar appens miljö till Development. En utvecklare kan tillfälligt ange det här värdet i web.config-filen för att tvinga undantagssidan för utvecklare att läsas in när ett appfelfel felsöks.
CONFIG_DIR är ett exempel på en användardefinierad miljövariabel, där utvecklaren har skrivit kod som läser värdet vid start för att skapa en sökväg för att läsa in appens konfigurationsfil.
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile="\\?\%home%\LogFiles\stdout">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
<environmentVariable name="CONFIG_DIR" value="f:\application_config" />
</environmentVariables>
</aspNetCore>
Varning
Ange ASPNETCORE_ENVIRONMENT endast miljövariabeln till Development på mellanlagrings- och testservrar som inte är tillgängliga för ej betrodda nätverk, till exempel Internet.
app_offline.htm
Om en fil med namnet app_offline.htm identifieras i rotkatalogen för en app försöker ASP.NET Core-modulen att stänga av appen på ett korrekt sätt och sluta bearbeta inkommande begäranden. Om appen fortfarande körs efter det antal sekunder som definierats i shutdownTimeLimit, tar ASP.NET Core Module bort den process som körs.
app_offline.htm När filen finns svarar ASP.NET Core-modulen på begäranden genom att skicka tillbaka innehållet i app_offline.htm filen.
app_offline.htm När filen tas bort startar nästa begäran appen.
Startfelsida
Om ASP.NET Core-modulen inte startar serverdelsprocessen eller om serverdelsprocessen startar men inte lyssnar på den konfigurerade porten visas en kodsida för 502.5 – Statuskod för processfel . Om du vill ignorera den här sidan och återgå till standardsidan för IIS 502-statuskod använder du disableStartUpErrorPage attributet. Mer information om hur du konfigurerar anpassade felmeddelanden finns i HTTP-fel <httpErrors>.
Skapa och omdirigera loggar
ASP.NET Core Module omdirigerar konsolutdata för stdout och stderr till disk om attributen stdoutLogEnabled och stdoutLogFile för elementet aspNetCore är inställda. Alla mappar i stdoutLogFile sökvägen skapas av modulen när loggfilen skapas. Apppoolen måste ha skrivåtkomst till den plats där loggarna skrivs (används IIS AppPool\<app_pool_name> för att ge skrivbehörighet).
Loggar roteras inte, såvida inte processåterställningen/omstarten sker. Det är hosters ansvar att begränsa det diskutrymme som loggarna förbrukar.
Användning av stdout-loggen rekommenderas endast för felsökning av startproblem för appar när du är värd för IIS eller när du använder stöd för utvecklingstid för IIS med Visual Studio, inte när du felsöker lokalt och kör appen med IIS Express.
Använd inte stdout-loggen för allmänna apploggningsändamål. För rutinmässig loggning i en ASP.NET Core-app använder du ett loggningsbibliotek som begränsar loggfilens storlek och roterar loggar. För mer information, se loggtjänstleverantörer från tredje part.
En tidsstämpel och filnamnstillägg läggs till automatiskt när loggfilen skapas. Loggfilens namn skapas genom att tidsstämpeln, process-ID och filnamnstillägget (.log) läggs till i det sista segmentet av stdoutLogFile sökvägen (vanligtvis stdout) avgränsat med understreck.
stdoutLogFile Om sökvägen slutar med stdout har en logg för en app med en PID från 1934 som skapades den 2/5/2018 kl. 19:42:32 filnamnet stdout_20180205194132_1934.log.
Följande exempelelement aspNetCore konfigurerar stdout-loggning på den relativa sökvägen .\log\. Bekräfta att AppPool-användaridentiteten har behörighet att skriva till den angivna sökvägen.
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="true"
stdoutLogFile=".\logs\stdout">
</aspNetCore>
När du publicerar en app för distribution via Azure App Service, sätter Web SDK värdet till stdoutLogFile. Miljövariabeln %home är fördefinierad för appar som hanteras av Azure App Service.
Information om hur du skapar regler för loggningsfilter finns i avsnittet Tillämpa loggfilterregler i kodavsnittet i dokumentationen om ASP.NET Core-loggning.
Mer information om sökvägsformat finns i Filsökvägsformat i Windows-system.
Proxykonfiguration använder HTTP-protokoll och en parkopplingstoken
Proxyn som skapas mellan ASP.NET Core-modulen och Kestrel använder HTTP-protokollet. Det finns ingen risk för att avlyssning av trafiken mellan modulen och Kestrel från en plats utanför servern.
En parkopplingstoken används för att garantera att de begäranden som tas emot av Kestrel har dirigerats genom IIS och inte kommer från någon annan källa. Parkopplingstoken skapas och anges till en miljövariabel (ASPNETCORE_TOKEN) av modulen. Parkopplingstoken anges också i en rubrik (MS-ASPNETCORE-TOKEN) för varje proxied-begäran. IIS Middleware kontrollerar varje begäran som den tar emot för att bekräfta att värdet för parkopplingstoken matchar miljövariabelvärdet. Om tokenvärdena är matchningsfel loggas och avvisas begäran. Miljövariabeln för parkopplingstoken och trafiken mellan modulen och Kestrel är inte tillgängliga från en plats utanför servern. Utan att känna till värdet för parkopplingstoken kan en cyberattacker inte skicka begäranden som kringgår kontrollen i IIS Middleware.
ASP.NET Core-modul med en delad IIS-konfiguration
Installationsprogrammet för ASP.NET Core Module körs med behörigheterna för TrustedInstaller-kontot . Eftersom det lokala systemkontot inte har behörighet att ändra den resurssökväg som används av den delade IIS-konfigurationen genererar installationsprogrammet ett felmeddelande om nekad åtkomst när du försöker konfigurera modulinställningarna i denapplicationHost.config filen på resursen.
Följ dessa steg när du använder en delad IIS-konfiguration:
- Inaktivera den delade IIS-konfigurationen.
- Kör installationsprogrammet.
- Exportera den uppdaterade applicationHost.config filen till resursen.
- Återaktivera den delade IIS-konfigurationen.
Installationsloggar för modulversion och värdpaket
Så här avgör du vilken version av den installerade ASP.NET Core-modulen:
- I värdsystemet navigerar du till %windir%\System32\inetsrv.
- Hitta aspnetcore.dll-filen.
- Högerklicka på filen och välj Egenskaper på snabbmenyn.
- Välj fliken Information . Filversionen och produktversionen representerar den installerade versionen av modulen.
Installationsloggarna för värdpaket för modulen finns i C:\Users\%UserName%\AppData\Local\Temp. Filen heter dd_DotNetCoreWinSvrHosting__<timestamp>_000_AspNetCoreModule_x64.log.
Plats för modul-, schema- och konfigurationsfiler
Modul
IIS (x86/amd64):
%windir%\System32\inetsrv\aspnetcore.dll
%windir%\SysWOW64\inetsrv\aspnetcore.dll
IIS Express (x86/amd64):
%ProgramFiles%\IIS Express\aspnetcore.dll
%ProgramFiles(x86)%\IIS Express\aspnetcore.dll
Schema
IIS (IIS)
- %windir%\System32\inetsrv\config\schema\aspnetcore_schema.xml
IIS Express
- %ProgramFiles%\IIS Express\config\schema\aspnetcore_schema.xml
Konfiguration
IIS (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
Filerna kan hittas genom att söka efter aspnetcore i filenapplicationHost.config .
Ytterligare resurser
- Köra ASP.NET Core på Windows med IIS
- Distribuera ASP.NET Core-appar till Azure App Service
-
ASP.NET Core Module-referenskälla [standardgren (main)]: Använd listrutan Gren för att välja en specifik version (till exempel
release/3.1). - IIS-moduler med ASP.NET Core
ASP.NET Core