Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Note
Dit is niet de nieuwste versie van dit artikel. Zie de .NET 9-versie van dit artikel voor de huidige release.
Warning
Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie het .NET- en .NET Core-ondersteuningsbeleid voor meer informatie. Zie de .NET 9-versie van dit artikel voor de huidige release.
Important
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 artikel voor de huidige release.
Tijdens het hosten van processen wordt een ASP.NET Core-app uitgevoerd in hetzelfde proces als het IIS-werkproces. In-process hosting biedt verbeterde prestaties ten opzichte van out-of-process hosting, omdat aanvragen niet worden geproxied via de loopback-adapter, een netwerkinterface die uitgaand netwerkverkeer terugstuurt naar dezelfde computer.
In het volgende diagram ziet u de relatie tussen IIS, de ASP.NET Core Module en een app die in het proces wordt gehost:
In-process hosting inschakelen
Sinds ASP.NET Core 3.0 is in-process hosting standaard ingeschakeld voor alle apps die zijn geïmplementeerd in IIS.
Als u een app expliciet wilt configureren voor in-process hosting, stelt u de waarde van de <AspNetCoreHostingModel> eigenschap InProcess in op in het projectbestand (.csproj):
<PropertyGroup>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
General architecture
De algemene stroom van een aanvraag is als volgt:
- Een verzoek van het web komt aan bij de kernelmodus HTTP.sys driver.
- Het stuurprogramma stuurt de systeemeigen aanvraag naar IIS op de geconfigureerde poort van de website, meestal 80 (HTTP) of 443 (HTTPS).
- De ASP.NET Core-module ontvangt de systeemeigen aanvraag en geeft deze door aan IIS HTTP Server (
IISHttpServer). IIS HTTP Server is een in-process server-implementatie voor IIS die de aanvraag converteert van systeemeigen naar beheerd.
Nadat de IIS HTTP-server de aanvraag heeft verwerkt:
- De aanvraag wordt verzonden naar de ASP.NET Core-middlewarepijplijn.
- De middleware-pijplijn verwerkt de aanvraag en geeft deze als een
HttpContextexemplaar door aan de logica van de app. - Het antwoord van de app wordt teruggegeven aan IIS via IIS HTTP Server.
- IIS verzendt het antwoord naar de client die de aanvraag heeft gestart.
CreateDefaultBuilder voegt een IServer exemplaar toe door de UseIIS methode aan te roepen om de CoreCLR op te starten en de app binnen het IIS-werkproces (w3wp.exe of iisexpress.exe) te hosten. nl-NL: Prestatietests geven aan dat het hosten van een .NET-app in-proces aanzienlijk hogere aanvraagdoorvoer levert in vergelijking met het hosten van de app out-of-process en het proxien van aanvragen naar Kestrel.
Apps die zijn gepubliceerd als één uitvoerbaar bestand, kunnen niet worden geladen door het in-process hostingmodel.
Application configuration
Als u IIS-opties wilt configureren, moet u een serviceconfiguratie opnemen voor IISServerOptions in Program.cs. In het volgende voorbeeld wordt AutomaticAuthentication uitgeschakeld:
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Server.IIS;
using Microsoft.EntityFrameworkCore;
using RPauth.Data;
var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.Configure<IISServerOptions>(options =>
{
options.AutomaticAuthentication = false;
});
builder.Services.AddTransient<IClaimsTransformation, MyClaimsTransformation>();
builder.Services.AddAuthentication(IISServerDefaults.AuthenticationScheme);
builder.Services.AddRazorPages();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
| Option | Default | Setting |
|---|---|---|
AutomaticAuthentication |
true |
Als true, stelt de IIS-server HttpContext.User in die is geverifieerd door Windows-verificatie. Wanneer false, biedt de server uitsluitend een identiteit voor HttpContext.User en reageert op uitdagingen wanneer expliciet aangevraagd door de AuthenticationScheme. Windows-verificatie moet zijn ingeschakeld in IIS om AutomaticAuthentication te kunnen functioneren. Zie Windows-verificatie voor meer informatie. |
AuthenticationDisplayName |
null |
Hiermee stelt u de weergavenaam in die wordt weergegeven aan gebruikers op aanmeldingspagina's. |
AllowSynchronousIO |
false |
Of synchrone I/O is toegestaan voor de HttpContext.Request en de HttpContext.Response. |
MaxRequestBodySize |
30000000 |
Hiermee haalt of stelt u de maximale grootte van de aanvraagbody voor de HttpRequest. IIS zelf heeft de limiet maxAllowedContentLength die wordt verwerkt vóór de MaxRequestBodySize set in de IISServerOptions. Als u het MaxRequestBodySize wijzigt, heeft dit geen invloed op de maxAllowedContentLength. Verhoog maxAllowedContentLength door een vermelding toe te voegen in web.config om maxAllowedContentLength op een hogere waarde in te stellen. Zie Configuratie voor meer informatie. |
Verschillen tussen in-process en out-of-process hosting
De volgende kenmerken zijn van toepassing bij het hosten in het proces:
IIS HTTP-server (
IISHttpServer) wordt gebruikt in plaats van Kestrel server. Tijdens het proces roeptCreateDefaultBuilderUseIIS aan om het volgende te doen:- Registreer de
IISHttpServer. - Configureer de poort en het basispad waarop de server moet luisteren wanneer deze achter de ASP.NET Core-module wordt uitgevoerd.
- Configureer de host om opstartfouten vast te leggen.
- Registreer de
Het
requestTimeoutkenmerk is niet van toepassing op in-process hosting.Het delen van een app-pool tussen apps wordt niet ondersteund. Gebruik één app-pool per app.
De architectuur (bitness) van de app en de geïnstalleerde runtime (x64 of x86) moet overeenkomen met de architectuur van de app-pool. Bijvoorbeeld, apps die zijn gepubliceerd voor 32-bits (x86) moeten 32-bit ingeschakeld hebben voor hun IIS-toepassingsgroepen. Zie de sectie IIS-site maken voor meer informatie.
Clientverbindingen worden losgekoppeld. Het
HttpContext.RequestAbortedannuleringstoken wordt geannuleerd wanneer de client de verbinding verbreekt.Bij het hosten in in-procesmodus wordt AuthenticateAsync niet intern aangeroepen om een gebruiker te initialiseren. Daarom is een IClaimsTransformation implementatie die na elke verificatie wordt gebruikt om claims te transformeren, niet standaard geactiveerd. Bij het transformeren van claims met een IClaimsTransformation implementatie roept u AddAuthentication aan om authenticatiediensten toe te voegen.
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Server.IIS;
using Microsoft.EntityFrameworkCore;
using RPauth.Data;
var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.Configure<IISServerOptions>(options =>
{
options.AutomaticAuthentication = false;
});
builder.Services.AddTransient<IClaimsTransformation, MyClaimsTransformation>();
builder.Services.AddAuthentication(IISServerDefaults.AuthenticationScheme);
builder.Services.AddRazorPages();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
- Implementaties van webpakketten (één bestand) worden niet ondersteund.
Tijdsinformatie ophalen
Zie Gedetailleerde timing-informatie ophalen met IHttpSysRequestTimingFeature.
Tijdens het hosten van processen wordt een ASP.NET Core-app uitgevoerd in hetzelfde proces als het IIS-werkproces. In-process hosting biedt verbeterde prestaties ten opzichte van out-of-process hosting, omdat aanvragen niet worden geproxied via de loopback-adapter, een netwerkinterface die uitgaand netwerkverkeer terugstuurt naar dezelfde computer.
In het volgende diagram ziet u de relatie tussen IIS, de ASP.NET Core Module en een app die in het proces wordt gehost:
In-process hosting inschakelen
Sinds ASP.NET Core 3.0 is in-process hosting standaard ingeschakeld voor alle apps die zijn geïmplementeerd in IIS.
Als u een app expliciet wilt configureren voor in-process hosting, stelt u de waarde van de <AspNetCoreHostingModel> eigenschap InProcess in op in het projectbestand (.csproj):
<PropertyGroup>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
General architecture
De algemene stroom van een aanvraag is als volgt:
- Een verzoek van het web komt aan bij de kernelmodus HTTP.sys driver.
- Het stuurprogramma stuurt de systeemeigen aanvraag naar IIS op de geconfigureerde poort van de website, meestal 80 (HTTP) of 443 (HTTPS).
- De ASP.NET Core-module ontvangt de systeemeigen aanvraag en geeft deze door aan IIS HTTP Server (
IISHttpServer). IIS HTTP Server is een in-process server-implementatie voor IIS die de aanvraag converteert van systeemeigen naar beheerd.
Nadat de IIS HTTP-server de aanvraag heeft verwerkt:
- De aanvraag wordt verzonden naar de ASP.NET Core-middlewarepijplijn.
- De middleware-pijplijn verwerkt de aanvraag en geeft deze als een
HttpContextexemplaar door aan de logica van de app. - Het antwoord van de app wordt teruggegeven aan IIS via IIS HTTP Server.
- IIS verzendt het antwoord naar de client die de aanvraag heeft gestart.
CreateDefaultBuilder voegt een IServer exemplaar toe door de UseIIS methode aan te roepen om de CoreCLR op te starten en de app binnen het IIS-werkproces (w3wp.exe of iisexpress.exe) te hosten. nl-NL: Prestatietests geven aan dat het hosten van een .NET-app in-proces aanzienlijk hogere aanvraagdoorvoer levert in vergelijking met het hosten van de app out-of-process en het proxien van aanvragen naar Kestrel.
Apps die zijn gepubliceerd als één uitvoerbaar bestand, kunnen niet worden geladen door het in-process hostingmodel.
Application configuration
Als u IIS-opties wilt configureren, moet u een serviceconfiguratie opnemen voor IISServerOptions in ConfigureServices. In het volgende voorbeeld wordt AutomaticAuthentication uitgeschakeld:
services.Configure<IISServerOptions>(options =>
{
options.AutomaticAuthentication = false;
});
| Option | Default | Setting |
|---|---|---|
AutomaticAuthentication |
true |
Als true, stelt de IIS-server HttpContext.User in die is geverifieerd door Windows-verificatie. Wanneer false, biedt de server uitsluitend een identiteit voor HttpContext.User en reageert op uitdagingen wanneer expliciet aangevraagd door de AuthenticationScheme. Windows-verificatie moet zijn ingeschakeld in IIS om AutomaticAuthentication te kunnen functioneren. Zie Windows-verificatie voor meer informatie. |
AuthenticationDisplayName |
null |
Hiermee stelt u de weergavenaam in die wordt weergegeven aan gebruikers op aanmeldingspagina's. |
AllowSynchronousIO |
false |
Of synchrone I/O is toegestaan voor de HttpContext.Request en de HttpContext.Response. |
MaxRequestBodySize |
30000000 |
Hiermee haalt of stelt u de maximale grootte van de aanvraagbody voor de HttpRequest. IIS zelf heeft de limiet maxAllowedContentLength die wordt verwerkt vóór de MaxRequestBodySize set in de IISServerOptions. Als u het MaxRequestBodySize wijzigt, heeft dit geen invloed op de maxAllowedContentLength. Verhoog maxAllowedContentLength door een vermelding toe te voegen in web.config om maxAllowedContentLength op een hogere waarde in te stellen. Zie Configuratie voor meer informatie. |
Verschillen tussen in-process en out-of-process hosting
De volgende kenmerken zijn van toepassing bij het hosten in het proces:
IIS HTTP-server (
IISHttpServer) wordt gebruikt in plaats van Kestrel server. Tijdens het proces roeptCreateDefaultBuilderUseIIS aan om het volgende te doen:- Registreer de
IISHttpServer. - Configureer de poort en het basispad waarop de server moet luisteren wanneer deze achter de ASP.NET Core-module wordt uitgevoerd.
- Configureer de host om opstartfouten vast te leggen.
- Registreer de
Het
requestTimeoutkenmerk is niet van toepassing op in-process hosting.Het delen van een app-pool tussen apps wordt niet ondersteund. Gebruik één app-pool per app.
De architectuur (bitness) van de app en de geïnstalleerde runtime (x64 of x86) moet overeenkomen met de architectuur van de app-pool. Bijvoorbeeld, apps die zijn gepubliceerd voor 32-bits (x86) moeten 32-bit ingeschakeld hebben voor hun IIS-toepassingsgroepen. Zie de sectie IIS-site maken voor meer informatie.
Clientverbindingen worden losgekoppeld. Het
HttpContext.RequestAbortedannuleringstoken wordt geannuleerd wanneer de client de verbinding verbreekt.Bij het hosten in in-procesmodus wordt AuthenticateAsync niet intern aangeroepen om een gebruiker te initialiseren. Daarom is een IClaimsTransformation implementatie die na elke verificatie wordt gebruikt om claims te transformeren, niet standaard geactiveerd. Bij het transformeren van claims met een IClaimsTransformation implementatie roept u AddAuthentication aan om authenticatiediensten toe te voegen.
public void ConfigureServices(IServiceCollection services) { services.AddTransient<IClaimsTransformation, ClaimsTransformer>(); services.AddAuthentication(IISServerDefaults.AuthenticationScheme); } public void Configure(IApplicationBuilder app) { app.UseAuthentication(); }Implementaties van webpakketten (één bestand) worden niet ondersteund.