Hostowanie poza procesem za pomocą usług IIS i ASP.NET Core

Ponieważ aplikacje ASP.NET Core działają w procesie oddzielonym od procesu roboczego usług IIS, moduł ASP.NET Core Module obsługuje zarządzanie procesami. Moduł uruchamia proces na potrzeby aplikacji ASP.NET Core po odebraniu pierwszego żądania i ponownie uruchamia aplikację, jeśli zostanie ona zamknięta lub ulegnie awarii. Jest to zasadniczo takie samo działanie jak w przypadku aplikacji uruchamianych wewnątrz procesu, zarządzanych przez usługę aktywacji procesów systemu Windows (WAS).

Na poniższym diagramie przedstawiono relację między usługami IIS, modułem ASP.NET Core Module i aplikacją hostowaną poza procesem:

ASP.NET Core Module in the out-of-process hosting scenario

  1. Żądania z Internetu docierają do sterownika HTTP.sys trybu jądra.
  2. Sterownik kieruje żądania do usług IIS na skonfigurowanym porcie witryny internetowej. Skonfigurowany port to zwykle 80 (HTTP) lub 443 (HTTPS).
  3. Moduł przekazuje żądania do Kestrel na losowym porcie aplikacji. Losowy port nie jest portem 80 ani 443.

Moduł ASP.NET Core Module określa port za pośrednictwem zmiennej środowiskowej podczas uruchamiania. Rozszerzenie UseIISIntegration konfiguruje serwer do nasłuchiwania w systemie http://localhost:{PORT}. Wykonywane są dodatkowe kontrole, a żądania, które nie pochodzą z modułu, są odrzucane. Moduł nie obsługuje przekazywania HTTPS. Żądania są przekazywane za pośrednictwem protokołu HTTP, nawet jeśli są odbierane przez usługi IIS za pośrednictwem protokołu HTTPS.

Po odebraniu przez Kestrel żądania z modułu żądanie to jest przekazywane do potoku oprogramowania pośredniczącego ASP.NET Core. Potok oprogramowania pośredniczącego obsługuje żądanie i przekazuje je jako wystąpienie obiektu HttpContext do logiki aplikacji. Oprogramowanie pośredniczące dodane przez integrację z usługami IIS aktualizuje schemat, zdalny adres IP i bazę ścieżek, aby uwzględnić przekazanie żądania do serwera Kestrel. Odpowiedź aplikacji jest przekazywana z powrotem do usług IIS, które przekazują ją z powrotem do klienta HTTP, który zainicjował żądanie.

Aby uzyskać wskazówki dotyczące konfiguracji modułu ASP.NET Core Module, zobacz Moduł ASP.NET Core Module (ANCM) dla usług IIS.

Aby uzyskać więcej informacji na temat hostingu, zobacz Host w ASP.NET Core.

Konfiguracja aplikacji

Włączanie składników IISIntegration

Podczas tworzenia hosta w elemencie CreateHostBuilder (Program.cs) wywołaj polecenie CreateDefaultBuilder w celu włączenia integracji usług IIS:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        ...

Aby uzyskać więcej informacji na temat programu CreateDefaultBuilder, zobacz Host ogólny platformy .NET w ASP.NET Core.

Model hostingu poza procesem

Aby skonfigurować opcje usług IIS, dołącz konfigurację usługi dla IISOptions w ConfigureServices. Poniższy przykład uniemożliwia wypełnianie HttpContext.Connection.ClientCertificate przez aplikację:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
Opcja Domyślna Ustawienie
AutomaticAuthentication true Jeśli true, oprogramowanie pośredniczące integracji usług IIS ustawia HttpContext.User uwierzytelniony przez uwierzytelnianie systemu Windows. Jeśli false, oprogramowanie pośredniczące zapewnia tylko tożsamość dla HttpContext.User i odpowiada na wyzwania, gdy jest to jawnie wymagane przez AuthenticationScheme. Uwierzytelnianie systemu Windows musi być włączone w usługach IIS, aby AutomaticAuthentication działała. Aby uzyskać więcej informacji, zobacz temat Uwierzytelnianie systemu Windows.
AuthenticationDisplayName null Ustawia nazwę wyświetlaną pokazywaną użytkownikom na stronach logowania.
ForwardClientCertificate true Jeśli true i nagłówek żądania MS-ASPNETCORE-CLIENTCERT są obecne, HttpContext.Connection.ClientCertificate zostanie wypełniony.

Scenariusze dotyczące serwera proxy i modułu równoważenia obciążenia

Oprogramowanie pośredniczące integracji usług IIS i moduł ASP.NET Core Module są skonfigurowane do przekazywania:

  • Schematu (HTTP/HTTPS).
  • Zdalnego adresu IP, z którego pochodzi żądanie.

Oprogramowanie pośredniczące integracji usług IIS konfiguruje oprogramowanie pośredniczące nagłówków przekazywanych.

Dodatkowa konfiguracja może być wymagana w przypadku aplikacji hostowanych za dodatkowymi serwerami proxy i modułami równoważenia obciążenia. Aby uzyskać więcej informacji, zobacz Konfigurowanie platformy ASP.NET Core pod kątem pracy z serwerami proxy i modułami równoważenia obciążenia.

Model hostingu poza procesem

Aby skonfigurować aplikację na potrzeby hostingu poza procesem, ustaw wartość <AspNetCoreHostingModel> właściwości na OutOfProcess w pliku projektu (.csproj):

<PropertyGroup>
  <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>

Hostowanie procesów jest ustawiane na InProcesswartość , która jest wartością domyślną.

Wartość <AspNetCoreHostingModel> jest niewrażliwa na wielkość liter, więc inprocess i outofprocess są prawidłowymi wartościami.

Kestrel Serwer jest używany zamiast serwera HTTP usług IIS (IISHttpServer).

W przypadku braku procesu CreateDefaultBuilder wywołania UseIISIntegration :

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

Nazwa procesu

Process.GetCurrentProcess().ProcessName raporty w3wp/iisexpress (proces) lub dotnet (poza procesem).

Wiele modułów natywnych, takich jak uwierzytelnianie systemu Windows, pozostaje aktywnych. Aby dowiedzieć się więcej o modułach usług IIS aktywnych przy użyciu modułu podstawowego ASP.NET, zobacz Moduły usług IIS z ASP.NET Core.

Moduł ASP.NET Core może również wykonywać następujące czynności:

  • Ustaw zmienne środowiskowe dla procesu roboczego.
  • Rejestrowanie danych wyjściowych stdout w magazynie plików w celu rozwiązywania problemów z uruchamianiem.
  • Przekazywanie tokenów uwierzytelniania systemu Windows.