=

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

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:

  • není bráno v potaz nastavení Kestrelu (nepoužívá se),
  • může některé nastavení Kestrelu způsobit selhání při startu aplikace (502 error), zejména je nutné volat UseKestrel() před UseIISIntegration()
  • nelze sdílet mezi aplikacemi aplikační pool (pool je vždy jen pro jednu aplikaci)

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.

Miroslav Holec

Miroslav Holec

8. 8. 2019

Článek se vztahuje k verzi produktu ASP.NET Core 2.1
Tento článek je již velmi zastaralý. Článek nemusí popisovat aktuální stav technologie, ideální řešení a můj současný pohled na dané téma.

Videa

RestApi.CZ

Právě jsem spustil průvodce Designem REST API

📖 Přečíst restapi.cz

Veřejná školení Místo Datum Délka Cena bez DPH Poznámky
Novinky v .NET 6 a C# 10 online 13. 10. 2022 1 den 3 900 Kč poslední šance registrovat
Vývoj aplikací v ASP.NET Core Praha + online 11/2022 1 den 4 900 Kč bestseller registrovat
Blazor Server & WebAssembly Praha + online 11/2022 2 dny 10 900 Kč registrovat
ASP.NET Core gRPC Praha + online 11/2022 1 den 4 900 Kč registrovat
Design REST API a Design First Praha + online 11/2022 2 dny 9 900 Kč exkluzivní registrovat
Vývoj REST API s Minimal APIs Praha + online 11/2022 1 den 5 900 Kč exkluzivní registrovat
Vývoj REST API v .NET MVC Praha + online 11/2022 1 den 4 900 Kč bestseller registrovat
Entity Framework Core Praha + online 11/2022 2 dny 11 900 Kč registrovat
Vývoj .NET aplikací pro Azure Praha + online 11/2022 1 den 5 900 Kč nový registrovat

kontakt zde

Dotazy, poptávky a objednávky

mirek@miroslavholec.cz
Loading