ASP.NET Core Module (ANCM) för IIS

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:

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.
  • 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.htm fil 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.RequestAborted avbryts 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\inetsrv för w3wp.exe).

    Exempelkod som anger appens aktuella katalog finns i CurrentDirectoryHelpers klassen . Anropa SetCurrentDirectory metoden. 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

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å %ASPNETCORE_PORT% som en header 'MS-ASPNETCORE-WINAUTHTOKEN' per förfrågan. 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 (InProcess/inprocess) eller out-of-process ().OutOfProcess/outofprocess

InProcess
inprocess
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 1.

Inställningen processesPerApplication rekommenderas inte. Det här attributet tas bort i en framtida version.

Förval: 1
Min: 1
Max: 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 .anses sökvägen vara relativ till platsroten.

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: 10
Min: 0
Max: 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 requestTimeout i timmar, minuter och sekunder.

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:00
Min: 00:00:00
Max: 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 app_offline.htm filen identifieras.

Förval: 10
Min: 0
Max: 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: 120
Min: 0
Max: 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 . är relativa till platsroten och alla andra sökvägar behandlas som absoluta sökvägar. Alla mappar som anges i sökvägen skapas av modulen när loggfilen skapas. Med understrecksavgränsare läggs en tidsstämpel, process-ID och filnamnstillägg (.log) till i det sista segmentet i sökvägen stdoutLogFile . Om .\logs\stdout anges som ett värde, sparas en exempellogg som stdout_20180205194132_1934.log i mappen logs, när den sparades den 2/5/2018 kl. 19:41:32 med process-ID:t 1934.

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:

  1. Inaktivera den delade IIS-konfigurationen.
  2. Kör installationsprogrammet.
  3. Exportera den uppdaterade applicationHost.config filen till den delade mappen.
  4. Å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:

  1. I värdsystemet navigerar du till %windir%\System32\inetsrv.
  2. aspnetcore.dll Leta upp filen.
  3. Högerklicka på filen och välj Egenskaper på snabbmenyn.
  4. 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.config

  • iisexpress.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.
  • 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 SetCurrentDirectory metoden. 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 är OutOfProcessstandardvärdet .
  • Ange värdet för <AspNetCoreHostingModel> egenskapen till OutOfProcess (in-process hosting anges med InProcess):
<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 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
hostingModel

Valfritt strängattribut.

Anger värdmodellen som processbaserad (InProcess/inprocess) eller out-of-process ().OutOfProcess/outofprocess

OutOfProcess
outofprocess
processesPerApplication

Valfritt heltalsattribut.

Anger antalet instanser av processen som anges i inställningen processPath som kan snurras upp per app.

†För in-process hosting är värdet begränsat till 1.

Inställningen processesPerApplication rekommenderas inte. Det här attributet tas bort i en framtida version.

Förval: 1
Min: 1
Max: 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 .anses sökvägen vara relativ till platsroten.

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: 10
Min: 0
Max: 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 requestTimeout i timmar, minuter och sekunder.

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:00
Min: 00:00:00
Max: 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 app_offline.htm filen identifieras.

Förval: 10
Min: 0
Max: 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 interapidFailsPerMinute inställningen.

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 rapidFailsPerMinute antal gånger under den senaste rullande minuten.

Värdet 0 (noll) anses inte vara en oändlig timeout.

Förval: 120
Min: 0
Max: 3600
stdoutLogEnabled

Valfritt booleskt attribut.

Om det är sant omdirigeras stdout och stderr för den process som anges i processPath till filen som anges i stdoutLogFile.

false
stdoutLogFile

Valfritt strängattribut.

Specificerar den relativa eller absoluta filsökvägen för vilka stdout och stderr från processen specificerad i processPath loggas. Relativa sökvägar är relativa till webbplatsens rot. Alla sökvägar som börjar med . är relativa till platsroten och alla andra sökvägar behandlas som absoluta sökvägar. Alla mappar som anges i sökvägen skapas av modulen när loggfilen skapas. Med understrecksavgränsare läggs en tidsstämpel, process-ID och filnamnstillägg (.log) till i sökvägens stdoutLogFile sista segment. Om .\logs\stdout anges som ett värde, sparas en exempellogg som stdout_20180205194132_1934.log i mappen logs, när den sparades den 2/5/2018 kl. 19:41:32 med process-ID:t 1934.

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:

  1. Inaktivera den delade IIS-konfigurationen.
  2. Kör installationsprogrammet.
  3. Exportera den uppdaterade applicationHost.config filen till den delade mappen.
  4. Å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:

  1. I värdsystemet navigerar du till %windir%\System32\inetsrv.
  2. aspnetcore.dll Leta upp filen.
  3. Högerklicka på filen och välj Egenskaper på snabbmenyn.
  4. 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.config

  • iisexpress.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:

ASP.NET Core-modul

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 processesPerApplication rekommenderas inte. Det här attributet tas bort i en framtida version.

Förval: 1
Min: 1
Max: 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 .anses sökvägen vara relativ till platsroten.

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: 10
Min: 0
Max: 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 requestTimeout i timmar, minuter och sekunder.

Förval: 00:02:00
Min: 00:00:00
Max: 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 app_offline.htm filen identifieras.

Förval: 10
Min: 0
Max: 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: 120
Min: 0
Max: 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 . är relativa till platsroten och alla andra sökvägar behandlas som absoluta sökvägar. Alla mappar som anges i sökvägen måste finnas för att modulen ska kunna skapa loggfilen. Med hjälp av understrecksavgränsare läggs en tidsstämpel, process-ID och filnamnstillägg (.log) till i det sista segmentet av sökvägen stdoutLogFile . Om .\logs\stdout anges som ett värde sparas ett exempel på en stdout-logg som stdout_20180205194132_1934.log i loggmappen när den sparas den 2/5/2018 kl. 19:41:32 med process-ID 1934.

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:

  1. Inaktivera den delade IIS-konfigurationen.
  2. Kör installationsprogrammet.
  3. Exportera den uppdaterade applicationHost.config filen till resursen.
  4. Å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:

  1. I värdsystemet navigerar du till %windir%\System32\inetsrv.
  2. Hitta aspnetcore.dll-filen.
  3. Högerklicka på filen och välj Egenskaper på snabbmenyn.
  4. 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