Modul ASP.NET Core

Díky Dykstra, Rick Strahl, Novák Rossův, Rick Anderson, sourabh Shirhattia Justin Kotalik

modul ASP.NET Core je nativní modul služby iis, který se připojuje k kanálu služby iis a umožňuje ASP.NET Core aplikacím pracovat se službou iis. spusťte ASP.NET Core aplikace pomocí služby IIS pomocí těchto akcí:

Existují kompromisy mezi jednotlivými hostujícími modely. Ve výchozím nastavení se model hostování v rámci procesu používá kvůli lepšímu výkonu a diagnostice.

nainstalovat modul ASP.NET Core

modul ASP.NET Core se instaluje s modulem Runtime .net core ze sady hostování .net core. modul ASP.NET Core je předávaný a zpětně kompatibilní s LTS verzemi .net.

Rozbíjení změn a doporučení k zabezpečení se hlásí v repo Oznámení. Oznámení je možné omezit na konkrétní verzi výběrem filtru Popisek.

Stáhněte instalační program pomocí následujícího odkazu:

Aktuální instalační program sady hostujících sad .NET Core (přímé stahování)

Další informace, včetně instalace starší verze modulu, naleznete v tématu Sada pro hosting .

kurz týkající se publikování ASP.NET Core aplikace na server služby IIS najdete v tématu Publikování ASP.NET Core ve službě IIS .

modul ASP.NET Core je nativním modulem služby iis, který se připojuje k kanálu IIS na jednu z těchto:

podporované verze Windows:

  • Windows 7 nebo novější
  • Windows Server 2012 R2 nebo novější

Při hostování v procesu používá modul implementaci vnitroprocesového serveru pro službu IIS nazvanou IIS HTTP Server ( IISHttpServer ).

Při hostování mimo proces funguje modul pouze se systémem Kestrel . Modul nefunguje s HTTP.sys.

Modely hostingu

Model hostování v procesu

ASP.NET Core aplikace jako výchozí pro model hostování v rámci procesu.

Následující vlastnosti platí při hostování v procesu:

  • Místo serveru se používá HTTP server služby IIS ( IISHttpServer ) Kestrel . Pro vnitroprocesové CreateDefaultBuilder volání UseIIS :

    • Zaregistrujte IISHttpServer .
    • nakonfigurujte port a základní cestu, na kterých má server naslouchat při spuštění za modulem ASP.NET Core.
    • Nakonfigurujte hostitele tak, aby zachytával chyby při spuštění.
  • Atribut RequestTimeout se nevztahuje na hostování v rámci procesu.

  • Sdílení fondu aplikací mezi aplikacemi není podporováno. Použijte jeden fond aplikací na aplikaci.

  • Při použití nasazení webu nebo ručního umístění app_offline.htm souboru do nasazeníse aplikace nemusí okamžitě vypnout, pokud dojde k otevřenému připojení. Připojení k protokolu WebSocket může například zpozdit ukončení aplikace.

  • Architektura (bitová verze) aplikace a nainstalovaného modulu runtime (x64 nebo x86) se musí shodovat s architekturou fondu aplikací.

  • Zjistila se odpojení klienta. HttpContext.RequestAbortedToken zrušení se zruší, když se klient odpojí.

  • v ASP.NET Core 2.2.1 nebo starším GetCurrentDirectory vrátí pracovní adresář procesu spuštěného službou IIS místo adresáře aplikace (například C:\Windows\System32\inetsrv pro w3wp.exe ).

    Vzorový kód, který nastaví aktuální adresář aplikace, naleznete v tématu CurrentDirectoryHelpers Třída. Zavolejte SetCurrentDirectory metodu. Následná volání pro GetCurrentDirectory poskytnutí adresáře aplikace.

  • Při hostování v procesu AuthenticateAsync není volána interně pro inicializaci uživatele. Proto IClaimsTransformation implementace používaná k transformaci deklarací po každém ověření není ve výchozím nastavení aktivována. Při transformaci deklarací s IClaimsTransformation implementací zavolejte AddAuthentication na přidat ověřovací služby:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddTransient<IClaimsTransformation, ClaimsTransformer>();
        services.AddAuthentication(IISServerDefaults.AuthenticationScheme);
    }
    
    public void Configure(IApplicationBuilder app)
    {
        app.UseAuthentication();
    }
    

Model hostování mimo proces

Chcete-li nakonfigurovat aplikaci pro hostování mimo procesy, nastavte hodnotu <AspNetCoreHostingModel> vlastnosti na OutOfProcess soubor projektu ( .csproj ):

<PropertyGroup>
  <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>

Hostování v rámci procesu je nastaveno na InProcess , což je výchozí hodnota.

Hodnota rozlišuje <AspNetCoreHostingModel> malá a velká písmena, takže inprocess a outofprocess jsou platné hodnoty.

Kestrel namísto serveru IIS HTTP () se používá server IISHttpServer .

Pro procesy mimo proces CreateDefaultBuilder volání UseIISIntegration :

  • nakonfigurujte port a základní cestu, na kterých má server naslouchat při spuštění za modulem ASP.NET Core.
  • Nakonfigurujte hostitele tak, aby zachytával chyby při spuštění.

Změny modelu hostování

Pokud se hostingModel nastavení v web.config souboru změní (vysvětluje v části konfigurace s web.config ), modul recykluje pracovní proces pro službu IIS.

v případě IIS Express modul neprovádí recyklaci pracovního procesu, ale místo toho aktivuje bezproblémové vypnutí aktuálního procesu IIS Express. další požadavek na aplikaci vytvoří nový proces IIS Express.

Název procesu

Process.GetCurrentProcess().ProcessNamesestavy w3wp / iisexpress (v procesu) nebo dotnet (mimo proces).

mnoho nativních modulů, jako je Windows ověřování, zůstane aktivní. další informace o aktivních modulech služby IIS pomocí modulu ASP.NET Core najdete v tématu Moduly IIS s ASP.NET Core .

modul ASP.NET Core může také:

  • Nastavte proměnné prostředí pro pracovní proces.
  • Protokoluje výstup stdout do úložiště souborů pro řešení problémů při spuštění.
  • dopředné Windows tokeny ověřování.

jak nainstalovat a používat modul ASP.NET Core

pokyny k instalaci modulu ASP.NET Core najdete v tématu instalace hostující sady .net Core. modul ASP.NET Core je předávaný a zpětně kompatibilní s LTS verzemi .net.

Rozbíjení změn a doporučení k zabezpečení se hlásí v repo Oznámení. Oznámení je možné omezit na konkrétní verzi výběrem filtru Popisek.

Konfigurace s web.config

modul ASP.NET Core je nakonfigurován s aspNetCore částí system.webServer uzlu v souboru web.config webu.

následující web.config soubor je publikován pro nasazení závislé na rozhraní a konfiguruje modul ASP.NET Core pro zpracování požadavků lokality:

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

Následující web.config jsou publikovány pro samostatně uzavřené nasazení:

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

InheritInChildApplicationsVlastnost je nastavena na hodnotu false , která označuje, že nastavení zadaná v rámci <location> elementu nejsou děděna aplikacemi, které jsou umístěny v podadresáři aplikace.

Když je aplikace nasazená na Azure App Service, stdoutLogFile cesta je nastavená na \\?\%home%\LogFiles\stdout . Cesta uloží protokoly stdout do LogFiles složky, což je umístění, které služba automaticky vytvořila.

Informace o konfiguraci dílčí aplikace IIS najdete v tématu hostování ASP.NET Core v Windows se službou IIS .

Atributy elementu aspNetCore

Atribut Popis Výchozí
arguments

Volitelný řetězcový atribut.

Argumenty ke spustitelnému souboru určenému v processPath.

disableStartUpErrorPage

Volitelný atribut typu Boolean.

Pokud je nastaveno na true, stránka 502,5-procesového selhání se potlačí a stavová stránka 502, která je nakonfigurovaná ve web.config , má přednost.

