Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Note
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z aktualną wersją, zobacz artykuł w wersji .NET 10.
Warning
Ta wersja ASP.NET Core nie jest już obsługiwana. Aby uzyskać więcej informacji, zobacz zasady pomocy technicznej platformy .NET i platformy .NET Core. Aby zapoznać się z aktualną wersją, zobacz artykuł w wersji .NET 10.
Hosting w procesie uruchamia aplikację ASP.NET Core w tym samym procesie co proces roboczy usług IIS. Hosting wewnątrz procesu zapewnia lepszą wydajność niż hosting poza procesem, ponieważ żądania nie są przekazywane za pośrednictwem adaptera sprzężenia zwrotnego, czyli interfejsu sieciowego przekazującego wychodzący ruch sieciowy z powrotem do tej samej maszyny.
Na poniższym diagramie przedstawiono relację między usługami IIS, modułem ASP.NET Core Module i aplikacją hostowaną wewnątrz procesu:
Włączanie hostingu w procesie
Od ASP.NET Core 3.0 hosting w procesie jest domyślnie włączony dla wszystkich aplikacji wdrożonych w usługach IIS.
Aby jawnie skonfigurować aplikację do hostowania w procesie, ustaw wartość <AspNetCoreHostingModel> właściwości na InProcess w pliku projektu (.csproj):
<PropertyGroup>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
Ogólna architektura
Ogólny przepływ żądania jest następujący:
- Żądanie jest dostarczane z Internetu do sterownika HTTP.sys trybu jądra.
- Sterownik kieruje żądanie natywne do usług IIS na skonfigurowanym porcie witryny internetowej, zazwyczaj 80 (HTTP) lub 443 (HTTPS).
- Moduł ASP.NET Core Module odbiera żądanie natywne i przekazuje je do serwera HTTP usług IIS (
IISHttpServer). Serwer HTTP usług IIS to implementacja serwera przetwarzania wewnątrz procesu dla usług IIS, która konwertuje żądanie z natywnego na zarządzane.
Po zakończeniu przetwarzania żądania przez serwer HTTP usług IIS:
- Żądanie jest wysyłane do potoku oprogramowania pośredniczącego ASP.NET Core.
- Potok oprogramowania pośredniczącego obsługuje żądanie i przekazuje je jako wystąpienie obiektu
HttpContextdo logiki aplikacji. - Odpowiedź aplikacji jest przekazywana z powrotem do usług IIS za pośrednictwem serwera HTTP usług IIS.
- Usługi IIS wysyłają odpowiedź do klienta, który zainicjował żądanie.
CreateDefaultBuilder dodaje wystąpienie IServer, wywołując metodę UseIIS, aby uruchomić moduł CoreCLR i hostować aplikację wewnątrz procesu roboczego usług IIS (w3wp.exe lub iisexpress.exe). Testy wydajności wskazują, że hostowanie aplikacji .NET wewnątrz procesu zapewnia znacznie wyższą przepustowość żądań w porównaniu do hostowania aplikacji poza procesem i kierowania żądań przez proxy do Kestrel.
Aplikacje opublikowane jako pojedynczy plik wykonywalny nie mogą być ładowane przez model hostingu wewnątrz procesu.
Konfiguracja aplikacji
Aby skonfigurować opcje usług IIS, dołącz konfigurację usługi dla IISServerOptions w Program.cs. Poniższy przykład wyłącza funkcję AutomaticAuthentication:
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 |
Jeśli true, program IIS Server ustawia HttpContext.User uwierzytelnione przez uwierzytelnianie systemu Windows. Jeśli false, serwer zapewnia tożsamość tylko dla HttpContext.User i reaguje na wyzwania, gdy zostanie o to wyraźnie poproszony przez AuthenticationScheme. Uwierzytelnianie systemu Windows musi być włączone w usługach IIS, aby AutomaticAuthentication działała. Aby uzyskać więcej informacji, zobacz Uwierzytelnianie systemu Windows. |
AuthenticationDisplayName |
null |
Ustawia nazwę wyświetlaną pokazywaną użytkownikom na stronach logowania. |
AllowSynchronousIO |
false |
Czy synchroniczne operacje we/wy są dozwolone dla elementu HttpContext.Request i HttpContext.Response. |
MaxRequestBodySize |
30000000 |
Pobiera lub ustawia maksymalny rozmiar treści żądania dla elementu HttpRequest. Należy pamiętać, że same usługi IIS mają limit maxAllowedContentLength, który zostanie przetworzony przed ustawieniem MaxRequestBodySize w elemencie IISServerOptions. Zmiana MaxRequestBodySize nie wpłynie na element maxAllowedContentLength. Aby zwiększyć wartość maxAllowedContentLength, dodaj wpis w web.config, aby ustawić maxAllowedContentLength na wyższą wartość. Aby uzyskać więcej informacji, zobacz pozycję Konfiguracja. |
Różnice między hostingu procesów i poza procesem
Podczas hostowania w procesie obowiązują następujące cechy:
Serwer HTTP usług IIS (
IISHttpServer) jest używany zamiast Kestrel serwera. W przypadku procesuCreateDefaultBuilderwywołania UseIIS metody :- Zarejestruj plik
IISHttpServer. - Skonfiguruj port i ścieżkę podstawową, na którym serwer powinien nasłuchiwać podczas uruchamiania za modułem ASP.NET Core.
- Skonfiguruj hosta do przechwytywania błędów uruchamiania.
- Zarejestruj plik
Atrybut
requestTimeoutnie ma zastosowania do hostingu w procesie.Udostępnianie puli aplikacji między aplikacjami nie jest obsługiwane. Użyj jednej puli aplikacji na aplikację.
Architektura (bitowość) aplikacji i zainstalowane środowisko uruchomieniowe (x64 lub x86) musi być zgodne z architekturą puli aplikacji. Na przykład aplikacje opublikowane dla 32-bitowych (x86) muszą mieć włączone 32-bitowe pule aplikacji usług IIS. Aby uzyskać więcej informacji, zobacz sekcję Tworzenie witryny usług IIS.
Wykryto rozłączenia klienta. Token
HttpContext.RequestAbortedanulowania jest anulowany po rozłączeniu klienta.W przypadku hostowania procesu nie jest wywoływana wewnętrznie, AuthenticateAsync aby zainicjować użytkownika. W związku z tym implementacja IClaimsTransformation używana do przekształcania oświadczeń po każdym uwierzytelnieniu nie jest domyślnie aktywowana. Podczas przekształcania oświadczeń przy użyciu implementacji wywołaj metodę IClaimsTransformationAddAuthentication , aby dodać usługi uwierzytelniania:
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();
- Wdrożenia pakietu internetowego (pojedynczego pliku) nie są obsługiwane.
Uzyskiwanie informacji o chronometrażu
Zobacz Uzyskiwanie szczegółowych informacji o chronometrażu za pomocą funkcji IHttpSysRequestTimingFeature.
Hosting w procesie uruchamia aplikację ASP.NET Core w tym samym procesie co proces roboczy usług IIS. Hosting wewnątrz procesu zapewnia lepszą wydajność niż hosting poza procesem, ponieważ żądania nie są przekazywane za pośrednictwem adaptera sprzężenia zwrotnego, czyli interfejsu sieciowego przekazującego wychodzący ruch sieciowy z powrotem do tej samej maszyny.
Na poniższym diagramie przedstawiono relację między usługami IIS, modułem ASP.NET Core Module i aplikacją hostowaną wewnątrz procesu:
Włączanie hostingu w procesie
Od ASP.NET Core 3.0 hosting w procesie jest domyślnie włączony dla wszystkich aplikacji wdrożonych w usługach IIS.
Aby jawnie skonfigurować aplikację do hostowania w procesie, ustaw wartość <AspNetCoreHostingModel> właściwości na InProcess w pliku projektu (.csproj):
<PropertyGroup>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
Ogólna architektura
Ogólny przepływ żądania jest następujący:
- Żądanie jest dostarczane z Internetu do sterownika HTTP.sys trybu jądra.
- Sterownik kieruje żądanie natywne do usług IIS na skonfigurowanym porcie witryny internetowej, zazwyczaj 80 (HTTP) lub 443 (HTTPS).
- Moduł ASP.NET Core Module odbiera żądanie natywne i przekazuje je do serwera HTTP usług IIS (
IISHttpServer). Serwer HTTP usług IIS to implementacja serwera przetwarzania wewnątrz procesu dla usług IIS, która konwertuje żądanie z natywnego na zarządzane.
Po zakończeniu przetwarzania żądania przez serwer HTTP usług IIS:
- Żądanie jest wysyłane do potoku oprogramowania pośredniczącego ASP.NET Core.
- Potok oprogramowania pośredniczącego obsługuje żądanie i przekazuje je jako wystąpienie obiektu
HttpContextdo logiki aplikacji. - Odpowiedź aplikacji jest przekazywana z powrotem do usług IIS za pośrednictwem serwera HTTP usług IIS.
- Usługi IIS wysyłają odpowiedź do klienta, który zainicjował żądanie.
CreateDefaultBuilder dodaje wystąpienie IServer, wywołując metodę UseIIS, aby uruchomić moduł CoreCLR i hostować aplikację wewnątrz procesu roboczego usług IIS (w3wp.exe lub iisexpress.exe). Testy wydajności wskazują, że hostowanie aplikacji .NET wewnątrz procesu zapewnia znacznie wyższą przepustowość żądań w porównaniu do hostowania aplikacji poza procesem i kierowania żądań przez proxy do Kestrel.
Aplikacje opublikowane jako pojedynczy plik wykonywalny nie mogą być ładowane przez model hostingu wewnątrz procesu.
Konfiguracja aplikacji
Aby skonfigurować opcje usług IIS, dołącz konfigurację usługi dla IISServerOptions w ConfigureServices. Poniższy przykład wyłącza funkcję AutomaticAuthentication:
services.Configure<IISServerOptions>(options =>
{
options.AutomaticAuthentication = false;
});
| Option | Default | Setting |
|---|---|---|
AutomaticAuthentication |
true |
Jeśli true, program IIS Server ustawia HttpContext.User uwierzytelnione przez uwierzytelnianie systemu Windows. Jeśli false, serwer zapewnia tożsamość tylko dla HttpContext.User i reaguje na wyzwania, gdy zostanie o to wyraźnie poproszony przez AuthenticationScheme. Uwierzytelnianie systemu Windows musi być włączone w usługach IIS, aby AutomaticAuthentication działała. Aby uzyskać więcej informacji, zobacz Uwierzytelnianie systemu Windows. |
AuthenticationDisplayName |
null |
Ustawia nazwę wyświetlaną pokazywaną użytkownikom na stronach logowania. |
AllowSynchronousIO |
false |
Czy synchroniczne operacje we/wy są dozwolone dla elementu HttpContext.Request i HttpContext.Response. |
MaxRequestBodySize |
30000000 |
Pobiera lub ustawia maksymalny rozmiar treści żądania dla elementu HttpRequest. Należy pamiętać, że same usługi IIS mają limit maxAllowedContentLength, który zostanie przetworzony przed ustawieniem MaxRequestBodySize w elemencie IISServerOptions. Zmiana MaxRequestBodySize nie wpłynie na element maxAllowedContentLength. Aby zwiększyć wartość maxAllowedContentLength, dodaj wpis w web.config, aby ustawić maxAllowedContentLength na wyższą wartość. Aby uzyskać więcej informacji, zobacz pozycję Konfiguracja. |
Różnice między hostingu procesów i poza procesem
Podczas hostowania w procesie obowiązują następujące cechy:
Serwer HTTP usług IIS (
IISHttpServer) jest używany zamiast Kestrel serwera. W przypadku procesuCreateDefaultBuilderwywołania UseIIS metody :- Zarejestruj plik
IISHttpServer. - Skonfiguruj port i ścieżkę podstawową, na którym serwer powinien nasłuchiwać podczas uruchamiania za modułem ASP.NET Core.
- Skonfiguruj hosta do przechwytywania błędów uruchamiania.
- Zarejestruj plik
Atrybut
requestTimeoutnie ma zastosowania do hostingu w procesie.Udostępnianie puli aplikacji między aplikacjami nie jest obsługiwane. Użyj jednej puli aplikacji na aplikację.
Architektura (bitowość) aplikacji i zainstalowane środowisko uruchomieniowe (x64 lub x86) musi być zgodne z architekturą puli aplikacji. Na przykład aplikacje opublikowane dla 32-bitowych (x86) muszą mieć włączone 32-bitowe pule aplikacji usług IIS. Aby uzyskać więcej informacji, zobacz sekcję Tworzenie witryny usług IIS.
Wykryto rozłączenia klienta. Token
HttpContext.RequestAbortedanulowania jest anulowany po rozłączeniu klienta.W przypadku hostowania procesu nie jest wywoływana wewnętrznie, AuthenticateAsync aby zainicjować użytkownika. W związku z tym implementacja IClaimsTransformation używana do przekształcania oświadczeń po każdym uwierzytelnieniu nie jest domyślnie aktywowana. Podczas przekształcania oświadczeń przy użyciu implementacji wywołaj metodę IClaimsTransformationAddAuthentication , aby dodać usługi uwierzytelniania:
public void ConfigureServices(IServiceCollection services) { services.AddTransient<IClaimsTransformation, ClaimsTransformer>(); services.AddAuthentication(IISServerDefaults.AuthenticationScheme); } public void Configure(IApplicationBuilder app) { app.UseAuthentication(); }Wdrożenia pakietu internetowego (pojedynczego pliku) nie są obsługiwane.
ASP.NET Core