Delen via


Webserver-implementaties in ASP.NET Core

Notitie

Dit is niet de nieuwste versie van dit artikel. Zie de .NET 9-versie van dit artikelvoor de huidige release.

Waarschuwing

Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie de .NET- en .NET Core-ondersteuningsbeleidvoor meer informatie. Zie de .NET 9-versie van dit artikelvoor de huidige release.

Belangrijk

Deze informatie heeft betrekking op een pre-releaseproduct dat aanzienlijk kan worden gewijzigd voordat het commercieel wordt uitgebracht. Microsoft geeft geen garanties, uitdrukkelijk of impliciet, met betrekking tot de informatie die hier wordt verstrekt.

Zie de .NET 9-versie van dit artikelvoor de huidige release.

Door Tom Dykstra, Steve Smith, Stephen Halteren Chris Ross

Een ASP.NET Core-app wordt uitgevoerd met een in-process HTTP-server-implementatie. De server-implementatie luistert naar HTTP-aanvragen en maakt deze aanvragen toegankelijk voor de app als een set aanvraagfuncties samengesteld in een HttpContext.

ASP.NET Core wordt geleverd met het volgende:

Wanneer u IIS- of IIS Express-gebruikt, wordt de app op de volgende manieren uitgevoerd:

De ASP.NET Core Module is een systeemeigen IIS-module waarmee systeemeigen IIS-aanvragen worden verwerkt tussen IIS en de in-process IIS HTTP-server of Kestrel. Zie ASP.NET Core Module (ANCM) voor IIS-voor meer informatie.

Kestrel versus HTTP.sys

Kestrel heeft de volgende voordelen ten opzichte van HTTP.sys:

  • Betere prestaties en geheugengebruik.
  • Platformoverschrijdend
  • Flexibiliteit, het is ontwikkeld en gepatcht onafhankelijk van het besturingssysteem.
  • Programmatische poort en TLS-configuratie
  • Uitbreidbaarheid waarmee protocollen zoals PPv2- en alternatieve transporten mogelijk zijn.

Http.Sys werkt als een gedeeld kernelmodusonderdeel met de volgende functies die kestrel niet heeft:

Hostingmodellen

Er zijn verschillende hostingmodellen beschikbaar:

  • Kestrel zelfhosting: de Kestrel webserver wordt uitgevoerd zonder dat hiervoor andere externe webservers zoals IIS of HTTP.sysnodig zijn.

  • HTTP.sys zelfhosting is een alternatief voor Kestrel. Kestrel wordt aanbevolen via HTTP.sys, tenzij voor de app functies zijn vereist die niet beschikbaar zijn in Kestrel.

  • IIS in-process hosting: een ASP.NET Core-app wordt uitgevoerd in hetzelfde proces als het IIS-werkproces. IIS in-process hosting biedt verbeterde prestaties ten opzichte van IIS out-of-process hosting, omdat aanvragen niet geproxied hoeven te worden via de loopback-adapter, een netwerkinterface die uitgaand netwerkverkeer retourneert naar dezelfde computer. IIS verwerkt procesbeheer met de WAS-(Windows Process Activation Service).

  • Out-of-process-hosting van IIS: ASP.NET Core-apps worden uitgevoerd in een proces gescheiden van het IIS-werkproces, en de module beheert het procesbeheer. De module start het proces voor de ASP.NET Core-app wanneer de eerste aanvraag binnenkomt en start de app opnieuw als deze wordt afgesloten of vastloopt. Dit is in wezen hetzelfde gedrag als bij apps die in het proces worden uitgevoerd die worden beheerd door de WAS-(Windows Process Activation Service). Als u een afzonderlijk proces gebruikt, kunt u ook meerdere apps hosten vanuit dezelfde app-pool.

Zie het volgende voor meer informatie:

Kestrel

Kestrel server is de standaard, platformoverschrijdende IMPLEMENTATIE van HTTP-servers. Kestrel biedt de beste prestaties en het geheugengebruik, maar er zijn geen enkele van de geavanceerde functies in HTTP.sys. Zie Kestrel versus HTTP.sys in dit document voor meer informatie.