false
forwardWindowsAuthToken

Volitelný atribut typu Boolean.

Pokud je nastaveno na true, token se přepošle podřízenému procesu %ASPNETCORE_PORT% , který naslouchá jako záhlaví na 'MS-ASPNETCORE-WINAUTHTOKEN' žádost. Je zodpovědností za tento proces volání CloseHandle na tento token na žádost.

true
hostingModel

Volitelný řetězcový atribut.

Určuje model hostování jako vnitroprocesové ( InProcess / inprocess ) nebo mimo proces ( OutOfProcess / outofprocess ).

InProcess
inprocess
processesPerApplication

Volitelný celočíselný atribut

Určuje počet instancí procesu určeného v nastavení processPath , které lze v rámci aplikace vystavit.

†Pro hostování v rámci procesu je hodnota omezená na 1 .

Nastavení processesPerApplication se nedoporučuje. Tento atribut bude v budoucí verzi odebrán.

Výchozí: 1
Min: 1
Max: 100
processPath

Požadovaný atribut řetězce.

Cesta ke spustitelnému souboru, který spustí proces, který naslouchá požadavkům HTTP. Relativní cesty jsou podporovány. Pokud cesta začíná . na , cesta se považuje za relativní vzhledem ke kořenovému adresáři lokality.

rapidFailsPerMinute

Volitelný celočíselný atribut.

Určuje počet povolených selhání procesu zadaného v processPath za minutu. Pokud dojde k překročení tohoto limitu, modul po zbytek minuty zastaví spuštění procesu.

Nepodporuje se u hostování v procesu.

Výchozí: 10
Min: 0
Max: 100
requestTimeout

Volitelný atribut časového rozpětí.

Určuje dobu, po kterou modul ASP.NET Core čeká na odpověď z procesu, který naslouchá %ASPNETCORE_PORT%.

Ve verzích modulu ASP.NET Core, který byl dodán s vydáním verze ASP.NET Core 2.1 nebo novější, je zadaný v hodinách, minutách a requestTimeout sekundách.

Nevztahuje se na hostování v procesu. V případě hostování v procesu modul čeká, až aplikace požadavek zpracuje.

Platné hodnoty pro segmenty minut a sekund řetězce jsou v rozsahu 0 až 59. Pokud použijete hodnotu 60 v minutách nebo sekundách, dojde k chybě 500 – Vnitřní chyba serveru.

Výchozí: 00:02:00
Min: 00:00:00
Max: 360:00:00
shutdownTimeLimit

Volitelný celočíselný atribut.

Doba v sekundách, po kterou modul počká, až se spustitelný soubor řádně vypne,app_offline.htm soubor.

Výchozí: 10
Min: 0
Max: 600
startupTimeLimit

Volitelný celočíselný atribut.

Doba v sekundách, po kterou modul čeká, až spustitelný soubor spustí proces naslouchání na portu. Pokud dojde k překročení tohoto časového limitu, modul proces zahodí.

Při hostování v procesu: Proces se nerestartuje a nevyu už používá nastavení rapidFailsPerMinute.

Při hostování mimo proces: Modul se pokusí znovu spustit proces, když obdrží nový požadavek, a bude se dál pokoušet restartovat proces u následných příchozích požadavků, pokud se aplikaci nepodaří spustit rapidFailsPerMinute kolikrát v poslední průběžné minutě.

Hodnota 0 (nula) se nepovažuje za neomezený časový limit.

Výchozí: 120
Min: 0
Max: 3600
stdoutLogEnabled

Volitelný logický atribut.

Pokud je true, jsou stdout a stderr pro proces zadaný v processPath přesměrovány na soubor zadaný v souboru stdoutLogFile.

false
stdoutLogFile

Volitelný atribut řetězce.

Určuje relativní nebo absolutní cestu k souboru, pro který se protokoluje stdout a stderr z procesu zadaného v processPath. Relativní cesty jsou relativní vzhledem ke kořenu webu. Jakákoli cesta začínající na je relativní vzhledem ke kořenovému adresáři lokality a všechny ostatní cesty jsou považovány . za absolutní cesty. Všechny složky zadané v cestě vytvoří modul při vytvoření souboru protokolu. Pomocí oddělovačů podtržítka se do posledního segmentu cesty .log stdoutLogFile přidá časové razítko, ID procesu a přípona souboru ( ). Pokud je zadaný jako hodnota, příklad protokolu stdout se uloží jako ve složce při uložení .\logs\stdout stdout_20180205194132_1934.log logs 5. 2. 2018 v 19:41:32 s ID procesu 1934.

aspnetcore-stdout

Nastavení proměnných prostředí

Proměnné prostředí je možné zadat pro proces v processPath atributu . Zadejte proměnnou prostředí s <environmentVariable> podřízeným prvkem <environmentVariables> elementu kolekce. Proměnné prostředí nastavené v této části mají přednost před systémovými proměnnými prostředí.

Následující příklad nastaví dvě proměnné prostředí v web.config . ASPNETCORE_ENVIRONMENT nakonfiguruje prostředí aplikace na Development . Vývojář může tuto hodnotu v souboru dočasně nastavit, aby při ladění výjimky aplikace vynutit načtení stránky výjimky web.config vývojáře. CONFIG_DIR je příklad uživatelsky definované proměnné prostředí, kde vývojář napsal kód, který přečte hodnotu při spuštění, aby se ztysalo cesta pro načtení konfiguračního souboru aplikace.

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

Poznámka

Alternativou k nastavení prostředí přímo v nástroji je zahrnutí vlastnosti do web.config <EnvironmentName> profilu publikování ( .pubxml ) nebo souboru projektu. Tento přístup nastavuje prostředí v web.config souboru při publikování projektu:

<PropertyGroup>
  <EnvironmentName>Development</EnvironmentName>
</PropertyGroup>

Upozornění

Proměnnou prostředí nastavte pouze na pracovní a testovací servery, které nejsou přístupné nedůvěryhodným sítím, jako ASPNETCORE_ENVIRONMENT Development je internet.

app_offline.htm

Pokud se v kořenovém adresáři aplikace detekuje soubor s názvem , modul ASP.NET Core se pokusí aplikaci řádně vypnout a zastavit zpracování app_offline.htm příchozích požadavků. Pokud aplikace běží i po uplynutí počtu sekund definovaného v souboru , modul shutdownTimeLimit ASP.NET Core ukončení spuštěného procesu.

Když soubor existuje, modul ASP.NET Core reaguje na požadavky odesláním app_offline.htm obsahu app_offline.htm souboru zpět. Po app_offline.htm odebrání souboru spustí aplikaci další požadavek.

Při použití modelu hostování mimo proces se aplikace nemusí vypnout okamžitě, pokud existuje otevřené připojení. Například připojení WebSocket může zpozdit vypnutí aplikace.

Stránka s chybou spuštění

Hostování v procesu i mimo proces vytváří vlastní chybové stránky, když se jim nepodaří spustit aplikaci.

Pokud se modulu ASP.NET Core nepodaří najít obslužnou rutinu požadavku v procesu nebo mimo proces, zobrazí se stránka se stavovou stránkou 500.0 – Selhání načtení obslužné rutiny v procesu nebo mimo proces.

Pokud se v případě hostování v procesu ASP.NET Core aplikaci nepodaří spustit, zobrazí se stránka stavového kódu 500.30 – Chyba spuštění.

Pokud se modulu ASP.NET Core nepodaří spustit proces back-endu nebo back-endový proces se spustí, ale na nakonfigurovaný port se nezdaří naslouchání, zobrazí se stránka stavového kódu 502.5 – Selhání procesu.

Pokud chcete tuto stránku potlačit a vrátit se k výchozí stránce stavového kódu IIS 5xx, použijte disableStartUpErrorPage atribut . Další informace o konfiguraci vlastních chybových zpráv najdete v tématu Chyby HTTP. <httpErrors>

