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í:
- hostování aplikace ASP.NET Core uvnitř pracovního procesu služby IIS (
w3wp.exe), který se nazývá model hostování v rámci procesu. - přesměrování webových požadavků do back-endu ASP.NET Core aplikace, která běží na Kestrel serveru, se nazývá model hostování mimo proces.
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:
- hostování aplikace ASP.NET Core uvnitř pracovního procesu služby IIS (
w3wp.exe), který se nazývá model hostování v rámci procesu. - předejte webové požadavky do back-endu ASP.NET Core aplikaci, která běží na Kestrel serveru, se nazývá model hostování mimo proces.
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í.
- Zaregistrujte
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.htmsouboru 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\inetsrvprow3wp.exe).Vzorový kód, který nastaví aktuální adresář aplikace, naleznete v tématu
CurrentDirectoryHelpersTřída. ZavolejteSetCurrentDirectorymetodu. 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(); }- Nasazení webového balíčku (v jednom souboru) nejsou podporována.
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 |
true |
hostingModel |
Volitelný řetězcový atribut. Určuje model hostování jako vnitroprocesové ( |
InProcessinprocess |
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 Nastavení |
Výchozí: 1Min: 1Max: 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á |
|
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í: 10Min: 0Max: 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 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:00Min: 00:00:00Max: 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í: 10Min: 0Max: 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í: 120Min: 0Max: 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 |
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ů:
- Zakažte sdílenou konfiguraci služby IIS.
- Spusťte instalační program.
- Exportujte aktualizovaný
applicationHost.configsoubor do sdílené složky. - 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:
- V hostitelském systému přejděte na
%windir%\System32\inetsrv. - Vyhledejte
aspnetcore.dllsoubor. - Klikněte na soubor pravým tlačítkem a v místní nabídce vyberte vlastnosti .
- 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.configiisexpress.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:
- hostování aplikace ASP.NET Core uvnitř pracovního procesu služby IIS (
w3wp.exe), který se nazývá model hostování v rámci procesu. - předejte webové požadavky do back-endu ASP.NET Core aplikaci, která běží na Kestrel serveru, se nazývá model hostování mimo proces.
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í.
- Zaregistrujte
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
SetCurrentDirectorymetodu. 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 jeOutOfProcess. - Nastavte hodnotu vlastnosti
<AspNetCoreHostingModel>naOutOfProcess(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 |
|
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 ( |
OutOfProcessoutofprocess |
processesPerApplication |
Volitelný celočíselný atribut. Určuje počet instancí procesu určeného v nastavení, které lze pro každou aplikaci †Pro hostování v procesu je hodnota omezená na Nastavení |
Výchozí: 1Min: 1Max: 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á |
|
rapidFailsPerMinute |
Volitelný celočíselný atribut. Určuje, kolikrát může proces zadaný v souboru Nepodporuje se u hostování v procesu. |
Výchozí: 10Min: 0Max: 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 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:00Min: 00:00:00Max: 360:00:00 |
shutdownTimeLimit |
Volitelný celočíselný atribut. Doba v sekundách, po kterou modul počká, než se spustitelný soubor řádně vypne, |
Výchozí: 10Min: 0Max: 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í 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é Hodnota 0 (nula) se nepovažuje za neomezený časový limit. |
Výchozí: 120Min: 0Max: 3600 |
stdoutLogEnabled |
Volitelný logický atribut. Pokud je true, stdout a stderr pro proces zadaný v se přesměrují na soubor |
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 |
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ě:
- Zakažte sdílenou konfiguraci služby IIS.
- Spusťte instalační program.
- Exportujte aktualizovaný
applicationHost.configsoubor do sdílené složky. - 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:
- V hostitelském systému přejděte na
%windir%\System32\inetsrv. - Vyhledejte
aspnetcore.dllsoubor . - Klikněte pravým tlačítkem na soubor a v místní nabídce vyberte Vlastnosti.
- 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.configiisexpress.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í:

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í |
Výchozí 1Dlouhé 1Poč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á |
|
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í 10Dlouhé 0Poč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šší, |
Výchozí 00:02:00Dlouhé 00:00:00Poč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í 10Dlouhé 0Poč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í 120Dlouhé 0Poč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 |
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:
- Zakažte sdílenou konfiguraci služby IIS.
- Spusťte instalační program.
- Exportujte aktualizovaný applicationHost.config do sdílené složky.
- 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:
- V hostitelském systému přejděte do složky %windir%\System32\inetsrv.
- Vyhledejte aspnetcore.dll.
- Klikněte pravým tlačítkem na soubor a v místní nabídce vyberte Vlastnosti.
- 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í
- hostování ASP.NET Core v Windows se službou IIS
- Nasazení aplikací ASP.NET Core pro Azure App Service
- ASP.NET Core zdroj odkazu na modul výchozí větev [(main)]: Pomocí rozevíracího seznamu Větev vyberte konkrétní verzi (například
release/3.1). - Moduly IIS s ASP.NET Core