Gebruik Kestrel:

  • Op zichzelf als een edge-server verwerken aanvragen rechtstreeks vanuit een netwerk, inclusief internet.

    Kestrel rechtstreeks met internet communiceert zonder een omgekeerde proxyserver

  • Met een omgekeerde proxyserver, zoals Internet Information Services (IIS), Nginxof Apache. Een omgekeerde proxyserver ontvangt HTTP-aanvragen van internet en stuurt deze door naar Kestrel.

    Kestrel indirect met internet communiceert via een omgekeerde proxyserver, zoals IIS, Nginx of Apache

Hostingconfiguratie, met of zonder een omgekeerde proxyserver, wordt ondersteund.

Zie Kestrel webserver in ASP.NET Corevoor Kestrel configuratierichtlijnen en informatie over het gebruik van Kestrel in een omgekeerde proxyconfiguratie.

ASP.NET Core wordt geleverd met het volgende:

Wanneer u IIS- of IIS Express-gebruikt, wordt de app uitgevoerd in een proces gescheiden van het IIS-werkproces (out-of-process) met de Kestrel-server.

Omdat ASP.NET Core-apps worden uitgevoerd in een proces dat losstaat van het IIS-werkproces, verwerkt de module procesbeheer. De module start het proces voor de ASP.NET Core-app wanneer de eerste aanvraag binnenkomt en start de app opnieuw als deze wordt afgesloten of vastloopt. Dit is in wezen hetzelfde gedrag als bij apps die in het proces worden uitgevoerd die worden beheerd door de WAS-(Windows Process Activation Service).

In het volgende diagram ziet u de relatie tussen IIS, de ASP.NET Core Module en een app die out-of-process wordt gehost:

ASP.NET Core Module

Aanvragen komen van het web naar het kernel-modus HTTP.sys stuurprogramma. Het stuurprogramma stuurt de aanvragen naar IIS op de geconfigureerde poort van de website, meestal 80 (HTTP) of 443 (HTTPS). De module stuurt de aanvragen door naar Kestrel op een willekeurige poort voor de app, die geen poort 80 of 443 is.

De module specificeert de poort via een omgevingsvariabele bij het opstarten en de IIS Integration Middleware configureert de server om te luisteren op http://localhost:{port}. Aanvullende controles worden uitgevoerd en aanvragen die niet afkomstig zijn van de module, worden geweigerd. De module biedt geen ondersteuning voor HTTPS-doorsturen, dus aanvragen worden doorgestuurd via HTTP, zelfs niet als deze worden ontvangen door IIS via HTTPS.

Nadat Kestrel de aanvraag uit de module heeft opgehaald, wordt de aanvraag naar de ASP.NET Core middleware-pijplijn gepusht. De middleware-pijplijn verwerkt de aanvraag en geeft deze als een HttpContext exemplaar door aan de logica van de app. Middleware die door IIS-integratie is toegevoegd, werkt het schema, externe IP en pathbase bij voor het doorsturen van de aanvraag naar Kestrel. Het antwoord van de app wordt teruggegeven aan IIS, waardoor deze terug wordt gepusht naar de HTTP-client die de aanvraag heeft gestart.

Zie de volgende onderwerpen voor IIS- en ASP.NET Core Module-configuratierichtlijnen:

Nginx met Kestrel

Zie Host ASP.NET Core op Linux met Nginx-voor informatie over het gebruik van Nginx op Linux als een omgekeerde proxyserver voor Kestrel.

HTTP.sys

Als ASP.NET Core-apps worden uitgevoerd in Windows, is HTTP.sys een alternatief voor Kestrel. Kestrel wordt aanbevolen via HTTP.sys, tenzij voor de app functies zijn vereist die niet beschikbaar zijn in Kestrel. Zie HTTP.sys webserver-implementatie in ASP.NET Corevoor meer informatie.

HTTP.sys rechtstreeks communiceert met internet