Vytvoření a přesměrování protokolu

Modul ASP.NET Core přesměruje výstup konzoly stdout a stderr na disk, pokud jsou nastaveny atributy stdoutLogEnabled stdoutLogFile a aspNetCore elementu . Všechny složky v cestě vytvoří modul při vytvoření stdoutLogFile souboru protokolu. Fond aplikací musí mít oprávnění k zápisu do umístění, kam se protokoly zapisují (k poskytnutí oprávnění k zápisu použijte IIS AppPool\<app_pool_name> ).

Protokoly se obměnají, pokud k recyklaci nebo restartování procesu ne dojde. Hostitel zodpovídá za omezení místa na disku, které protokoly spotřebovávají.

Použití protokolu stdout se doporučuje pouze pro řešení potíží se spuštěním aplikace při hostování ve službě IIS nebo při použití podpory v době vývoje pro službu IISs Visual Studio , ne při místním ladění a spouštění aplikace pomocí IIS Express.

Protokol stdout nepoužívejte pro obecné účely protokolování aplikace. Pro rutinní protokolování v ASP.NET Core aplikace použijte knihovnu protokolování, která omezuje velikost souboru protokolu a obměna protokolů. Další informace najdete v tématu Poskytovatelé protokolování třetích stran.

Časové razítko a přípona souboru se při vytvoření souboru protokolu přidávají automaticky. Název souboru protokolu se skládá připojením časového razítka, ID procesu a přípony souboru ( ) k poslednímu segmentu cesty (obvykle ) odděleného .log podtržítky. stdoutLogFile stdout Pokud cesta končí na , protokol aplikace s stdoutLogFile stdout PID 1934 vytvořeným 5. 2. 2018 v 19:42:32 má název souboru stdout_20180205194132_1934.log .

Pokud je hodnota false, zachytá se chyby, ke kterým dojde při spuštění aplikace, a vysílané do protokolu událostí až stdoutLogEnabled do 30 kB. Po spuštění se všechny další protokoly zahodí.

Následující ukázkový aspNetCore element konfiguruje protokolování stdout v relativní cestě .\log\ . Ověřte, že identita uživatele AppPool má oprávnění k zápisu do zadané cesty.

<aspNetCore processPath="dotnet"
    arguments=".\MyApp.dll"
    stdoutLogEnabled="true"
    stdoutLogFile=".\logs\stdout"
    hostingModel="inprocess">
</aspNetCore>

Při publikování aplikace pro Azure App Service nasazení nastaví webová sada SDK stdoutLogFile hodnotu na \\?\%home%\LogFiles\stdout . Proměnná %home prostředí je předdefinovaná pro aplikace hostované Azure App Service.

Pokud chcete vytvořit pravidla filtru protokolování, podívejte se do části Použití pravidel filtru protokolů v kódu ASP.NET Core protokolování.

Další informace o formátech cest najdete v tématu Formáty cest k souborům v Windows systémech.

Vylepšené diagnostické protokoly

Modul ASP.NET Core je možné nakonfigurovat tak, aby poskytoval rozšířené diagnostické protokoly. Přidejte <handlerSettings> element do <aspNetCore> elementu v web.config . Nastavení debugLevel na TRACE zpřístupňuje vyšší věrnost diagnostických informací:

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

Všechny složky v cestě logs (v předchozím příkladu) jsou vytvořeny modulem při vytvoření souboru protokolu. Fond aplikací musí mít oprávnění k zápisu do umístění, kam se protokoly zapisují (pro poskytnutí oprávnění k zápisu použijte , kde zástupný symbol je název fondu IIS AppPool\{APP POOL NAME} {APP POOL NAME} aplikací).

Hodnoty úrovně ladění ( debugLevel ) mohou zahrnovat úroveň i umístění.

Úrovně (v pořadí od nejméně po nejslovnější):

  • CHYBA
  • WARNING
  • PŘÍJEMCE
  • TRACE

Umístění (je povoleno více umístění):

  • STROMU
  • EVENTLOG
  • SOUBOR

Nastavení obslužné rutiny lze také poskytnout pomocí proměnných prostředí:

  • ASPNETCORE_MODULE_DEBUG_FILE: Cesta k souboru protokolu ladění. (Výchozí: aspnetcore-debug.log )
  • ASPNETCORE_MODULE_DEBUG: Nastavení úrovně ladění.

Upozornění

Nenechávejte protokolování ladění povolené v nasazení po delší dobu, než je potřeba k řešení problému. Velikost protokolu není omezená. Když necháte protokol ladění povolený, může dojít k vyčerpání dostupného místa na disku a selhání serveru nebo služby App Service.

Příklad prvku v souboru naleznete v tématu konfigurace s web.config aspNetCore web.config .

Úprava velikosti zásobníku

Platí pouze při použití modelu hostování v rámci procesu.

Nakonfigurujte velikost spravovaného zásobníku pomocí stackSize nastavení v bajtech v web.config . Výchozí velikost je 1 048 576 bajtů (1 MB).

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

Konfigurace proxy serveru používá protokol HTTP a token párování.

Platí pouze pro hostování mimo proces.

proxy vytvořený mezi modulem ASP.NET Core a Kestrel používá protokol HTTP. Nehrozí nebezpečí odposlouchávání provozu mezi modulem a Kestrel z umístění mimo server.

Párovací token se používá k zajištění, že žádosti přijaté službou Kestrel byly proxy službou IIS a nepocházejí z jiného zdroje. Token párování se vytvoří a nastaví na proměnnou prostředí ( ASPNETCORE_TOKEN ) modulem. Párovací token je také nastaven na hlavičku ( MS-ASPNETCORE-TOKEN ) pro každý požadavek proxy. Middleware služby IIS kontroluje každý požadavek, který obdrží, a potvrdí, že hodnota hlavičky párového tokenu odpovídá hodnotě proměnné prostředí. Pokud se hodnoty tokenu neshodují, požadavek se zaprotokoluje a odmítne. Proměnná prostředí párování tokenů a přenos dat mezi modulem a Kestrel není dostupná z umístění mimo server. Bez znalosti hodnoty párovacího tokenu nemůže útočník odeslat žádosti, které obcházejí kontrolu v Middlewari IIS.

ASP.NET Core Modul se sdílenou konfigurací služby IIS

instalační služba modulu ASP.NET Core se spouští s oprávněními účtu TrustedInstaller . Vzhledem k tomu, že účet místního systému nemá oprávnění k úpravám pro cestu ke sdílené složce, kterou používá sdílená konfigurace služby IIS, vyvolá Instalační program chybu odepření přístupu při pokusu o konfiguraci nastavení modulu v applicationHost.config souboru ve sdílené složce.

pokud používáte konfiguraci iis shared na stejném počítači jako instalaci služby iis, spusťte instalační program sady prostředků ASP.NET Core s OPT_NO_SHARED_CONFIG_CHECK parametrem nastaveným na 1 :

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

Pokud cesta ke sdílené konfiguraci není ve stejném počítači jako instalace služby IIS, postupujte podle těchto kroků:

  1. Zakažte sdílenou konfiguraci služby IIS.
  2. Spusťte instalační program.
  3. Exportujte aktualizovaný applicationHost.config soubor do sdílené složky.
  4. Znovu povolte sdílenou konfiguraci služby IIS.

Verze modulu a instalační protokoly hostitelské sady

postup určení verze nainstalovaného modulu ASP.NET Core:

  1. V hostitelském systému přejděte na %windir%\System32\inetsrv .
  2. Vyhledejte aspnetcore.dll soubor.
  3. Klikněte na soubor pravým tlačítkem a v místní nabídce vyberte vlastnosti .
  4. Vyberte kartu Podrobnosti . Verze souboru a verze produktu reprezentují nainstalovanou verzi modulu.

