Webkiszolgáló-implementációk a ASP.NET Core-ban
Jegyzet
Ez nem a cikk legújabb verziója. Az aktuális kiadásra vonatkozó információkat a cikk .NET 9-es verziójában találja.
Figyelmeztetés
A ASP.NET Core ezen verziója már nem támogatott. További információ: .NET és .NET Core támogatási szabályzat. Az aktuális kiadásra vonatkozó információkat a cikk .NET 9-es verziójában találja.
Fontos
Ezek az információk egy olyan előzetes termékre vonatkoznak, amelyet a kereskedelmi forgalomba kerülés előtt jelentősen módosíthatnak. A Microsoft nem vállal kifejezett vagy hallgatólagos szavatosságot az itt megadott információkra vonatkozóan.
Az aktuális kiadásra vonatkozó információkat a cikk .NET 9-es verziójában találja.
Tom Dykstra, Steve Smith, Stephen Halter és Chris Ross
Egy ASP.NET Core-alkalmazás egy folyamatban lévő HTTP-kiszolgáló implementációjával fut. A kiszolgáló implementációja figyeli a HTTP-kéréseket, és az alkalmazás számára egy összegyűjtött kérelemfunkció formájában teszi azokat hozzáférhetővé, amelyekHttpContext-t alkotnak.
ASP.NET Core a következőket tartalmazza:
- Kestrel kiszolgálói az alapértelmezett, platformfüggetlen HTTP-kiszolgáló implementációja. Kestrel a legjobb teljesítményt és memóriakihasználtságot biztosítja, de nem rendelkezik a HTTP.sysspeciális funkcióival. További információ: Kestrel és HTTP.sys a Windows lapon.
- Az IIS HTTP-kiszolgáló egy folyamaton belüli kiszolgáló az IIS számára.
- HTTP.sys kiszolgálói egy csak Windows rendszerű HTTP-kiszolgáló, amely a HTTP.sys kernelillesztőn és a HTTP Server API-alapul.
Ha IIS- vagy IIS Expresshasznál, az alkalmazás a következőt futtatja:
- Ugyanabban a folyamatban, mint az IIS feldolgozó folyamata (a belső üzemeltetési modell) az IIS HTTP-kiszolgálóval. folyamaton belüli az ajánlott konfiguráció.
- Az IIS kiszolgáló feldolgozói folyamatától különálló folyamatban (a folyamaton kívüli üzemeltetési modellszerint) a Kestrel szerverrel.
A ASP.NET core modul egy natív IIS-modul, amely az IIS és a folyamatban lévő IIS HTTP-kiszolgáló vagy Kestrelközötti natív IIS-kérelmeket kezeli. További információkért lásd: ASP.NET Core Module (ANCM) az IIS-hez.
Kestrel és HTTP.sys
Kestrel az alábbi előnyökkel rendelkezik a HTTP.sysszemben:
- Jobb teljesítmény és memóriakihasználtság.
- Platformfüggetlen
- Az Agilityt függetlenül fejlesztik és javítják az operációs rendszertől.
- Programozott port és TLS-konfiguráció
- Bővíthetőség, amely lehetővé teszi az olyan protokollok használatát, mint PPv2 és alternatív átvitelek.
A Http.Sys megosztott kernelmódú összetevőként működik a következő funkciókkal, amelyekkel a Kestrel nem rendelkezik:
- Portmegosztás
- Kernel módú windowsos hitelesítés. Kestrel csak a felhasználói módú hitelesítést támogatja.
- Gyors proxyzás üzenetsor-átvitelekkel
- Közvetlen fájlátvitel
- Válasz gyorsítótárazása
Üzemeltetési modellek
Számos üzemeltetési modell érhető el:
Kestrel önkiszolgáló: A Kestrel webkiszolgáló anélkül fut, hogy más külső webkiszolgálót, például IIS-t vagy HTTP.syskellene megkövetelnie.
HTTP.sys önálló üzemeltetés alternatíva a Kestrel-hez képest. Kestrel ajánlott HTTP.sys helyett, kivéve, ha az alkalmazás olyan funkciókat igényel, amelyek nem érhetők el Kestrel-ben.
Folyamatban lévő IIS-üzemeltetés: Egy ASP.NET Core-alkalmazás ugyanabban a folyamatban fut, mint az IIS feldolgozói folyamata. Az IIS folyamaton belüli üzemeltetése jobb teljesítményt nyújt a folyamaton kívüli IIS-üzemeltetéssel szemben, mivel a kérések nem a visszacsatolási adapteren keresztül haladnak, amely egy hálózati adapter, amely a kimenő hálózati forgalmat visszaküldi ugyanahhoz a géphez. Az IIS a folyamatkezelést a Windows Folyamataktiválási Szolgáltatás (WAS)segítségével kezeli.
Az IIS folyamaton kívüli üzemeltetése: ASP.NET Core-alkalmazások az IIS feldolgozói folyamattól eltérő folyamatban futnak, és a modul kezeli a folyamatkezelést. A modul elindítja a ASP.NET Core-alkalmazás folyamatát, amikor az első kérés megérkezik, és újraindítja az alkalmazást, ha leáll vagy összeomlik. Ez lényegében ugyanaz a viselkedés, mint a folyamatban futó alkalmazások esetében, amelyeket a Windows Folyamataktiválási szolgáltatás (WAS)felügyel. Egy külön folyamat használatával több alkalmazás is üzemeltethet ugyanabból az alkalmazáskészletből.
További információ:
Kestrel
Kestrel kiszolgálói az alapértelmezett, platformfüggetlen HTTP-kiszolgáló implementációja. Kestrel a legjobb teljesítményt és memóriakihasználtságot biztosítja, de nem rendelkezik a HTTP.sysspeciális funkcióival. További információért lásd: Kestrel és HTTP.sys ebben a dokumentumban.
Kestrelhasználata:
Önállóan, mint peremhálózati kiszolgáló, amely közvetlenül egy hálózatról, beleértve az internetet, dolgozza fel a kérelmeket.
fordított proxykiszolgáló, például Internet Information Services (IIS), Nginxvagy Apache. A fordított proxykiszolgáló http-kéréseket fogad az internetről, és továbbítja őket Kestrel.
Bármelyik üzemeltetési konfiguráció—fordított proxy szerverrel vagy anélkül—támogatott.
Ha Kestrel konfigurációs útmutatást és információt szeretne a Kestrel fordított proxykonfigurációban való használatáról, tekintse meg Kestrel ASP.NET Corewebkiszolgálóját.
ASP.NET Core a következőket tartalmazza:
- Kestrel kiszolgálói az alapértelmezett, platformfüggetlen HTTP-kiszolgáló.
- HTTP.sys kiszolgálói egy csak Windows rendszerű HTTP-kiszolgáló, amely a HTTP.sys kernelillesztőn és a HTTP Server API-alapul.
IIS vagy IIS Expresshasználatakor az alkalmazás az IIS-feldolgozó folyamattól (folyamaton kívüli) és a Kestrel kiszolgálóeltérő folyamaton fut.
Mivel ASP.NET Core-alkalmazások az IIS feldolgozói folyamattól eltérő folyamatban futnak, a modul kezeli a folyamatkezelést. A modul elindítja a ASP.NET Core-alkalmazás folyamatát, amikor az első kérés megérkezik, és újraindítja az alkalmazást, ha leáll vagy összeomlik. Ez lényegében ugyanaz a viselkedés, mint a folyamatban futó alkalmazások esetében, amelyeket a Windows Folyamataktiválási szolgáltatás (WAS)felügyel.
Az alábbi ábra az IIS, a ASP.NET core modul és a folyamaton kívüli üzemeltetésű alkalmazás közötti kapcsolatot mutatja be:
A kérések az internetről érkeznek a kernel módú HTTP.sys illesztőhöz. Az illesztőprogram átirányítja a kéréseket az IIS-hez a webhely konfigurált portján, általában a 80-at (HTTP) vagy a 443-at (HTTPS). A modul továbbítja a kéréseket az alkalmazás véletlenszerű portján Kestrel, amely nem a 80-at vagy a 443-at.
A modul egy környezeti változón keresztül adja meg a portot indításkor, és az IIS Integration Middleware konfigurálja a kiszolgálót a http://localhost:{port}
figyelésére. A rendszer további ellenőrzéseket végez, és a nem a modulból származó kéréseket elutasítja a rendszer. A modul nem támogatja a HTTPS-továbbítást, így a kérések akkor is HTTP-en keresztül továbbítódnak, ha az IIS HTTPS-en keresztül érkezik.
Miután Kestrel felveszi a kérést a modulból, a rendszer leküldi a kérést a ASP.NET Core köztes szoftver folyamatába. A köztes szoftverfolyamat kezeli a kérést, és HttpContext
példányként továbbítja az alkalmazás logikájának. Az IIS-integráció által hozzáadott middleware frissíti az URL-sémát, a távoli IP-címet és a pathbase-t, hogy a kérést továbbítják a Kestrel-hoz. A rendszer visszaküldi az alkalmazás válaszát az IIS-nek, amely visszaküldi a kérést kezdeményező HTTP-ügyfélnek.
Az IIS és ASP.NET core module konfigurációs útmutatóját a következő témakörökben talál:
Nginx Kestrel
Az Nginx Linux rendszeren történő fordított proxykiszolgálóként való használatával kapcsolatos információkért a Kestrelesetében tekintse meg a , hogyan hosztolható az ASP.NET Core Linuxon az Nginx segítségével.
HTTP.sys
Ha ASP.NET Core-alkalmazások Windows rendszeren futnak, HTTP.sys a Kestrelalternatívát jelent. Kestrel ajánlott HTTP.sys helyett, kivéve, ha az alkalmazás olyan funkciókat igényel, amelyek nem érhetők el Kestrel-ben. További információ: HTTP.sys webkiszolgáló implementációja ASP.NET Core.
HTTP.sys olyan alkalmazásokhoz is használható, amelyek csak belső hálózatnak vannak kitéve.
HTTP.sys konfigurációs útmutatásért tekintse meg az ASP.NET Coreszerinti
ASP.NET core kiszolgálói infrastruktúra
A IApplicationBuilder metódusban elérhető Startup.Configure
a ServerFeatures típusú IFeatureCollectiontulajdonságot teszi elérhetővé.
Kestrel és HTTP.sys csak egyetlen funkciót fednek fel, IServerAddressesFeature, de a különböző kiszolgálói implementációk további funkciókat is elérhetővé tehetnek.
IServerAddressesFeature
használható annak kiderítésére, hogy a kiszolgáló implementációja melyik portot kötötte futásidőben.
Egyéni kiszolgálók
Ha a beépített kiszolgálók nem felelnek meg az alkalmazás követelményeinek, létrehozhat egy egyéni kiszolgálói implementációt. Az Open Web Interface for .NET (OWIN) útmutató bemutatja, hogyan írhat Nowin-alapú IServer implementációt. Csak azokat a funkcióillesztőket kell implementálni, amelyeket az alkalmazás használ, de legalább a IHttpRequestFeature és a IHttpResponseFeature funkciókat támogatni kell.
Kiszolgáló indítása
A kiszolgáló akkor indul el, amikor az Integrált fejlesztési környezet (IDE) vagy a szerkesztő elindítja az alkalmazást:
- Visual Studio: Indítási profilokkal indíthatja el az alkalmazást és a kiszolgálót IIS Express/ASP.NET Core Module vagy a konzol használatával.
- Visual Studio Code: Az alkalmazást és a kiszolgálót Omnisharpindítja el, amely aktiválja a CoreCLR hibakeresőt.
- Visual Studio for Mac: Az alkalmazást és a kiszolgálót a Mono Soft-Mode Hibakeresőindítja el.
Amikor a projekt mappájában lévő parancssorból indítja el az alkalmazást, dotnet run elindítja az alkalmazást és a szervert (csakKestrel és HTTP.sys esetén). A konfigurációt a -c|--configuration
beállítás adja meg, amely Debug
(alapértelmezett) vagy Release
értékre van állítva.
A launchSettings.json
-fájlok konfigurációt biztosítanak az alkalmazások dotnet run
vagy az eszközökbe beépített hibakeresővel, például a Visual Studióval való indításakor. Ha az indítási profilok launchSettings.json
fájlban találhatók, használja a --launch-profile {PROFILE NAME}
lehetőséget a dotnet run
paranccsal, vagy válassza ki a profilt a Visual Studióban. További információért lásd: dotnet run és a .NET Core terjesztési csomagolást.
HTTP/2-támogatás
HTTP/2 ASP.NET Core a következő üzembehelyezési forgatókönyvekben támogatott:
- Kestrel
- Operációs rendszer
- Windows Server 2016/Windows 10 vagy újabb†
- Linux OpenSSL 1.0.2 vagy újabb verzióval (például Ubuntu 16.04 vagy újabb)
- macOS 10.15 vagy újabb
- Cél keretrendszer: .NET Core 2.2 vagy újabb
- Operációs rendszer
-
HTTP.sys
- Windows Server 2016/Windows 10 vagy újabb
- Célkeretrendszer: Nem alkalmazható HTTP.sys üzembe helyezésekre.
-
IIS (folyamatban lévő)
- Windows Server 2016/Windows 10 vagy újabb; IIS 10 vagy újabb
- Cél keretrendszer: .NET Core 2.2 vagy újabb
-
folyamaton kívüli IIS
- Windows Server 2016/Windows 10 vagy újabb; IIS 10 vagy újabb
- A nyilvános peremhálózati kiszolgálókapcsolatok HTTP/2-t használnak, de a fordított proxykapcsolat Kestrel HTTP/1.1-et használ.
- Célkeretrendszer: Nem alkalmazható a folyamaton kívüli IIS-kiépítésekre.
†Kestrel korlátozottan támogatja a HTTP/2-t Windows Server 2012 R2 és Windows 8.1 rendszeren. A támogatás korlátozott, mert az ezeken az operációs rendszereken elérhető támogatott TLS-titkosítási csomagok listája korlátozott. A TLS-kapcsolatok védelméhez szükség lehet egy három pontból álló digitális aláírási algoritmussal (ECDSA) létrehozott tanúsítványra.
- Kestrel
- Operációs rendszer
- Windows Server 2016/Windows 10 vagy újabb†
- Linux OpenSSL 1.0.2 vagy újabb verzióval (például Ubuntu 16.04 vagy újabb)
- A HTTP/2 a macOS-en egy későbbi kiadásban támogatott lesz.
- Cél keretrendszer: .NET Core 2.2 vagy újabb
- Operációs rendszer
-
HTTP.sys
- Windows Server 2016/Windows 10 vagy újabb
- Célkeretrendszer: Nem alkalmazható HTTP.sys üzembe helyezésekre.
-
IIS (folyamatban lévő)
- Windows Server 2016/Windows 10 vagy újabb; IIS 10 vagy újabb
- Cél keretrendszer: .NET Core 2.2 vagy újabb
-
folyamaton kívüli IIS
- Windows Server 2016/Windows 10 vagy újabb; IIS 10 vagy újabb
- A nyilvános peremhálózati kiszolgálókapcsolatok HTTP/2-t használnak, de a fordított proxykapcsolat Kestrel HTTP/1.1-et használ.
- Célkeretrendszer: Nem alkalmazható a folyamaton kívüli IIS-kiépítésekre.
†Kestrel korlátozottan támogatja a HTTP/2-t Windows Server 2012 R2 és Windows 8.1 rendszeren. A támogatás korlátozott, mert az ezeken az operációs rendszereken elérhető támogatott TLS-titkosítási csomagok listája korlátozott. A TLS-kapcsolatok védelméhez szükség lehet egy három pontból álló digitális aláírási algoritmussal (ECDSA) létrehozott tanúsítványra.
- Kestrel
- Operációs rendszer
- Windows Server 2016/Windows 10 vagy újabb†
- Linux OpenSSL 1.0.2 vagy újabb verzióval (például Ubuntu 16.04 vagy újabb)
- A HTTP/2 a macOS-en egy későbbi kiadásban támogatott lesz.
- Cél keretrendszer: .NET Core 2.2 vagy újabb
- Operációs rendszer
-
HTTP.sys
- Windows Server 2016/Windows 10 vagy újabb
- Célkeretrendszer: Nem alkalmazható HTTP.sys üzembe helyezésekre.
-
IIS (folyamatban lévő)
- Windows Server 2016/Windows 10 vagy újabb; IIS 10 vagy újabb
- Cél keretrendszer: .NET Core 2.2 vagy újabb
-
folyamaton kívüli IIS
- Windows Server 2016/Windows 10 vagy újabb; IIS 10 vagy újabb
- A nyilvános peremhálózati kiszolgálókapcsolatok HTTP/2-t használnak, de a fordított proxykapcsolat Kestrel HTTP/1.1-et használ.
- Célkeretrendszer: Nem alkalmazható a folyamaton kívüli IIS-kiépítésekre.
†Kestrel korlátozottan támogatja a HTTP/2-t Windows Server 2012 R2 és Windows 8.1 rendszeren. A támogatás korlátozott, mert az ezeken az operációs rendszereken elérhető támogatott TLS-titkosítási csomagok listája korlátozott. A TLS-kapcsolatok védelméhez szükség lehet egy három pontból álló digitális aláírási algoritmussal (ECDSA) létrehozott tanúsítványra.
-
HTTP.sys
- Windows Server 2016/Windows 10 vagy újabb
- Célkeretrendszer: Nem alkalmazható HTTP.sys üzembe helyezésekre.
-
folyamaton kívüli IIS
- Windows Server 2016/Windows 10 vagy újabb; IIS 10 vagy újabb
- A nyilvános peremhálózati kiszolgálókapcsolatok HTTP/2-t használnak, de a fordított proxykapcsolat Kestrel HTTP/1.1-et használ.
- Célkeretrendszer: Nem alkalmazható a folyamaton kívüli IIS-kiépítésekre.
A HTTP/2-kapcsolatnak Application-Layer Protokoll tárgyalás (ALPN) és TLS 1.2 vagy újabb verziót kell használnia. További információkért tekintse meg a kiszolgáló üzembe helyezési forgatókönyveihez kapcsolódó témaköröket.
Vállalati webalkalmazás-minták
A megbízható, biztonságos, teljesíthető, tesztelhető és méretezhető ASP.NET Core-alkalmazás létrehozásával kapcsolatos útmutatásért tekintse meg Vállalati webalkalmazás-mintákcímű témakört. Rendelkezésre áll egy teljes értékű mintájú webalkalmazás, amely alkalmazza a mintákat.