HTTP.sys kan ook worden gebruikt voor apps die alleen beschikbaar zijn voor een intern netwerk.

HTTP.sys rechtstreeks communiceert met het interne netwerk

Zie HTTP.sys webserver-implementatie in ASP.NET Corevoor HTTP.sys configuratierichtlijnen.

ASP.NET Core-serverinfrastructuur

De IApplicationBuilder die beschikbaar is in de methode Startup.Configure maakt de eigenschap ServerFeatures van het type IFeatureCollectionbeschikbaar. Kestrel en HTTP.sys slechts één functie beschikbaar maken, IServerAddressesFeature, maar verschillende server-implementaties kunnen extra functionaliteit bieden.

IServerAddressesFeature kan worden gebruikt om te achterhalen welke poort de server-implementatie tijdens runtime heeft gebonden.

Aangepaste servers

Als de ingebouwde servers niet voldoen aan de vereisten van de app, kan er een aangepaste server-implementatie worden gemaakt. De handleiding Open Web Interface for .NET (OWIN) laat zien hoe u een op Nowingebaseerde IServer-implementatie schrijft. Alleen de functie-interfaces die door de app worden gebruikt, vereisen implementatie, hoewel minimaal IHttpRequestFeature en IHttpResponseFeature moeten worden ondersteund.

Server opstarten

De server wordt gestart wanneer de geïntegreerde ontwikkelomgeving (IDE) of editor de app start.

Wanneer u de app start vanaf een opdrachtprompt in de map van het project, start dotnet-uitvoering de app en server (alleenKestrel en HTTP.sys). De configuratie wordt opgegeven door de optie -c|--configuration, die is ingesteld op Debug (standaard) of Release.

Een launchSettings.json-bestand biedt configuratie bij het starten van een app met dotnet run of met een foutopsporingsprogramma dat is ingebouwd in hulpprogramma's, zoals Visual Studio. Als startprofielen aanwezig zijn in een launchSettings.json bestand, gebruikt u de optie --launch-profile {PROFILE NAME} met de opdracht dotnet run of selecteert u het profiel in Visual Studio. Voor meer informatie, zie dotnet run en .NET Core-distributieverpakkingen.

HTTP/2-ondersteuning

HTTP/2- wordt ondersteund met ASP.NET Core in de volgende implementatiescenario's:

  • Kestrel
    • Besturingssysteem
      • Windows Server 2016/Windows 10 of hoger†
      • Linux met OpenSSL 1.0.2 of hoger (bijvoorbeeld Ubuntu 16.04 of hoger)
      • macOS 10.15 of hoger
    • Doelframework: .NET Core 2.2 of hoger
  • HTTP.sys
    • Windows Server 2016/Windows 10 of hoger
    • Doelframework: niet van toepassing op HTTP.sys implementaties.
  • IIS (in-proces)
    • Windows Server 2016/Windows 10 of hoger; IIS 10 of hoger
    • Doelframework: .NET Core 2.2 of hoger
  • IIS- (niet verwerkt)
    • Windows Server 2016/Windows 10 of hoger; IIS 10 of hoger
    • Openbare edge-serververbindingen maken gebruik van HTTP/2, maar de omgekeerde proxyverbinding met Kestrel maakt gebruik van HTTP/1.1.
    • Doelframework: Niet van toepassing op out-of-process-implementaties van IIS.