V umístění se nacházejí protokoly instalačního balíčku pro modul C:\Users\%UserName%\AppData\Local\Temp . Soubor má název dd_DotNetCoreWinSvrHosting__{TIMESTAMP}_000_AspNetCoreModule_x64.log .

Umístění souboru modulu, schématu a konfiguračního souboru

Modul

Služba 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

Schéma

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

Konfigurace

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

Soubory lze najít hledáním aspnetcore v applicationHost.config souboru.

modul ASP.NET Core je nativním modulem služby iis, který se připojuje k kanálu IIS na jednu z těchto:

podporované verze Windows:

  • Windows 7 nebo novější
  • Windows Server 2008 R2 nebo novější

Při hostování v procesu používá modul implementaci vnitroprocesového serveru pro službu IIS nazvanou IIS HTTP Server ( IISHttpServer ).

Při hostování mimo proces funguje modul pouze se systémem Kestrel . Modul nefunguje s HTTP.sys.

Modely hostingu

Model hostování v procesu

Chcete-li nakonfigurovat aplikaci pro hostování v rámci procesu, přidejte do <AspNetCoreHostingModel> souboru projektu aplikace vlastnost s hodnotou InProcess (hostování mimo proces je nastavená na OutOfProcess ):

<PropertyGroup>
  <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>

model hostování v rámci procesu není podporován pro aplikace ASP.NET Core, které cílí na .NET Framework.

Hodnota rozlišuje <AspNetCoreHostingModel> malá a velká písmena, takže inprocess a outofprocess jsou platné hodnoty.

Pokud <AspNetCoreHostingModel> vlastnost není v souboru přítomna, výchozí hodnota je OutOfProcess .

Následující vlastnosti platí při hostování v procesu:

  • Místo serveru se používá HTTP server služby IIS ( IISHttpServer ) Kestrel . Pro vnitroprocesové CreateDefaultBuilder volání UseIIS :

    • Zaregistrujte IISHttpServer .
    • nakonfigurujte port a základní cestu, na kterých má server naslouchat při spuštění za modulem ASP.NET Core.
    • Nakonfigurujte hostitele tak, aby zachytával chyby při spuštění.
  • Atribut RequestTimeout se nevztahuje na hostování v rámci procesu.

  • Sdílení fondu aplikací mezi aplikacemi není podporováno. Použijte jeden fond aplikací na aplikaci.

  • Při použití nasazení webu nebo ručního umístění souboruapp_offline.htm v nasazeníse aplikace nemusí vypnout okamžitě, pokud dojde k otevřenému připojení. Připojení k protokolu WebSocket může například zpozdit ukončení aplikace.

  • Architektura (bitová verze) aplikace a nainstalovaného modulu runtime (x64 nebo x86) se musí shodovat s architekturou fondu aplikací.

  • Zjistila se odpojení klienta. Token zrušení HttpContext. RequestAborted je zrušený, když se klient odpojí.

  • v ASP.NET Core 2.2.1 nebo starším GetCurrentDirectory vrátí pracovní adresář procesu spuštěného službou IIS místo adresáře aplikace (například C:\ Windows \System32\inetsrv pro w3wp.exe).

    Vzorový kód, který nastaví aktuální adresář aplikace, najdete v tématu Třída CurrentDirectoryHelpers. Zavolejte SetCurrentDirectory metodu. Následná volání pro GetCurrentDirectory poskytnutí adresáře aplikace.

  • Při hostování v procesu AuthenticateAsync není volána interně pro inicializaci uživatele. Proto IClaimsTransformation implementace používaná k transformaci deklarací po každém ověření není ve výchozím nastavení aktivována. Při transformaci deklarací s IClaimsTransformation implementací zavolejte AddAuthentication na přidat ověřovací služby:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddTransient<IClaimsTransformation, ClaimsTransformer>();
        services.AddAuthentication(IISServerDefaults.AuthenticationScheme);
    }
    
    public void Configure(IApplicationBuilder app)
    {
        app.UseAuthentication();
    }
    

Model hostování mimo proces

Chcete-li nakonfigurovat aplikaci pro hostování mimo procesy, použijte některý z následujících přístupů v souboru projektu:

  • Nezadávejte <AspNetCoreHostingModel> vlastnost. Pokud <AspNetCoreHostingModel> vlastnost v souboru není, výchozí hodnota je OutOfProcess .
  • Nastavte hodnotu vlastnosti <AspNetCoreHostingModel> na OutOfProcess (hostování v procesu je nastaveno pomocí InProcess ):
<PropertyGroup>
  <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>

Hodnota se bez rozlišení velkých a malých písmen, takže inprocess outofprocess a jsou platné hodnoty.

Kestrel Místo serveru HTTP služby IIS ( ) se používá server IISHttpServer .

Pro mimo proces volá CreateDefaultBuilder: UseIISIntegration

  • Nakonfigurujte port a základní cestu, na které by měl server naslouchat, když běží za modulem ASP.NET Core Module.
  • Nakonfigurujte hostitele tak, aby zachytávání chyb při spuštění.

Změny modelu hostování

Pokud se nastavení změní v souboruweb.config(vysvětlení v části Konfigurace pomocí web.config), modul recykluje pracovní proces hostingModel pro službu IIS.

Například IIS Express nerecykluje pracovní proces, ale místo toho aktivuje elegantní vypnutí aktuálního procesu IIS Express procesu. Další požadavek na aplikaci zahodí nový IIS Express procesu.

Název procesu

Process.GetCurrentProcess().ProcessName``w3wp / iisexpress sestav (v procesu) dotnet nebo (mimo proces).

Mnoho nativních modulů, například ověřování Windows, zůstává aktivních. Další informace o modulech služby IIS, které jsou aktivní v modulu ASP.NET Core, najdete v tématu Moduly IIS s ASP.NET Core .

Modul ASP.NET Core také:

  • Nastavte proměnné prostředí pro pracovní proces.
  • Zaprodáte výstup stdout do úložiště souborů pro řešení potíží se spuštěním.
  • Předávat Windows tokeny ověřování.

Jak nainstalovat a používat ASP.NET Core Module

Pokyny k instalaci modulu ASP.NET Core najdete v tématu Instalace sady .NET Core Hosting Bundle. Modul ASP.NET Core je dopředu a zpětně kompatibilní s verzemi LTS .NET.

Rozbíjení změn a doporučení k zabezpečení se hlásí v repo Oznámení. Oznámení je možné omezit na konkrétní verzi výběrem filtru Popisek.

Konfigurace s web.config

Modul ASP.NET Core je nakonfigurovaný s oddílem uzlu v souboruweb.configaspNetCore system.webServer lokality.

Následující soubor web.config publikovaný pro nasazení závislé na rozhraní a nakonfiguruje modul ASP.NET Core pro zpracování požadavků lokality:

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

Pro samostatnéweb.config je publikovaná následující aktualizace:

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

Vlastnost je nastavená na , aby indikoval, že nastavení zadaná v elementu nejsou zděděna aplikacemi, které se nacházejí v InheritInChildApplications false <location> podadresáři aplikace.

Při nasazení aplikace do Azure App Servicese stdoutLogFile cesta nastaví na \\?\%home%\LogFiles\stdout . Cesta ukládá protokoly stdout do složky LogFiles, což je umístění automaticky vytvořené službou.

Informace o konfiguraci dílčích aplikací služby IIS najdete v tématu hostování ASP.NET Core v Windows se službou IIS .

Atributy elementu aspNetCore

Atribut Popis Výchozí
arguments

Volitelný atribut řetězce.

Argumenty spustitelného souboru určeného v processPath souboru .

disableStartUpErrorPage

Volitelný logický atribut.

Pokud je hodnota true, stránka 502.5 – Selhání procesu je potlačena a stránka stavového kódu 502 nakonfigurovaná v web.config má přednost.

false
forwardWindowsAuthToken

Volitelný logický atribut.

