Zapojení in-process hosting modelu v ASP.NET Core

Od verze: ASP.NET Core 2.1
Miroslav Holec

Miroslav Holec

8. srpna. 2019

Pakliže vaše aplikace běží na webovém serveru s IIS, můžete od verze ASP.NET Core 2.2 využít nový model hostování aplikací označený jako in-process hosting. Oproti dosavadnímu out-of-process modelu dostanete z aplikací trochu více výkonu, který se jinak ztratí komunikací mezi dvěma web servery.

Princip fungování In-Process hosting modelu

Zatímco v případě klasického ASP.NET Core out-of-process hosting modelu se všechny webové requesty forwardují z externího webového serveru na interní (typicky z IIS na Kestrel), v případě nového in-process modelu se vaše webová aplikace zahostuje v rámci IIS procesu (bez Kestrelu). Protože spolu webové servery nemusí komunikovat, vzniká tu trochu prostoru pro lepší výkonnost. ASP.NET Core modul v tomto případě použije dotnet muxer, načte se Core CLR a provede se statická metoda Main() v assembly, která je předaná dotnet driveru. Zpracování requestu řídí HTTP.sys driver a ten následně nechá request vyřešit vaší aplikací - proteče HTTP middleware pipelinou.

Zapnutí režimu in-process

Při zakládání nových ASP.NET Core aplikací se již používá šablona, která aplikaci připravuje na režim in-proces. To lze poznat z nastavení csproj souboru. V rámci publikace se nastavení csproj souboru reflektuje do web.config a dává tak ASP.NET Core modulu vědět, jak má s aplikací komunikovat. Ve web.config se bude nacházet nastavení hostingModel="InProcess" Podotýkám, že in-process režim je momentálně podporován pouze zmíněným ASP.NET Core Modulem V2 (a ten lze nainstalovat pouze na IIS server).

Integrace je automaticky zapojena v rámci Program.cs voláním

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)

a pokud není potřeba dodatečná konfigurace, stačí skutečně jen přítomnost řádků:

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

Dodatečné poznámky

Po přechodu na režim in-process:

V rámci běhu na lokálním prostředí spuštěním aplikace (dotnet driverem) spouštíte klasicky nadále Kestrel. Je třeba si tedy hlídat, aby lokální prostředí nevykazovalo odlišné chování v důsledku konfigurace Kestrelu.

To je celé základní nastavení. V souvislosti s přechodem na in-process hosting se dále řeší nastavení autentizace, forwarding hlaviček a další věci. Záleží ale na konkrétním scénáři. V případě potíží není nic snazšího, než mi napsat.

Zda vše správně funguje lze ověřit sledováním response hlaviček. Jednou z nich je hlavička Server, která by nyní měla být hodnotu například Microsoft-IIS/8.5, zatímco v případě klasického out-of-process modelu bude hodnota Kestrel.


👨‍🎓 Podzimní školení
👍 Změny v ASP.NET Core 3.0
👍 Vývoj REST služeb v .NET Core
👍 ASP.NET Core Blazor