†Kestrel heeft beperkte ondersteuning voor HTTP/2 op Windows Server 2012 R2 en Windows 8.1. Ondersteuning is beperkt omdat de lijst met ondersteunde TLS-coderingssuites die beschikbaar zijn op deze besturingssystemen, beperkt is. Een certificaat dat wordt gegenereerd met behulp van een Elliptic Curve Digital Signature Algorithm (ECDSA) is mogelijk vereist om TLS-verbindingen te beveiligen.

  • Kestrel
    • Besturingssysteem
      • Windows Server 2016/Windows 10 of hoger†
      • Linux met OpenSSL 1.0.2 of hoger (bijvoorbeeld Ubuntu 16.04 of hoger)
      • HTTP/2 wordt ondersteund in macOS in een toekomstige release.
    • Doelframework: .NET Core 2.2 of hoger
  • HTTP.sys
    • Windows Server 2016/Windows 10 of hoger
    • Doelframework: niet van toepassing op HTTP.sys implementaties.
  • IIS (in-proces)
    • Windows Server 2016/Windows 10 of hoger; IIS 10 of hoger
    • Doelframework: .NET Core 2.2 of hoger
  • IIS (out-of-process) -> IIS (buiten het proces)
    • Windows Server 2016/Windows 10 of hoger; IIS 10 of hoger
    • Openbare edge-serververbindingen maken gebruik van HTTP/2, maar de omgekeerde proxyverbinding met Kestrel maakt gebruik van HTTP/1.1.
    • Doelframework: Niet van toepassing op out-of-process-implementaties van IIS.

†Kestrel heeft beperkte ondersteuning voor HTTP/2 op Windows Server 2012 R2 en Windows 8.1. Ondersteuning is beperkt omdat de lijst met ondersteunde TLS-coderingssuites die beschikbaar zijn op deze besturingssystemen, beperkt is. Een certificaat dat wordt gegenereerd met behulp van een Elliptic Curve Digital Signature Algorithm (ECDSA) is mogelijk vereist om TLS-verbindingen te beveiligen.

  • Kestrel
    • Besturingssysteem
      • Windows Server 2016/Windows 10 of hoger†
      • Linux met OpenSSL 1.0.2 of hoger (bijvoorbeeld Ubuntu 16.04 of hoger)
      • HTTP/2 wordt ondersteund in macOS in een toekomstige release.
    • Doelframework: .NET Core 2.2 of hoger
  • HTTP.sys
    • Windows Server 2016/Windows 10 of hoger
    • Doelframework: niet van toepassing op HTTP.sys implementaties.
  • IIS (in-proces)
    • Windows Server 2016/Windows 10 of hoger; IIS 10 of hoger
    • Doelframework: .NET Core 2.2 of hoger
  • IIS- (niet verwerkt)
    • Windows Server 2016/Windows 10 of hoger; IIS 10 of hoger
    • Openbare edge-serververbindingen maken gebruik van HTTP/2, maar de omgekeerde proxyverbinding met Kestrel maakt gebruik van HTTP/1.1.
    • Doelframework: Niet van toepassing op out-of-process-implementaties van IIS.

†Kestrel heeft beperkte ondersteuning voor HTTP/2 op Windows Server 2012 R2 en Windows 8.1. Ondersteuning is beperkt omdat de lijst met ondersteunde TLS-coderingssuites die beschikbaar zijn op deze besturingssystemen, beperkt is. Een certificaat dat wordt gegenereerd met behulp van een Elliptic Curve Digital Signature Algorithm (ECDSA) is mogelijk vereist om TLS-verbindingen te beveiligen.

  • HTTP.sys
    • Windows Server 2016/Windows 10 of hoger
    • Doelframework: niet van toepassing op HTTP.sys implementaties.
  • IIS- (niet verwerkt)
    • Windows Server 2016/Windows 10 of hoger; IIS 10 of hoger
    • Openbare edge-serververbindingen maken gebruik van HTTP/2, maar de omgekeerde proxyverbinding met Kestrel maakt gebruik van HTTP/1.1.
    • Doelframework: Niet van toepassing op out-of-process-implementaties van IIS.

Een HTTP/2-verbinding moet gebruikmaken van Application-Layer ALPN- en TLS 1.2 of hoger. Zie de onderwerpen die betrekking hebben op uw serverimplementatiescenario's voor meer informatie.

Patronen voor bedrijfsweb-apps

Zie Enterprise-web-app-patronenvoor hulp bij het maken van een betrouwbare, veilige, uitvoerbare, testbare en schaalbare ASP.NET Core-app. Er is een volledige voorbeeldweb-app van productiekwaliteit beschikbaar waarmee de patronen worden geïmplementeerd.

Aanvullende informatiebronnen