Pokud je hodnota true, token se předá podřízenému procesu, který naslouchá na %ASPNETCORE_PORT% jako hlavička MS-ASPNETCORE-WINAUTHTOKEN na požadavek. Tento proces zodpovídá za volání metody CloseHandle u tohoto tokenu pro každý požadavek.

true
hostingModel

Volitelný atribut řetězce.

Určuje model hostování jako v procesu ( InProcess / inprocess ) nebo mimo proces ( OutOfProcess / outofprocess ).

OutOfProcess
outofprocess
processesPerApplication

Volitelný celočíselný atribut.

Určuje počet instancí procesu určeného v nastavení, které lze pro každou aplikaci processPath zpředuchovat.

†Pro hostování v procesu je hodnota omezená na 1 .

Nastavení processesPerApplication se nedoporučuje. Tento atribut bude odebrán v budoucí verzi.

Výchozí: 1
Min: 1
Max: 100
processPath

Požadovaný atribut řetězce.

Cesta ke spustitelnému souboru, který spustí proces, který naslouchá požadavkům HTTP. Relativní cesty jsou podporovány. Pokud cesta začíná . na , cesta se považuje za relativní vzhledem ke kořenovému adresáři lokality.

rapidFailsPerMinute

Volitelný celočíselný atribut.

Určuje, kolikrát může proces zadaný v souboru processPath havarovat za minutu. Pokud dojde k překročení tohoto limitu, modul po zbytek minuty zastaví spuštění procesu.

Nepodporuje se u hostování v procesu.

Výchozí: 10
Min: 0
Max: 100
requestTimeout

Volitelný atribut časového rozpětí.

Určuje dobu, po kterou modul ASP.NET Core čeká na odpověď z procesu, který naslouchá %ASPNETCORE_PORT%.

Ve verzích modulu ASP.NET Core, který byl dodán s vydáním verze ASP.NET Core 2.1 nebo novější, je zadaný v hodinách, minutách a requestTimeout sekundách.

Nevztahuje se na hostování v procesu. V případě hostování v procesu modul čeká, až aplikace požadavek zpracuje.

Platné hodnoty pro segmenty minut a sekund řetězce jsou v rozsahu 0 až 59. Pokud použijete hodnotu 60 v minutách nebo sekundách, dojde k chybě 500 – Vnitřní chyba serveru.

Výchozí: 00:02:00
Min: 00:00:00
Max: 360:00:00
shutdownTimeLimit

Volitelný celočíselný atribut.

Doba v sekundách, po kterou modul počká, než se spustitelný soubor řádně vypne, app_offline.htm když se soubor detekuje.

Výchozí: 10
Min: 0
Max: 600
startupTimeLimit

Volitelný celočíselný atribut.

Doba v sekundách, po kterou modul čeká, až spustitelný soubor spustí proces naslouchání na portu. Pokud dojde k překročení tohoto časového limitu, modul proces zahodí.

Při hostování v procesu: Proces se nerestartuje a toto nastavení rapidFailsPerMinute se nevyu ichá.

Při hostování mimo proces: Modul se pokusí znovu spustit proces, když obdrží nový požadavek, a bude se dál pokoušet restartovat proces u následných příchozích požadavků, pokud se aplikaci nepodaří spustit kolikrát v poslední průběžné rapidFailsPerMinute minutě.

Hodnota 0 (nula) se nepovažuje za neomezený časový limit.

Výchozí: 120
Min: 0
Max: 3600
stdoutLogEnabled

Volitelný logický atribut.

Pokud je true, stdout a stderr pro proces zadaný v se přesměrují na soubor processPath zadaný v souboru stdoutLogFile.

false
stdoutLogFile

Volitelný atribut řetězce.

Určuje relativní nebo absolutní cestu k souboru, pro který jsou protokolovány a z procesu zadaného v stdout stderr processPath . Relativní cesty jsou relativní vzhledem ke kořenu webu. Jakákoli cesta začínající na je relativní vzhledem ke kořenovému adresáři lokality a všechny ostatní cesty jsou považovány . za absolutní cesty. Všechny složky zadané v cestě vytvoří modul při vytvoření souboru protokolu. Pomocí podtržítka oddělovačů se do posledního segmentu cesty přidá časové razítko, ID procesu a přípona souboru ( .log stdoutLogFile ). Pokud je zadaný jako hodnota, příklad protokolu stdout se uloží jako ve složce při uložení .\logs\stdout stdout_20180205194132_1934.log logs 5. 2. 2018 v 19:41:32 s ID procesu 1934.

aspnetcore-stdout

Nastavení proměnných prostředí

Proměnné prostředí je možné zadat pro proces v processPath atributu . Zadejte proměnnou prostředí s <environmentVariable> podřízeným prvkem <environmentVariables> elementu kolekce. Proměnné prostředí nastavené v této části mají přednost před systémovými proměnnými prostředí.

Následující příklad nastaví dvě proměnné prostředí. ASPNETCORE_ENVIRONMENT nakonfiguruje prostředí aplikace na Development . Vývojář může tuto hodnotu v souboru dočasně nastavit, aby při ladění výjimky aplikace vynutit načtení stránky výjimky web.config vývojáře. CONFIG_DIR je příklad uživatelsky definované proměnné prostředí, kde vývojář napsal kód, který přečte hodnotu při spuštění, aby se ztysalo cesta pro načtení konfiguračního souboru aplikace.

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

Poznámka

Alternativou k nastavení prostředí přímo v nástroji je zahrnutí vlastnosti do profilu publikování web.config <EnvironmentName> (.pubxml) nebo souboru projektu. Tento přístup nastavuje prostředí v web.config souboru při publikování projektu:

<PropertyGroup>
  <EnvironmentName>Development</EnvironmentName>
</PropertyGroup>

Upozornění

Proměnnou prostředí nastavte pouze na pracovní a testovací servery, které nejsou přístupné nedůvěryhodným sítím, jako ASPNETCORE_ENVIRONMENT Development je internet.

app_offline.htm

Pokud se v kořenovém adresáři aplikace detekuje soubor s názvem , modul ASP.NET Core se pokusí aplikaci řádně vypnout a zastavit zpracování app_offline.htm příchozích požadavků. Pokud aplikace běží i po uplynutí počtu sekund definovaného v souboru , modul shutdownTimeLimit ASP.NET Core ukončení spuštěného procesu.

Když soubor existuje, modul ASP.NET Core reaguje na požadavky odesláním app_offline.htm obsahu app_offline.htm souboru zpět. Po app_offline.htm odebrání souboru spustí aplikaci další požadavek.

Při použití modelu hostování mimo proces se aplikace nemusí vypnout okamžitě, pokud existuje otevřené připojení. Například připojení websocket může zpozdit vypnutí aplikace.

Stránka s chybou spuštění

Hostování v procesu i mimo proces vytváří vlastní chybové stránky, když se jim nepodaří spustit aplikaci.

Pokud se modulu ASP.NET Core nepodaří najít obslužnou rutinu požadavku v procesu nebo mimo proces, zobrazí se stránka se stavovou stránkou 500.0 - In-Process/Out-Of-Process Handler Load Failure.

V případě hostování v procesu, pokud se modulu ASP.NET Core nepodaří spustit aplikaci, zobrazí se stránka stavového kódu 500.30 – Chyba spuštění.

Pokud se modulu ASP.NET Core nepodaří spustit proces back-endu nebo back-endový proces se spustí, ale na nakonfigurovaný port se nezdaří naslouchání, zobrazí se stránka stavového kódu 502.5 – Selhání procesu.

Pokud chcete tuto stránku potlačit a vrátit se k výchozí stránce stavového kódu IIS 5xx, použijte disableStartUpErrorPage atribut . Další informace o konfiguraci vlastních chybových zpráv najdete v tématu Chyby HTTP. <httpErrors>

Vytvoření a přesměrování protokolu

