Megosztás a következőn keresztül:


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:

Ha IIS- vagy IIS Expresshasznál, az alkalmazás a következőt futtatja:

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:

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

    Kestrel közvetlenül kommunikál az internettel fordított proxykiszolgáló nélkül

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

    Kestrel közvetetten kommunikál az internettel fordított proxykiszolgálón keresztül, például IIS, Nginx vagy Apache

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:

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:

ASP.NET Core-modul

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 közvetlenül kommunikál az internettel

HTTP.sys olyan alkalmazásokhoz is használható, amelyek csak belső hálózatnak vannak kitéve.

HTTP.sys közvetlenül kommunikál a belső hálózattal

HTTP.sys konfigurációs útmutatásért tekintse meg az ASP.NET Coreszerinti HTTP.sys webszerver implementációját.

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:

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

További erőforrások