Modul ASP.NET Core přesměruje výstup konzoly stdout a stderr na disk, pokud jsou nastaveny atributy stdoutLogEnabled stdoutLogFile a aspNetCore elementu . Všechny složky v cestě vytvoří modul při vytvoření stdoutLogFile souboru protokolu. Fond aplikací musí mít oprávnění k zápisu do umístění, kam se protokoly zapisují (k poskytnutí oprávnění k zápisu použijte , kde zástupný symbol IIS AppPool\{APP POOL NAME} {APP POOL NAME} je název fondu aplikací).

Protokoly se obměnají, pokud k recyklaci nebo restartování procesu ne dojde. Hostitel zodpovídá za omezení místa na disku, které protokoly spotřebovávají.

Použití protokolu stdout se doporučuje pouze pro řešení potíží se spuštěním aplikace při hostování ve službě IIS nebo při použití podpory v době vývoje pro službu IISs Visual Studio , ne při místním ladění a spouštění aplikace pomocí IIS Express.

Protokol stdout nepoužívejte pro obecné účely protokolování aplikace. Pro rutinní protokolování v ASP.NET Core aplikace použijte knihovnu protokolování, která omezuje velikost souboru protokolu a obměna protokolů. Další informace najdete v tématu Poskytovatelé protokolování třetích stran.

Časové razítko a přípona souboru se při vytvoření souboru protokolu přidávají automaticky. Název souboru protokolu se skládá připojením časového razítka, ID procesu a přípony souboru ( ) k poslednímu segmentu cesty (obvykle ) odděleného .log podtržítky. stdoutLogFile stdout Pokud cesta končí na , protokol aplikace s stdoutLogFile stdout PID 1934 vytvořeným 5. 2. 2018 v 19:42:32 má název souboru stdout_20180205194132_1934.log .

Pokud je hodnota false, zachytá se chyby, ke kterým dojde při spuštění aplikace, a vysílané do protokolu událostí až stdoutLogEnabled do 30 kB. Po spuštění se všechny další protokoly zahodí.

Následující ukázkový aspNetCore element konfiguruje protokolování stdout v relativní cestě .\log\ . Ověřte, že identita uživatele fondu aplikací má oprávnění k zápisu do zadané cesty.

<aspNetCore processPath="dotnet"
    arguments=".\MyApp.dll"
    stdoutLogEnabled="true"
    stdoutLogFile=".\logs\stdout"
    hostingModel="inprocess">
</aspNetCore>

Při publikování aplikace pro Azure App Service nasazení nastaví webová sada SDK stdoutLogFile hodnotu na \\?\%home%\LogFiles\stdout . Proměnná %home prostředí je předdefinovaná pro aplikace hostované Azure App Service.

Další informace o formátech cest najdete v tématu Formáty cest k souborům v Windows systémech.

Vylepšené diagnostické protokoly

Modul ASP.NET Core je možné nakonfigurovat tak, aby poskytoval rozšířené diagnostické protokoly. Přidejte <handlerSettings> element do <aspNetCore> elementu v web.config . Nastavení debugLevel na TRACE zpřístupňuje vyšší věrnost diagnostických informací:

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

Složky v cestě zadané k hodnotě (v předchozím příkladu) nejsou vytvořeny modulem automaticky a v nasazení by <handlerSetting> logs měly existovat předem. Fond aplikací musí mít oprávnění k zápisu do umístění, kam se protokoly zapisují (k poskytnutí oprávnění k zápisu použijte , kde zástupný symbol IIS AppPool\{APP POOL NAME} {APP POOL NAME} je název fondu aplikací).

Hodnoty úrovně ladění ( debugLevel ) mohou zahrnovat úroveň i umístění.

Úrovně (v pořadí od nejméně po nejslovnější):

  • CHYBA
  • WARNING
  • INFO
  • TRACE

Umístění (povolené je více umístění):

  • KONZOLY
  • EVENTLOG
  • SOUBOR

Nastavení obslužné rutiny je také možné skytovat prostřednictvím proměnných prostředí:

  • ASPNETCORE_MODULE_DEBUG_FILE: Cesta k souboru protokolu ladění. (Výchozí: aspnetcore-debug.log )
  • ASPNETCORE_MODULE_DEBUG: Nastavení úrovně ladění.

Upozornění

Při řešení potíží nenechávejte protokolování ladění v nasazení povolené déle, než je potřeba. Velikost protokolu není omezená. Ponechání povoleného protokolu ladění může vyčerpat dostupné místo na disku a dojít k chybě serveru nebo služby App Service.

Příklad elementu web.config v souboru najdete v tématu Konfigurace aspNetCore pomocí nástroje web.config .

Konfigurace proxy serveru používá protokol HTTP a párovací token.

Platí pouze pro hostování mimo proces.

Proxy server vytvořený mezi ASP.NET Core Module Kestrel a používá protokol HTTP. Ne riskujete odposlouchávání provozu mezi modulem a umístěním Kestrel mimo server.

Párovací token se používá k zaručení, že požadavky přijaté službou byly prostřednictvím protokolu proximovány službou IIS a nepošly Kestrel z nějakého jiného zdroje. Modul vytvoří párovací token a nastaví ho na proměnnou prostředí ( ASPNETCORE_TOKEN ). Token párování se také nastaví do hlavičky ( ) u každého požadavku MS-ASPNETCORE-TOKEN sxim. Middleware služby IIS zkontroluje každý požadavek, který obdrží, a ověří, že hodnota hlavičky párování tokenu odpovídá hodnotě proměnné prostředí. Pokud se hodnoty tokenu neshodují, požadavek se zaprotokoluje a zamítne. Párovací proměnná prostředí tokenu a provoz mezi modulem a nejsou přístupné z umístění Kestrel mimo server. Bez znalosti hodnoty párování tokenů nemůže útočník odeslat požadavky, které obcházejí kontrolu v middlewaru služby IIS.

ASP.NET Core Modul se sdílenou konfigurací služby IIS

Instalační ASP.NET Core Module se spustí s oprávněními TrustedInstaller účtu. Vzhledem k tomu, že místní systémový účet nemá oprávnění upravovat cestu ke sdílené složce používované sdílenou konfigurací služby IIS, instalační program při pokusu o konfiguraci nastavení modulu v souboru ve sdílené složce vyvolá chybu applicationHost.config odepření přístupu.

Pokud používáte sdílenou konfiguraci služby IIS na stejném počítači jako instalaci služby IIS, spusťte instalační program ASP.NET Core Hosting Bundle s parametrem OPT_NO_SHARED_CONFIG_CHECK nastaveným na 1 :

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

Pokud cesta ke sdílené konfiguraci není na stejném počítači jako instalace služby IIS, postupujte následovně:

  1. Zakažte sdílenou konfiguraci služby IIS.
  2. Spusťte instalační program.
  3. Exportujte aktualizovaný applicationHost.config soubor do sdílené složky.
  4. Znovu povolte sdílenou konfiguraci služby IIS.

Protokoly instalačního programu verze modulu a sady hostování

Určení verze nainstalovaného modulu ASP.NET Core:

  1. V hostitelském systému přejděte na %windir%\System32\inetsrv .
  2. Vyhledejte aspnetcore.dll soubor .
  3. Klikněte pravým tlačítkem na soubor a v místní nabídce vyberte Vlastnosti.
  4. Vyberte kartu Podrobnosti. Verze souboru a verze produktu představují nainstalovanou verzi modulu.

Protokoly instalačního programu sady hostingu pro modul najdete na adrese C:\\Users\\%UserName%\\AppData\\Local\\Temp . Soubor má název dd_DotNetCoreWinSvrHosting__\{TIMESTAMP}_000_AspNetCoreModule_x64.log , kde zástupný symbol je časové {TIMESTAMP} razítko.

Umístění modulů, schémat a konfiguračních souborů

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

Schéma

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

Konfigurace

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

Soubory lze najít hledáním aspnetcore v applicationHost.config souboru.

modul ASP.NET Core je nativním modulem služby iis, který se připojuje k kanálu IIS a přesměrovává webové požadavky na back-endové aplikace ASP.NET Core.

podporované verze Windows:

  • Windows 7 nebo novější
  • Windows Server 2008 R2 nebo novější

Modul funguje pouze se systémem Kestrel . Modul není kompatibilní s HTTP.sys.

vzhledem k tomu, že ASP.NET Core aplikace běží v procesu odděleném od pracovního procesu služby IIS, modul také zpracovává správu procesů. modul spustí proces pro aplikaci ASP.NET Core, když první požadavek dorazí a restartuje aplikaci, pokud dojde k chybě. to je v podstatě stejné chování jako u ASP.NET 4. x, které běží v procesu služby IIS, které jsou spravované službou Windows process Activation Service (WAS).

následující diagram znázorňuje vztah mezi službou IIS, modulem ASP.NET Core a aplikací:

Modul ASP.NET Core

Požadavky přicházející z webu do ovladače HTTP.sys režimu jádra. Ovladač směruje požadavky do služby IIS na konfigurovaném portu webu, obvykle 80 (HTTP) nebo 443 (HTTPS). Modul předá požadavky na Kestrel náhodný port pro aplikaci, což není port 80 nebo 443.

Modul Určuje port prostřednictvím proměnné prostředí při spuštění a Služba IIS Integration middleware nakonfiguruje server, na kterém má naslouchat http://localhost:{port} . Budou provedeny další kontroly a požadavky, které nepocházejí z modulu, jsou odmítnuty. Modul nepodporuje předávání HTTPS, takže požadavky se předávají přes protokol HTTP i v případě, že je služba IIS prostřednictvím protokolu HTTPS přijímá.

po Kestrel žádosti z modulu se žádost odešle do kanálu middleware ASP.NET Core. Kanál middlewaru zpracovává požadavek a předá ho jako HttpContext instanci do logiky aplikace. Middleware, které přidala integrace služby IIS, do schématu, vzdálené IP adresy a pathbase, aby bylo možné tyto požadavky předat Kestrel . Odpověď aplikace se předává zpátky do služby IIS, která ji přenáší zpátky do klienta HTTP, který žádost inicioval.

mnoho nativních modulů, jako je Windows ověřování, zůstane aktivní. další informace o aktivních modulech služby IIS pomocí modulu ASP.NET Core najdete v tématu Moduly IIS s ASP.NET Core .

modul ASP.NET Core může také:

  • Nastavte proměnné prostředí pro pracovní proces.
  • Protokoluje výstup stdout do úložiště souborů pro řešení problémů při spuštění.
  • dopředné Windows tokeny ověřování.

jak nainstalovat a používat modul ASP.NET Core

pokyny k instalaci modulu ASP.NET Core najdete v tématu instalace hostující sady .net Core.

Konfigurace s web.config

modul ASP.NET Core je nakonfigurován s aspNetCore částí system.webServer uzlu v souboru web.config webu.

následující web.config soubor je publikován pro nasazení závislé na rozhraní a konfiguruje modul ASP.NET Core, aby zpracovával požadavky webu:

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

Následující web.config jsou publikovány pro samostatně uzavřené nasazení:

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

Když je aplikace nasazená na Azure App Service, stdoutLogFile cesta je nastavená na \\?\%home%\LogFiles\stdout . Cesta ukládá protokoly stdout do složky soubory protokolů , což je umístění, které služba automaticky vytvořila.

Informace o konfiguraci dílčí aplikace IIS najdete v tématu hostování ASP.NET Core v Windows se službou IIS .

Atributy elementu aspNetCore

Atribut Popis Výchozí
arguments

Volitelný řetězcový atribut.

Argumenty ke spustitelnému souboru určenému v processPath.

disableStartUpErrorPage

Volitelný atribut typu Boolean.

Pokud je nastaveno na true, stránka 502,5-procesového selhání se potlačí a stavová stránka 502, která je nakonfigurovaná ve web.config , má přednost.

false
forwardWindowsAuthToken

Volitelný atribut typu Boolean.

Pokud je nastaveno na true, token se přepošle podřízenému procesu, který naslouchá na% ASPNETCORE_PORT% jako záhlaví MS-ASPNETCORE-WINAUTHTOKEN na žádost. Je zodpovědností za tento proces volání CloseHandle na tento token na žádost.

true
processesPerApplication

Volitelný celočíselný atribut

Určuje počet instancí procesu určeného v nastavení processPath , které lze v rámci aplikace vystavit.

Nastavení processesPerApplication se nedoporučuje. Tento atribut bude v budoucí verzi odebrán.

Výchozí 1
Dlouhé 1
Počet 100
processPath

Povinný atribut řetězce.

Cesta ke spustitelnému souboru, který spouští proces naslouchající na požadavky HTTP. Jsou podporovány relativní cesty. Pokud cesta začíná . , bude tato cesta považována za relativní vzhledem k kořenu webu.

rapidFailsPerMinute

Volitelný celočíselný atribut

Určuje, kolikrát je povoleno selhání procesu určeného v processPath za minutu. Pokud je tento limit překročen, modul ukončí spuštění procesu po zbytek minuty.

Výchozí 10
Dlouhé 0
Počet 100
requestTimeout

Volitelný atribut TimeSpan.

určuje dobu, po kterou modul ASP.NET Core čeká na odpověď od procesu, který naslouchá na% ASPNETCORE_PORT%.

ve verzích modulu ASP.NET Core, které byly dodávány s vydáním ASP.NET Core 2,1 nebo vyšší, requestTimeout je určena v hodinách, minutách a sekundách.

Výchozí 00:02:00
Dlouhé 00:00:00
Počet 360:00:00
shutdownTimeLimit

Volitelný celočíselný atribut

Doba v sekundách, po kterou modul čeká na řádné vypnutí spustitelného souboru, když se zjistí soubor app_offline.htm .

Výchozí 10
Dlouhé 0
Počet 600
startupTimeLimit

Volitelný celočíselný atribut

Doba v sekundách, kterou modul počká, než spustitelný soubor spustí proces, který na portu naslouchá. Pokud je tento časový limit překročen, modul proces ukončuje. Modul se pokusí znovu spustit proces, když obdrží novou žádost, a pokračuje v pokusu o restartování procesu u dalších příchozích požadavků, pokud se nepodaří spustit rapidFailsPerMinute počet pokusů během poslední minuty.

Hodnota 0 (nula ) není považována za nekonečný časový limit.

Výchozí 120
Dlouhé 0
Počet 3600
stdoutLogEnabled

Volitelný atribut typu Boolean.

Je-li nastavena hodnota true, stdout a stderr pro proces zadaný v processPath budou přesměrovány do souboru zadaného v stdoutLogFile.

false
stdoutLogFile

Volitelný řetězcový atribut.

Určuje relativní nebo absolutní cestu k souboru, pro který je stdout a stderr z procesu určeného v processPath protokolováno. Relativní cesty jsou relativní vzhledem k kořenu webu. Každá cesta začínající řetězcem . je relativní vzhledem k kořenu webu a všechny ostatní cesty se považují za absolutní cesty. Aby modul vytvořil soubor protokolu, musí existovat všechny složky, které jsou v cestě k dispozici. Pomocí oddělovačů podtržítka se do posledního segmentu cesty stdoutLogFile přidá časové razítko, ID procesu a Přípona souboru (. log). Pokud .\logs\stdout je zadán jako hodnota, je ukázkový protokol stdout uložen jako stdout_20180205194132_1934. log ve složce logs při uložení na 2/5/2018 v 19:41:32 s ID procesu 1934.

aspnetcore-stdout

Nastavení proměnných prostředí

Proměnné prostředí lze zadat pro proces v processPath atributu. Zadejte proměnnou prostředí s <environmentVariable> podřízeným elementem <environmentVariables> elementu kolekce.

Upozornění

Proměnné prostředí nastavené v této části jsou v konfliktu se systémovými proměnnými prostředí nastavenými se stejným názvem. Pokud je proměnná prostředí nastavená v souboru web.configi na úrovni systému v Windows, hodnota ze souboru web.config se připojí k hodnotě systémové proměnné prostředí (například ), což zabrání spuštění ASPNETCORE_ENVIRONMENT: Development;Development aplikace.

Následující příklad nastaví dvě proměnné prostředí. ASPNETCORE_ENVIRONMENT nakonfiguruje prostředí aplikace na Development . Vývojář může tuto hodnotu v souboru web.config dočasně nastavit, aby při ladění výjimky aplikace vynutit načtení stránky výjimky vývojáře. CONFIG_DIR je příklad uživatelsky definované proměnné prostředí, kde vývojář napsal kód, který přečte hodnotu při spuštění, aby se ztysalo cesta pro načtení konfiguračního souboru aplikace.

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

Upozornění

Proměnnou prostředí nastavte pouze na pracovní a testovací servery, které nejsou přístupné nedůvěryhodným sítím, jako ASPNETCORE_ENVIRONMENT Development je internet.

app_offline.htm

Pokud se v kořenovém app_offline.htm aplikace detekuje soubor s názvem , modul ASP.NET Core se pokusí aplikaci řádně vypnout a zastavit zpracování příchozích požadavků. Pokud aplikace běží i po uplynutí počtu sekund definovaného v souboru , modul shutdownTimeLimit ASP.NET Core ukončení spuštěného procesu.

Zatímco je app_offline.htm soubor, modul ASP.NET Core reaguje na žádosti odesláním obsahu souboruapp_offline.htm souboru. Po app_offline.htm souboru aplikace aplikace spustí další požadavek.

Stránka s chybou spuštění

Pokud se modulu ASP.NET Core nepodaří spustit proces back-endu nebo se spustí proces back-endu, ale na nakonfigurovaný port se nezdaří naslouchat, zobrazí se stránka se stavovou kódem 502.5 – Selhání procesu. Pokud chcete tuto stránku potlačit a vrátit se k výchozí stránce stavového kódu SLUŽBY IIS 502, použijte disableStartUpErrorPage atribut . Další informace o konfiguraci vlastních chybových zpráv najdete v tématu Chyby HTTP. <httpErrors>

Vytvoření a přesměrování protokolu

Modul ASP.NET Core přesměruje výstup konzoly stdout a stderr na disk, pokud jsou nastaveny atributy stdoutLogEnabled stdoutLogFile a aspNetCore elementu . Všechny složky v cestě vytvoří modul při vytvoření stdoutLogFile souboru protokolu. Fond aplikací musí mít oprávnění k zápisu do umístění, kam se protokoly zapisují (k poskytnutí oprávnění k zápisu použijte IIS AppPool\<app_pool_name> ).

Protokoly se obměnají, pokud k recyklaci nebo restartování procesu ne dojde. Hostitel zodpovídá za omezení místa na disku, které protokoly spotřebovávají.

Použití protokolu stdout se doporučuje pouze pro řešení potíží se spuštěním aplikace při hostování ve službě IIS nebo při použití podpory v době vývoje pro službu IISs Visual Studio , ne při místním ladění a spouštění aplikace pomocí IIS Express.

Protokol stdout nepoužívejte pro obecné účely protokolování aplikace. Pro rutinní protokolování v ASP.NET Core aplikace použijte knihovnu protokolování, která omezuje velikost souboru protokolu a obměna protokolů. Další informace najdete v tématu Poskytovatelé protokolování třetích stran.

Časové razítko a přípona souboru se při vytvoření souboru protokolu přidávají automaticky. Název souboru protokolu se skládá připojením časového razítka, ID procesu a přípony souboru (.log) k poslednímu segmentu cesty stdoutLogFile (obvykle stdout) odděleného podtržítky. Pokud cesta končí stdoutLogFile stdout, protokol aplikace s PID 1934 vytvořeným 5. 2. 2018 v 19:42:32 má název souboru stdout_20180205194132_1934.log.

Následující ukázkový aspNetCore element konfiguruje protokolování stdout v relativní cestě .\log\ . Ověřte, že identita uživatele AppPool má oprávnění k zápisu do zadané cesty.

<aspNetCore processPath="dotnet"
    arguments=".\MyApp.dll"
    stdoutLogEnabled="true"
    stdoutLogFile=".\logs\stdout">
</aspNetCore>

Při publikování aplikace pro Azure App Service nasazení nastaví webová sada SDK stdoutLogFile hodnotu na \\?\%home%\LogFiles\stdout . Proměnná %home prostředí je předdefinovaná pro aplikace hostované Azure App Service.

Pokud chcete vytvořit pravidla filtru protokolování, podívejte se do části Použití pravidel filtru protokolů v kódu ASP.NET Core protokolování.

Další informace o formátech cest najdete v tématu Formáty cest k souborům v Windows systémech.

Konfigurace proxy serveru používá protokol HTTP a párovací token.

Proxy server vytvořený mezi ASP.NET Core Module a Kestrel používá protokol HTTP. Ne riskujete odposlouchávání provozu mezi modulem a umístěním Kestrel mimo server.

Párovací token se používá k zaručení, že požadavky přijaté službou byly prostřednictvím protokolu proximovány službou IIS a nepošly Kestrel z nějakého jiného zdroje. Modul vytvoří párovací token a nastaví ho na proměnnou prostředí ( ASPNETCORE_TOKEN ). Token párování se také nastaví do hlavičky ( ) u každého požadavku MS-ASPNETCORE-TOKEN sxim. Middleware služby IIS zkontroluje každý požadavek, který obdrží, a ověří, že hodnota hlavičky párování tokenu odpovídá hodnotě proměnné prostředí. Pokud se hodnoty tokenu neshodují, požadavek se zaprotokoluje a zamítne. Párovací proměnná prostředí tokenu a provoz mezi modulem a nejsou přístupné z umístění Kestrel mimo server. Bez znalosti hodnoty párování tokenů nemůže útočník odeslat požadavky, které obcházejí kontrolu v middlewaru služby IIS.

ASP.NET Core Modul se sdílenou konfigurací služby IIS

Instalační ASP.NET Core modulu se spustí s oprávněními účtu TrustedInstaller. Vzhledem k tomu, že místní systémový účet nemá oprávnění upravovat cestu ke sdílené složce používované sdílenou konfigurací služby IIS, instalační program při pokusu o konfiguraci nastavení modulu v souboru applicationHost.config ve sdílené složce vyvolá chybu odepření přístupu.

Pokud používáte sdílenou konfiguraci služby IIS, postupujte takto:

  1. Zakažte sdílenou konfiguraci služby IIS.
  2. Spusťte instalační program.
  3. Exportujte aktualizovaný applicationHost.config do sdílené složky.
  4. Znovu povolte sdílenou konfiguraci služby IIS.

Protokoly instalačního programu verze modulu a sady hostování

Určení verze nainstalovaného modulu ASP.NET Core:

  1. V hostitelském systému přejděte do složky %windir%\System32\inetsrv.
  2. Vyhledejte aspnetcore.dll.
  3. Klikněte pravým tlačítkem na soubor a v místní nabídce vyberte Vlastnosti.
  4. Vyberte kartu Podrobnosti. Verze souboru a verze produktu představují nainstalovanou verzi modulu.

Protokoly instalačního programu sady hostingu pro modul najdete v C: \ Users \ %UserName% \ AppData \ Local \ Temp. Soubor má název dd_DotNetCoreWinSvrHosting__ <timestamp> _000_AspNetCoreModule_x64.log.

Umístění modulů, schémat a konfiguračních souborů

Modul

Služba 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

Schéma

IIS

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

IIS Express

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

Konfigurace

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

Soubory najdete tak, že v souboru applicationHost.configaspnetcore.

Další zdroje informací