Hosten von ASP.NET Core unter Windows mit IISHost ASP.NET Core on Windows with IIS

Ein Tutorial zum Veröffentlichen einer ASP.NET Core-App auf einem IIS-Server finden Sie unter Veröffentlichen einer ASP.NET Core-App in IIS.For a tutorial experience on publishing an ASP.NET Core app to an IIS server, see Veröffentlichen einer ASP.NET Core-App in IIS.

Installieren des .NET Core Hosting-PaketsInstall the .NET Core Hosting Bundle

Unterstützte BetriebssystemeSupported operating systems

Die folgenden Betriebssysteme werden unterstützt:The following operating systems are supported:

  • Windows 7 oder höherWindows 7 or later
  • Windows Server 2012 R2 oder höherWindows Server 2012 R2 or later

Der HTTP.sys-Server (zuvor WebListener genannt) funktioniert nicht in einer Reverseproxykonfiguration mit IIS.HTTP.sys server (formerly called WebListener) doesn't work in a reverse proxy configuration with IIS. Verwenden Sie den Kestrel-Server.Use the Kestrel server.

Weitere Informationen zum Hosten in Azure finden Sie unter Bereitstellen von ASP.NET Core-Apps in Azure App Service.For information on hosting in Azure, see Bereitstellen von ASP.NET Core-Apps in Azure App Service.

Anleitungen zur Problembehandlung finden Sie unter Problembehandlung und Debuggen von ASP.NET Core-Projekten.For troubleshooting guidance, see Problembehandlung und Debuggen von ASP.NET Core-Projekten.

Unterstützte PlattformenSupported platforms

Apps, die für Bereitstellungen für 32-Bit-Systeme (x86) oder 64-Bit-Systeme (x64) veröffentlicht wurden, werden unterstützt.Apps published for 32-bit (x86) or 64-bit (x64) deployment are supported. Stellen Sie eine 32-Bit-App mit einem .NET Core SDK für 32-Bit (x86) bereit, es sei denn:Deploy a 32-bit app with a 32-bit (x86) .NET Core SDK unless the app:

  • Die App benötigt den größeren Adressraum des virtuellen Arbeitsspeichers, der 64-Bit-Apps zur Verfügung steht.Requires the larger virtual memory address space available to a 64-bit app.
  • Die App erfordert den größeren IIS-Stapel.Requires the larger IIS stack size.
  • Die App weist native 64-Bit-Abhängigkeiten auf.Has 64-bit native dependencies.

Für Apps, die für 32 Bit (x86) veröffentlicht wurden, müssen 32 Bit für ihre IIS-Anwendungspools aktiviert sein.Apps published for 32-bit (x86) must have 32-bit enabled for their IIS Application Pools. Weitere Informationen finden Sie im Abschnitt Erstellen der IIS-Website.For more information, see the Create the IIS site section.

Verwenden Sie ein .NET Core SDK für 64-Bit (x64), um eine 64-Bit-App zu veröffentlichen.Use a 64-bit (x64) .NET Core SDK to publish a 64-bit app. Auf dem Hostsystem muss eine 64-Bit-Runtime vorhanden sein.A 64-bit runtime must be present on the host system.

HostingmodelleHosting models

In-Process-HostingmodellIn-process hosting model

Beim Einsatz von In-Process-Hosting wird eine ASP.NET Core-App im gleichen Prozess wie ihr IIS-Arbeitsprozess ausgeführt.Using in-process hosting, an ASP.NET Core app runs in the same process as its IIS worker process. Durch das In-Process-Hosting wird die Leistung des Out-of-Process-Hosting verbessert, da Anforderungen nicht per Proxy über den Loopbackadapter weitergeleitet werden. Dabei handelt es sich um eine Netzwerkschnittstelle, die ausgehenden Netzwerkdatenverkehr zum selben Computer zurück leitet.In-process hosting provides improved performance over out-of-process hosting because requests aren't proxied over the loopback adapter, a network interface that returns outgoing network traffic back to the same machine. IIS erledigt das Prozessmanagement mit dem Windows-Prozessaktivierungsdienst (Process Activation Service, WAS).IIS handles process management with the Windows Process Activation Service (WAS).

Das ASP.NET Core-Modul:The ASP.NET Core Module:

  • Führt die Initialisierung von Apps aus.Performs app initialization.
    • Lädt die CoreCLR.Loads the CoreCLR.
    • Ruft Program.Main.Calls Program.Main.
  • Behandelt die Lebensdauer der nativen IIS-Anforderung.Handles the lifetime of the IIS native request.

Das folgende Diagramm zeigt die Beziehung zwischen IIS, dem ASP.NET Core-Modul und einer In-Process gehosteten App:The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted in-process:

Das ASP.NET Core-Modul im In-Process-Hostingszenario

  1. Eine Anforderung geht aus dem Web beim HTTP.sys-Treiber im Kernelmodus ein.A request arrives from the web to the kernel-mode HTTP.sys driver.
  2. Der Treiber leitet die native Anforderung an IIS auf dem konfigurierten Port der Webseite weiter, normalerweise 80 (HTTP) oder 443 (HTTPS).The driver routes the native request to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS).
  3. Das ASP.NET Core-Modul empfängt die native Anforderung und übergibt sie an den IIS-HTTP-Server (IISHttpServer).The ASP.NET Core Module receives the native request and passes it to IIS HTTP Server (IISHttpServer). Der IIS-HTTP-Server ist eine prozessinterne Serverimplementierung für IIS, die die Anforderung vom nativen Modus in den verwalteten Modus konvertiert.IIS HTTP Server is an in-process server implementation for IIS that converts the request from native to managed.

Nach der Verarbeitung der Anforderung durch den IIS-HTTP-Server:After the IIS HTTP Server processes the request:

  1. Die Anforderung wird an die ASP.NET Core-Middlewarepipeline gesendet.The request is sent to the ASP.NET Core middleware pipeline.
  2. Die Middleware-Pipeline behandelt die Anforderung und gibt sie als HttpContext-Instanz an die App-Logik weiter.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic.
  3. Die Antwort der App wird über den IIS-HTTP-Server zurück an IIS übergeben.The app's response is passed back to IIS through IIS HTTP Server.
  4. IIS übermittelt die Antwort an den Client, der die Anforderung initiiert hat.IIS sends the response to the client that initiated the request.

Das In-Process-Hosting ist eine wählbare Option für vorhandene Apps.In-process hosting is opt-in for existing apps. Die ASP.NET Core-Webvorlagen verwenden das In-Process-Hostingmodell.The ASP.NET Core web templates use the in-process hosting model.

CreateDefaultBuilder fügt eine IServer-Instanz hinzu, indem die UseIIS-Methode aufgerufen wird, um die CoreCLR zu starten und die App im IIS-Workerprozess zu hosten (w3wp.exe oder iisexpress.exe).CreateDefaultBuilder adds an IServer instance by calling the UseIIS method to boot the CoreCLR and host the app inside of the IIS worker process (w3wp.exe or iisexpress.exe). Leistungstests weisen darauf hin, dass das In-Process-Hosting einer .NET Core-App einen weitaus höheren Anforderungsdurchsatz im Vergleich zum Out-of-Process-Hosting der App mit Weiterleitung der Anforderungen über einen Proxy an Kestrel bietet.Performance tests indicate that hosting a .NET Core app in-process delivers significantly higher request throughput compared to hosting the app out-of-process and proxying requests to Kestrel.

Apps, die als einzelne ausführbare Datei veröffentlicht wurden, können vom In-Prozess-Hostingmodell nicht geladen werden.Apps published as a single file executable can't be loaded by the in-process hosting model.

Out-of-Process-HostingmodellOut-of-process hosting model

Da ASP.NET Core-Apps in einem Prozess getrennt vom IIS-Arbeitsprozess ausgeführt werden, führt das ASP.NET Core-Modul die Prozessverwaltung durch.Because ASP.NET Core apps run in a process separate from the IIS worker process, the ASP.NET Core Module handles process management. Das Modul startet den Prozess für die ASP.NET Core-App, wenn die erste Anforderung eingeht und startet die App neu, wenn sie heruntergefahren wird oder abstürzt.The module starts the process for the ASP.NET Core app when the first request arrives and restarts the app if it shuts down or crashes. Dies ist im Prinzip das gleiche Verhalten wie bei Apps, die prozessintern ausgeführt und durch den Windows-Prozessaktivierungsdienst (WAS) verwaltet werden.This is essentially the same behavior as seen with apps that run in-process that are managed by the Windows Process Activation Service (WAS).

Das folgende Diagramm zeigt die Beziehung zwischen IIS, dem ASP.NET Core-Modul und einer Out-of-Process gehosteten App:The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted out-of-process:

Das ASP.NET Core-Modul im Out-of-Process-Hostingszenario

  1. Anforderungen gehen aus dem Internet an den Treiber „HTTP.sys“ ein, der im Kernelmodus betrieben wird.Requests arrive from the web to the kernel-mode HTTP.sys driver.
  2. Der Treiber leitet die Anforderungen an IIS auf dem konfigurierten Port der Webseite weiter.The driver routes the requests to IIS on the website's configured port. Der konfigurierte Port ist normalerweise 80 (HTTP) oder 443 (HTTPS).The configured port is usually 80 (HTTP) or 443 (HTTPS).
  3. Das Modul leitet die Anforderung an Kestrel auf einem zufälligen Port der App weiter.The module forwards the requests to Kestrel on a random port for the app. Der zufällige Port entspricht nicht Port 80 oder 443.The random port isn't 80 or 443.

Das ASP.NET Core-Modul gibt den Port beim Start über eine Umgebungsvariable an.The ASP.NET Core Module specifies the port via an environment variable at startup. Mit der UseIISIntegration-Erweiterung wird der Server so konfiguriert, dass er an http://localhost:{PORT} lauscht.The UseIISIntegration extension configures the server to listen on http://localhost:{PORT}. Zusätzliche Überprüfungen werden durchgeführt. Anforderungen, die nicht vom Modul stammen, werden abgelehnt.Additional checks are performed, and requests that don't originate from the module are rejected. Das Modul unterstützt die HTTPS-Weiterleitung nicht.The module doesn't support HTTPS forwarding. Deshalb werden Anforderungen über HTTP weitergeleitet, selbst wenn sie von IIS über HTTPS empfangen wurden.Requests are forwarded over HTTP even if received by IIS over HTTPS.

Nachdem Kestrel die Anforderung vom Modul erhalten hat, wird die Anforderung an die ASP.NET Core-Middlewarepipeline weitergeleitet.After Kestrel picks up the request from the module, the request is forwarded into the ASP.NET Core middleware pipeline. Die Middleware-Pipeline behandelt die Anforderung und gibt sie als HttpContext-Instanz an die App-Logik weiter.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. Die durch IIS-Integration hinzugefügte Middleware aktualisiert das Schema, die Remote-IP und die Pfadbasis, um der Weiterleitung der Anforderung an Kestrel Rechnung zu tragen.Middleware added by IIS Integration updates the scheme, remote IP, and pathbase to account for forwarding the request to Kestrel. Die Antwort der App wird dann an IIS zurückgegeben und an den HTTP-Client weitergeleitet, der die Anforderung initiiert hat.The app's response is passed back to IIS, which forwards it back to the HTTP client that initiated the request.

Einen Konfigurationsleitfaden für das ASP.NET Core-Modul finden Sie unter ASP.NET Core-Modul.For ASP.NET Core Module configuration guidance, see ASP.NET Core-Modul.

Weitere Informationen zum Hosten finden Sie unter Hosten in ASP.NET Core.For more information on hosting, see Host in ASP.NET Core.

AnwendungskonfigurationApplication configuration

Aktivieren der IISIntegration-KomponentenEnable the IISIntegration components

Rufen Sie beim Erstellen eines Hosts in CreateHostBuilder (Program.cs) CreateDefaultBuilder ab, um die IIS-Integration zu aktivieren:When building a host in CreateHostBuilder (Program.cs), call CreateDefaultBuilder to enable IIS integration:

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

Weitere Informationen zu CreateDefaultBuilder finden Sie unter Generischer .NET-Host.For more information on CreateDefaultBuilder, see Generischer .NET-Host.

IIS-OptionenIIS options

In-Process-HostingmodellIn-process hosting model

Schließen Sie zur Konfiguration von IIS-Serveroptionen eine Dienstkonfiguration für IISServerOptions in ConfigureServices ein.To configure IIS Server options, include a service configuration for IISServerOptions in ConfigureServices. Mit dem folgenden Beispiel wird AutomaticAuthentication deaktiviert:The following example disables AutomaticAuthentication:

services.Configure<IISServerOptions>(options => 
{
    options.AutomaticAuthentication = false;
});
OptionOption StandardDefault EinstellungSetting
AutomaticAuthentication true Bei Festlegung auf true legt der Server den per Windows-Authentifizierung authentifizierten HttpContext.User fest.If true, IIS Server sets the HttpContext.User authenticated by Windows Authentication. Bei Festlegung auf false stellt der Server nur eine Identität für HttpContext.User bereit und antwortet auf explizite Anforderungen durch AuthenticationScheme.If false, the server only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Die Windows-Authentifizierung muss in IIS aktiviert sein, damit AutomaticAuthentication funktioniert.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Weitere Informationen finden Sie unter Windows-Authentifizierung.For more information, see Windows Authentication.
AuthenticationDisplayName null Legt den Anzeigename fest, der Benutzern auf Anmeldungsseiten angezeigt wirdSets the display name shown to users on login pages.
AllowSynchronousIO false Steuert, ob synchrone E/A-Vorgänge für HttpContext.Request und HttpContext.Response zulässig sind.Whether synchronous I/O is allowed for the HttpContext.Request and the HttpContext.Response.
MaxRequestBodySize 30000000 Dient zum Abrufen oder Festlegen der maximalen Größe des Anforderungstexts für HttpRequest.Gets or sets the max request body size for the HttpRequest. Beachten Sie, dass IIS selbst das Limit maxAllowedContentLength aufweist, das vor der in den IISServerOptions festgelegten MaxRequestBodySize verarbeitet wird.Note that IIS itself has the limit maxAllowedContentLength which will be processed before the MaxRequestBodySize set in the IISServerOptions. Das Ändern von MaxRequestBodySize hat keine Auswirkungen auf maxAllowedContentLength.Changing the MaxRequestBodySize won't affect the maxAllowedContentLength. Zum Erhöhen von maxAllowedContentLength fügen Sie einen Eintrag in web.config hinzu, um maxAllowedContentLength auf einen höheren Wert festzulegen.To increase maxAllowedContentLength, add an entry in the web.config to set maxAllowedContentLength to a higher value. Weitere Informationen hierzu finden Sie unter Konfiguration.For more details, see Configuration.

Out-of-Process-HostingmodellOut-of-process hosting model

Schließen Sie zur Konfiguration von IIS-Optionen eine Dienstkonfiguration für IISOptions in ConfigureServices ein.To configure IIS options, include a service configuration for IISOptions in ConfigureServices. Im folgenden Beispiel wird Verhindert, dass die App HttpContext.Connection.ClientCertificate auffüllt:The following example prevents the app from populating HttpContext.Connection.ClientCertificate:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
OptionOption StandardDefault EinstellungSetting
AutomaticAuthentication true Bei Festlegung auf true legt die Middleware für die IIS-Integration den per Windows-Authentifizierung authentifizierten HttpContext.User fest.If true, IIS Integration Middleware sets the HttpContext.User authenticated by Windows Authentication. Bei Festlegung auf false stellt die Middleware nur eine Identität für HttpContext.User bereit und antwortet auf explizite Anforderungen durch AuthenticationScheme.If false, the middleware only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Die Windows-Authentifizierung muss in IIS aktiviert sein, damit AutomaticAuthentication funktioniert.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Weitere Informationen finden Sie im Thema Windows-Authentifizierung.For more information, see the Windows Authentication topic.
AuthenticationDisplayName null Legt den Anzeigename fest, der Benutzern auf Anmeldungsseiten angezeigt wirdSets the display name shown to users on login pages.
ForwardClientCertificate true Wenn diese Option true ist und der Anforderungsheader MS-ASPNETCORE-CLIENTCERT vorhanden ist, wird das HttpContext.Connection.ClientCertificate aufgefüllt.If true and the MS-ASPNETCORE-CLIENTCERT request header is present, the HttpContext.Connection.ClientCertificate is populated.

Proxyserver und LastenausgleichsszenarienProxy server and load balancer scenarios

Die Middleware für die IIS-Integration und das ASP.NET Core-Modul sind zur Weiterleitung desThe IIS Integration Middleware and the ASP.NET Core Module are configured to forward the:

  • Schemas (HTTP/HTTPS)Scheme (HTTP/HTTPS).
  • und der Remote-IP-Adresse konfiguriert, von der die Anforderung stammt.Remote IP address where the request originated.

Die Middleware für die IIS-Integration konfiguriert die Middleware für weitergeleitete Header.The IIS Integration Middleware configures Forwarded Headers Middleware.

Möglicherweise ist zusätzliche Konfiguration für Apps erforderlich, die hinter weiteren Proxyservern und Lastenausgleichsmodulen (Load Balancer) gehostet werden.Additional configuration might be required for apps hosted behind additional proxy servers and load balancers. Weitere Informationen hierzu feinden Sie unter Konfigurieren von ASP.NET Core zur Verwendung mit Proxyservern und Lastenausgleich.For more information, see Configure ASP.NET Core to work with proxy servers and load balancers.

Datei „web.config“web.config file

Mit der Datei web.config wird das ASP.NET Core-Modul konfiguriert.The web.config file configures the ASP.NET Core Module. Die Erstellung, Transformation und Veröffentlichung der Datei web.config wird bei der Projektveröffentlichung von einem MSBuild-Ziel (_TransformWebConfig) abgewickelt.Creating, transforming, and publishing the web.config file is handled by an MSBuild target (_TransformWebConfig) when the project is published. Dieses Ziel ist in den Web SDK-Zielen (Microsoft.NET.Sdk.Web) vorhanden.This target is present in the Web SDK targets (Microsoft.NET.Sdk.Web). Das SDK wird am Anfang der Projektdatei festgelegt:The SDK is set at the top of the project file:

<Project Sdk="Microsoft.NET.Sdk.Web">

Wenn im Projekt keine Datei namens web.config vorhanden ist, wird sie zur Konfiguration des ASP.NET Core-Moduls mit dem richtigen processPath- und arguments-Attribut erstellt und in die veröffentlichte Ausgabe verschoben.If a web.config file isn't present in the project, the file is created with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output.

Ist eine Datei namens web.config im Projekt vorhanden, wird sie zur Konfiguration des ASP.NET Core-Moduls mit dem richtigen processPath- und arguments-Attribut transformiert und in die veröffentlichte Ausgabe verschoben.If a web.config file is present in the project, the file is transformed with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output. Die Transformation ändert die IIS-Konfigurationseinstellungen in der Datei nicht.The transformation doesn't modify IIS configuration settings in the file.

Die Datei web.config kann zusätzliche IIS-Konfigurationseinstellungen zum Steuern der aktiven IIS-Module bereitstellen.The web.config file may provide additional IIS configuration settings that control active IIS modules. Informationen zu IIS-Modulen, die Anforderungen mit ASP.NET Core-Apps verarbeiten können, finden Sie im Thema IIS-Module.For information on IIS modules that are capable of processing requests with ASP.NET Core apps, see the IIS modules topic.

Verwenden Sie die Eigenschaft <IsTransformWebConfigDisabled> in der Projektdatei, um zu verhindern, dass das Web-SDK die Datei web.config transformiert:To prevent the Web SDK from transforming the web.config file, use the <IsTransformWebConfigDisabled> property in the project file:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Wenn die Transformation der Datei durch das Web-SDK deaktiviert wird, müssen die Attribute processPath und arguments manuell durch den Entwickler festgelegt werden.When disabling the Web SDK from transforming the file, the processPath and arguments should be manually set by the developer. Weitere Informationen finden Sie unter ASP.NET Core-Modul.For more information, see ASP.NET Core-Modul.

Speicherort der Datei „web.config“web.config file location

Zum Erstellen des ASP.NET Core-Moduls muss die Datei web.config im Inhaltsstammpfad (normalerweise dem App-Basispfad) der bereitgestellten App vorhanden sein.In order to set up the ASP.NET Core Module correctly, the web.config file must be present at the content root path (typically the app base path) of the deployed app. Dies ist der physische Pfad der Website, der in IIS bereitgestellt wurde.This is the same location as the website physical path provided to IIS. Die Datei Web.config wird im Stammverzeichnis der App benötigt, um die Veröffentlichung mehrerer Apps mit Web Deploy zu ermöglichen.The web.config file is required at the root of the app to enable the publishing of multiple apps using Web Deploy.

Im physischen Pfad der App sind vertrauliche Dateien vorhanden, z. B. <assembly>.runtimeconfig.json, <assembly>.xml (XML-Dokumentationskommentare) und <assembly>.deps.json.Sensitive files exist on the app's physical path, such as <assembly>.runtimeconfig.json, <assembly>.xml (XML Documentation comments), and <assembly>.deps.json. Wenn die web.config-Datei vorhanden ist und die Website normal startet, werden diese vertraulichen Dateien bei Anforderung nicht offengelegt.When the web.config file is present and the site starts normally, IIS doesn't serve these sensitive files if they're requested. Wenn die Datei web.config fehlt, falsch benannt wurde oder die Website nicht für den normalen Start konfigurieren kann, macht IIS vertrauliche Dateien möglicherweise öffentlich verfügbar.If the web.config file is missing, incorrectly named, or unable to configure the site for normal startup, IIS may serve sensitive files publicly.

Die Datei web.config muss immer in der Bereitstellung vorhanden, richtig benannt und in der Lage sein, die Website für einen normalen Start zu konfigurieren. Entfernen Sie die Datei web.config niemals aus einer Produktionsbereitstellung.The web.config file must be present in the deployment at all times, correctly named, and able to configure the site for normal start up. Never remove the web.config file from a production deployment.

Transformieren von web.configTransform web.config

Wenn Sie web.config beim Veröffentlichen transformieren müssen, finden Sie weitere Informationen unter Transformieren von web.config.If you need to transform web.config on publish, see Transformieren von web.config. Sie müssen möglicherweise web.config beim Veröffentlichen transformieren, um Umgebungsvariablen basierend auf der Konfiguration, dem Profil oder der Umgebung festzulegen.You might need to transform web.config on publish to set environment variables based on the configuration, profile, or environment.

IIS-KonfigurationIIS configuration

Windows Server-BetriebssystemeWindows Server operating systems

Aktivieren Sie die Serverrolle Webserver (IIS) , und richten Sie Rollendienste ein.Enable the Web Server (IIS) server role and establish role services.

  1. Verwenden Sie den Assistenten Rollen und Features hinzufügen im Menü Verwalten oder den Link in Server-Manager.Use the Add Roles and Features wizard from the Manage menu or the link in Server Manager. Aktivieren Sie im Schritt Serverrollen das Kontrollkästchen für Webserver (IIS) .On the Server Roles step, check the box for Web Server (IIS).

    Die Rolle „Webserver (IIS)“ wird im Schritt „Serverrollen auswählen“ ausgewählt.

  2. Nach dem Schritt Features wird der Schritt Rollendienste für Webserver (IIS) geladen.After the Features step, the Role services step loads for Web Server (IIS). Wählen Sie die gewünschten IIS-Rollendienste aus, oder übernehmen Sie die bereitgestellten Standardrollendienste.Select the IIS role services desired or accept the default role services provided.

    Die Standardrollendienste werden im Schritt „Rollendienste auswählen“ ausgewählt.

    Windows-Authentifizierung (optional)Windows Authentication (Optional)
    Um die Windows-Authentifizierung zu aktivieren, erweitern Sie die folgenden Knoten: Webserver > Sicherheit.To enable Windows Authentication, expand the following nodes: Web Server > Security. Wählen Sie das Feature Windows-Authentifizierung aus.Select the Windows Authentication feature. Weitere Informationen finden Sie unter Windows-Authentifizierung <windowsAuthentication> und Konfigurieren der Windows-Authentifizierung.For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets (optional)WebSockets (Optional)
    WebSockets wird mit ASP.NET Core 1.1 oder höher unterstützt.WebSockets is supported with ASP.NET Core 1.1 or later. Um WebSockets zu aktivieren, erweitern Sie die folgenden Knoten: Webserver > Anwendungsentwicklung.To enable WebSockets, expand the following nodes: Web Server > Application Development. Wählen Sie das Feature WebSocket-Protokoll aus.Select the WebSocket Protocol feature. Weitere Informationen finden Sie unter WebSockets.For more information, see WebSockets.

  3. Fahren Sie mit dem Schritt Bestätigung fort, um die Webserverrolle und die Dienste zu installieren.Proceed through the Confirmation step to install the web server role and services. Ein Server-/IIS-Neustart ist nach der Installation der Rolle Webserver (IIS) nicht erforderlich.A server/IIS restart isn't required after installing the Web Server (IIS) role.

Windows-DesktopbetriebssystemeWindows desktop operating systems

Aktivieren Sie die IIS-Verwaltungskonsole und die WWW-Dienste.Enable the IIS Management Console and World Wide Web Services.

  1. Navigieren Sie zu Systemsteuerung > Programme > Programme und Features > Windows-Features aktivieren oder deaktivieren (links auf dem Bildschirm).Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).

  2. Öffnen Sie den Knoten Internetinformationsdienste.Open the Internet Information Services node. Öffnen Sie den Knoten Webverwaltungstools.Open the Web Management Tools node.

  3. Aktivieren Sie das Kontrollkästchen für IIS-Verwaltungskonsole.Check the box for IIS Management Console.

  4. Aktivieren Sie das Kontrollkästchen für WWW-Dienste.Check the box for World Wide Web Services.

  5. Akzeptieren Sie die Standardfeatures für WWW-Dienste, oder passen Sie die IIS-Features an.Accept the default features for World Wide Web Services or customize the IIS features.

    Windows-Authentifizierung (optional)Windows Authentication (Optional)
    Um die Windows-Authentifizierung zu aktivieren, erweitern Sie die folgenden Knoten: WWW-Dienste > Sicherheit.To enable Windows Authentication, expand the following nodes: World Wide Web Services > Security. Wählen Sie das Feature Windows-Authentifizierung aus.Select the Windows Authentication feature. Weitere Informationen finden Sie unter Windows-Authentifizierung <windowsAuthentication> und Konfigurieren der Windows-Authentifizierung.For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets (optional)WebSockets (Optional)
    WebSockets wird mit ASP.NET Core 1.1 oder höher unterstützt.WebSockets is supported with ASP.NET Core 1.1 or later. Um WebSockets zu aktivieren, erweitern Sie die folgenden Knoten: WWW-Dienste > Anwendungsentwicklungsfeatures.To enable WebSockets, expand the following nodes: World Wide Web Services > Application Development Features. Wählen Sie das Feature WebSocket-Protokoll aus.Select the WebSocket Protocol feature. Weitere Informationen finden Sie unter WebSockets.For more information, see WebSockets.

  6. Wenn die IIS-Installation einen Neustart erfordert, starten Sie das System neu.If the IIS installation requires a restart, restart the system.

Die IIS-Verwaltungskonsole und WWW-Dienste werden in Windows-Features ausgewählt.

Installieren des .NET Core Hosting-PaketsInstall the .NET Core Hosting Bundle

Installieren Sie das Paket „.NET Core Hosting“ im Hostsystem.Install the .NET Core Hosting Bundle on the hosting system. Das Paket installiert die .NET Core-Runtime, die .NET Core-Bibliothek und das ASP.NET Core-Modul.The bundle installs the .NET Core Runtime, .NET Core Library, and the ASP.NET Core Module. Mit dem Modul können ASP.NET Core-Apps hinter IIS ausgeführt werden.The module allows ASP.NET Core apps to run behind IIS.

Wichtig

Wenn das Hosting-Paket vor IIS installiert wird, muss die Paketinstallation repariert werden.If the Hosting Bundle is installed before IIS, the bundle installation must be repaired. Führen Sie nach der Installation von IIS erneut den Installer des Hosting-Pakets aus.Run the Hosting Bundle installer again after installing IIS.

Wenn das Hosting-Paket nach der Installation der 64-Bit-Version (x64) von .NET Core installiert wird, kann es den Anschein haben, dass SDKs fehlen (Es wurden keine .NET Core SDKs erkannt).If the Hosting Bundle is installed after installing the 64-bit (x64) version of .NET Core, SDKs might appear to be missing (No .NET Core SDKs were detected). Informationen zum Beheben des Problems finden Sie unter Problembehandlung und Debuggen von ASP.NET Core-Projekten.To resolve the problem, see Problembehandlung und Debuggen von ASP.NET Core-Projekten.

Direkter Download (aktuelle Version)Direct download (current version)

Laden Sie den Installer über folgenden Link herunter:Download the installer using the following link:

Aktueller Installer für das .NET Core Hosting-Paket (direkter Download)Current .NET Core Hosting Bundle installer (direct download)

Frühere Versionen des InstallersEarlier versions of the installer

So erhalten Sie eine frühere Version des Installers:To obtain an earlier version of the installer:

  1. Navigieren Sie zur .NET Core-Downloadseite.Navigate to the Download .NET Core page.
  2. Wählen Sie die gewünschte .NET Core-Version aus.Select the desired .NET Core version.
  3. Suchen Sie in der Spalte Run apps - Runtime (Apps ausführen – Runtime) die Zeile mit der gewünschten .NET Core-RuntimeRuntime-Version.In the Run apps - Runtime column, find the row of the .NET Core runtime version desired.
  4. Laden Sie den Installer über den Link das Hosting Bundle (Hosting-Paket) herunter.Download the installer using the Hosting Bundle link.

Warnung

Einige Installer enthalten Releaseversionen, die das Ende ihres Lebenszyklus erreicht haben und nicht mehr von Microsoft unterstützt werden.Some installers contain release versions that have reached their end of life (EOL) and are no longer supported by Microsoft. Weitere Informationen finden Sie in den Unterstützungsrichtlinien.For more information, see the support policy.

Installieren des Hosting-PaketsInstall the Hosting Bundle

  1. Führen Sie das Installationsprogramm auf dem Server aus.Run the installer on the server. Die folgenden Parameter sind verfügbar, wenn Sie das Installationsprogramm über eine Administratorbefehlsshell ausführen.The following parameters are available when running the installer from an administrator command shell:

    • OPT_NO_ANCM=1: Überspringen Sie die Installation des ASP.NET Core-Moduls.OPT_NO_ANCM=1: Skip installing the ASP.NET Core Module.
    • OPT_NO_RUNTIME=1: Überspringen Sie die Installation der .NET Core-Runtime.OPT_NO_RUNTIME=1: Skip installing the .NET Core runtime. Wird verwendet, wenn der Server nur eigenständige Bereitstellungen (Self-contained Deployments, SCD) hostet.Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_SHAREDFX=1: Überspringen Sie die Installation des freigegebenen ASP.NET-Frameworks (ASP.NET-Runtime).OPT_NO_SHAREDFX=1: Skip installing the ASP.NET Shared Framework (ASP.NET runtime). Wird verwendet, wenn der Server nur eigenständige Bereitstellungen (Self-contained Deployments, SCD) hostet.Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_X86=1: Überspringen Sie die Installation von x86-Runtimes.OPT_NO_X86=1: Skip installing x86 runtimes. Verwenden Sie diesen Parameter, wenn Sie wissen, dass Sie keine 32-Bit-Apps hosten.Use this parameter when you know that you won't be hosting 32-bit apps. Sollte die Möglichkeit bestehen, dass Sie sowohl 32-Bit- als auch 64-Bit-Apps hosten könnten, verwenden Sie diesen Parameter nicht, und installieren Sie beide Runtimes.If there's any chance that you will host both 32-bit and 64-bit apps in the future, don't use this parameter and install both runtimes.
    • OPT_NO_SHARED_CONFIG_CHECK=1: Deaktivieren Sie die Überprüfung auf Verwendung einer gemeinsamen IIS-Konfiguration, wenn sich die gemeinsam genutzte Konfiguration (applicationHost.config) auf demselben Computer wie die IIS-Installation befindet.OPT_NO_SHARED_CONFIG_CHECK=1: Disable the check for using an IIS Shared Configuration when the shared configuration (applicationHost.config) is on the same machine as the IIS installation. Nur für Installationsprogramme für Hostingbundles für ASP.NET Core 2.2 oder höher verfügbar.Only available for ASP.NET Core 2.2 or later Hosting Bundler installers. Weitere Informationen finden Sie unter ASP.NET Core-Modul.For more information, see ASP.NET Core-Modul.
  2. Starten Sie das System neu, oder führen Sie die folgenden Befehle in einer Befehlsshell aus:Restart the system or execute the following commands in a command shell:

    net stop was /y
    net start w3svc
    

    Durch den Neustart von IIS wird eine Änderung an der PATH-Systemeinstellung – einer Umgebungsvariable – angewendet, die durch den Installer vorgenommen wurde.Restarting IIS picks up a change to the system PATH, which is an environment variable, made by the installer.

ASP.NET Core wendet kein Rollforwardverhalten für Patchversionen freigegebener Frameworkpakete an.ASP.NET Core doesn't adopt roll-forward behavior for patch releases of shared framework packages. Nach einem Upgrade des freigegebene Frameworks durch Installation eines neuen Hostingpakets starten Sie das System neu, oder führen Sie die folgenden Befehle in einer Befehlsshell aus:After upgrading the shared framework by installing a new hosting bundle, restart the system or execute the following commands in a command shell:

net stop was /y
net start w3svc

Hinweis

Informationen zur Verwendung einer IIS-Freigabekonfiguration finden Sie unter ASP.NET Core-Modul mit IIS-Freigabekonfiguration.For information on IIS Shared Configuration, see ASP.NET Core Module with IIS Shared Configuration.

Installieren von Web Deploy beim Veröffentlichen mit Visual StudioInstall Web Deploy when publishing with Visual Studio

Wenn Sie Apps auf Servern mit Web Deploy bereitstellen, installieren Sie die neueste Version von Web Deploy auf dem Server.When deploying apps to servers with Web Deploy, install the latest version of Web Deploy on the server. Um Web Deploy zu installieren, verwenden Sie den Webplattform-Installer (Web PI) oder rufen einen Installer direkt aus dem Microsoft Download Center ab.To install Web Deploy, use the Web Platform Installer (WebPI) or obtain an installer directly from the Microsoft Download Center. Die bevorzugte Methode ist die Verwendung von WebPI.The preferred method is to use WebPI. WebPI bietet ein eigenständiges Setup und eine Konfiguration für Hostinganbieter.WebPI offers a standalone setup and a configuration for hosting providers.

Erstellen der IIS-WebsiteCreate the IIS site

  1. Erstellen Sie auf dem Hostingsystem einen Ordner zum Speichern der veröffentlichten Ordner und Dateien der App.On the hosting system, create a folder to contain the app's published folders and files. In einem späteren Schritt wird der Ordnerpfad als physischer App-Pfad in IIS angegeben.In a following step, the folder's path is provided to IIS as the physical path to the app. Weitere Informationen zu Bereitstellungsordner und Dateilayout einer App finden Sie unter Verzeichnisstruktur für ASP.NET Core.For more information on an app's deployment folder and file layout, see Verzeichnisstruktur für ASP.NET Core.

  2. Öffnen Sie in IIS-Manager den Serverknoten im Bereich Verbindungen.In IIS Manager, open the server's node in the Connections panel. Klicken Sie mit der rechten Maustaste auf den Ordner Websites.Right-click the Sites folder. Klicken Sie im Kontextmenü auf Website hinzufügen.Select Add Website from the contextual menu.

  3. Geben Sie einen Websitenamen an, und legen Sie den physischen Pfad auf den Bereitstellungsordner der App fest.Provide a Site name and set the Physical path to the app's deployment folder. Geben Sie die Konfiguration unter Bindung an, und erstellen Sie die Website, indem Sie auf OK klicken:Provide the Binding configuration and create the website by selecting OK:

    Geben Sie den Websitenamen, den physischen Pfad und den Hostnamen im Schritt „Website hinzufügen“ an.

    Warnung

    Allgemeine Platzhalterbindungen (http://*:80/ und http://+:80) dürfen nicht verwendet werden.Top-level wildcard bindings (http://*:80/ and http://+:80) should not be used. Platzhalterbindungen auf oberster Ebene gefährden die Sicherheit Ihrer App.Top-level wildcard bindings can open up your app to security vulnerabilities. Dies gilt für starke und schwache Platzhalter.This applies to both strong and weak wildcards. Verwenden Sie statt Platzhaltern explizite Hostnamen.Use explicit host names rather than wildcards. Platzhalterbindungen in untergeordneten Domänen (z.B. *.mysub.com) verursachen kein Sicherheitsrisiko, wenn Sie die gesamte übergeordnete Domäne steuern (im Gegensatz zu *.com, das angreifbar ist).Subdomain wildcard binding (for example, *.mysub.com) doesn't have this security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). Weitere Informationen finden Sie unter rfc7230 im Abschnitt 5.4.See rfc7230 section-5.4 for more information.

  4. Wählen Sie unter dem Serverknoten Anwendungspools aus.Under the server's node, select Application Pools.

  5. Klicken Sie mit der rechten Maustaste auf den App-Pool der Website, und wählen Sie im Kontextmenü Grundeinstellungen aus.Right-click the site's app pool and select Basic Settings from the contextual menu.

  6. Legen Sie im Fenster Anwendungspool bearbeiten die .NET CLR-Version auf Kein verwalteter Code fest:In the Edit Application Pool window, set the .NET CLR version to No Managed Code:

    Legen Sie „Kein verwalteter Code“ für die .NET CLR-Version fest.

    ASP.NET Core wird in einem separaten Prozess ausgeführt und verwaltet die Runtime.ASP.NET Core runs in a separate process and manages the runtime. Für ASP.NET Core ist das Laden der Desktop-CLR (.NET CLR) nicht erforderlich.ASP.NET Core doesn't rely on loading the desktop CLR (.NET CLR). Die Core Common Language Runtime (CoreCLR) für .NET Core wird gestartet, um die App im Workerprozess zu hosten.The Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process. Das Festlegen der .NET CLR-Version auf Kein verwalteter Code ist optional, wird aber empfohlen.Setting the .NET CLR version to No Managed Code is optional but recommended.

  7. ASP.NET Core 2.2 oder höher:ASP.NET Core 2.2 or later:

    • Deaktivieren Sie für eine eigenständige Bereitstellung für 32-Bit-Systeme (x86), die mit einem 32-Bit-SDK veröffentlicht wurde und die das In-Process-Hostingmodell verwendet, den Anwendungspool für 32 Bit.For a 32-bit (x86) self-contained deployment published with a 32-bit SDK that uses the in-process hosting model, enable the Application Pool for 32-bit. Navigieren Sie im IIS-Manager zu Anwendungspools auf der Randleiste Verbindungen.In IIS Manager, navigate to Application Pools in the Connections sidebar. Wählen Sie den Anwendungspool der App aus.Select the app's Application Pool. Wählen Sie auf der Randleiste Aktionen die Option Erweiterte Einstellungen aus.In the Actions sidebar, select Advanced Settings. Legen Sie 32-Bit-Anwendungen aktivieren auf True fest.Set Enable 32-Bit Applications to True.

    • Deaktivieren Sie für eine eigenständige Bereitstellung für 64-Bit-Systeme (x64), die das In-Process-Hostingmodell verwendet, den App-Pool für 32-Bit-Prozesse (x86).For a 64-bit (x64) self-contained deployment that uses the in-process hosting model, disable the app pool for 32-bit (x86) processes. Navigieren Sie im IIS-Manager zu Anwendungspools auf der Randleiste Verbindungen.In IIS Manager, navigate to Application Pools in the Connections sidebar. Wählen Sie den Anwendungspool der App aus.Select the app's Application Pool. Wählen Sie auf der Randleiste Aktionen die Option Erweiterte Einstellungen aus.In the Actions sidebar, select Advanced Settings. Legen Sie 32-Bit-Anwendungen aktivieren auf False fest.Set Enable 32-Bit Applications to False.

  8. Vergewissern Sie sich, dass die Prozessmodellidentität über die richtigen Berechtigungen verfügt.Confirm the process model identity has the proper permissions.

    Wenn die Standardidentität des App-Pools (Prozessmodell > Identität) von ApplicationPoolIdentity in eine andere Identität geändert wird, stellen Sie sicher, dass die neue Identität über die erforderlichen Berechtigungen zum Zugriff auf den Ordner, die Datenbank und andere erforderliche Ressourcen der App verfügt.If the default identity of the app pool (Process Model > Identity) is changed from ApplicationPoolIdentity to another identity, verify that the new identity has the required permissions to access the app's folder, database, and other required resources. Der App-Pool benötigt beispielsweise Lese- und Schreibzugriff für Ordner, in denen die App Lese- und Schreibvorgänge für Dateien ausführt.For example, the app pool requires read and write access to folders where the app reads and writes files.

Konfigurieren der Windows-Authentifizierung (optional)Windows Authentication configuration (Optional)
Weitere Informationen finden Sie unter Konfigurieren der Windows-Authentifizierung.For more information, see Configure Windows authentication.

Bereitstellen der AppDeploy the app

Stellen Sie die App im IIS-Ordner Physischer Pfad bereit, der im Abschnitt Erstellen der IIS-Website eingerichtet wurde.Deploy the app to the IIS Physical path folder that was established in the Create the IIS site section. Web Deploy ist die empfohlene Methode für die Bereitstellung, aber es gibt verschiedene Optionen, um die Anwendung aus dem Ordner publish des Projekts in den Bereitstellungsordner des Hostsystems zu verschieben.Web Deploy is the recommended mechanism for deployment, but several options exist for moving the app from the project's publish folder to the hosting system's deployment folder.

Web Deploy mit Visual StudioWeb Deploy with Visual Studio

Informationen zum Erstellen eines Veröffentlichungsprofils zur Verwendung mit Web Deploy finden Sie im Thema Visual Studio publish profiles for ASP.NET Core app deployment (Visual Studio-Veröffentlichungsprofile zum Bereitstellen von ASP.NET Core-Apps).See the Visual Studio publish profiles for ASP.NET Core app deployment topic to learn how to create a publish profile for use with Web Deploy. Wenn der Hostinganbieter ein Veröffentlichungsprofil oder Unterstützung für das Erstellen eines solchen Profils bereitstellt, laden Sie dessen Profil herunter, und importieren Sie es mithilfe des Visual Studio-Dialogfelds Veröffentlichen:If the hosting provider provides a Publish Profile or support for creating one, download their profile and import it using the Visual Studio Publish dialog:

Dialogfeld „Veröffentlichen“

Web Deploy außerhalb von Visual StudioWeb Deploy outside of Visual Studio

Web Deploy kann über die Befehlszeile auch außerhalb von Visual Studio verwendet werden.Web Deploy can also be used outside of Visual Studio from the command line. Weitere Informationen finden Sie unter Web Deployment Tool (Webbereitstellungstool).For more information, see Web Deployment Tool.

Alternativen zu Web DeployAlternatives to Web Deploy

Verwenden Sie eine der folgenden Methoden, um die App in das Hostsystem zu verschieben: manuelles Kopieren, Xcopy, Robocopy oder PowerShell.Use any of several methods to move the app to the hosting system, such as manual copy, Xcopy, Robocopy, or PowerShell.

Weitere Informationen zum Bereitstellen von ASP.NET Core in IIS finden Sie im nachfolgenden Abschnitt Bereitstellungsressourcen für IIS-Administratoren.For more information on ASP.NET Core deployment to IIS, see the Deployment resources for IIS administrators section.

Navigieren auf der WebsiteBrowse the website

Senden Sie nach Abschluss der App-Bereitstellung auf dem Hostsystem eine Anforderung an einen der öffentlichen Endpunkte der App.After the app is deployed to the hosting system, make a request to one of the app's public endpoints.

Im folgenden Beispiel ist die Website an den IIS-Hostnamen von www.mysite.com auf Port 80 gebunden.In the following example, the site is bound to an IIS Host name of www.mysite.com on Port 80. Es wird eine Anforderung an http://www.mysite.com gesendet:A request is made to http://www.mysite.com:

Der Microsoft Edge-Browser hat die IIS-Startseite geladen.

Gesperrte BereitstellungsdateienLocked deployment files

Die Dateien im Bereitstellungsordner werden gesperrt, wenn die App ausgeführt wird.Files in the deployment folder are locked when the app is running. Gesperrte Dateien können während der Bereitstellung nicht überschrieben werden.Locked files can't be overwritten during deployment. Um gesperrte Dateien in einer Bereitstellung freizugeben, beenden Sie den App-Pool mit einer der folgenden Methoden:To release locked files in a deployment, stop the app pool using one of the following approaches:

  • Verwenden Sie Web Deploy, und verweisen Sie auf Microsoft.NET.Sdk.Web in der Projektdatei.Use Web Deploy and reference Microsoft.NET.Sdk.Web in the project file. Eine Datei namens app_offline.htm befindet sich im Stammverzeichnis des Web-App-Verzeichnisses.An app_offline.htm file is placed at the root of the web app directory. Wenn die Datei vorhanden ist, fährt das ASP.NET Core Module die App ordnungsgemäß herunter und verarbeitet die Datei app_offline.htm während der Bereitstellung.When the file is present, the ASP.NET Core Module gracefully shuts down the app and serves the app_offline.htm file during the deployment. Weitere Informationen finden Sie unter Konfigurationsreferenz für das ASP.NET Core-Modul.For more information, see the ASP.NET Core Module configuration reference.

  • Beenden Sie den App-Pool im IIS-Manager auf dem Server manuell.Manually stop the app pool in the IIS Manager on the server.

  • Verwenden Sie PowerShell, um app_offline.htm abzulegen (erfordert PowerShell 5 oder höher):Use PowerShell to drop app_offline.htm (requires PowerShell 5 or later):

    $pathToApp = 'PATH_TO_APP'
    
    # Stop the AppPool
    New-Item -Path $pathToApp app_offline.htm
    
    # Provide script commands here to deploy the app
    
    # Restart the AppPool
    Remove-Item -Path $pathToApp app_offline.htm
    
    

Schutz von DatenData protection

Der ASP.NET Core-Stapel zum Schutz von Daten wird von mehreren ASP.NET-Middlewarekomponenten genutzt, darunter auch von Middleware, die bei der Authentifizierung verwendet wird.The ASP.NET Core Data Protection stack is used by several ASP.NET Core middlewares, including middleware used in authentication. Selbst wenn die APIs zum Schutz von Daten nicht aus dem Benutzercode aufgerufen werden, sollte der Schutz von Daten mit einem Bereitstellungsskript oder im Benutzercode konfiguriert werden, um einen persistenten kryptografischen Schlüsselspeicher zu erstellen.Even if Data Protection APIs aren't called by user code, data protection should be configured with a deployment script or in user code to create a persistent cryptographic key store. Wenn der Schutz von Daten nicht konfiguriert ist, werden die Schlüssel beim Neustarten der App im Arbeitsspeicher gespeichert und verworfen.If data protection isn't configured, the keys are held in memory and discarded when the app restarts.

Falls der Schlüsselbund im Arbeitsspeicher gespeichert wird, wenn die App neu gestartet wird, gilt Folgendes:If the key ring is stored in memory when the app restarts:

  • Alle cookiebasierten Authentifizierungstoken für ungültig erklärt.All cookie-based authentication tokens are invalidated.
  • Benutzer müssen sich bei ihrer nächsten Anforderung erneut anmelden.Users are required to sign in again on their next request.
  • Alle mit dem Schlüsselbund geschützte Daten können nicht mehr entschlüsselt werden.Any data protected with the key ring can no longer be decrypted. Dies kann CSRF-Token und ASP.NET Core-MVC-TempData-Cookies einschließen.This may include CSRF tokens and ASP.NET Core MVC TempData cookies.

Zum Konfigurieren des Schutzes von Daten unter IIS mithilfe des persistenten Schlüsselbunds verwenden Sie einen der folgenden Ansätze:To configure data protection under IIS to persist the key ring, use one of the following approaches:

  • Erstellen einer Registrierungsstruktur für den Schutz von DatenCreate Data Protection Registry Keys

    Schlüssel für den Schutz von Daten, die von ASP.NET Core-Apps verwendet werden, werden in der Registrierung außerhalb der Apps gespeichert.Data protection keys used by ASP.NET Core apps are stored in the registry external to the apps. Um die Schlüssel für eine bestimmte App zu dauerhaft zu speichern, müssen Sie Registrierungsschlüssel für den App-Pool erstellen.To persist the keys for a given app, create registry keys for the app pool.

    Bei eigenständigen IIS-Installationen, die ohne Webfarm vorgesehen sind, kann das PowerShell-Skript „Provision-AutoGenKeys.ps1“ für den Schutz von Daten für jeden App-Pool genutzt werden, das mit einer ASP.NET Core-App verwendet wird.For standalone, non-webfarm IIS installations, the Data Protection Provision-AutoGenKeys.ps1 PowerShell script can be used for each app pool used with an ASP.NET Core app. Dieses Skript erstellt einen Registrierungsschlüssel in der HKLM-Registrierung, der nur für das Workerprozesskonto des App-Pools der App zugänglich ist.This script creates a registry key in the HKLM registry that's accessible only to the worker process account of the app's app pool. Schlüssel werden in ruhendem Zustand mit DPAPI mit einem computerweiten Schlüssel verschlüsselt.Keys are encrypted at rest using DPAPI with a machine-wide key.

    In Webfarmszenarios kann eine App so konfiguriert werden, dass sie einen UNC-Pfad verwendet, um den Schlüsselbund für den Schutz von Daten zu speichern.In web farm scenarios, an app can be configured to use a UNC path to store its data protection key ring. Standardmäßig werden die Schlüssel für den Schutz von Daten nicht verschlüsselt.By default, the data protection keys aren't encrypted. Stellen Sie sicher, dass die Dateiberechtigungen für die Netzwerkfreigabe auf das Windows-Konto beschränkt sind, mit dem die App ausgeführt wird.Ensure that the file permissions for the network share are limited to the Windows account the app runs under. Ein X.509-Zertifikat kann zum Schutz von Schlüsseln im ruhenden Zustand verwendet werden.An X509 certificate can be used to protect keys at rest. Richten Sie ggf. einen Mechanismus ein, um es Benutzern zu ermöglichen, Zertifikate hochzuladen: Platzieren Sie Zertifikate im Zertifikatspeicher des Benutzers für vertrauenswürdige Anbieter, und stellen Sie sicher, dass sie auf allen Computern verfügbar sind, auf denen die App des Benutzers ausgeführt wird.Consider a mechanism to allow users to upload certificates: Place certificates into the user's trusted certificate store and ensure they're available on all machines where the user's app runs. Details finden Sie unter Konfigurieren des Schutzes von Daten in ASP.NET Core.See Configure ASP.NET Core Data Protection for details.

  • Konfigurieren des IIS-Anwendungspools zum Laden des BenutzerprofilsConfigure the IIS Application Pool to load the user profile

    Diese Einstellung befindet sich im Abschnitt Prozessmodell unter Erweiterte Einstellungen für den App-Pool.This setting is in the Process Model section under the Advanced Settings for the app pool. Legen Sie Benutzerprofil laden auf True fest.Set Load User Profile to True. Wenn diese Option auf True festgelegt ist, werden Schlüssel im Benutzerprofilverzeichnis gespeichert und mit DPAPI mit einem für das Benutzerkonto spezifischen Schlüssel geschützt.When set to True, keys are stored in the user profile directory and protected using DPAPI with a key specific to the user account. Schlüssel werden im Ordner %LOCALAPPDATA%/ASP.NET/DataProtection-Keys gespeichert.Keys are persisted to the %LOCALAPPDATA%/ASP.NET/DataProtection-Keys folder.

    Das setProfileEnvironment-Attribut des App-Pools muss ebenfalls aktiviert sein.The app pool's setProfileEnvironment attribute must also be enabled. Der Standardwert von setProfileEnvironment ist true.The default value of setProfileEnvironment is true. In einigen Szenarien (z.B. Windows-Betriebssystem) ist setProfileEnvironment auf false festgelegt.In some scenarios (for example, Windows OS), setProfileEnvironment is set to false. Gehen Sie folgendermaßen vor, wenn Schlüssel nicht wie erwartet im Benutzerprofilverzeichnis gespeichert werden:If keys aren't stored in the user profile directory as expected:

    1. Navigieren Sie zum Ordner %windir%/system32/inetsrv/config.Navigate to the %windir%/system32/inetsrv/config folder.
    2. Öffnen Sie die Datei applicationHost.config.Open the applicationHost.config file.
    3. Suchen Sie das Element <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> .Locate the <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> element.
    4. Bestätigen Sie, dass das setProfileEnvironment-Attribut nicht vorhanden ist, das standardmäßig den Wert true aufweist, oder legen Sie den Wert des Attributs explizit auf true fest.Confirm that the setProfileEnvironment attribute isn't present, which defaults the value to true, or explicitly set the attribute's value to true.
  • Verwenden des Dateisystems als SchlüsselbundspeicherUse the file system as a key ring store

    Passen Sie den App-Code so an, dass er das Dateisystem als Schlüsselbundspeicher verwendet.Adjust the app code to use the file system as a key ring store. Verwenden Sie ein X.509-Zertifikat, um den Schlüsselbund zu schützen, und stellen Sie sicher, dass es sich bei dem Zertifikat um ein vertrauenswürdiges Zertifikat handelt.Use an X509 certificate to protect the key ring and ensure the certificate is a trusted certificate. Wenn es sich um ein selbstsigniertes Zertifikat handelt, müssen Sie es im vertrauenswürdigen Stammspeicher platzieren.If the certificate is self-signed, place the certificate in the Trusted Root store.

    Wenn IIS in einer Webfarm verwendet wird:When using IIS in a web farm:

    • Verwenden Sie eine Dateifreigabe, auf die alle Computer zugreifen können.Use a file share that all machines can access.
    • Stellen Sie ein X509-Zertifikat auf jedem Computer bereit.Deploy an X509 certificate to each machine. Konfigurieren Sie den Schutz von Daten im Code.Configure data protection in code.
  • Festlegen einer computerweiten Richtlinie für den Schutz von DatenSet a machine-wide policy for data protection

    Das System zum Schutz von Daten verfügt über eine eingeschränkte Unterstützung zum Festlegen einer computerweiten Standardrichtlinie für alle Apps, die die Datenschutz-APIs nutzen.The data protection system has limited support for setting a default machine-wide policy for all apps that consume the Data Protection APIs. Weitere Informationen finden Sie unter ASP.net Core Datenschutz.For more information, see ASP.net Core Datenschutz.

Virtuelle VerzeichnisseVirtual Directories

Virtuelle IIS-Verzeichnisse werden mit ASP.NET Core-Apps nicht unterstützt.IIS Virtual Directories aren't supported with ASP.NET Core apps. Eine App kann als untergeordnete Anwendung gehostet werden.An app can be hosted as a sub-application.

Untergeordnete AnwendungenSub-applications

Eine ASP.NET Core-App kann als untergeordnete IIS-Anwendung (untergeordnete App) gehostet werden.An ASP.NET Core app can be hosted as an IIS sub-application (sub-app). Der Pfad der untergeordneten App wird ein Teil der URL der Stamm-App.The sub-app's path becomes part of the root app's URL.

Statische Assetlinks in der untergeordneten App sollten die Tilde/Schrägstrich-Notation verwenden (~/).Static asset links within the sub-app should use tilde-slash (~/) notation. Die Tilde/Schrägstrich-Notation löst ein Taghilfsprogramm aus, um die Pfadbasis der untergeordneten App dem gerenderten relativen Link voranzustellen.Tilde-slash notation triggers a Tag Helper to prepend the sub-app's pathbase to the rendered relative link. Für eine untergeordnete App unter /subapp_path wird ein mit src="~/image.png" verknüpftes Bild als src="/subapp_path/image.png" gerendert.For a sub-app at /subapp_path, an image linked with src="~/image.png" is rendered as src="/subapp_path/image.png". Die Static File Middleware verarbeitet die Anforderung der statischen Datei nicht.The root app's Static File Middleware doesn't process the static file request. Die Anforderung wird von der Static File Middleware der untergeordneten App verarbeitet.The request is processed by the sub-app's Static File Middleware.

Wenn das src-Attribut eines statischen Objekts auf einen absoluten Pfad festgelegt wird (z.B. src="/image.png"), wird der Link ohne die Pfadbasis der untergeordneten App gerendert.If a static asset's src attribute is set to an absolute path (for example, src="/image.png"), the link is rendered without the sub-app's pathbase. Die Middleware für statische Dateien der Stamm-App versucht, das Objekt vom Webstamm der Stamm-App aus bereitzustellen, was zu einer 404 Nicht gefunden-Antwort führt, solange das statische Objekt in der Stamm-App nicht verfügbar ist.The root app's Static File Middleware attempts to serve the asset from the root app's web root, which results in a 404 - Not Found response unless the static asset is available from the root app.

So hosten Sie eine ASP.NET Core-App als untergeordnete App unter einer anderen ASP.NET Core-App:To host an ASP.NET Core app as a sub-app under another ASP.NET Core app:

  1. Richten Sie einen App-Pool für die untergeordnete App ein.Establish an app pool for the sub-app. Legen Sie die .NET CLR-Version auf Kein verwalteter Code fest, weil die Core Common Language Runtime (CoreCLR) für .NET Core gestartet wird, um die App im Workerprozess zu hosten, nicht der Desktop-CLR (.NET CLR).Set the .NET CLR Version to No Managed Code because the Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process, not the desktop CLR (.NET CLR).

  2. Fügen Sie die Stammwebsite im IIS-Manager mit der untergeordneten App in einem unter der Stammwebsite liegenden Ordner hinzu.Add the root site in IIS Manager with the sub-app in a folder under the root site.

  3. Klicken Sie mit der rechten Maustaste im IIS-Manager auf den Ordner der untergeordneten App, und wählen Sie In Anwendung konvertieren aus.Right-click the sub-app folder in IIS Manager and select Convert to Application.

  4. Weisen Sie im Dialogfeld Anwendung hinzufügen mit der Schaltfläche Auswählen den Anwendungspool dem App-Pool zu, den Sie für die untergeordnete App erstellt haben.In the Add Application dialog, use the Select button for the Application Pool to assign the app pool that you created for the sub-app. Klicken Sie auf OK.Select OK.

Die Zuweisung eines separaten App-Pools zur untergeordneten App ist eine Anforderung, wenn Sie das In-Process-Hostingmodell verwenden.The assignment of a separate app pool to the sub-app is a requirement when using the in-process hosting model.

Weitere Informationen zum In-Process-Hostingmodell und Konfigurieren des ASP.NET Core-Moduls finden Sie unter ASP.NET Core-Modul.For more information on the in-process hosting model and configuring the ASP.NET Core Module, see ASP.NET Core-Modul.

Konfiguration von IIS mit der Datei „web.config“Configuration of IIS with web.config

Die IIS-Konfiguration wird von dem Abschnitt <system.webServer> der Datei web.config für IIS-Szenarien beeinflusst, die für ASP.NET Core-Apps mit dem ASP.NET Core-Modul funktional sind.IIS configuration is influenced by the <system.webServer> section of web.config for IIS scenarios that are functional for ASP.NET Core apps with the ASP.NET Core Module. Beispielsweise eignet sich die IIS-Konfiguration für dynamische Komprimierung.For example, IIS configuration is functional for dynamic compression. Wenn IIS auf Serverebene für die Verwendung der dynamischen Komprimierung konfiguriert ist, kann diese Einstellung mit dem <urlCompression>-Element in der Datei web.config der App für eine ASP.NET Core-App deaktiviert werden.If IIS is configured at the server level to use dynamic compression, the <urlCompression> element in the app's web.config file can disable it for an ASP.NET Core app.

Weitere Informationen finden Sie unter den folgenden Themen:For more information, see the following topics:

Lesen Sie den Abschnitt zum Befehl „AppCmd.exe“ im Thema Umgebungsvariablen <environmentVariables> in der IIS-Referenzdokumentation, um Umgebungsvariablen für einzelne Apps festzulegen, die in isolierten App-Pools ausgeführt werden (unterstützt für IIS 10.0 oder höher).To set environment variables for individual apps running in isolated app pools (supported for IIS 10.0 or later), see the AppCmd.exe command section of the Environment Variables <environmentVariables> topic in the IIS reference documentation.

Konfigurationsabschnitte von „web.config“Configuration sections of web.config

Konfigurationsabschnitte von ASP.NET 4.x-Apps in der Datei web.config werden von ASP.NET Core-Apps nicht zur Konfiguration verwendet:Configuration sections of ASP.NET 4.x apps in web.config aren't used by ASP.NET Core apps for configuration:

  • <system.web>
  • <appSettings>
  • <connectionStrings>
  • <location>

ASP.NET Core-Apps werden mit anderen Konfigurationsanbietern konfiguriert.ASP.NET Core apps are configured using other configuration providers. Weitere Informationen finden Sie unter Konfiguration.For more information, see Configuration.

AnwendungspoolsApplication Pools

Die App-Poolisolation wird durch das Hostingmodell bestimmt.App pool isolation is determined by the hosting model:

  • In-Process-Hosting: Apps müssen in separaten App-Pools ausgeführt werden.In-process hosting: Apps are required to run in separate app pools.
  • Out-of-Process-Hosting: Es wird empfohlen, die Apps voneinander zu isolieren, indem Sie jede App in ihrem eigenen App-Pool ausführen.Out-of-process hosting: We recommend isolating the apps from each other by running each app in its own app pool.

Im IIS-Dialogfeld Website hinzufügen wird standardmäßig ein einzelner App-Pool pro App eingesetzt.The IIS Add Website dialog defaults to a single app pool per app. Wenn ein Websitename angegeben ist, wird der Text automatisch in das Textfeld Anwendungspool übertragen.When a Site name is provided, the text is automatically transferred to the Application pool textbox. Ein neuer App-Pool mit dem Namen der Website wird erstellt, wenn die Website hinzugefügt wird.A new app pool is created using the site name when the site is added.

Anwendungspool IdentityApplication Pool Identity

Mit einem Konto für die Identität des App-Pools können Sie eine App unter einem eindeutigen Konto ausführen, ohne Domänen oder lokale Konten erstellen und verwalten zu müssen.An app pool identity account allows an app to run under a unique account without having to create and manage domains or local accounts. Unter IIS 8.0 oder höher erstellt der IIS-Administratorworkerprozess (WAS) ein virtuelles Konto mit dem Namen des neuen App-Pools und führt die Workerprozesse des App-Pools standardmäßig unter diesem Konto aus.On IIS 8.0 or later, the IIS Admin Worker Process (WAS) creates a virtual account with the name of the new app pool and runs the app pool's worker processes under this account by default. Stellen Sie sicher, dass in der IIS-Verwaltungskonsole unter Erweiterte Einstellungen für den App-Pool die Identity (Identität) auf ApplicationPoolIdentity festgelegt ist:In the IIS Management Console under Advanced Settings for the app pool, ensure that the Identity is set to use ApplicationPoolIdentity:

Dialogfeld „Erweiterte Einstellungen“ für den Anwendungspool

Der IIS-Verwaltungsprozess erstellt im Windows-Sicherheitssystem einen sicheren Bezeichner mit dem Namen des App-Pools.The IIS management process creates a secure identifier with the name of the app pool in the Windows Security System. Ressourcen können mithilfe dieser Identität geschützt werden.Resources can be secured using this identity. Allerdings ist diese Identität kein echtes Benutzerkonto und wird in der Windows-Benutzerverwaltungskonsole nicht angezeigt.However, this identity isn't a real user account and doesn't show up in the Windows User Management Console.

Wenn der IIS-Workerprozess erhöhte Rechte für den Zugriff auf Ihre Anwendung erfordert, ändern Sie die Zugriffssteuerungsliste (ACL) für das Verzeichnis mit der App:If the IIS worker process requires elevated access to the app, modify the Access Control List (ACL) for the directory containing the app:

  1. Öffnen Sie Windows Explorer, und navigieren Sie zum Verzeichnis.Open Windows Explorer and navigate to the directory.

  2. Klicken Sie mit der rechten Maustaste auf das Verzeichnis, und klicken Sie auf Eigenschaften.Right-click on the directory and select Properties.

  3. Klicken Sie auf der Registerkarte Sicherheit auf die Schaltfläche Bearbeiten und dann auf die Schaltfläche Hinzufügen.Under the Security tab, select the Edit button and then the Add button.

  4. Wählen Sie die Schaltfläche Speicherorte aus, und stellen Sie sicher, dass das System ausgewählt ist.Select the Locations button and make sure the system is selected.

  5. Geben Sie im Bereich Geben Sie die Namen der auszuwählenden Objekte ein den Wert IIS AppPool\<Name_des_AppPools> ein.Enter IIS AppPool\<app_pool_name> in Enter the object names to select area. Klicken Sie auf die Schaltfläche Namen überprüfen.Select the Check Names button. Überprüfen Sie für DefaultAppPool die Namen mit IIS AppPool\DefaultAppPool.For the DefaultAppPool check the names using IIS AppPool\DefaultAppPool. Bei Auswahl der Schaltfläche Namen überprüfen wird im Bereich für Objektnamen der Wert DefaultAppPool angegeben.When the Check Names button is selected, a value of DefaultAppPool is indicated in the object names area. Es ist nicht möglich, den Namen des App-Pools direkt in den Bereich für Objektnamen einzugeben.It isn't possible to enter the app pool name directly into the object names area. Verwenden Sie das Format IIS AppPool\<Name_des_AppPools> , wenn Sie die Objektnamen überprüfen.Use the IIS AppPool\<app_pool_name> format when checking for the object name.

    Dialogfeld „Benutzer oder Gruppen auswählen“ für den App-Ordner: Der Name des App-Pools, „DefaultAppPool“, wird an „IIS AppPool"“ im Bereich der Objektnamen angehängt, bevor „Namen überprüfen“ ausgewählt wird.

  6. Klicken Sie auf OK.Select OK.

    Dialogfeld „Benutzer oder Gruppen auswählen“ für den App-Ordner: Nach Auswahl von „Namen überprüfen“ wird der Objektname „DefaultAppPool“ im Bereich der Objektnamen angezeigt.

  7. Standardmäßig sollten Lese- und Schreibberechtigungen gewährt werden.Read & execute permissions should be granted by default. Erteilen Sie weitere Berechtigungen, sofern erforderlich.Provide additional permissions as needed.

Zugriff kann auch über eine Eingabeaufforderung mit dem Tool ICACLS gewährt werden.Access can also be granted at a command prompt using the ICACLS tool. Im folgenden Befehl wird als Beispiel DefaultAppPool verwendet:Using the DefaultAppPool as an example, the following command is used:

ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool":F

Weitere Informationen finden Sie im Thema icacls.For more information, see the icacls topic.

HTTP/2-UnterstützungHTTP/2 support

HTTP/2 wird mit ASP.NET Core in den folgenden IIS-Bereitstellungsszenarien unterstützt:HTTP/2 is supported with ASP.NET Core in the following IIS deployment scenarios:

  • In-ProcessIn-process
    • Windows Server 2016/Windows 10 oder höher, IIS 10 oder höherWindows Server 2016/Windows 10 or later; IIS 10 or later
    • TLS 1.2-Verbindung oder höherTLS 1.2 or later connection
  • Out-of-ProcessOut-of-process
    • Windows Server 2016/Windows 10 oder höher, IIS 10 oder höherWindows Server 2016/Windows 10 or later; IIS 10 or later
    • Öffentlich zugängliche Edge-Server-Verbindungen verwenden HTTP/2, aber die Reverseproxyverbindung mit dem Kestrel-Server verwendet HTTP/1.1.Public-facing edge server connections use HTTP/2, but the reverse proxy connection to the Kestrel server uses HTTP/1.1.
    • TLS 1.2-Verbindung oder höherTLS 1.2 or later connection

Für eine In-Process-Bereitstellung, wenn eine HTTP/2-Verbindung hergestellt wurde, HttpRequest.Protocol-Berichte HTTP/2.For an in-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/2. Für eine Out-of-Process-Bereitstellung. wenn eine HTTP/2-Verbindung hergestellt wurde, HttpRequest.Protocol-Berichte HTTP/1.1.For an out-of-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

Weitere Informationen zu den In-Process- und Out-of-Process-Hostingmodellen finden Sie unter ASP.NET Core-Modul.For more information on the in-process and out-of-process hosting models, see ASP.NET Core-Modul.

HTTP/2 ist standardmäßig aktiviert.HTTP/2 is enabled by default. Verbindungen führen ein Fallback auf HTTP/1.1 aus, wenn keine HTTP/2-Verbindung hergestellt wurde.Connections fall back to HTTP/1.1 if an HTTP/2 connection isn't established. Weitere Informationen zur HTTP/2-Konfiguration mit IIS-Bereitstellungen finden Sie unter HTTP/2 unter IIS.For more information on HTTP/2 configuration with IIS deployments, see HTTP/2 on IIS.

CORS-PreflightanforderungenCORS preflight requests

Dieser Abschnitt gilt nur für ASP.NET Core-Apps, die auf das .NET Framework ausgerichtet sind.This section only applies to ASP.NET Core apps that target the .NET Framework.

Für eine ASP.NET Core-App, die auf das .NET Framework ausgerichtet ist, werden OPTIONS-Anforderungen in IIS standardmäßig nicht an die App übergeben.For an ASP.NET Core app that targets the .NET Framework, OPTIONS requests aren't passed to the app by default in IIS. Informationen dazu, wie Sie die IIS-Handler der App in web.config so konfigurieren, dass OPTIONS-Anforderungen übergeben werden, finden Sie unter Aktivieren ursprungsübergreifender Anforderungen in ASP.NET-Web-API 2: Funktionsweise von CORS.To learn how to configure the app's IIS handlers in web.config to pass OPTIONS requests, see Enable cross-origin requests in ASP.NET Web API 2: How CORS Works.

Anwendungsinitialisierungsmodul und LeerlauftimeoutApplication Initialization Module and Idle Timeout

Bei Hosting in IIS durch Version 2 das ASP.NET Core-Moduls:When hosted in IIS by the ASP.NET Core Module version 2:

AnwendungsinitialisierungsmodulApplication Initialization Module

Gilt für In-Process und Out-of-Process gehostete Apps.Applies to apps hosted in-process and out-of-process.

IIS-Anwendungsinitialisierung ist ein IIS-Feature, das eine HTTP-Anforderung an die App sendet, wenn der App-Pool startet oder wiederverwendet wird.IIS Application Initialization is an IIS feature that sends an HTTP request to the app when the app pool starts or is recycled. Die Anforderung löst den Start der App aus.The request triggers the app to start. Standardmäßig gibt IIS eine Anforderung an die Stamm-URL der App (/) zum Initialisieren der App aus (weitere Informationen zur Konfiguration finden Sie unter Zusätzliche Ressourcen).By default, IIS issues a request to the app's root URL (/) to initialize the app (see the additional resources for more details on configuration).

Vergewissern Sie sich, dass die IIS-Anwendungsinitialisierungs-Rollenfunktion aktiviert ist:Confirm that the IIS Application Initialization role feature in enabled:

Unter Windows 7 oder höher gilt für Desktopsysteme bei lokaler Verwendung von IIS:On Windows 7 or later desktop systems when using IIS locally:

  1. Navigieren Sie zu Systemsteuerung > Programme > Programme und Features > Windows-Features aktivieren oder deaktivieren (links auf dem Bildschirm).Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).
  2. Öffnen Sie Internetinformationsdienste > WWW-Dienste > Anwendungsentwicklungsfeatures.Open Internet Information Services > World Wide Web Services > Application Development Features.
  3. Aktivieren Sie das Kontrollkästchen für Anwendungsinitialisierung.Select the check box for Application Initialization.

Unter Windows Server 2008 R2 oder höher:On Windows Server 2008 R2 or later:

  1. Öffnen Sie den Assistenten zum Hinzufügen von Rollen und Features.Open the Add Roles and Features Wizard.
  2. Öffnen Sie im Bereich Rollendienste auswählen den Knoten Anwendungsentwicklung.In the Select role services panel, open the Application Development node.
  3. Aktivieren Sie das Kontrollkästchen für Anwendungsinitialisierung.Select the check box for Application Initialization.

Verwenden Sie einen der folgenden Ansätze, um das Anwendungsinitialisierungsmodul für die Website zu aktivieren:Use either of the following approaches to enable the Application Initialization Module for the site:

  • Bei Verwenden von IIS-Manager:Using IIS Manager:

    1. Wählen Sie Anwendungspools im Bereich Verbindungen aus.Select Application Pools in the Connections panel.
    2. Klicken Sie mit der rechten Maustaste im App-Pool der App in die Liste, und wählen Sie Erweiterte Einstellungen aus.Right-click the app's app pool in the list and select Advanced Settings.
    3. Der standardmäßige Startmodus ist OnDemand.The default Start Mode is OnDemand. Legen Sie den Startmodus auf AlwaysRunning fest.Set the Start Mode to AlwaysRunning. Klicken Sie auf OK.Select OK.
    4. Öffnen Sie den Knoten Websites im Bereich Verbindungen.Open the Sites node in the Connections panel.
    5. Klicken Sie mit der rechten Maustaste zunächst auf die App und dann auf Website verwalten > Erweiterte Einstellungen.Right-click the app and select Manage Website > Advanced Settings.
    6. Die Standardeinstellung für Vorabladen aktiviert ist False.The default Preload Enabled setting is False. Legen Sie für Vorabladen aktiviert True fest.Set Preload Enabled to True. Klicken Sie auf OK.Select OK.
  • Fügen Sie bei Verwenden von web.config das <applicationInitialization>-Element hinzu, wobei doAppInitAfterRestart auf true für die <system.webServer>-Elemente in der web.config-Datei der App festgelegt ist:Using web.config, add the <applicationInitialization> element with doAppInitAfterRestart set to true to the <system.webServer> elements in the app's web.config file:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="." inheritInChildApplications="false">
        <system.webServer>
          <applicationInitialization doAppInitAfterRestart="true" />
        </system.webServer>
      </location>
    </configuration>
    

LeerlauftimeoutIdle Timeout

Gilt nur für In-Process gehostete Apps.Only applies to apps hosted in-process.

Um zu verhindern, dass die App in den Leerlauf wechselt, legen Sie das Leerlauftimeout des App-Pools mit IIS-Manager fest:To prevent the app from idling, set the app pool's idle timeout using IIS Manager:

  1. Wählen Sie Anwendungspools im Bereich Verbindungen aus.Select Application Pools in the Connections panel.
  2. Klicken Sie mit der rechten Maustaste im App-Pool der App in die Liste, und wählen Sie Erweiterte Einstellungen aus.Right-click the app's app pool in the list and select Advanced Settings.
  3. Der Standardwert für Leerlauftimeout (Minuten) ist 20 Minuten.The default Idle Time-out (minutes) is 20 minutes. Legen Sie Leerlauftimeout (Minuten) auf 0 (null) fest.Set the Idle Time-out (minutes) to 0 (zero). Klicken Sie auf OK.Select OK.
  4. Recyceln Sie den Workerprozess.Recycle the worker process.

Um zu verhindern, dass in Apps, die Out-of-Process gehostet werden, ein Timeout auftritt, verwenden Sie einen der folgenden Ansätze:To prevent apps hosted out-of-process from timing out, use either of the following approaches:

Zusätzliche Ressourcen für das Anwendungsinitialisierungsmodul und das LeerlauftimeoutApplication Initialization Module and Idle Timeout additional resources

Bereitstellungsressourcen für IIS-AdministratorenDeployment resources for IIS administrators

Zusätzliche RessourcenAdditional resources

Ein Tutorial zum Veröffentlichen einer ASP.NET Core-App auf einem IIS-Server finden Sie unter Veröffentlichen einer ASP.NET Core-App in IIS.For a tutorial experience on publishing an ASP.NET Core app to an IIS server, see Veröffentlichen einer ASP.NET Core-App in IIS.

Installieren des .NET Core Hosting-PaketsInstall the .NET Core Hosting Bundle

Unterstützte BetriebssystemeSupported operating systems

Die folgenden Betriebssysteme werden unterstützt:The following operating systems are supported:

  • Windows 7 oder höherWindows 7 or later
  • Windows Server 2008 R2 oder höherWindows Server 2008 R2 or later

Der HTTP.sys-Server (zuvor WebListener genannt) funktioniert nicht in einer Reverseproxykonfiguration mit IIS.HTTP.sys server (formerly called WebListener) doesn't work in a reverse proxy configuration with IIS. Verwenden Sie den Kestrel-Server.Use the Kestrel server.

Weitere Informationen zum Hosten in Azure finden Sie unter Bereitstellen von ASP.NET Core-Apps in Azure App Service.For information on hosting in Azure, see Bereitstellen von ASP.NET Core-Apps in Azure App Service.

Anleitungen zur Problembehandlung finden Sie unter Problembehandlung und Debuggen von ASP.NET Core-Projekten.For troubleshooting guidance, see Problembehandlung und Debuggen von ASP.NET Core-Projekten.

Unterstützte PlattformenSupported platforms

Apps, die für Bereitstellungen für 32-Bit-Systeme (x86) oder 64-Bit-Systeme (x64) veröffentlicht wurden, werden unterstützt.Apps published for 32-bit (x86) or 64-bit (x64) deployment are supported. Stellen Sie eine 32-Bit-App mit einem .NET Core SDK für 32-Bit (x86) bereit, es sei denn:Deploy a 32-bit app with a 32-bit (x86) .NET Core SDK unless the app:

  • Die App benötigt den größeren Adressraum des virtuellen Arbeitsspeichers, der 64-Bit-Apps zur Verfügung steht.Requires the larger virtual memory address space available to a 64-bit app.
  • Die App erfordert den größeren IIS-Stapel.Requires the larger IIS stack size.
  • Die App weist native 64-Bit-Abhängigkeiten auf.Has 64-bit native dependencies.

Verwenden Sie ein .NET Core SDK für 64-Bit (x64), um eine 64-Bit-App zu veröffentlichen.Use a 64-bit (x64) .NET Core SDK to publish a 64-bit app. Auf dem Hostsystem muss eine 64-Bit-Runtime vorhanden sein.A 64-bit runtime must be present on the host system.

HostingmodelleHosting models

In-Process-HostingmodellIn-process hosting model

Beim Einsatz von In-Process-Hosting wird eine ASP.NET Core-App im gleichen Prozess wie ihr IIS-Arbeitsprozess ausgeführt.Using in-process hosting, an ASP.NET Core app runs in the same process as its IIS worker process. Das In-Process-Hosting bietet aus folgendem Grund eine bessere Leistung als das Out-of-Process-Hosting:In-process hosting provides improved performance over out-of-process hosting because:

  • Anforderungen werden nicht über den Loopbackadapter weitergeleitet.Requests aren't proxied over the loopback adapter. Dabei handelt es sich um eine Netzwerkschnittstelle, die ausgehenden Netzwerkdatenverkehr zum selben Computer zurückleitet.A loopback adapter is a network interface that returns outgoing network traffic back to the same machine.

IIS erledigt das Prozessmanagement mit dem Windows-Prozessaktivierungsdienst (Process Activation Service, WAS).IIS handles process management with the Windows Process Activation Service (WAS).

Das ASP.NET Core-Modul:The ASP.NET Core Module:

  • Führt die Initialisierung von Apps aus.Performs app initialization.
    • Lädt die CoreCLR.Loads the CoreCLR.
    • Ruft Program.Main.Calls Program.Main.
  • Behandelt die Lebensdauer der nativen IIS-Anforderung.Handles the lifetime of the IIS native request.

Das In-Process-Hostingmodell wird nicht für ASP.NET Core-Apps unterstützt, die auf .NET Framework abzielen.The in-process hosting model isn't supported for ASP.NET Core apps that target the .NET Framework.

Das folgende Diagramm zeigt die Beziehung zwischen IIS, dem ASP.NET Core-Modul und einer In-Process gehosteten App:The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted in-process:

Das ASP.NET Core-Modul im In-Process-Hostingszenario

Eine Anforderung geht aus dem Web beim HTTP.sys-Treiber im Kernelmodus ein.A request arrives from the web to the kernel-mode HTTP.sys driver. Der Treiber leitet die native Anforderung an IIS auf dem konfigurierten Port der Webseite weiter, normalerweise 80 (HTTP) oder 443 (HTTPS).The driver routes the native request to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). Das ASP.NET Core-Modul empfängt die native Anforderung und übergibt sie an den IIS-HTTP-Server (IISHttpServer).The ASP.NET Core Module receives the native request and passes it to IIS HTTP Server (IISHttpServer). Der IIS-HTTP-Server ist eine prozessinterne Serverimplementierung für IIS, die die Anforderung vom nativen Modus in den verwalteten Modus konvertiert.IIS HTTP Server is an in-process server implementation for IIS that converts the request from native to managed.

Nachdem der IIS-HTTP-Server die Anforderung verarbeitet hat, wird die Anforderung per Push an die Middlewarepipeline von ASP.NET Core übertragen.After the IIS HTTP Server processes the request, the request is pushed into the ASP.NET Core middleware pipeline. Die Middleware-Pipeline behandelt die Anforderung und gibt sie als HttpContext-Instanz an die App-Logik weiter.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. Die Antwort der App wird über den IIS-HTTP-Server zurück an IIS übergeben.The app's response is passed back to IIS through IIS HTTP Server. IIS übermittelt die Antwort an den Client, der die Anforderung initiiert hat.IIS sends the response to the client that initiated the request.

In-Process-Hosting ist eine wählbare Option für vorhandene Apps. Die dotnet new-Vorlagen sehen das In-Process-Hostingmodell aber als Standard für alle IIS- und IIS Express-Szenarios vor.In-process hosting is opt-in for existing apps, but dotnet new templates default to the in-process hosting model for all IIS and IIS Express scenarios.

CreateDefaultBuilder fügt eine IServer-Instanz hinzu, indem die UseIIS-Methode aufgerufen wird, um die CoreCLR zu starten und die App im IIS-Workerprozess zu hosten (w3wp.exe oder iisexpress.exe).CreateDefaultBuilder adds an IServer instance by calling the UseIIS method to boot the CoreCLR and host the app inside of the IIS worker process (w3wp.exe or iisexpress.exe). Leistungstests weisen darauf hin, dass das In-Process-Hosting einer .NET Core-App einen weitaus höheren Anforderungsdurchsatz im Vergleich zum Out-of-Process-Hosting der App mit Weiterleitung der Anforderungen über einen Proxy an Kestrel Server bietet.Performance tests indicate that hosting a .NET Core app in-process delivers significantly higher request throughput compared to hosting the app out-of-process and proxying requests to Kestrel server.

Out-of-Process-HostingmodellOut-of-process hosting model

Da ASP.NET Core-Apps in einem Prozess getrennt vom IIS-Arbeitsprozess ausgeführt werden, führt das ASP.NET Core-Modul die Prozessverwaltung durch.Because ASP.NET Core apps run in a process separate from the IIS worker process, the ASP.NET Core Module handles process management. Das Modul startet den Prozess für die ASP.NET Core-App, wenn die erste Anforderung eingeht und startet die App neu, wenn sie heruntergefahren wird oder abstürzt.The module starts the process for the ASP.NET Core app when the first request arrives and restarts the app if it shuts down or crashes. Dies ist im Prinzip das gleiche Verhalten wie bei Apps, die prozessintern ausgeführt und durch den Windows-Prozessaktivierungsdienst (WAS) verwaltet werden.This is essentially the same behavior as seen with apps that run in-process that are managed by the Windows Process Activation Service (WAS).

Das folgende Diagramm zeigt die Beziehung zwischen IIS, dem ASP.NET Core-Modul und einer Out-of-Process gehosteten App:The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted out-of-process:

Das ASP.NET Core-Modul im Out-of-Process-Hostingszenario

Anforderungen gehen aus dem Internet an den Treiber „HTTP.sys“ ein, der im Kernelmodus betrieben wird.Requests arrive from the web to the kernel-mode HTTP.sys driver. Der Treiber leitet die Anforderungen an IIS auf dem konfigurierten Port der Webseite weiter, normalerweise 80 (HTTP) oder 443 (HTTPS).The driver routes the requests to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). Das Modul leitet die Anforderung an Kestrel auf einem zufälligen Port der App weiter, der nicht Port 80 oder 443 entspricht.The module forwards the requests to Kestrel on a random port for the app, which isn't port 80 or 443.

Das Modul gibt den Port über die Umgebungsvariable beim Start an. Die UseIISIntegration-Erweiterung konfiguriert den Server so, dass er auf http://localhost:{PORT} lauscht.The module specifies the port via an environment variable at startup, and the UseIISIntegration extension configures the server to listen on http://localhost:{PORT}. Zusätzliche Überprüfungen werden durchgeführt. Anforderungen, die nicht vom Modul stammen, werden abgelehnt.Additional checks are performed, and requests that don't originate from the module are rejected. Das Modul unterstützt die HTTPS-Weiterleitung nicht. Deshalb werden Anforderungen über HTTP weitergeleitet, selbst wenn sie von IIS über HTTPS empfangen wurden.The module doesn't support HTTPS forwarding, so requests are forwarded over HTTP even if received by IIS over HTTPS.

Nachdem Kestrel die Anforderung vom Modul erhalten hat, wird die Anforderung in die Middleware-Pipeline von ASP.NET Core eingestellt.After Kestrel picks up the request from the module, the request is pushed into the ASP.NET Core middleware pipeline. Die Middleware-Pipeline behandelt die Anforderung und gibt sie als HttpContext-Instanz an die App-Logik weiter.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. Die durch IIS-Integration hinzugefügte Middleware aktualisiert das Schema, die Remote-IP und die Pfadbasis, um der Weiterleitung der Anforderung an Kestrel Rechnung zu tragen.Middleware added by IIS Integration updates the scheme, remote IP, and pathbase to account for forwarding the request to Kestrel. Die Antwort der App wird dann an IIS zurückgegeben, wo sie per Push an den HTTP-Client zurückgegeben wird, der die Anforderung initiiert hat.The app's response is passed back to IIS, which pushes it back out to the HTTP client that initiated the request.

Einen Konfigurationsleitfaden für das ASP.NET Core-Modul finden Sie unter ASP.NET Core-Modul.For ASP.NET Core Module configuration guidance, see ASP.NET Core-Modul.

Weitere Informationen zum Hosten finden Sie unter Hosten in ASP.NET Core.For more information on hosting, see Host in ASP.NET Core.

AnwendungskonfigurationApplication configuration

Aktivieren der IISIntegration-KomponentenEnable the IISIntegration components

Rufen Sie beim Erstellen eines Hosts in CreateWebHostBuilder (Program.cs) CreateDefaultBuilder ab, um die IIS-Integration zu aktivieren:When building a host in CreateWebHostBuilder (Program.cs), call CreateDefaultBuilder to enable IIS integration:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        ...

Weitere Informationen zu CreateDefaultBuilder finden Sie unter ASP.NET Core-Webhost.For more information on CreateDefaultBuilder, see ASP.NET Core-Webhost.

IIS-OptionenIIS options

In-Process-HostingmodellIn-process hosting model

Schließen Sie zur Konfiguration von IIS-Serveroptionen eine Dienstkonfiguration für IISServerOptions in ConfigureServices ein.To configure IIS Server options, include a service configuration for IISServerOptions in ConfigureServices. Mit dem folgenden Beispiel wird AutomaticAuthentication deaktiviert:The following example disables AutomaticAuthentication:

services.Configure<IISServerOptions>(options => 
{
    options.AutomaticAuthentication = false;
});
OptionOption StandardDefault EinstellungSetting
AutomaticAuthentication true Bei Festlegung auf true legt der Server den per Windows-Authentifizierung authentifizierten HttpContext.User fest.If true, IIS Server sets the HttpContext.User authenticated by Windows Authentication. Bei Festlegung auf false stellt der Server nur eine Identität für HttpContext.User bereit und antwortet auf explizite Anforderungen durch AuthenticationScheme.If false, the server only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Die Windows-Authentifizierung muss in IIS aktiviert sein, damit AutomaticAuthentication funktioniert.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Weitere Informationen finden Sie unter Windows-Authentifizierung.For more information, see Windows Authentication.
AuthenticationDisplayName null Legt den Anzeigename fest, der Benutzern auf Anmeldungsseiten angezeigt wirdSets the display name shown to users on login pages.

Out-of-Process-HostingmodellOut-of-process hosting model

Schließen Sie zur Konfiguration von IIS-Optionen eine Dienstkonfiguration für IISOptions in ConfigureServices ein.To configure IIS options, include a service configuration for IISOptions in ConfigureServices. Im folgenden Beispiel wird Verhindert, dass die App HttpContext.Connection.ClientCertificate auffüllt:The following example prevents the app from populating HttpContext.Connection.ClientCertificate:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
OptionOption StandardDefault EinstellungSetting
AutomaticAuthentication true Bei Festlegung auf true legt die Middleware für die IIS-Integration den per Windows-Authentifizierung authentifizierten HttpContext.User fest.If true, IIS Integration Middleware sets the HttpContext.User authenticated by Windows Authentication. Bei Festlegung auf false stellt die Middleware nur eine Identität für HttpContext.User bereit und antwortet auf explizite Anforderungen durch AuthenticationScheme.If false, the middleware only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Die Windows-Authentifizierung muss in IIS aktiviert sein, damit AutomaticAuthentication funktioniert.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Weitere Informationen finden Sie im Thema Windows-Authentifizierung.For more information, see the Windows Authentication topic.
AuthenticationDisplayName null Legt den Anzeigename fest, der Benutzern auf Anmeldungsseiten angezeigt wirdSets the display name shown to users on login pages.
ForwardClientCertificate true Wenn diese Option true ist und der Anforderungsheader MS-ASPNETCORE-CLIENTCERT vorhanden ist, wird das HttpContext.Connection.ClientCertificate aufgefüllt.If true and the MS-ASPNETCORE-CLIENTCERT request header is present, the HttpContext.Connection.ClientCertificate is populated.

Proxyserver und LastenausgleichsszenarienProxy server and load balancer scenarios

Die Middleware für die Integration von IIS, die die Middleware für weitergeleitete Header konfiguriert, und das ASP.NET Core-Modul sind so konfiguriert, dass sie das Schema (HTTP/HTTPS) und die Remote-IP-Adresse an die Stelle weiterleiten, von der die Anforderung stammte.The IIS Integration Middleware, which configures Forwarded Headers Middleware, and the ASP.NET Core Module are configured to forward the scheme (HTTP/HTTPS) and the remote IP address where the request originated. Möglicherweise ist zusätzliche Konfiguration für Apps erforderlich, die hinter weiteren Proxyservern und Lastenausgleichsmodulen (Load Balancer) gehostet werden.Additional configuration might be required for apps hosted behind additional proxy servers and load balancers. Weitere Informationen hierzu feinden Sie unter Konfigurieren von ASP.NET Core zur Verwendung mit Proxyservern und Lastenausgleich.For more information, see Configure ASP.NET Core to work with proxy servers and load balancers.

Datei „web.config“web.config file

Mit der Datei web.config wird das ASP.NET Core-Modul konfiguriert.The web.config file configures the ASP.NET Core Module. Die Erstellung, Transformation und Veröffentlichung der Datei web.config wird bei der Projektveröffentlichung von einem MSBuild-Ziel (_TransformWebConfig) abgewickelt.Creating, transforming, and publishing the web.config file is handled by an MSBuild target (_TransformWebConfig) when the project is published. Dieses Ziel ist in den Web SDK-Zielen (Microsoft.NET.Sdk.Web) vorhanden.This target is present in the Web SDK targets (Microsoft.NET.Sdk.Web). Das SDK wird am Anfang der Projektdatei festgelegt:The SDK is set at the top of the project file:

<Project Sdk="Microsoft.NET.Sdk.Web">

Wenn im Projekt keine Datei namens web.config vorhanden ist, wird sie zur Konfiguration des ASP.NET Core-Moduls mit dem richtigen processPath- und arguments-Attribut erstellt und in die veröffentlichte Ausgabe verschoben.If a web.config file isn't present in the project, the file is created with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output.

Ist eine Datei namens web.config im Projekt vorhanden, wird sie zur Konfiguration des ASP.NET Core-Moduls mit dem richtigen processPath- und arguments-Attribut transformiert und in die veröffentlichte Ausgabe verschoben.If a web.config file is present in the project, the file is transformed with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output. Die Transformation ändert die IIS-Konfigurationseinstellungen in der Datei nicht.The transformation doesn't modify IIS configuration settings in the file.

Die Datei web.config kann zusätzliche IIS-Konfigurationseinstellungen zum Steuern der aktiven IIS-Module bereitstellen.The web.config file may provide additional IIS configuration settings that control active IIS modules. Informationen zu IIS-Modulen, die Anforderungen mit ASP.NET Core-Apps verarbeiten können, finden Sie im Thema IIS-Module.For information on IIS modules that are capable of processing requests with ASP.NET Core apps, see the IIS modules topic.

Verwenden Sie die Eigenschaft <IsTransformWebConfigDisabled> in der Projektdatei, um zu verhindern, dass das Web-SDK die Datei web.config transformiert:To prevent the Web SDK from transforming the web.config file, use the <IsTransformWebConfigDisabled> property in the project file:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Wenn die Transformation der Datei durch das Web-SDK deaktiviert wird, müssen die Attribute processPath und arguments manuell durch den Entwickler festgelegt werden.When disabling the Web SDK from transforming the file, the processPath and arguments should be manually set by the developer. Weitere Informationen finden Sie unter ASP.NET Core-Modul.For more information, see ASP.NET Core-Modul.

Speicherort der Datei „web.config“web.config file location

Zum Erstellen des ASP.NET Core-Moduls muss die Datei web.config im Inhaltsstammpfad (normalerweise dem App-Basispfad) der bereitgestellten App vorhanden sein.In order to set up the ASP.NET Core Module correctly, the web.config file must be present at the content root path (typically the app base path) of the deployed app. Dies ist der physische Pfad der Website, der in IIS bereitgestellt wurde.This is the same location as the website physical path provided to IIS. Die Datei Web.config wird im Stammverzeichnis der App benötigt, um die Veröffentlichung mehrerer Apps mit Web Deploy zu ermöglichen.The web.config file is required at the root of the app to enable the publishing of multiple apps using Web Deploy.

Im physischen Pfad der App sind vertrauliche Dateien vorhanden, z. B. <assembly>.runtimeconfig.json, <assembly>.xml (XML-Dokumentationskommentare) und <assembly>.deps.json.Sensitive files exist on the app's physical path, such as <assembly>.runtimeconfig.json, <assembly>.xml (XML Documentation comments), and <assembly>.deps.json. Wenn die web.config-Datei vorhanden ist und die Website normal startet, werden diese vertraulichen Dateien bei Anforderung nicht offengelegt.When the web.config file is present and the site starts normally, IIS doesn't serve these sensitive files if they're requested. Wenn die Datei web.config fehlt, falsch benannt wurde oder die Website nicht für den normalen Start konfigurieren kann, macht IIS vertrauliche Dateien möglicherweise öffentlich verfügbar.If the web.config file is missing, incorrectly named, or unable to configure the site for normal startup, IIS may serve sensitive files publicly.

Die Datei web.config muss immer in der Bereitstellung vorhanden, richtig benannt und in der Lage sein, die Website für einen normalen Start zu konfigurieren. Entfernen Sie die Datei web.config niemals aus einer Produktionsbereitstellung.The web.config file must be present in the deployment at all times, correctly named, and able to configure the site for normal start up. Never remove the web.config file from a production deployment.

Transformieren von web.configTransform web.config

Wenn Sie web.config beim Veröffentlichen transformieren müssen (z.B. Umgebungsvariablen basierend auf der Konfiguration, dem Profil oder der Umgebung festlegen müssen), finden Sie weitere Informationen unter Transformieren von web.config.If you need to transform web.config on publish (for example, set environment variables based on the configuration, profile, or environment), see Transformieren von web.config.

IIS-KonfigurationIIS configuration

Windows Server-BetriebssystemeWindows Server operating systems

Aktivieren Sie die Serverrolle Webserver (IIS) , und richten Sie Rollendienste ein.Enable the Web Server (IIS) server role and establish role services.

  1. Verwenden Sie den Assistenten Rollen und Features hinzufügen im Menü Verwalten oder den Link in Server-Manager.Use the Add Roles and Features wizard from the Manage menu or the link in Server Manager. Aktivieren Sie im Schritt Serverrollen das Kontrollkästchen für Webserver (IIS) .On the Server Roles step, check the box for Web Server (IIS).

    Die Rolle „Webserver (IIS)“ wird im Schritt „Serverrollen auswählen“ ausgewählt.

  2. Nach dem Schritt Features wird der Schritt Rollendienste für Webserver (IIS) geladen.After the Features step, the Role services step loads for Web Server (IIS). Wählen Sie die gewünschten IIS-Rollendienste aus, oder übernehmen Sie die bereitgestellten Standardrollendienste.Select the IIS role services desired or accept the default role services provided.

    Die Standardrollendienste werden im Schritt „Rollendienste auswählen“ ausgewählt.

    Windows-Authentifizierung (optional)Windows Authentication (Optional)
    Um die Windows-Authentifizierung zu aktivieren, erweitern Sie die folgenden Knoten: Webserver > Sicherheit.To enable Windows Authentication, expand the following nodes: Web Server > Security. Wählen Sie das Feature Windows-Authentifizierung aus.Select the Windows Authentication feature. Weitere Informationen finden Sie unter Windows-Authentifizierung <windowsAuthentication> und Konfigurieren der Windows-Authentifizierung.For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets (optional)WebSockets (Optional)
    WebSockets wird mit ASP.NET Core 1.1 oder höher unterstützt.WebSockets is supported with ASP.NET Core 1.1 or later. Um WebSockets zu aktivieren, erweitern Sie die folgenden Knoten: Webserver > Anwendungsentwicklung.To enable WebSockets, expand the following nodes: Web Server > Application Development. Wählen Sie das Feature WebSocket-Protokoll aus.Select the WebSocket Protocol feature. Weitere Informationen finden Sie unter WebSockets.For more information, see WebSockets.

  3. Fahren Sie mit dem Schritt Bestätigung fort, um die Webserverrolle und die Dienste zu installieren.Proceed through the Confirmation step to install the web server role and services. Ein Server-/IIS-Neustart ist nach der Installation der Rolle Webserver (IIS) nicht erforderlich.A server/IIS restart isn't required after installing the Web Server (IIS) role.

Windows-DesktopbetriebssystemeWindows desktop operating systems

Aktivieren Sie die IIS-Verwaltungskonsole und die WWW-Dienste.Enable the IIS Management Console and World Wide Web Services.

  1. Navigieren Sie zu Systemsteuerung > Programme > Programme und Features > Windows-Features aktivieren oder deaktivieren (links auf dem Bildschirm).Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).

  2. Öffnen Sie den Knoten Internetinformationsdienste.Open the Internet Information Services node. Öffnen Sie den Knoten Webverwaltungstools.Open the Web Management Tools node.

  3. Aktivieren Sie das Kontrollkästchen für IIS-Verwaltungskonsole.Check the box for IIS Management Console.

  4. Aktivieren Sie das Kontrollkästchen für WWW-Dienste.Check the box for World Wide Web Services.

  5. Akzeptieren Sie die Standardfeatures für WWW-Dienste, oder passen Sie die IIS-Features an.Accept the default features for World Wide Web Services or customize the IIS features.

    Windows-Authentifizierung (optional)Windows Authentication (Optional)
    Um die Windows-Authentifizierung zu aktivieren, erweitern Sie die folgenden Knoten: WWW-Dienste > Sicherheit.To enable Windows Authentication, expand the following nodes: World Wide Web Services > Security. Wählen Sie das Feature Windows-Authentifizierung aus.Select the Windows Authentication feature. Weitere Informationen finden Sie unter Windows-Authentifizierung <windowsAuthentication> und Konfigurieren der Windows-Authentifizierung.For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets (optional)WebSockets (Optional)
    WebSockets wird mit ASP.NET Core 1.1 oder höher unterstützt.WebSockets is supported with ASP.NET Core 1.1 or later. Um WebSockets zu aktivieren, erweitern Sie die folgenden Knoten: WWW-Dienste > Anwendungsentwicklungsfeatures.To enable WebSockets, expand the following nodes: World Wide Web Services > Application Development Features. Wählen Sie das Feature WebSocket-Protokoll aus.Select the WebSocket Protocol feature. Weitere Informationen finden Sie unter WebSockets.For more information, see WebSockets.

  6. Wenn die IIS-Installation einen Neustart erfordert, starten Sie das System neu.If the IIS installation requires a restart, restart the system.

Die IIS-Verwaltungskonsole und WWW-Dienste werden in Windows-Features ausgewählt.

Installieren des .NET Core Hosting-PaketsInstall the .NET Core Hosting Bundle

Installieren Sie das Paket „.NET Core Hosting“ im Hostsystem.Install the .NET Core Hosting Bundle on the hosting system. Das Paket installiert die .NET Core-Runtime, die .NET Core-Bibliothek und das ASP.NET Core-Modul.The bundle installs the .NET Core Runtime, .NET Core Library, and the ASP.NET Core Module. Mit dem Modul können ASP.NET Core-Apps hinter IIS ausgeführt werden.The module allows ASP.NET Core apps to run behind IIS.

Wichtig

Wenn das Hosting-Paket vor IIS installiert wird, muss die Paketinstallation repariert werden.If the Hosting Bundle is installed before IIS, the bundle installation must be repaired. Führen Sie nach der Installation von IIS erneut den Installer des Hosting-Pakets aus.Run the Hosting Bundle installer again after installing IIS.

Wenn das Hosting-Paket nach der Installation der 64-Bit-Version (x64) von .NET Core installiert wird, kann es den Anschein haben, dass SDKs fehlen (Es wurden keine .NET Core SDKs erkannt).If the Hosting Bundle is installed after installing the 64-bit (x64) version of .NET Core, SDKs might appear to be missing (No .NET Core SDKs were detected). Informationen zum Beheben des Problems finden Sie unter Problembehandlung und Debuggen von ASP.NET Core-Projekten.To resolve the problem, see Problembehandlung und Debuggen von ASP.NET Core-Projekten.

HerunterladenDownload

  1. Navigieren Sie zur .NET Core-Downloadseite.Navigate to the Download .NET Core page.
  2. Wählen Sie die gewünschte .NET Core-Version aus.Select the desired .NET Core version.
  3. Suchen Sie in der Spalte Run apps - Runtime (Apps ausführen – Runtime) die Zeile mit der gewünschten .NET Core-RuntimeRuntime-Version.In the Run apps - Runtime column, find the row of the .NET Core runtime version desired.
  4. Laden Sie den Installer über den Link das Hosting Bundle (Hosting-Paket) herunter.Download the installer using the Hosting Bundle link.

Warnung

Einige Installer enthalten Releaseversionen, die das Ende ihres Lebenszyklus erreicht haben und nicht mehr von Microsoft unterstützt werden.Some installers contain release versions that have reached their end of life (EOL) and are no longer supported by Microsoft. Weitere Informationen finden Sie in den Unterstützungsrichtlinien.For more information, see the support policy.

Installieren des Hosting-PaketsInstall the Hosting Bundle

  1. Führen Sie das Installationsprogramm auf dem Server aus.Run the installer on the server. Die folgenden Parameter sind verfügbar, wenn Sie das Installationsprogramm über eine Administratorbefehlsshell ausführen.The following parameters are available when running the installer from an administrator command shell:

    • OPT_NO_ANCM=1: Überspringen Sie die Installation des ASP.NET Core-Moduls.OPT_NO_ANCM=1: Skip installing the ASP.NET Core Module.
    • OPT_NO_RUNTIME=1: Überspringen Sie die Installation der .NET Core-Runtime.OPT_NO_RUNTIME=1: Skip installing the .NET Core runtime. Wird verwendet, wenn der Server nur eigenständige Bereitstellungen (Self-contained Deployments, SCD) hostet.Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_SHAREDFX=1: Überspringen Sie die Installation des freigegebenen ASP.NET-Frameworks (ASP.NET-Runtime).OPT_NO_SHAREDFX=1: Skip installing the ASP.NET Shared Framework (ASP.NET runtime). Wird verwendet, wenn der Server nur eigenständige Bereitstellungen (Self-contained Deployments, SCD) hostet.Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_X86=1: Überspringen Sie die Installation von x86-Runtimes.OPT_NO_X86=1: Skip installing x86 runtimes. Verwenden Sie diesen Parameter, wenn Sie wissen, dass Sie keine 32-Bit-Apps hosten.Use this parameter when you know that you won't be hosting 32-bit apps. Sollte die Möglichkeit bestehen, dass Sie sowohl 32-Bit- als auch 64-Bit-Apps hosten könnten, verwenden Sie diesen Parameter nicht, und installieren Sie beide Runtimes.If there's any chance that you will host both 32-bit and 64-bit apps in the future, don't use this parameter and install both runtimes.
    • OPT_NO_SHARED_CONFIG_CHECK=1: Deaktivieren Sie die Überprüfung auf Verwendung einer gemeinsamen IIS-Konfiguration, wenn sich die gemeinsam genutzte Konfiguration (applicationHost.config) auf demselben Computer wie die IIS-Installation befindet.OPT_NO_SHARED_CONFIG_CHECK=1: Disable the check for using an IIS Shared Configuration when the shared configuration (applicationHost.config) is on the same machine as the IIS installation. Nur für Installationsprogramme für Hostingbundles für ASP.NET Core 2.2 oder höher verfügbar.Only available for ASP.NET Core 2.2 or later Hosting Bundler installers. Weitere Informationen finden Sie unter ASP.NET Core-Modul.For more information, see ASP.NET Core-Modul.
  2. Starten Sie das System neu, oder führen Sie die folgenden Befehle in einer Befehlsshell aus:Restart the system or execute the following commands in a command shell:

    net stop was /y
    net start w3svc
    

    Durch den Neustart von IIS wird eine Änderung an der PATH-Systemeinstellung – einer Umgebungsvariable – angewendet, die durch den Installer vorgenommen wurde.Restarting IIS picks up a change to the system PATH, which is an environment variable, made by the installer.

Beim Installieren des Hostingpakets müssen die einzelnen Websites in IIS nicht manuell angehalten werden.It isn't necessary to manually stop individual sites in IIS when installing the Hosting Bundle. Gehostete Apps (IIS-Websites) werden beim Neustart von IIS neu gestartet.Hosted apps (IIS sites) restart when IIS restarts. Apps starten wieder, wenn die erste Anforderung eintrifft, beispielsweise aus dem Anwendungsinitialisierungsmodul.Apps start up again when they receive their first request, including from the Application Initialization Module.

ASP.NET Core wendet ein Rollforwardverhalten für Patchversionen freigegebener Frameworkpaketen an.ASP.NET Core adopts roll-forward behavior for patch releases of shared framework packages. Wenn von IIS gehostete Apps mit IIS neu starten, werden sie mit den neuesten Patchversionen der referenzierten Pakete geladen, sobald sie die erste Anforderung empfangen.When apps hosted by IIS restart with IIS, the apps load with the latest patch releases of their referenced packages when they receive their first request. Wenn IIS nicht neu gestartet wird, starten die Apps neu und wenden ein Rollforwardverhalten an, wenn die Workerprozesse neu starten und die Apps die erste Anforderung empfangen.If IIS isn't restarted, apps restart and exhibit roll-forward behavior when their worker processes are recycled and they receive their first request.

Hinweis

Informationen zur Verwendung einer IIS-Freigabekonfiguration finden Sie unter ASP.NET Core-Modul mit IIS-Freigabekonfiguration.For information on IIS Shared Configuration, see ASP.NET Core Module with IIS Shared Configuration.

Installieren von Web Deploy beim Veröffentlichen mit Visual StudioInstall Web Deploy when publishing with Visual Studio

Wenn Sie Apps auf Servern mit Web Deploy bereitstellen, installieren Sie die neueste Version von Web Deploy auf dem Server.When deploying apps to servers with Web Deploy, install the latest version of Web Deploy on the server. Um Web Deploy zu installieren, verwenden Sie den Webplattform-Installer (Web PI) oder rufen einen Installer direkt aus dem Microsoft Download Center ab.To install Web Deploy, use the Web Platform Installer (WebPI) or obtain an installer directly from the Microsoft Download Center. Die bevorzugte Methode ist die Verwendung von WebPI.The preferred method is to use WebPI. WebPI bietet ein eigenständiges Setup und eine Konfiguration für Hostinganbieter.WebPI offers a standalone setup and a configuration for hosting providers.

Erstellen der IIS-WebsiteCreate the IIS site

  1. Erstellen Sie auf dem Hostingsystem einen Ordner zum Speichern der veröffentlichten Ordner und Dateien der App.On the hosting system, create a folder to contain the app's published folders and files. In einem späteren Schritt wird der Ordnerpfad als physischer App-Pfad in IIS angegeben.In a following step, the folder's path is provided to IIS as the physical path to the app. Weitere Informationen zu Bereitstellungsordner und Dateilayout einer App finden Sie unter Verzeichnisstruktur für ASP.NET Core.For more information on an app's deployment folder and file layout, see Verzeichnisstruktur für ASP.NET Core.

  2. Öffnen Sie in IIS-Manager den Serverknoten im Bereich Verbindungen.In IIS Manager, open the server's node in the Connections panel. Klicken Sie mit der rechten Maustaste auf den Ordner Websites.Right-click the Sites folder. Klicken Sie im Kontextmenü auf Website hinzufügen.Select Add Website from the contextual menu.

  3. Geben Sie einen Websitenamen an, und legen Sie den physischen Pfad auf den Bereitstellungsordner der App fest.Provide a Site name and set the Physical path to the app's deployment folder. Geben Sie die Konfiguration unter Bindung an, und erstellen Sie die Website, indem Sie auf OK klicken:Provide the Binding configuration and create the website by selecting OK:

    Geben Sie den Websitenamen, den physischen Pfad und den Hostnamen im Schritt „Website hinzufügen“ an.

    Warnung

    Allgemeine Platzhalterbindungen (http://*:80/ und http://+:80) dürfen nicht verwendet werden.Top-level wildcard bindings (http://*:80/ and http://+:80) should not be used. Platzhalterbindungen auf oberster Ebene gefährden die Sicherheit Ihrer App.Top-level wildcard bindings can open up your app to security vulnerabilities. Dies gilt für starke und schwache Platzhalter.This applies to both strong and weak wildcards. Verwenden Sie statt Platzhaltern explizite Hostnamen.Use explicit host names rather than wildcards. Platzhalterbindungen in untergeordneten Domänen (z.B. *.mysub.com) verursachen kein Sicherheitsrisiko, wenn Sie die gesamte übergeordnete Domäne steuern (im Gegensatz zu *.com, das angreifbar ist).Subdomain wildcard binding (for example, *.mysub.com) doesn't have this security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). Weitere Informationen finden Sie unter rfc7230 im Abschnitt 5.4.See rfc7230 section-5.4 for more information.

  4. Wählen Sie unter dem Serverknoten Anwendungspools aus.Under the server's node, select Application Pools.

  5. Klicken Sie mit der rechten Maustaste auf den App-Pool der Website, und wählen Sie im Kontextmenü Grundeinstellungen aus.Right-click the site's app pool and select Basic Settings from the contextual menu.

  6. Legen Sie im Fenster Anwendungspool bearbeiten die .NET CLR-Version auf Kein verwalteter Code fest:In the Edit Application Pool window, set the .NET CLR version to No Managed Code:

    Legen Sie „Kein verwalteter Code“ für die .NET CLR-Version fest.

    ASP.NET Core wird in einem separaten Prozess ausgeführt und verwaltet die Runtime.ASP.NET Core runs in a separate process and manages the runtime. ASP.NET Core basiert nicht auf dem Laden des Desktop-CLR (.NET CLR). Die Core Common Language Runtime (CoreCLR) für .NET Core wird gestartet, um die App im Workerprozess zu hosten.ASP.NET Core doesn't rely on loading the desktop CLR (.NET CLR)—the Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process. Das Festlegen der .NET CLR-Version auf Kein verwalteter Code ist optional, wird aber empfohlen.Setting the .NET CLR version to No Managed Code is optional but recommended.

  7. ASP.NET Core 2.2 oder höher: Deaktivieren Sie für eine eigenständige Bereitstellung für 64-Bit-Systeme (x64), die das In-Process-Hostingmodell verwendet, den App-Pool für 32-Bit-Prozesse (x86).ASP.NET Core 2.2 or later: For a 64-bit (x64) self-contained deployment that uses the in-process hosting model, disable the app pool for 32-bit (x86) processes.

    Wählen Sie in der Seitenleiste Aktionen von „IIS-Manager > Anwendungspools“ die Option Standardwerte für Anwendungspool festlegen oder Erweiterte Einstellungen aus.In the Actions sidebar of IIS Manager > Application Pools, select Set Application Pool Defaults or Advanced Settings. Suchen Sie nach 32-Bit-Anwendungen aktivieren, und legen Sie den Wert auf False fest.Locate Enable 32-Bit Applications and set the value to False. Diese Einstellung wirkt sich nicht auf Apps aus, die für Out-of-Process-Hosting bereitgestellt wurden.This setting doesn't affect apps deployed for out-of-process hosting.

  8. Vergewissern Sie sich, dass die Prozessmodellidentität über die richtigen Berechtigungen verfügt.Confirm the process model identity has the proper permissions.

    Wenn die Standardidentität des App-Pools (Prozessmodell > Identität) von ApplicationPoolIdentity in eine andere Identität geändert wird, stellen Sie sicher, dass die neue Identität über die erforderlichen Berechtigungen zum Zugriff auf den Ordner, die Datenbank und andere erforderliche Ressourcen der App verfügt.If the default identity of the app pool (Process Model > Identity) is changed from ApplicationPoolIdentity to another identity, verify that the new identity has the required permissions to access the app's folder, database, and other required resources. Der App-Pool benötigt beispielsweise Lese- und Schreibzugriff für Ordner, in denen die App Lese- und Schreibvorgänge für Dateien ausführt.For example, the app pool requires read and write access to folders where the app reads and writes files.

Konfigurieren der Windows-Authentifizierung (optional)Windows Authentication configuration (Optional)
Weitere Informationen finden Sie unter Konfigurieren der Windows-Authentifizierung.For more information, see Configure Windows authentication.

Bereitstellen der AppDeploy the app

Stellen Sie die App im IIS-Ordner Physischer Pfad bereit, der im Abschnitt Erstellen der IIS-Website eingerichtet wurde.Deploy the app to the IIS Physical path folder that was established in the Create the IIS site section. Web Deploy ist die empfohlene Methode für die Bereitstellung, aber es gibt verschiedene Optionen, um die Anwendung aus dem Ordner publish des Projekts in den Bereitstellungsordner des Hostsystems zu verschieben.Web Deploy is the recommended mechanism for deployment, but several options exist for moving the app from the project's publish folder to the hosting system's deployment folder.

Web Deploy mit Visual StudioWeb Deploy with Visual Studio

Informationen zum Erstellen eines Veröffentlichungsprofils zur Verwendung mit Web Deploy finden Sie im Thema Visual Studio publish profiles for ASP.NET Core app deployment (Visual Studio-Veröffentlichungsprofile zum Bereitstellen von ASP.NET Core-Apps).See the Visual Studio publish profiles for ASP.NET Core app deployment topic to learn how to create a publish profile for use with Web Deploy. Wenn der Hostinganbieter ein Veröffentlichungsprofil oder Unterstützung für das Erstellen eines solchen Profils bereitstellt, laden Sie dessen Profil herunter, und importieren Sie es mithilfe des Visual Studio-Dialogfelds Veröffentlichen:If the hosting provider provides a Publish Profile or support for creating one, download their profile and import it using the Visual Studio Publish dialog:

Dialogfeld „Veröffentlichen“

Web Deploy außerhalb von Visual StudioWeb Deploy outside of Visual Studio

Web Deploy kann über die Befehlszeile auch außerhalb von Visual Studio verwendet werden.Web Deploy can also be used outside of Visual Studio from the command line. Weitere Informationen finden Sie unter Web Deployment Tool (Webbereitstellungstool).For more information, see Web Deployment Tool.

Alternativen zu Web DeployAlternatives to Web Deploy

Verwenden Sie eine der folgenden Methoden, um die App in das Hostsystem zu verschieben: manuelles Kopieren, Xcopy, Robocopy oder PowerShell.Use any of several methods to move the app to the hosting system, such as manual copy, Xcopy, Robocopy, or PowerShell.

Weitere Informationen zum Bereitstellen von ASP.NET Core in IIS finden Sie im nachfolgenden Abschnitt Bereitstellungsressourcen für IIS-Administratoren.For more information on ASP.NET Core deployment to IIS, see the Deployment resources for IIS administrators section.

Navigieren auf der WebsiteBrowse the website

Senden Sie nach Abschluss der App-Bereitstellung auf dem Hostsystem eine Anforderung an einen der öffentlichen Endpunkte der App.After the app is deployed to the hosting system, make a request to one of the app's public endpoints.

Im folgenden Beispiel ist die Website an den IIS-Hostnamen von www.mysite.com auf Port 80 gebunden.In the following example, the site is bound to an IIS Host name of www.mysite.com on Port 80. Es wird eine Anforderung an http://www.mysite.com gesendet:A request is made to http://www.mysite.com:

Der Microsoft Edge-Browser hat die IIS-Startseite geladen.

Gesperrte BereitstellungsdateienLocked deployment files

Die Dateien im Bereitstellungsordner werden gesperrt, wenn die App ausgeführt wird.Files in the deployment folder are locked when the app is running. Gesperrte Dateien können während der Bereitstellung nicht überschrieben werden.Locked files can't be overwritten during deployment. Um gesperrte Dateien in einer Bereitstellung freizugeben, beenden Sie den App-Pool mit einer der folgenden Methoden:To release locked files in a deployment, stop the app pool using one of the following approaches:

  • Verwenden Sie Web Deploy, und verweisen Sie auf Microsoft.NET.Sdk.Web in der Projektdatei.Use Web Deploy and reference Microsoft.NET.Sdk.Web in the project file. Eine Datei namens app_offline.htm befindet sich im Stammverzeichnis des Web-App-Verzeichnisses.An app_offline.htm file is placed at the root of the web app directory. Wenn die Datei vorhanden ist, fährt das ASP.NET Core Module die App ordnungsgemäß herunter und verarbeitet die Datei app_offline.htm während der Bereitstellung.When the file is present, the ASP.NET Core Module gracefully shuts down the app and serves the app_offline.htm file during the deployment. Weitere Informationen finden Sie unter Konfigurationsreferenz für das ASP.NET Core-Modul.For more information, see the ASP.NET Core Module configuration reference.

  • Beenden Sie den App-Pool im IIS-Manager auf dem Server manuell.Manually stop the app pool in the IIS Manager on the server.

  • Verwenden Sie PowerShell, um app_offline.htm abzulegen (erfordert PowerShell 5 oder höher):Use PowerShell to drop app_offline.htm (requires PowerShell 5 or later):

    $pathToApp = 'PATH_TO_APP'
    
    # Stop the AppPool
    New-Item -Path $pathToApp app_offline.htm
    
    # Provide script commands here to deploy the app
    
    # Restart the AppPool
    Remove-Item -Path $pathToApp app_offline.htm
    
    

Schutz von DatenData protection

Der ASP.NET Core-Stapel zum Schutz von Daten wird von mehreren ASP.NET-Middlewarekomponenten genutzt, darunter auch von Middleware, die bei der Authentifizierung verwendet wird.The ASP.NET Core Data Protection stack is used by several ASP.NET Core middlewares, including middleware used in authentication. Selbst wenn die APIs zum Schutz von Daten nicht aus dem Benutzercode aufgerufen werden, sollte der Schutz von Daten mit einem Bereitstellungsskript oder im Benutzercode konfiguriert werden, um einen persistenten kryptografischen Schlüsselspeicher zu erstellen.Even if Data Protection APIs aren't called by user code, data protection should be configured with a deployment script or in user code to create a persistent cryptographic key store. Wenn der Schutz von Daten nicht konfiguriert ist, werden die Schlüssel beim Neustarten der App im Arbeitsspeicher gespeichert und verworfen.If data protection isn't configured, the keys are held in memory and discarded when the app restarts.

Falls der Schlüsselbund im Arbeitsspeicher gespeichert wird, wenn die App neu gestartet wird, gilt Folgendes:If the key ring is stored in memory when the app restarts:

  • Alle cookiebasierten Authentifizierungstoken für ungültig erklärt.All cookie-based authentication tokens are invalidated.
  • Benutzer müssen sich bei ihrer nächsten Anforderung erneut anmelden.Users are required to sign in again on their next request.
  • Alle mit dem Schlüsselbund geschützte Daten können nicht mehr entschlüsselt werden.Any data protected with the key ring can no longer be decrypted. Dies kann CSRF-Token und ASP.NET Core-MVC-TempData-Cookies einschließen.This may include CSRF tokens and ASP.NET Core MVC TempData cookies.

Zum Konfigurieren des Schutzes von Daten unter IIS mithilfe des persistenten Schlüsselbunds verwenden Sie einen der folgenden Ansätze:To configure data protection under IIS to persist the key ring, use one of the following approaches:

  • Erstellen einer Registrierungsstruktur für den Schutz von DatenCreate Data Protection Registry Keys

    Schlüssel für den Schutz von Daten, die von ASP.NET Core-Apps verwendet werden, werden in der Registrierung außerhalb der Apps gespeichert.Data protection keys used by ASP.NET Core apps are stored in the registry external to the apps. Um die Schlüssel für eine bestimmte App zu dauerhaft zu speichern, müssen Sie Registrierungsschlüssel für den App-Pool erstellen.To persist the keys for a given app, create registry keys for the app pool.

    Bei eigenständigen IIS-Installationen, die ohne Webfarm vorgesehen sind, kann das PowerShell-Skript „Provision-AutoGenKeys.ps1“ für den Schutz von Daten für jeden App-Pool genutzt werden, das mit einer ASP.NET Core-App verwendet wird.For standalone, non-webfarm IIS installations, the Data Protection Provision-AutoGenKeys.ps1 PowerShell script can be used for each app pool used with an ASP.NET Core app. Dieses Skript erstellt einen Registrierungsschlüssel in der HKLM-Registrierung, der nur für das Workerprozesskonto des App-Pools der App zugänglich ist.This script creates a registry key in the HKLM registry that's accessible only to the worker process account of the app's app pool. Schlüssel werden in ruhendem Zustand mit DPAPI mit einem computerweiten Schlüssel verschlüsselt.Keys are encrypted at rest using DPAPI with a machine-wide key.

    In Webfarmszenarios kann eine App so konfiguriert werden, dass sie einen UNC-Pfad verwendet, um den Schlüsselbund für den Schutz von Daten zu speichern.In web farm scenarios, an app can be configured to use a UNC path to store its data protection key ring. Standardmäßig werden die Schlüssel für den Schutz von Daten nicht verschlüsselt.By default, the data protection keys aren't encrypted. Stellen Sie sicher, dass die Dateiberechtigungen für die Netzwerkfreigabe auf das Windows-Konto beschränkt sind, mit dem die App ausgeführt wird.Ensure that the file permissions for the network share are limited to the Windows account the app runs under. Ein X.509-Zertifikat kann zum Schutz von Schlüsseln im ruhenden Zustand verwendet werden.An X509 certificate can be used to protect keys at rest. Richten Sie ggf. einen Mechanismus ein, um es Benutzern zu ermöglichen, Zertifikate hochzuladen: Platzieren Sie Zertifikate im Zertifikatspeicher des Benutzers für vertrauenswürdige Anbieter, und stellen Sie sicher, dass sie auf allen Computern verfügbar sind, auf denen die App des Benutzers ausgeführt wird.Consider a mechanism to allow users to upload certificates: Place certificates into the user's trusted certificate store and ensure they're available on all machines where the user's app runs. Details finden Sie unter Konfigurieren des Schutzes von Daten in ASP.NET Core.See Configure ASP.NET Core Data Protection for details.

  • Konfigurieren des IIS-Anwendungspools zum Laden des BenutzerprofilsConfigure the IIS Application Pool to load the user profile

    Diese Einstellung befindet sich im Abschnitt Prozessmodell unter Erweiterte Einstellungen für den App-Pool.This setting is in the Process Model section under the Advanced Settings for the app pool. Legen Sie Benutzerprofil laden auf True fest.Set Load User Profile to True. Wenn diese Option auf True festgelegt ist, werden Schlüssel im Benutzerprofilverzeichnis gespeichert und mit DPAPI mit einem für das Benutzerkonto spezifischen Schlüssel geschützt.When set to True, keys are stored in the user profile directory and protected using DPAPI with a key specific to the user account. Schlüssel werden im Ordner %LOCALAPPDATA%/ASP.NET/DataProtection-Keys gespeichert.Keys are persisted to the %LOCALAPPDATA%/ASP.NET/DataProtection-Keys folder.

    Das setProfileEnvironment-Attribut des App-Pools muss ebenfalls aktiviert sein.The app pool's setProfileEnvironment attribute must also be enabled. Der Standardwert von setProfileEnvironment ist true.The default value of setProfileEnvironment is true. In einigen Szenarien (z.B. Windows-Betriebssystem) ist setProfileEnvironment auf false festgelegt.In some scenarios (for example, Windows OS), setProfileEnvironment is set to false. Gehen Sie folgendermaßen vor, wenn Schlüssel nicht wie erwartet im Benutzerprofilverzeichnis gespeichert werden:If keys aren't stored in the user profile directory as expected:

    1. Navigieren Sie zum Ordner %windir%/system32/inetsrv/config.Navigate to the %windir%/system32/inetsrv/config folder.
    2. Öffnen Sie die Datei applicationHost.config.Open the applicationHost.config file.
    3. Suchen Sie das Element <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> .Locate the <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> element.
    4. Bestätigen Sie, dass das setProfileEnvironment-Attribut nicht vorhanden ist, das standardmäßig den Wert true aufweist, oder legen Sie den Wert des Attributs explizit auf true fest.Confirm that the setProfileEnvironment attribute isn't present, which defaults the value to true, or explicitly set the attribute's value to true.
  • Verwenden des Dateisystems als SchlüsselbundspeicherUse the file system as a key ring store

    Passen Sie den App-Code so an, dass er das Dateisystem als Schlüsselbundspeicher verwendet.Adjust the app code to use the file system as a key ring store. Verwenden Sie ein X.509-Zertifikat, um den Schlüsselbund zu schützen, und stellen Sie sicher, dass es sich bei dem Zertifikat um ein vertrauenswürdiges Zertifikat handelt.Use an X509 certificate to protect the key ring and ensure the certificate is a trusted certificate. Wenn es sich um ein selbstsigniertes Zertifikat handelt, müssen Sie es im vertrauenswürdigen Stammspeicher platzieren.If the certificate is self-signed, place the certificate in the Trusted Root store.

    Wenn IIS in einer Webfarm verwendet wird:When using IIS in a web farm:

    • Verwenden Sie eine Dateifreigabe, auf die alle Computer zugreifen können.Use a file share that all machines can access.
    • Stellen Sie ein X509-Zertifikat auf jedem Computer bereit.Deploy an X509 certificate to each machine. Konfigurieren Sie den Schutz von Daten im Code.Configure data protection in code.
  • Festlegen einer computerweiten Richtlinie für den Schutz von DatenSet a machine-wide policy for data protection

    Das System zum Schutz von Daten verfügt über eine eingeschränkte Unterstützung zum Festlegen einer computerweiten Standardrichtlinie für alle Apps, die die Datenschutz-APIs nutzen.The data protection system has limited support for setting a default machine-wide policy for all apps that consume the Data Protection APIs. Weitere Informationen finden Sie unter ASP.net Core Datenschutz.For more information, see ASP.net Core Datenschutz.

Virtuelle VerzeichnisseVirtual Directories

Virtuelle IIS-Verzeichnisse werden mit ASP.NET Core-Apps nicht unterstützt.IIS Virtual Directories aren't supported with ASP.NET Core apps. Eine App kann als untergeordnete Anwendung gehostet werden.An app can be hosted as a sub-application.

Untergeordnete AnwendungenSub-applications

Eine ASP.NET Core-App kann als untergeordnete IIS-Anwendung (untergeordnete App) gehostet werden.An ASP.NET Core app can be hosted as an IIS sub-application (sub-app). Der Pfad der untergeordneten App wird ein Teil der URL der Stamm-App.The sub-app's path becomes part of the root app's URL.

Statische Assetlinks in der untergeordneten App sollten die Tilde/Schrägstrich-Notation verwenden (~/).Static asset links within the sub-app should use tilde-slash (~/) notation. Die Tilde/Schrägstrich-Notation löst ein Taghilfsprogramm aus, um die Pfadbasis der untergeordneten App dem gerenderten relativen Link voranzustellen.Tilde-slash notation triggers a Tag Helper to prepend the sub-app's pathbase to the rendered relative link. Für eine untergeordnete App unter /subapp_path wird ein mit src="~/image.png" verknüpftes Bild als src="/subapp_path/image.png" gerendert.For a sub-app at /subapp_path, an image linked with src="~/image.png" is rendered as src="/subapp_path/image.png". Die Static File Middleware verarbeitet die Anforderung der statischen Datei nicht.The root app's Static File Middleware doesn't process the static file request. Die Anforderung wird von der Static File Middleware der untergeordneten App verarbeitet.The request is processed by the sub-app's Static File Middleware.

Wenn das src-Attribut eines statischen Objekts auf einen absoluten Pfad festgelegt wird (z.B. src="/image.png"), wird der Link ohne die Pfadbasis der untergeordneten App gerendert.If a static asset's src attribute is set to an absolute path (for example, src="/image.png"), the link is rendered without the sub-app's pathbase. Die Middleware für statische Dateien der Stamm-App versucht, das Objekt vom Webstamm der Stamm-App aus bereitzustellen, was zu einer 404 Nicht gefunden-Antwort führt, solange das statische Objekt in der Stamm-App nicht verfügbar ist.The root app's Static File Middleware attempts to serve the asset from the root app's web root, which results in a 404 - Not Found response unless the static asset is available from the root app.

So hosten Sie eine ASP.NET Core-App als untergeordnete App unter einer anderen ASP.NET Core-App:To host an ASP.NET Core app as a sub-app under another ASP.NET Core app:

  1. Richten Sie einen App-Pool für die untergeordnete App ein.Establish an app pool for the sub-app. Legen Sie die .NET CLR-Version auf Kein verwalteter Code fest, weil die Core Common Language Runtime (CoreCLR) für .NET Core gestartet wird, um die App im Workerprozess zu hosten, nicht der Desktop-CLR (.NET CLR).Set the .NET CLR Version to No Managed Code because the Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process, not the desktop CLR (.NET CLR).

  2. Fügen Sie die Stammwebsite im IIS-Manager mit der untergeordneten App in einem unter der Stammwebsite liegenden Ordner hinzu.Add the root site in IIS Manager with the sub-app in a folder under the root site.

  3. Klicken Sie mit der rechten Maustaste im IIS-Manager auf den Ordner der untergeordneten App, und wählen Sie In Anwendung konvertieren aus.Right-click the sub-app folder in IIS Manager and select Convert to Application.

  4. Weisen Sie im Dialogfeld Anwendung hinzufügen mit der Schaltfläche Auswählen den Anwendungspool dem App-Pool zu, den Sie für die untergeordnete App erstellt haben.In the Add Application dialog, use the Select button for the Application Pool to assign the app pool that you created for the sub-app. Klicken Sie auf OK.Select OK.

Die Zuweisung eines separaten App-Pools zur untergeordneten App ist eine Anforderung, wenn Sie das In-Process-Hostingmodell verwenden.The assignment of a separate app pool to the sub-app is a requirement when using the in-process hosting model.

Weitere Informationen zum In-Process-Hostingmodell und Konfigurieren des ASP.NET Core-Moduls finden Sie unter ASP.NET Core-Modul.For more information on the in-process hosting model and configuring the ASP.NET Core Module, see ASP.NET Core-Modul.

Konfiguration von IIS mit der Datei „web.config“Configuration of IIS with web.config

Die IIS-Konfiguration wird von dem Abschnitt <system.webServer> der Datei web.config für IIS-Szenarien beeinflusst, die für ASP.NET Core-Apps mit dem ASP.NET Core-Modul funktional sind.IIS configuration is influenced by the <system.webServer> section of web.config for IIS scenarios that are functional for ASP.NET Core apps with the ASP.NET Core Module. Beispielsweise eignet sich die IIS-Konfiguration für dynamische Komprimierung.For example, IIS configuration is functional for dynamic compression. Wenn IIS auf Serverebene für die Verwendung der dynamischen Komprimierung konfiguriert ist, kann diese Einstellung mit dem <urlCompression>-Element in der Datei web.config der App für eine ASP.NET Core-App deaktiviert werden.If IIS is configured at the server level to use dynamic compression, the <urlCompression> element in the app's web.config file can disable it for an ASP.NET Core app.

Weitere Informationen finden Sie unter den folgenden Themen:For more information, see the following topics:

Lesen Sie den Abschnitt zum Befehl „AppCmd.exe“ im Thema Umgebungsvariablen <environmentVariables> in der IIS-Referenzdokumentation, um Umgebungsvariablen für einzelne Apps festzulegen, die in isolierten App-Pools ausgeführt werden (unterstützt für IIS 10.0 oder höher).To set environment variables for individual apps running in isolated app pools (supported for IIS 10.0 or later), see the AppCmd.exe command section of the Environment Variables <environmentVariables> topic in the IIS reference documentation.

Konfigurationsabschnitte von „web.config“Configuration sections of web.config

Konfigurationsabschnitte von ASP.NET 4.x-Apps in der Datei web.config werden von ASP.NET Core-Apps nicht zur Konfiguration verwendet:Configuration sections of ASP.NET 4.x apps in web.config aren't used by ASP.NET Core apps for configuration:

  • <system.web>
  • <appSettings>
  • <connectionStrings>
  • <location>

ASP.NET Core-Apps werden mit anderen Konfigurationsanbietern konfiguriert.ASP.NET Core apps are configured using other configuration providers. Weitere Informationen finden Sie unter Konfiguration.For more information, see Configuration.

AnwendungspoolsApplication Pools

Die App-Poolisolation wird durch das Hostingmodell bestimmt.App pool isolation is determined by the hosting model:

  • In-Process-Hosting: Apps müssen in separaten App-Pools ausgeführt werden.In-process hosting: Apps are required to run in separate app pools.
  • Out-of-Process-Hosting: Es wird empfohlen, die Apps voneinander zu isolieren, indem Sie jede App in ihrem eigenen App-Pool ausführen.Out-of-process hosting: We recommend isolating the apps from each other by running each app in its own app pool.

Im IIS-Dialogfeld Website hinzufügen wird standardmäßig ein einzelner App-Pool pro App eingesetzt.The IIS Add Website dialog defaults to a single app pool per app. Wenn ein Websitename angegeben ist, wird der Text automatisch in das Textfeld Anwendungspool übertragen.When a Site name is provided, the text is automatically transferred to the Application pool textbox. Ein neuer App-Pool mit dem Namen der Website wird erstellt, wenn die Website hinzugefügt wird.A new app pool is created using the site name when the site is added.

Anwendungspool IdentityApplication Pool Identity

Mit einem Konto für die Identität des App-Pools können Sie eine App unter einem eindeutigen Konto ausführen, ohne Domänen oder lokale Konten erstellen und verwalten zu müssen.An app pool identity account allows an app to run under a unique account without having to create and manage domains or local accounts. Unter IIS 8.0 oder höher erstellt der IIS-Administratorworkerprozess (WAS) ein virtuelles Konto mit dem Namen des neuen App-Pools und führt die Workerprozesse des App-Pools standardmäßig unter diesem Konto aus.On IIS 8.0 or later, the IIS Admin Worker Process (WAS) creates a virtual account with the name of the new app pool and runs the app pool's worker processes under this account by default. Stellen Sie sicher, dass in der IIS-Verwaltungskonsole unter Erweiterte Einstellungen für den App-Pool die Identity (Identität) auf ApplicationPoolIdentity festgelegt ist:In the IIS Management Console under Advanced Settings for the app pool, ensure that the Identity is set to use ApplicationPoolIdentity:

Dialogfeld „Erweiterte Einstellungen“ für den Anwendungspool

Der IIS-Verwaltungsprozess erstellt im Windows-Sicherheitssystem einen sicheren Bezeichner mit dem Namen des App-Pools.The IIS management process creates a secure identifier with the name of the app pool in the Windows Security System. Ressourcen können mithilfe dieser Identität geschützt werden.Resources can be secured using this identity. Allerdings ist diese Identität kein echtes Benutzerkonto und wird in der Windows-Benutzerverwaltungskonsole nicht angezeigt.However, this identity isn't a real user account and doesn't show up in the Windows User Management Console.

Wenn der IIS-Workerprozess erhöhte Rechte für den Zugriff auf Ihre Anwendung erfordert, ändern Sie die Zugriffssteuerungsliste (ACL) für das Verzeichnis mit der App:If the IIS worker process requires elevated access to the app, modify the Access Control List (ACL) for the directory containing the app:

  1. Öffnen Sie Windows Explorer, und navigieren Sie zum Verzeichnis.Open Windows Explorer and navigate to the directory.

  2. Klicken Sie mit der rechten Maustaste auf das Verzeichnis, und klicken Sie auf Eigenschaften.Right-click on the directory and select Properties.

  3. Klicken Sie auf der Registerkarte Sicherheit auf die Schaltfläche Bearbeiten und dann auf die Schaltfläche Hinzufügen.Under the Security tab, select the Edit button and then the Add button.

  4. Wählen Sie die Schaltfläche Speicherorte aus, und stellen Sie sicher, dass das System ausgewählt ist.Select the Locations button and make sure the system is selected.

  5. Geben Sie im Bereich Geben Sie die Namen der auszuwählenden Objekte ein den Wert IIS AppPool\<Name_des_AppPools> ein.Enter IIS AppPool\<app_pool_name> in Enter the object names to select area. Klicken Sie auf die Schaltfläche Namen überprüfen.Select the Check Names button. Überprüfen Sie für DefaultAppPool die Namen mit IIS AppPool\DefaultAppPool.For the DefaultAppPool check the names using IIS AppPool\DefaultAppPool. Bei Auswahl der Schaltfläche Namen überprüfen wird im Bereich für Objektnamen der Wert DefaultAppPool angegeben.When the Check Names button is selected, a value of DefaultAppPool is indicated in the object names area. Es ist nicht möglich, den Namen des App-Pools direkt in den Bereich für Objektnamen einzugeben.It isn't possible to enter the app pool name directly into the object names area. Verwenden Sie das Format IIS AppPool\<Name_des_AppPools> , wenn Sie die Objektnamen überprüfen.Use the IIS AppPool\<app_pool_name> format when checking for the object name.

    Dialogfeld „Benutzer oder Gruppen auswählen“ für den App-Ordner: Der Name des App-Pools, „DefaultAppPool“, wird an „IIS AppPool"“ im Bereich der Objektnamen angehängt, bevor „Namen überprüfen“ ausgewählt wird.

  6. Klicken Sie auf OK.Select OK.

    Dialogfeld „Benutzer oder Gruppen auswählen“ für den App-Ordner: Nach Auswahl von „Namen überprüfen“ wird der Objektname „DefaultAppPool“ im Bereich der Objektnamen angezeigt.

  7. Standardmäßig sollten Lese- und Schreibberechtigungen gewährt werden.Read & execute permissions should be granted by default. Erteilen Sie weitere Berechtigungen, sofern erforderlich.Provide additional permissions as needed.

Zugriff kann auch über eine Eingabeaufforderung mit dem Tool ICACLS gewährt werden.Access can also be granted at a command prompt using the ICACLS tool. Im folgenden Befehl wird als Beispiel DefaultAppPool verwendet:Using the DefaultAppPool as an example, the following command is used:

ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool":F

Weitere Informationen finden Sie im Thema icacls.For more information, see the icacls topic.

HTTP/2-UnterstützungHTTP/2 support

HTTP/2 wird mit ASP.NET Core in den folgenden IIS-Bereitstellungsszenarien unterstützt:HTTP/2 is supported with ASP.NET Core in the following IIS deployment scenarios:

  • In-ProcessIn-process
    • Windows Server 2016/Windows 10 oder höher, IIS 10 oder höherWindows Server 2016/Windows 10 or later; IIS 10 or later
    • TLS 1.2-Verbindung oder höherTLS 1.2 or later connection
  • Out-of-ProcessOut-of-process
    • Windows Server 2016/Windows 10 oder höher, IIS 10 oder höherWindows Server 2016/Windows 10 or later; IIS 10 or later
    • Öffentlich zugängliche Edge-Server-Verbindungen verwenden HTTP/2, aber die Reverseproxyverbindung mit dem Kestrel-Server verwendet HTTP/1.1.Public-facing edge server connections use HTTP/2, but the reverse proxy connection to the Kestrel server uses HTTP/1.1.
    • TLS 1.2-Verbindung oder höherTLS 1.2 or later connection

Für eine In-Process-Bereitstellung, wenn eine HTTP/2-Verbindung hergestellt wurde, HttpRequest.Protocol-Berichte HTTP/2.For an in-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/2. Für eine Out-of-Process-Bereitstellung. wenn eine HTTP/2-Verbindung hergestellt wurde, HttpRequest.Protocol-Berichte HTTP/1.1.For an out-of-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

Weitere Informationen zu den In-Process- und Out-of-Process-Hostingmodellen finden Sie unter ASP.NET Core-Modul.For more information on the in-process and out-of-process hosting models, see ASP.NET Core-Modul.

HTTP/2 ist standardmäßig aktiviert.HTTP/2 is enabled by default. Verbindungen führen ein Fallback auf HTTP/1.1 aus, wenn keine HTTP/2-Verbindung hergestellt wurde.Connections fall back to HTTP/1.1 if an HTTP/2 connection isn't established. Weitere Informationen zur HTTP/2-Konfiguration mit IIS-Bereitstellungen finden Sie unter HTTP/2 unter IIS.For more information on HTTP/2 configuration with IIS deployments, see HTTP/2 on IIS.

CORS-PreflightanforderungenCORS preflight requests

Dieser Abschnitt gilt nur für ASP.NET Core-Apps, die auf das .NET Framework ausgerichtet sind.This section only applies to ASP.NET Core apps that target the .NET Framework.

Für eine ASP.NET Core-App, die auf das .NET Framework ausgerichtet ist, werden OPTIONS-Anforderungen in IIS standardmäßig nicht an die App übergeben.For an ASP.NET Core app that targets the .NET Framework, OPTIONS requests aren't passed to the app by default in IIS. Informationen dazu, wie Sie die IIS-Handler der App in web.config so konfigurieren, dass OPTIONS-Anforderungen übergeben werden, finden Sie unter Aktivieren ursprungsübergreifender Anforderungen in ASP.NET-Web-API 2: Funktionsweise von CORS.To learn how to configure the app's IIS handlers in web.config to pass OPTIONS requests, see Enable cross-origin requests in ASP.NET Web API 2: How CORS Works.

Anwendungsinitialisierungsmodul und LeerlauftimeoutApplication Initialization Module and Idle Timeout

Bei Hosting in IIS durch Version 2 das ASP.NET Core-Moduls:When hosted in IIS by the ASP.NET Core Module version 2:

AnwendungsinitialisierungsmodulApplication Initialization Module

Gilt für In-Process und Out-of-Process gehostete Apps.Applies to apps hosted in-process and out-of-process.

IIS-Anwendungsinitialisierung ist ein IIS-Feature, das eine HTTP-Anforderung an die App sendet, wenn der App-Pool startet oder wiederverwendet wird.IIS Application Initialization is an IIS feature that sends an HTTP request to the app when the app pool starts or is recycled. Die Anforderung löst den Start der App aus.The request triggers the app to start. Standardmäßig gibt IIS eine Anforderung an die Stamm-URL der App (/) zum Initialisieren der App aus (weitere Informationen zur Konfiguration finden Sie unter Zusätzliche Ressourcen).By default, IIS issues a request to the app's root URL (/) to initialize the app (see the additional resources for more details on configuration).

Vergewissern Sie sich, dass die IIS-Anwendungsinitialisierungs-Rollenfunktion aktiviert ist:Confirm that the IIS Application Initialization role feature in enabled:

Unter Windows 7 oder höher gilt für Desktopsysteme bei lokaler Verwendung von IIS:On Windows 7 or later desktop systems when using IIS locally:

  1. Navigieren Sie zu Systemsteuerung > Programme > Programme und Features > Windows-Features aktivieren oder deaktivieren (links auf dem Bildschirm).Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).
  2. Öffnen Sie Internetinformationsdienste > WWW-Dienste > Anwendungsentwicklungsfeatures.Open Internet Information Services > World Wide Web Services > Application Development Features.
  3. Aktivieren Sie das Kontrollkästchen für Anwendungsinitialisierung.Select the check box for Application Initialization.

Unter Windows Server 2008 R2 oder höher:On Windows Server 2008 R2 or later:

  1. Öffnen Sie den Assistenten zum Hinzufügen von Rollen und Features.Open the Add Roles and Features Wizard.
  2. Öffnen Sie im Bereich Rollendienste auswählen den Knoten Anwendungsentwicklung.In the Select role services panel, open the Application Development node.
  3. Aktivieren Sie das Kontrollkästchen für Anwendungsinitialisierung.Select the check box for Application Initialization.

Verwenden Sie einen der folgenden Ansätze, um das Anwendungsinitialisierungsmodul für die Website zu aktivieren:Use either of the following approaches to enable the Application Initialization Module for the site:

  • Bei Verwenden von IIS-Manager:Using IIS Manager:

    1. Wählen Sie Anwendungspools im Bereich Verbindungen aus.Select Application Pools in the Connections panel.
    2. Klicken Sie mit der rechten Maustaste im App-Pool der App in die Liste, und wählen Sie Erweiterte Einstellungen aus.Right-click the app's app pool in the list and select Advanced Settings.
    3. Der standardmäßige Startmodus ist OnDemand.The default Start Mode is OnDemand. Legen Sie den Startmodus auf AlwaysRunning fest.Set the Start Mode to AlwaysRunning. Klicken Sie auf OK.Select OK.
    4. Öffnen Sie den Knoten Websites im Bereich Verbindungen.Open the Sites node in the Connections panel.
    5. Klicken Sie mit der rechten Maustaste zunächst auf die App und dann auf Website verwalten > Erweiterte Einstellungen.Right-click the app and select Manage Website > Advanced Settings.
    6. Die Standardeinstellung für Vorabladen aktiviert ist False.The default Preload Enabled setting is False. Legen Sie für Vorabladen aktiviert True fest.Set Preload Enabled to True. Klicken Sie auf OK.Select OK.
  • Fügen Sie bei Verwenden von web.config das <applicationInitialization>-Element hinzu, wobei doAppInitAfterRestart auf true für die <system.webServer>-Elemente in der web.config-Datei der App festgelegt ist:Using web.config, add the <applicationInitialization> element with doAppInitAfterRestart set to true to the <system.webServer> elements in the app's web.config file:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="." inheritInChildApplications="false">
        <system.webServer>
          <applicationInitialization doAppInitAfterRestart="true" />
        </system.webServer>
      </location>
    </configuration>
    

LeerlauftimeoutIdle Timeout

Gilt nur für In-Process gehostete Apps.Only applies to apps hosted in-process.

Um zu verhindern, dass die App in den Leerlauf wechselt, legen Sie das Leerlauftimeout des App-Pools mit IIS-Manager fest:To prevent the app from idling, set the app pool's idle timeout using IIS Manager:

  1. Wählen Sie Anwendungspools im Bereich Verbindungen aus.Select Application Pools in the Connections panel.
  2. Klicken Sie mit der rechten Maustaste im App-Pool der App in die Liste, und wählen Sie Erweiterte Einstellungen aus.Right-click the app's app pool in the list and select Advanced Settings.
  3. Der Standardwert für Leerlauftimeout (Minuten) ist 20 Minuten.The default Idle Time-out (minutes) is 20 minutes. Legen Sie Leerlauftimeout (Minuten) auf 0 (null) fest.Set the Idle Time-out (minutes) to 0 (zero). Klicken Sie auf OK.Select OK.
  4. Recyceln Sie den Workerprozess.Recycle the worker process.

Um zu verhindern, dass in Apps, die Out-of-Process gehostet werden, ein Timeout auftritt, verwenden Sie einen der folgenden Ansätze:To prevent apps hosted out-of-process from timing out, use either of the following approaches:

Zusätzliche Ressourcen für das Anwendungsinitialisierungsmodul und das LeerlauftimeoutApplication Initialization Module and Idle Timeout additional resources

Bereitstellungsressourcen für IIS-AdministratorenDeployment resources for IIS administrators

Zusätzliche RessourcenAdditional resources

Ein Tutorial zum Veröffentlichen einer ASP.NET Core-App auf einem IIS-Server finden Sie unter Veröffentlichen einer ASP.NET Core-App in IIS.For a tutorial experience on publishing an ASP.NET Core app to an IIS server, see Veröffentlichen einer ASP.NET Core-App in IIS.

Installieren des .NET Core Hosting-PaketsInstall the .NET Core Hosting Bundle

Unterstützte BetriebssystemeSupported operating systems

Die folgenden Betriebssysteme werden unterstützt:The following operating systems are supported:

  • Windows 7 oder höherWindows 7 or later
  • Windows Server 2008 R2 oder höherWindows Server 2008 R2 or later

Der HTTP.sys-Server (zuvor WebListener genannt) funktioniert nicht in einer Reverseproxykonfiguration mit IIS.HTTP.sys server (formerly called WebListener) doesn't work in a reverse proxy configuration with IIS. Verwenden Sie den Kestrel-Server.Use the Kestrel server.

Weitere Informationen zum Hosten in Azure finden Sie unter Bereitstellen von ASP.NET Core-Apps in Azure App Service.For information on hosting in Azure, see Bereitstellen von ASP.NET Core-Apps in Azure App Service.

Anleitungen zur Problembehandlung finden Sie unter Problembehandlung und Debuggen von ASP.NET Core-Projekten.For troubleshooting guidance, see Problembehandlung und Debuggen von ASP.NET Core-Projekten.

Unterstützte PlattformenSupported platforms

Apps, die für Bereitstellungen für 32-Bit-Systeme (x86) oder 64-Bit-Systeme (x64) veröffentlicht wurden, werden unterstützt.Apps published for 32-bit (x86) or 64-bit (x64) deployment are supported. Stellen Sie eine 32-Bit-App mit einem .NET Core SDK für 32-Bit (x86) bereit, es sei denn:Deploy a 32-bit app with a 32-bit (x86) .NET Core SDK unless the app:

  • Die App benötigt den größeren Adressraum des virtuellen Arbeitsspeichers, der 64-Bit-Apps zur Verfügung steht.Requires the larger virtual memory address space available to a 64-bit app.
  • Die App erfordert den größeren IIS-Stapel.Requires the larger IIS stack size.
  • Die App weist native 64-Bit-Abhängigkeiten auf.Has 64-bit native dependencies.

Verwenden Sie ein .NET Core SDK für 64-Bit (x64), um eine 64-Bit-App zu veröffentlichen.Use a 64-bit (x64) .NET Core SDK to publish a 64-bit app. Auf dem Hostsystem muss eine 64-Bit-Runtime vorhanden sein.A 64-bit runtime must be present on the host system.

ASP.NET Core wird mit Kestrel Server ausgeliefert, einem plattformübergreifenden HTTP-Standardserver.ASP.NET Core ships with Kestrel server, a default, cross-platform HTTP server.

Wenn Sie IIS oder IIS Express verwenden, wird die App in einem anderen Prozess als im IIS-Workerprozess (Out-of-Process) mit dem Kestrel-Server ausgeführt.When using IIS or IIS Express, the app runs in a process separate from the IIS worker process (out-of-process) with the Kestrel server.

Da ASP.NET Core-Apps in einem Prozess getrennt vom IIS-Arbeitsprozess ausgeführt werden, führt das Modul die Prozessverwaltung durch.Because ASP.NET Core apps run in a process separate from the IIS worker process, the module handles process management. Das Modul startet den Prozess für die ASP.NET Core-App, wenn die erste Anforderung eingeht und startet die App neu, wenn sie heruntergefahren wird oder abstürzt.The module starts the process for the ASP.NET Core app when the first request arrives and restarts the app if it shuts down or crashes. Dies ist im Prinzip das gleiche Verhalten wie bei Apps, die prozessintern ausgeführt und durch den Windows-Prozessaktivierungsdienst (WAS) verwaltet werden.This is essentially the same behavior as seen with apps that run in-process that are managed by the Windows Process Activation Service (WAS).

Das folgende Diagramm zeigt die Beziehung zwischen IIS, dem ASP.NET Core-Modul und einer Out-of-Process gehosteten App:The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted out-of-process:

ASP.NET Core-Modul

Anforderungen gehen aus dem Internet an den Treiber „HTTP.sys“ ein, der im Kernelmodus betrieben wird.Requests arrive from the web to the kernel-mode HTTP.sys driver. Der Treiber leitet die Anforderungen an IIS auf dem konfigurierten Port der Webseite weiter, normalerweise 80 (HTTP) oder 443 (HTTPS).The driver routes the requests to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). Das Modul leitet die Anforderung an Kestrel auf einem zufälligen Port der App weiter, der nicht Port 80 oder 443 entspricht.The module forwards the requests to Kestrel on a random port for the app, which isn't port 80 or 443.

Das Modul gibt den Port über die Umgebungsvariable beim Start an. Die Middleware für die Integration von IIS konfiguriert den Server so, dass er auf http://localhost:{port} lauscht.The module specifies the port via an environment variable at startup, and the IIS Integration Middleware configures the server to listen on http://localhost:{port}. Zusätzliche Überprüfungen werden durchgeführt. Anforderungen, die nicht vom Modul stammen, werden abgelehnt.Additional checks are performed, and requests that don't originate from the module are rejected. Das Modul unterstützt die HTTPS-Weiterleitung nicht. Deshalb werden Anforderungen über HTTP weitergeleitet, selbst wenn sie von IIS über HTTPS empfangen wurden.The module doesn't support HTTPS forwarding, so requests are forwarded over HTTP even if received by IIS over HTTPS.

Nachdem Kestrel die Anforderung vom Modul erhalten hat, wird die Anforderung in die Middleware-Pipeline von ASP.NET Core eingestellt.After Kestrel picks up the request from the module, the request is pushed into the ASP.NET Core middleware pipeline. Die Middleware-Pipeline behandelt die Anforderung und gibt sie als HttpContext-Instanz an die App-Logik weiter.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. Die durch IIS-Integration hinzugefügte Middleware aktualisiert das Schema, die Remote-IP und die Pfadbasis, um der Weiterleitung der Anforderung an Kestrel Rechnung zu tragen.Middleware added by IIS Integration updates the scheme, remote IP, and pathbase to account for forwarding the request to Kestrel. Die Antwort der App wird dann an IIS zurückgegeben, wo sie per Push an den HTTP-Client zurückgegeben wird, der die Anforderung initiiert hat.The app's response is passed back to IIS, which pushes it back out to the HTTP client that initiated the request.

CreateDefaultBuilder konfiguriert Kestrel Server als Webserver und aktiviert die IIS-Integration durch Konfigurierung des Basispfads und Ports für das ASP.NET Core-Modul.CreateDefaultBuilder configures Kestrel server as the web server and enables IIS Integration by configuring the base path and port for the ASP.NET Core Module.

Das ASP.NET Core-Modul generiert einen dynamischen Port, der dem Back-End-Prozess zugewiesen wird.The ASP.NET Core Module generates a dynamic port to assign to the backend process. CreateDefaultBuilder ruft die UseIISIntegration-Methode auf.CreateDefaultBuilder calls the UseIISIntegration method. UseIISIntegration konfiguriert Kestrel so, dass an dem dynamischen Port an der Localhost-IP-Adresse (127.0.0.1) gelauscht wird.UseIISIntegration configures Kestrel to listen on the dynamic port at the localhost IP address (127.0.0.1). Wenn der dynamische Port 1234 ist, lauscht Kestrel an 127.0.0.1:1234.If the dynamic port is 1234, Kestrel listens at 127.0.0.1:1234. Diese Konfiguration ersetzt andere Konfigurationen von:This configuration replaces other URL configurations provided by:

Aufrufe von UseUrls oder der Listen-API von Kestrel sind nicht erforderlich, wenn das Modul verwendet wird.Calls to UseUrls or Kestrel's Listen API aren't required when using the module. Wenn UseUrls oder Listen aufgerufen wird, lauscht Kestrel an dem Port, der bei der bei Ausführung der App ohne den IIS angegeben wird.If UseUrls or Listen is called, Kestrel listens on the port specified only when running the app without IIS.

Einen Konfigurationsleitfaden für das ASP.NET Core-Modul finden Sie unter ASP.NET Core-Modul.For ASP.NET Core Module configuration guidance, see ASP.NET Core-Modul.

Weitere Informationen zum Hosten finden Sie unter Hosten in ASP.NET Core.For more information on hosting, see Host in ASP.NET Core.

AnwendungskonfigurationApplication configuration

Aktivieren der IISIntegration-KomponentenEnable the IISIntegration components

Rufen Sie beim Erstellen eines Hosts in CreateWebHostBuilder (Program.cs) CreateDefaultBuilder ab, um die IIS-Integration zu aktivieren:When building a host in CreateWebHostBuilder (Program.cs), call CreateDefaultBuilder to enable IIS integration:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        ...

Weitere Informationen zu CreateDefaultBuilder finden Sie unter ASP.NET Core-Webhost.For more information on CreateDefaultBuilder, see ASP.NET Core-Webhost.

IIS-OptionenIIS options

OptionOption StandardDefault EinstellungSetting
AutomaticAuthentication true Bei Festlegung auf true legt der Server den per Windows-Authentifizierung authentifizierten HttpContext.User fest.If true, IIS Server sets the HttpContext.User authenticated by Windows Authentication. Bei Festlegung auf false stellt der Server nur eine Identität für HttpContext.User bereit und antwortet auf explizite Anforderungen durch AuthenticationScheme.If false, the server only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Die Windows-Authentifizierung muss in IIS aktiviert sein, damit AutomaticAuthentication funktioniert.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Weitere Informationen finden Sie unter Windows-Authentifizierung.For more information, see Windows Authentication.
AuthenticationDisplayName null Legt den Anzeigename fest, der Benutzern auf Anmeldungsseiten angezeigt wirdSets the display name shown to users on login pages.

Schließen Sie zur Konfiguration von IIS-Optionen eine Dienstkonfiguration für IISOptions in ConfigureServices ein.To configure IIS options, include a service configuration for IISOptions in ConfigureServices. Im folgenden Beispiel wird Verhindert, dass die App HttpContext.Connection.ClientCertificate auffüllt:The following example prevents the app from populating HttpContext.Connection.ClientCertificate:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
OptionOption StandardDefault EinstellungSetting
AutomaticAuthentication true Bei Festlegung auf true legt die Middleware für die IIS-Integration den per Windows-Authentifizierung authentifizierten HttpContext.User fest.If true, IIS Integration Middleware sets the HttpContext.User authenticated by Windows Authentication. Bei Festlegung auf false stellt die Middleware nur eine Identität für HttpContext.User bereit und antwortet auf explizite Anforderungen durch AuthenticationScheme.If false, the middleware only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Die Windows-Authentifizierung muss in IIS aktiviert sein, damit AutomaticAuthentication funktioniert.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Weitere Informationen finden Sie im Thema Windows-Authentifizierung.For more information, see the Windows Authentication topic.
AuthenticationDisplayName null Legt den Anzeigename fest, der Benutzern auf Anmeldungsseiten angezeigt wirdSets the display name shown to users on login pages.
ForwardClientCertificate true Wenn diese Option true ist und der Anforderungsheader MS-ASPNETCORE-CLIENTCERT vorhanden ist, wird das HttpContext.Connection.ClientCertificate aufgefüllt.If true and the MS-ASPNETCORE-CLIENTCERT request header is present, the HttpContext.Connection.ClientCertificate is populated.

Proxyserver und LastenausgleichsszenarienProxy server and load balancer scenarios

Die Middleware für die Integration von IIS, die die Middleware für weitergeleitete Header konfiguriert, und das ASP.NET Core-Modul sind so konfiguriert, dass sie das Schema (HTTP/HTTPS) und die Remote-IP-Adresse an die Stelle weiterleiten, von der die Anforderung stammte.The IIS Integration Middleware, which configures Forwarded Headers Middleware, and the ASP.NET Core Module are configured to forward the scheme (HTTP/HTTPS) and the remote IP address where the request originated. Möglicherweise ist zusätzliche Konfiguration für Apps erforderlich, die hinter weiteren Proxyservern und Lastenausgleichsmodulen (Load Balancer) gehostet werden.Additional configuration might be required for apps hosted behind additional proxy servers and load balancers. Weitere Informationen hierzu feinden Sie unter Konfigurieren von ASP.NET Core zur Verwendung mit Proxyservern und Lastenausgleich.For more information, see Configure ASP.NET Core to work with proxy servers and load balancers.

Datei „web.config“web.config file

Mit der Datei web.config wird das ASP.NET Core-Modul konfiguriert.The web.config file configures the ASP.NET Core Module. Die Erstellung, Transformation und Veröffentlichung der Datei web.config wird bei der Projektveröffentlichung von einem MSBuild-Ziel (_TransformWebConfig) abgewickelt.Creating, transforming, and publishing the web.config file is handled by an MSBuild target (_TransformWebConfig) when the project is published. Dieses Ziel ist in den Web SDK-Zielen (Microsoft.NET.Sdk.Web) vorhanden.This target is present in the Web SDK targets (Microsoft.NET.Sdk.Web). Das SDK wird am Anfang der Projektdatei festgelegt:The SDK is set at the top of the project file:

<Project Sdk="Microsoft.NET.Sdk.Web">

Wenn im Projekt keine Datei namens web.config vorhanden ist, wird sie zur Konfiguration des ASP.NET Core-Moduls mit dem richtigen processPath- und arguments-Attribut erstellt und in die veröffentlichte Ausgabe verschoben.If a web.config file isn't present in the project, the file is created with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output.

Ist eine Datei namens web.config im Projekt vorhanden, wird sie zur Konfiguration des ASP.NET Core-Moduls mit dem richtigen processPath- und arguments-Attribut transformiert und in die veröffentlichte Ausgabe verschoben.If a web.config file is present in the project, the file is transformed with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output. Die Transformation ändert die IIS-Konfigurationseinstellungen in der Datei nicht.The transformation doesn't modify IIS configuration settings in the file.

Die Datei web.config kann zusätzliche IIS-Konfigurationseinstellungen zum Steuern der aktiven IIS-Module bereitstellen.The web.config file may provide additional IIS configuration settings that control active IIS modules. Informationen zu IIS-Modulen, die Anforderungen mit ASP.NET Core-Apps verarbeiten können, finden Sie im Thema IIS-Module.For information on IIS modules that are capable of processing requests with ASP.NET Core apps, see the IIS modules topic.

Verwenden Sie die Eigenschaft <IsTransformWebConfigDisabled> in der Projektdatei, um zu verhindern, dass das Web-SDK die Datei web.config transformiert:To prevent the Web SDK from transforming the web.config file, use the <IsTransformWebConfigDisabled> property in the project file:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Wenn die Transformation der Datei durch das Web-SDK deaktiviert wird, müssen die Attribute processPath und arguments manuell durch den Entwickler festgelegt werden.When disabling the Web SDK from transforming the file, the processPath and arguments should be manually set by the developer. Weitere Informationen finden Sie unter ASP.NET Core-Modul.For more information, see ASP.NET Core-Modul.

Speicherort der Datei „web.config“web.config file location

Zum Erstellen des ASP.NET Core-Moduls muss die Datei web.config im Inhaltsstammpfad (normalerweise dem App-Basispfad) der bereitgestellten App vorhanden sein.In order to set up the ASP.NET Core Module correctly, the web.config file must be present at the content root path (typically the app base path) of the deployed app. Dies ist der physische Pfad der Website, der in IIS bereitgestellt wurde.This is the same location as the website physical path provided to IIS. Die Datei Web.config wird im Stammverzeichnis der App benötigt, um die Veröffentlichung mehrerer Apps mit Web Deploy zu ermöglichen.The web.config file is required at the root of the app to enable the publishing of multiple apps using Web Deploy.

Im physischen Pfad der App sind vertrauliche Dateien vorhanden, z. B. <assembly>.runtimeconfig.json, <assembly>.xml (XML-Dokumentationskommentare) und <assembly>.deps.json.Sensitive files exist on the app's physical path, such as <assembly>.runtimeconfig.json, <assembly>.xml (XML Documentation comments), and <assembly>.deps.json. Wenn die web.config-Datei vorhanden ist und die Website normal startet, werden diese vertraulichen Dateien bei Anforderung nicht offengelegt.When the web.config file is present and the site starts normally, IIS doesn't serve these sensitive files if they're requested. Wenn die Datei web.config fehlt, falsch benannt wurde oder die Website nicht für den normalen Start konfigurieren kann, macht IIS vertrauliche Dateien möglicherweise öffentlich verfügbar.If the web.config file is missing, incorrectly named, or unable to configure the site for normal startup, IIS may serve sensitive files publicly.

Die Datei web.config muss immer in der Bereitstellung vorhanden, richtig benannt und in der Lage sein, die Website für einen normalen Start zu konfigurieren. Entfernen Sie die Datei web.config niemals aus einer Produktionsbereitstellung.The web.config file must be present in the deployment at all times, correctly named, and able to configure the site for normal start up. Never remove the web.config file from a production deployment.

Transformieren von web.configTransform web.config

Wenn Sie web.config beim Veröffentlichen transformieren müssen (z.B. Umgebungsvariablen basierend auf der Konfiguration, dem Profil oder der Umgebung festlegen müssen), finden Sie weitere Informationen unter Transformieren von web.config.If you need to transform web.config on publish (for example, set environment variables based on the configuration, profile, or environment), see Transformieren von web.config.

IIS-KonfigurationIIS configuration

Windows Server-BetriebssystemeWindows Server operating systems

Aktivieren Sie die Serverrolle Webserver (IIS) , und richten Sie Rollendienste ein.Enable the Web Server (IIS) server role and establish role services.

  1. Verwenden Sie den Assistenten Rollen und Features hinzufügen im Menü Verwalten oder den Link in Server-Manager.Use the Add Roles and Features wizard from the Manage menu or the link in Server Manager. Aktivieren Sie im Schritt Serverrollen das Kontrollkästchen für Webserver (IIS) .On the Server Roles step, check the box for Web Server (IIS).

    Die Rolle „Webserver (IIS)“ wird im Schritt „Serverrollen auswählen“ ausgewählt.

  2. Nach dem Schritt Features wird der Schritt Rollendienste für Webserver (IIS) geladen.After the Features step, the Role services step loads for Web Server (IIS). Wählen Sie die gewünschten IIS-Rollendienste aus, oder übernehmen Sie die bereitgestellten Standardrollendienste.Select the IIS role services desired or accept the default role services provided.

    Die Standardrollendienste werden im Schritt „Rollendienste auswählen“ ausgewählt.

    Windows-Authentifizierung (optional)Windows Authentication (Optional)
    Um die Windows-Authentifizierung zu aktivieren, erweitern Sie die folgenden Knoten: Webserver > Sicherheit.To enable Windows Authentication, expand the following nodes: Web Server > Security. Wählen Sie das Feature Windows-Authentifizierung aus.Select the Windows Authentication feature. Weitere Informationen finden Sie unter Windows-Authentifizierung <windowsAuthentication> und Konfigurieren der Windows-Authentifizierung.For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets (optional)WebSockets (Optional)
    WebSockets wird mit ASP.NET Core 1.1 oder höher unterstützt.WebSockets is supported with ASP.NET Core 1.1 or later. Um WebSockets zu aktivieren, erweitern Sie die folgenden Knoten: Webserver > Anwendungsentwicklung.To enable WebSockets, expand the following nodes: Web Server > Application Development. Wählen Sie das Feature WebSocket-Protokoll aus.Select the WebSocket Protocol feature. Weitere Informationen finden Sie unter WebSockets.For more information, see WebSockets.

  3. Fahren Sie mit dem Schritt Bestätigung fort, um die Webserverrolle und die Dienste zu installieren.Proceed through the Confirmation step to install the web server role and services. Ein Server-/IIS-Neustart ist nach der Installation der Rolle Webserver (IIS) nicht erforderlich.A server/IIS restart isn't required after installing the Web Server (IIS) role.

Windows-DesktopbetriebssystemeWindows desktop operating systems

Aktivieren Sie die IIS-Verwaltungskonsole und die WWW-Dienste.Enable the IIS Management Console and World Wide Web Services.

  1. Navigieren Sie zu Systemsteuerung > Programme > Programme und Features > Windows-Features aktivieren oder deaktivieren (links auf dem Bildschirm).Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).

  2. Öffnen Sie den Knoten Internetinformationsdienste.Open the Internet Information Services node. Öffnen Sie den Knoten Webverwaltungstools.Open the Web Management Tools node.

  3. Aktivieren Sie das Kontrollkästchen für IIS-Verwaltungskonsole.Check the box for IIS Management Console.

  4. Aktivieren Sie das Kontrollkästchen für WWW-Dienste.Check the box for World Wide Web Services.

  5. Akzeptieren Sie die Standardfeatures für WWW-Dienste, oder passen Sie die IIS-Features an.Accept the default features for World Wide Web Services or customize the IIS features.

    Windows-Authentifizierung (optional)Windows Authentication (Optional)
    Um die Windows-Authentifizierung zu aktivieren, erweitern Sie die folgenden Knoten: WWW-Dienste > Sicherheit.To enable Windows Authentication, expand the following nodes: World Wide Web Services > Security. Wählen Sie das Feature Windows-Authentifizierung aus.Select the Windows Authentication feature. Weitere Informationen finden Sie unter Windows-Authentifizierung <windowsAuthentication> und Konfigurieren der Windows-Authentifizierung.For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets (optional)WebSockets (Optional)
    WebSockets wird mit ASP.NET Core 1.1 oder höher unterstützt.WebSockets is supported with ASP.NET Core 1.1 or later. Um WebSockets zu aktivieren, erweitern Sie die folgenden Knoten: WWW-Dienste > Anwendungsentwicklungsfeatures.To enable WebSockets, expand the following nodes: World Wide Web Services > Application Development Features. Wählen Sie das Feature WebSocket-Protokoll aus.Select the WebSocket Protocol feature. Weitere Informationen finden Sie unter WebSockets.For more information, see WebSockets.

  6. Wenn die IIS-Installation einen Neustart erfordert, starten Sie das System neu.If the IIS installation requires a restart, restart the system.

Die IIS-Verwaltungskonsole und WWW-Dienste werden in Windows-Features ausgewählt.

Installieren des .NET Core Hosting-PaketsInstall the .NET Core Hosting Bundle

Installieren Sie das Paket „.NET Core Hosting“ im Hostsystem.Install the .NET Core Hosting Bundle on the hosting system. Das Paket installiert die .NET Core-Runtime, die .NET Core-Bibliothek und das ASP.NET Core-Modul.The bundle installs the .NET Core Runtime, .NET Core Library, and the ASP.NET Core Module. Mit dem Modul können ASP.NET Core-Apps hinter IIS ausgeführt werden.The module allows ASP.NET Core apps to run behind IIS.

Wichtig

Wenn das Hosting-Paket vor IIS installiert wird, muss die Paketinstallation repariert werden.If the Hosting Bundle is installed before IIS, the bundle installation must be repaired. Führen Sie nach der Installation von IIS erneut den Installer des Hosting-Pakets aus.Run the Hosting Bundle installer again after installing IIS.

Wenn das Hosting-Paket nach der Installation der 64-Bit-Version (x64) von .NET Core installiert wird, kann es den Anschein haben, dass SDKs fehlen (Es wurden keine .NET Core SDKs erkannt).If the Hosting Bundle is installed after installing the 64-bit (x64) version of .NET Core, SDKs might appear to be missing (No .NET Core SDKs were detected). Informationen zum Beheben des Problems finden Sie unter Problembehandlung und Debuggen von ASP.NET Core-Projekten.To resolve the problem, see Problembehandlung und Debuggen von ASP.NET Core-Projekten.

HerunterladenDownload

  1. Navigieren Sie zur .NET Core-Downloadseite.Navigate to the Download .NET Core page.
  2. Wählen Sie die gewünschte .NET Core-Version aus.Select the desired .NET Core version.
  3. Suchen Sie in der Spalte Run apps - Runtime (Apps ausführen – Runtime) die Zeile mit der gewünschten .NET Core-RuntimeRuntime-Version.In the Run apps - Runtime column, find the row of the .NET Core runtime version desired.
  4. Laden Sie den Installer über den Link das Hosting Bundle (Hosting-Paket) herunter.Download the installer using the Hosting Bundle link.

Warnung

Einige Installer enthalten Releaseversionen, die das Ende ihres Lebenszyklus erreicht haben und nicht mehr von Microsoft unterstützt werden.Some installers contain release versions that have reached their end of life (EOL) and are no longer supported by Microsoft. Weitere Informationen finden Sie in den Unterstützungsrichtlinien.For more information, see the support policy.

Installieren des Hosting-PaketsInstall the Hosting Bundle

  1. Führen Sie das Installationsprogramm auf dem Server aus.Run the installer on the server. Die folgenden Parameter sind verfügbar, wenn Sie das Installationsprogramm über eine Administratorbefehlsshell ausführen.The following parameters are available when running the installer from an administrator command shell:

    • OPT_NO_ANCM=1: Überspringen Sie die Installation des ASP.NET Core-Moduls.OPT_NO_ANCM=1: Skip installing the ASP.NET Core Module.
    • OPT_NO_RUNTIME=1: Überspringen Sie die Installation der .NET Core-Runtime.OPT_NO_RUNTIME=1: Skip installing the .NET Core runtime. Wird verwendet, wenn der Server nur eigenständige Bereitstellungen (Self-contained Deployments, SCD) hostet.Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_SHAREDFX=1: Überspringen Sie die Installation des freigegebenen ASP.NET-Frameworks (ASP.NET-Runtime).OPT_NO_SHAREDFX=1: Skip installing the ASP.NET Shared Framework (ASP.NET runtime). Wird verwendet, wenn der Server nur eigenständige Bereitstellungen (Self-contained Deployments, SCD) hostet.Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_X86=1: Überspringen Sie die Installation von x86-Runtimes.OPT_NO_X86=1: Skip installing x86 runtimes. Verwenden Sie diesen Parameter, wenn Sie wissen, dass Sie keine 32-Bit-Apps hosten.Use this parameter when you know that you won't be hosting 32-bit apps. Sollte die Möglichkeit bestehen, dass Sie sowohl 32-Bit- als auch 64-Bit-Apps hosten könnten, verwenden Sie diesen Parameter nicht, und installieren Sie beide Runtimes.If there's any chance that you will host both 32-bit and 64-bit apps in the future, don't use this parameter and install both runtimes.
    • OPT_NO_SHARED_CONFIG_CHECK=1: Deaktivieren Sie die Überprüfung auf Verwendung einer gemeinsamen IIS-Konfiguration, wenn sich die gemeinsam genutzte Konfiguration (applicationHost.config) auf demselben Computer wie die IIS-Installation befindet.OPT_NO_SHARED_CONFIG_CHECK=1: Disable the check for using an IIS Shared Configuration when the shared configuration (applicationHost.config) is on the same machine as the IIS installation. Nur für Installationsprogramme für Hostingbundles für ASP.NET Core 2.2 oder höher verfügbar.Only available for ASP.NET Core 2.2 or later Hosting Bundler installers. Weitere Informationen finden Sie unter ASP.NET Core-Modul.For more information, see ASP.NET Core-Modul.
  2. Starten Sie das System neu, oder führen Sie die folgenden Befehle in einer Befehlsshell aus:Restart the system or execute the following commands in a command shell:

    net stop was /y
    net start w3svc
    

    Durch den Neustart von IIS wird eine Änderung an der PATH-Systemeinstellung – einer Umgebungsvariable – angewendet, die durch den Installer vorgenommen wurde.Restarting IIS picks up a change to the system PATH, which is an environment variable, made by the installer.

Beim Installieren des Hostingpakets müssen die einzelnen Websites in IIS nicht manuell angehalten werden.It isn't necessary to manually stop individual sites in IIS when installing the Hosting Bundle. Gehostete Apps (IIS-Websites) werden beim Neustart von IIS neu gestartet.Hosted apps (IIS sites) restart when IIS restarts. Apps starten wieder, wenn die erste Anforderung eintrifft, beispielsweise aus dem Anwendungsinitialisierungsmodul.Apps start up again when they receive their first request, including from the Application Initialization Module.

ASP.NET Core wendet ein Rollforwardverhalten für Patchversionen freigegebener Frameworkpaketen an.ASP.NET Core adopts roll-forward behavior for patch releases of shared framework packages. Wenn von IIS gehostete Apps mit IIS neu starten, werden sie mit den neuesten Patchversionen der referenzierten Pakete geladen, sobald sie die erste Anforderung empfangen.When apps hosted by IIS restart with IIS, the apps load with the latest patch releases of their referenced packages when they receive their first request. Wenn IIS nicht neu gestartet wird, starten die Apps neu und wenden ein Rollforwardverhalten an, wenn die Workerprozesse neu starten und die Apps die erste Anforderung empfangen.If IIS isn't restarted, apps restart and exhibit roll-forward behavior when their worker processes are recycled and they receive their first request.

Hinweis

Informationen zur Verwendung einer IIS-Freigabekonfiguration finden Sie unter ASP.NET Core-Modul mit IIS-Freigabekonfiguration.For information on IIS Shared Configuration, see ASP.NET Core Module with IIS Shared Configuration.

Installieren von Web Deploy beim Veröffentlichen mit Visual StudioInstall Web Deploy when publishing with Visual Studio

Wenn Sie Apps auf Servern mit Web Deploy bereitstellen, installieren Sie die neueste Version von Web Deploy auf dem Server.When deploying apps to servers with Web Deploy, install the latest version of Web Deploy on the server. Um Web Deploy zu installieren, verwenden Sie den Webplattform-Installer (Web PI) oder rufen einen Installer direkt aus dem Microsoft Download Center ab.To install Web Deploy, use the Web Platform Installer (WebPI) or obtain an installer directly from the Microsoft Download Center. Die bevorzugte Methode ist die Verwendung von WebPI.The preferred method is to use WebPI. WebPI bietet ein eigenständiges Setup und eine Konfiguration für Hostinganbieter.WebPI offers a standalone setup and a configuration for hosting providers.

Erstellen der IIS-WebsiteCreate the IIS site

  1. Erstellen Sie auf dem Hostingsystem einen Ordner zum Speichern der veröffentlichten Ordner und Dateien der App.On the hosting system, create a folder to contain the app's published folders and files. In einem späteren Schritt wird der Ordnerpfad als physischer App-Pfad in IIS angegeben.In a following step, the folder's path is provided to IIS as the physical path to the app. Weitere Informationen zu Bereitstellungsordner und Dateilayout einer App finden Sie unter Verzeichnisstruktur für ASP.NET Core.For more information on an app's deployment folder and file layout, see Verzeichnisstruktur für ASP.NET Core.

  2. Öffnen Sie in IIS-Manager den Serverknoten im Bereich Verbindungen.In IIS Manager, open the server's node in the Connections panel. Klicken Sie mit der rechten Maustaste auf den Ordner Websites.Right-click the Sites folder. Klicken Sie im Kontextmenü auf Website hinzufügen.Select Add Website from the contextual menu.

  3. Geben Sie einen Websitenamen an, und legen Sie den physischen Pfad auf den Bereitstellungsordner der App fest.Provide a Site name and set the Physical path to the app's deployment folder. Geben Sie die Konfiguration unter Bindung an, und erstellen Sie die Website, indem Sie auf OK klicken:Provide the Binding configuration and create the website by selecting OK:

    Geben Sie den Websitenamen, den physischen Pfad und den Hostnamen im Schritt „Website hinzufügen“ an.

    Warnung

    Allgemeine Platzhalterbindungen (http://*:80/ und http://+:80) dürfen nicht verwendet werden.Top-level wildcard bindings (http://*:80/ and http://+:80) should not be used. Platzhalterbindungen auf oberster Ebene gefährden die Sicherheit Ihrer App.Top-level wildcard bindings can open up your app to security vulnerabilities. Dies gilt für starke und schwache Platzhalter.This applies to both strong and weak wildcards. Verwenden Sie statt Platzhaltern explizite Hostnamen.Use explicit host names rather than wildcards. Platzhalterbindungen in untergeordneten Domänen (z.B. *.mysub.com) verursachen kein Sicherheitsrisiko, wenn Sie die gesamte übergeordnete Domäne steuern (im Gegensatz zu *.com, das angreifbar ist).Subdomain wildcard binding (for example, *.mysub.com) doesn't have this security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). Weitere Informationen finden Sie unter rfc7230 im Abschnitt 5.4.See rfc7230 section-5.4 for more information.

  4. Wählen Sie unter dem Serverknoten Anwendungspools aus.Under the server's node, select Application Pools.

  5. Klicken Sie mit der rechten Maustaste auf den App-Pool der Website, und wählen Sie im Kontextmenü Grundeinstellungen aus.Right-click the site's app pool and select Basic Settings from the contextual menu.

  6. Legen Sie im Fenster Anwendungspool bearbeiten die .NET CLR-Version auf Kein verwalteter Code fest:In the Edit Application Pool window, set the .NET CLR version to No Managed Code:

    Legen Sie „Kein verwalteter Code“ für die .NET CLR-Version fest.

    ASP.NET Core wird in einem separaten Prozess ausgeführt und verwaltet die Runtime.ASP.NET Core runs in a separate process and manages the runtime. ASP.NET Core basiert nicht auf dem Laden des Desktop-CLR (.NET CLR). Die Core Common Language Runtime (CoreCLR) für .NET Core wird gestartet, um die App im Workerprozess zu hosten.ASP.NET Core doesn't rely on loading the desktop CLR (.NET CLR)—the Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process. Das Festlegen der .NET CLR-Version auf Kein verwalteter Code ist optional, wird aber empfohlen.Setting the .NET CLR version to No Managed Code is optional but recommended.

  7. ASP.NET Core 2.2 oder höher: Deaktivieren Sie für eine eigenständige Bereitstellung für 64-Bit-Systeme (x64), die das In-Process-Hostingmodell verwendet, den App-Pool für 32-Bit-Prozesse (x86).ASP.NET Core 2.2 or later: For a 64-bit (x64) self-contained deployment that uses the in-process hosting model, disable the app pool for 32-bit (x86) processes.

    Wählen Sie in der Seitenleiste Aktionen von „IIS-Manager > Anwendungspools“ die Option Standardwerte für Anwendungspool festlegen oder Erweiterte Einstellungen aus.In the Actions sidebar of IIS Manager > Application Pools, select Set Application Pool Defaults or Advanced Settings. Suchen Sie nach 32-Bit-Anwendungen aktivieren, und legen Sie den Wert auf False fest.Locate Enable 32-Bit Applications and set the value to False. Diese Einstellung wirkt sich nicht auf Apps aus, die für Out-of-Process-Hosting bereitgestellt wurden.This setting doesn't affect apps deployed for out-of-process hosting.

  8. Vergewissern Sie sich, dass die Prozessmodellidentität über die richtigen Berechtigungen verfügt.Confirm the process model identity has the proper permissions.

    Wenn die Standardidentität des App-Pools (Prozessmodell > Identität) von ApplicationPoolIdentity in eine andere Identität geändert wird, stellen Sie sicher, dass die neue Identität über die erforderlichen Berechtigungen zum Zugriff auf den Ordner, die Datenbank und andere erforderliche Ressourcen der App verfügt.If the default identity of the app pool (Process Model > Identity) is changed from ApplicationPoolIdentity to another identity, verify that the new identity has the required permissions to access the app's folder, database, and other required resources. Der App-Pool benötigt beispielsweise Lese- und Schreibzugriff für Ordner, in denen die App Lese- und Schreibvorgänge für Dateien ausführt.For example, the app pool requires read and write access to folders where the app reads and writes files.

Konfigurieren der Windows-Authentifizierung (optional)Windows Authentication configuration (Optional)
Weitere Informationen finden Sie unter Konfigurieren der Windows-Authentifizierung.For more information, see Configure Windows authentication.

Bereitstellen der AppDeploy the app

Stellen Sie die App im IIS-Ordner Physischer Pfad bereit, der im Abschnitt Erstellen der IIS-Website eingerichtet wurde.Deploy the app to the IIS Physical path folder that was established in the Create the IIS site section. Web Deploy ist die empfohlene Methode für die Bereitstellung, aber es gibt verschiedene Optionen, um die Anwendung aus dem Ordner publish des Projekts in den Bereitstellungsordner des Hostsystems zu verschieben.Web Deploy is the recommended mechanism for deployment, but several options exist for moving the app from the project's publish folder to the hosting system's deployment folder.

Web Deploy mit Visual StudioWeb Deploy with Visual Studio

Informationen zum Erstellen eines Veröffentlichungsprofils zur Verwendung mit Web Deploy finden Sie im Thema Visual Studio publish profiles for ASP.NET Core app deployment (Visual Studio-Veröffentlichungsprofile zum Bereitstellen von ASP.NET Core-Apps).See the Visual Studio publish profiles for ASP.NET Core app deployment topic to learn how to create a publish profile for use with Web Deploy. Wenn der Hostinganbieter ein Veröffentlichungsprofil oder Unterstützung für das Erstellen eines solchen Profils bereitstellt, laden Sie dessen Profil herunter, und importieren Sie es mithilfe des Visual Studio-Dialogfelds Veröffentlichen:If the hosting provider provides a Publish Profile or support for creating one, download their profile and import it using the Visual Studio Publish dialog:

Dialogfeld „Veröffentlichen“

Web Deploy außerhalb von Visual StudioWeb Deploy outside of Visual Studio

Web Deploy kann über die Befehlszeile auch außerhalb von Visual Studio verwendet werden.Web Deploy can also be used outside of Visual Studio from the command line. Weitere Informationen finden Sie unter Web Deployment Tool (Webbereitstellungstool).For more information, see Web Deployment Tool.

Alternativen zu Web DeployAlternatives to Web Deploy

Verwenden Sie eine der folgenden Methoden, um die App in das Hostsystem zu verschieben: manuelles Kopieren, Xcopy, Robocopy oder PowerShell.Use any of several methods to move the app to the hosting system, such as manual copy, Xcopy, Robocopy, or PowerShell.

Weitere Informationen zum Bereitstellen von ASP.NET Core in IIS finden Sie im nachfolgenden Abschnitt Bereitstellungsressourcen für IIS-Administratoren.For more information on ASP.NET Core deployment to IIS, see the Deployment resources for IIS administrators section.

Navigieren auf der WebsiteBrowse the website

Senden Sie nach Abschluss der App-Bereitstellung auf dem Hostsystem eine Anforderung an einen der öffentlichen Endpunkte der App.After the app is deployed to the hosting system, make a request to one of the app's public endpoints.

Im folgenden Beispiel ist die Website an den IIS-Hostnamen von www.mysite.com auf Port 80 gebunden.In the following example, the site is bound to an IIS Host name of www.mysite.com on Port 80. Es wird eine Anforderung an http://www.mysite.com gesendet:A request is made to http://www.mysite.com:

Der Microsoft Edge-Browser hat die IIS-Startseite geladen.

Gesperrte BereitstellungsdateienLocked deployment files

Die Dateien im Bereitstellungsordner werden gesperrt, wenn die App ausgeführt wird.Files in the deployment folder are locked when the app is running. Gesperrte Dateien können während der Bereitstellung nicht überschrieben werden.Locked files can't be overwritten during deployment. Um gesperrte Dateien in einer Bereitstellung freizugeben, beenden Sie den App-Pool mit einer der folgenden Methoden:To release locked files in a deployment, stop the app pool using one of the following approaches:

  • Verwenden Sie Web Deploy, und verweisen Sie auf Microsoft.NET.Sdk.Web in der Projektdatei.Use Web Deploy and reference Microsoft.NET.Sdk.Web in the project file. Eine Datei namens app_offline.htm befindet sich im Stammverzeichnis des Web-App-Verzeichnisses.An app_offline.htm file is placed at the root of the web app directory. Wenn die Datei vorhanden ist, fährt das ASP.NET Core Module die App ordnungsgemäß herunter und verarbeitet die Datei app_offline.htm während der Bereitstellung.When the file is present, the ASP.NET Core Module gracefully shuts down the app and serves the app_offline.htm file during the deployment. Weitere Informationen finden Sie unter Konfigurationsreferenz für das ASP.NET Core-Modul.For more information, see the ASP.NET Core Module configuration reference.

  • Beenden Sie den App-Pool im IIS-Manager auf dem Server manuell.Manually stop the app pool in the IIS Manager on the server.

  • Verwenden Sie PowerShell, um app_offline.htm abzulegen (erfordert PowerShell 5 oder höher):Use PowerShell to drop app_offline.htm (requires PowerShell 5 or later):

    $pathToApp = 'PATH_TO_APP'
    
    # Stop the AppPool
    New-Item -Path $pathToApp app_offline.htm
    
    # Provide script commands here to deploy the app
    
    # Restart the AppPool
    Remove-Item -Path $pathToApp app_offline.htm
    
    

Schutz von DatenData protection

Der ASP.NET Core-Stapel zum Schutz von Daten wird von mehreren ASP.NET-Middlewarekomponenten genutzt, darunter auch von Middleware, die bei der Authentifizierung verwendet wird.The ASP.NET Core Data Protection stack is used by several ASP.NET Core middlewares, including middleware used in authentication. Selbst wenn die APIs zum Schutz von Daten nicht aus dem Benutzercode aufgerufen werden, sollte der Schutz von Daten mit einem Bereitstellungsskript oder im Benutzercode konfiguriert werden, um einen persistenten kryptografischen Schlüsselspeicher zu erstellen.Even if Data Protection APIs aren't called by user code, data protection should be configured with a deployment script or in user code to create a persistent cryptographic key store. Wenn der Schutz von Daten nicht konfiguriert ist, werden die Schlüssel beim Neustarten der App im Arbeitsspeicher gespeichert und verworfen.If data protection isn't configured, the keys are held in memory and discarded when the app restarts.

Falls der Schlüsselbund im Arbeitsspeicher gespeichert wird, wenn die App neu gestartet wird, gilt Folgendes:If the key ring is stored in memory when the app restarts:

  • Alle cookiebasierten Authentifizierungstoken für ungültig erklärt.All cookie-based authentication tokens are invalidated.
  • Benutzer müssen sich bei ihrer nächsten Anforderung erneut anmelden.Users are required to sign in again on their next request.
  • Alle mit dem Schlüsselbund geschützte Daten können nicht mehr entschlüsselt werden.Any data protected with the key ring can no longer be decrypted. Dies kann CSRF-Token und ASP.NET Core-MVC-TempData-Cookies einschließen.This may include CSRF tokens and ASP.NET Core MVC TempData cookies.

Zum Konfigurieren des Schutzes von Daten unter IIS mithilfe des persistenten Schlüsselbunds verwenden Sie einen der folgenden Ansätze:To configure data protection under IIS to persist the key ring, use one of the following approaches:

  • Erstellen einer Registrierungsstruktur für den Schutz von DatenCreate Data Protection Registry Keys

    Schlüssel für den Schutz von Daten, die von ASP.NET Core-Apps verwendet werden, werden in der Registrierung außerhalb der Apps gespeichert.Data protection keys used by ASP.NET Core apps are stored in the registry external to the apps. Um die Schlüssel für eine bestimmte App zu dauerhaft zu speichern, müssen Sie Registrierungsschlüssel für den App-Pool erstellen.To persist the keys for a given app, create registry keys for the app pool.

    Bei eigenständigen IIS-Installationen, die ohne Webfarm vorgesehen sind, kann das PowerShell-Skript „Provision-AutoGenKeys.ps1“ für den Schutz von Daten für jeden App-Pool genutzt werden, das mit einer ASP.NET Core-App verwendet wird.For standalone, non-webfarm IIS installations, the Data Protection Provision-AutoGenKeys.ps1 PowerShell script can be used for each app pool used with an ASP.NET Core app. Dieses Skript erstellt einen Registrierungsschlüssel in der HKLM-Registrierung, der nur für das Workerprozesskonto des App-Pools der App zugänglich ist.This script creates a registry key in the HKLM registry that's accessible only to the worker process account of the app's app pool. Schlüssel werden in ruhendem Zustand mit DPAPI mit einem computerweiten Schlüssel verschlüsselt.Keys are encrypted at rest using DPAPI with a machine-wide key.

    In Webfarmszenarios kann eine App so konfiguriert werden, dass sie einen UNC-Pfad verwendet, um den Schlüsselbund für den Schutz von Daten zu speichern.In web farm scenarios, an app can be configured to use a UNC path to store its data protection key ring. Standardmäßig werden die Schlüssel für den Schutz von Daten nicht verschlüsselt.By default, the data protection keys aren't encrypted. Stellen Sie sicher, dass die Dateiberechtigungen für die Netzwerkfreigabe auf das Windows-Konto beschränkt sind, mit dem die App ausgeführt wird.Ensure that the file permissions for the network share are limited to the Windows account the app runs under. Ein X.509-Zertifikat kann zum Schutz von Schlüsseln im ruhenden Zustand verwendet werden.An X509 certificate can be used to protect keys at rest. Richten Sie ggf. einen Mechanismus ein, um es Benutzern zu ermöglichen, Zertifikate hochzuladen: Platzieren Sie Zertifikate im Zertifikatspeicher des Benutzers für vertrauenswürdige Anbieter, und stellen Sie sicher, dass sie auf allen Computern verfügbar sind, auf denen die App des Benutzers ausgeführt wird.Consider a mechanism to allow users to upload certificates: Place certificates into the user's trusted certificate store and ensure they're available on all machines where the user's app runs. Details finden Sie unter Konfigurieren des Schutzes von Daten in ASP.NET Core.See Configure ASP.NET Core Data Protection for details.

  • Konfigurieren des IIS-Anwendungspools zum Laden des BenutzerprofilsConfigure the IIS Application Pool to load the user profile

    Diese Einstellung befindet sich im Abschnitt Prozessmodell unter Erweiterte Einstellungen für den App-Pool.This setting is in the Process Model section under the Advanced Settings for the app pool. Legen Sie Benutzerprofil laden auf True fest.Set Load User Profile to True. Wenn diese Option auf True festgelegt ist, werden Schlüssel im Benutzerprofilverzeichnis gespeichert und mit DPAPI mit einem für das Benutzerkonto spezifischen Schlüssel geschützt.When set to True, keys are stored in the user profile directory and protected using DPAPI with a key specific to the user account. Schlüssel werden im Ordner %LOCALAPPDATA%/ASP.NET/DataProtection-Keys gespeichert.Keys are persisted to the %LOCALAPPDATA%/ASP.NET/DataProtection-Keys folder.

    Das setProfileEnvironment-Attribut des App-Pools muss ebenfalls aktiviert sein.The app pool's setProfileEnvironment attribute must also be enabled. Der Standardwert von setProfileEnvironment ist true.The default value of setProfileEnvironment is true. In einigen Szenarien (z.B. Windows-Betriebssystem) ist setProfileEnvironment auf false festgelegt.In some scenarios (for example, Windows OS), setProfileEnvironment is set to false. Gehen Sie folgendermaßen vor, wenn Schlüssel nicht wie erwartet im Benutzerprofilverzeichnis gespeichert werden:If keys aren't stored in the user profile directory as expected:

    1. Navigieren Sie zum Ordner %windir%/system32/inetsrv/config.Navigate to the %windir%/system32/inetsrv/config folder.
    2. Öffnen Sie die Datei applicationHost.config.Open the applicationHost.config file.
    3. Suchen Sie das Element <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> .Locate the <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> element.
    4. Bestätigen Sie, dass das setProfileEnvironment-Attribut nicht vorhanden ist, das standardmäßig den Wert true aufweist, oder legen Sie den Wert des Attributs explizit auf true fest.Confirm that the setProfileEnvironment attribute isn't present, which defaults the value to true, or explicitly set the attribute's value to true.
  • Verwenden des Dateisystems als SchlüsselbundspeicherUse the file system as a key ring store

    Passen Sie den App-Code so an, dass er das Dateisystem als Schlüsselbundspeicher verwendet.Adjust the app code to use the file system as a key ring store. Verwenden Sie ein X.509-Zertifikat, um den Schlüsselbund zu schützen, und stellen Sie sicher, dass es sich bei dem Zertifikat um ein vertrauenswürdiges Zertifikat handelt.Use an X509 certificate to protect the key ring and ensure the certificate is a trusted certificate. Wenn es sich um ein selbstsigniertes Zertifikat handelt, müssen Sie es im vertrauenswürdigen Stammspeicher platzieren.If the certificate is self-signed, place the certificate in the Trusted Root store.

    Wenn IIS in einer Webfarm verwendet wird:When using IIS in a web farm:

    • Verwenden Sie eine Dateifreigabe, auf die alle Computer zugreifen können.Use a file share that all machines can access.
    • Stellen Sie ein X509-Zertifikat auf jedem Computer bereit.Deploy an X509 certificate to each machine. Konfigurieren Sie den Schutz von Daten im Code.Configure data protection in code.
  • Festlegen einer computerweiten Richtlinie für den Schutz von DatenSet a machine-wide policy for data protection

    Das System zum Schutz von Daten verfügt über eine eingeschränkte Unterstützung zum Festlegen einer computerweiten Standardrichtlinie für alle Apps, die die Datenschutz-APIs nutzen.The data protection system has limited support for setting a default machine-wide policy for all apps that consume the Data Protection APIs. Weitere Informationen finden Sie unter ASP.net Core Datenschutz.For more information, see ASP.net Core Datenschutz.

Virtuelle VerzeichnisseVirtual Directories

Virtuelle IIS-Verzeichnisse werden mit ASP.NET Core-Apps nicht unterstützt.IIS Virtual Directories aren't supported with ASP.NET Core apps. Eine App kann als untergeordnete Anwendung gehostet werden.An app can be hosted as a sub-application.

Untergeordnete AnwendungenSub-applications

Eine ASP.NET Core-App kann als untergeordnete IIS-Anwendung (untergeordnete App) gehostet werden.An ASP.NET Core app can be hosted as an IIS sub-application (sub-app). Der Pfad der untergeordneten App wird ein Teil der URL der Stamm-App.The sub-app's path becomes part of the root app's URL.

Eine untergeordnete App sollte kein ASP.NET Core-Modul als Handler enthalten.A sub-app shouldn't include the ASP.NET Core Module as a handler. Wenn das Modul als Handler in einer web.config einer untergeordneten App hinzugefügt wird, erhalten Sie beim Versuch, zur untergeordneten App zu navigieren, den Fehler 500.19: Interner Serverfehler. Dieser verweist auf die fehlerhafte Konfigurationsdatei.If the module is added as a handler in a sub-app's web.config file, a 500.19 Internal Server Error referencing the faulty config file is received when attempting to browse the sub-app.

Das folgende Beispiel zeigt den Inhalt einer veröffentlichten Datei web.config für eine untergeordnete ASP.NET Core-App:The following example shows a published web.config file for an ASP.NET Core sub-app:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <aspNetCore processPath="dotnet" 
      arguments=".\MyApp.dll" 
      stdoutLogEnabled="false" 
      stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

Wenn Sie eine untergeordnete App ohne ASP.NET Core unterhalb einer ASP.NET Core-App hosten, entfernen Sie den geerbten Handler ausdrücklich aus der Datei web.config der untergeordneten App:When hosting a non-ASP.NET Core sub-app underneath an ASP.NET Core app, explicitly remove the inherited handler in the sub-app's web.config file:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <remove name="aspNetCore" />
    </handlers>
    <aspNetCore processPath="dotnet" 
      arguments=".\MyApp.dll" 
      stdoutLogEnabled="false" 
      stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

Statische Assetlinks in der untergeordneten App sollten die Tilde/Schrägstrich-Notation verwenden (~/).Static asset links within the sub-app should use tilde-slash (~/) notation. Die Tilde/Schrägstrich-Notation löst ein Taghilfsprogramm aus, um die Pfadbasis der untergeordneten App dem gerenderten relativen Link voranzustellen.Tilde-slash notation triggers a Tag Helper to prepend the sub-app's pathbase to the rendered relative link. Für eine untergeordnete App unter /subapp_path wird ein mit src="~/image.png" verknüpftes Bild als src="/subapp_path/image.png" gerendert.For a sub-app at /subapp_path, an image linked with src="~/image.png" is rendered as src="/subapp_path/image.png". Die Static File Middleware verarbeitet die Anforderung der statischen Datei nicht.The root app's Static File Middleware doesn't process the static file request. Die Anforderung wird von der Static File Middleware der untergeordneten App verarbeitet.The request is processed by the sub-app's Static File Middleware.

Wenn das src-Attribut eines statischen Objekts auf einen absoluten Pfad festgelegt wird (z.B. src="/image.png"), wird der Link ohne die Pfadbasis der untergeordneten App gerendert.If a static asset's src attribute is set to an absolute path (for example, src="/image.png"), the link is rendered without the sub-app's pathbase. Die Middleware für statische Dateien der Stamm-App versucht, das Objekt vom Webstamm der Stamm-App aus bereitzustellen, was zu einer 404 Nicht gefunden-Antwort führt, solange das statische Objekt in der Stamm-App nicht verfügbar ist.The root app's Static File Middleware attempts to serve the asset from the root app's web root, which results in a 404 - Not Found response unless the static asset is available from the root app.

So hosten Sie eine ASP.NET Core-App als untergeordnete App unter einer anderen ASP.NET Core-App:To host an ASP.NET Core app as a sub-app under another ASP.NET Core app:

  1. Richten Sie einen App-Pool für die untergeordnete App ein.Establish an app pool for the sub-app. Legen Sie die .NET CLR-Version auf Kein verwalteter Code fest, weil die Core Common Language Runtime (CoreCLR) für .NET Core gestartet wird, um die App im Workerprozess zu hosten, nicht der Desktop-CLR (.NET CLR).Set the .NET CLR Version to No Managed Code because the Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process, not the desktop CLR (.NET CLR).

  2. Fügen Sie die Stammwebsite im IIS-Manager mit der untergeordneten App in einem unter der Stammwebsite liegenden Ordner hinzu.Add the root site in IIS Manager with the sub-app in a folder under the root site.

  3. Klicken Sie mit der rechten Maustaste im IIS-Manager auf den Ordner der untergeordneten App, und wählen Sie In Anwendung konvertieren aus.Right-click the sub-app folder in IIS Manager and select Convert to Application.

  4. Weisen Sie im Dialogfeld Anwendung hinzufügen mit der Schaltfläche Auswählen den Anwendungspool dem App-Pool zu, den Sie für die untergeordnete App erstellt haben.In the Add Application dialog, use the Select button for the Application Pool to assign the app pool that you created for the sub-app. Klicken Sie auf OK.Select OK.

Die Zuweisung eines separaten App-Pools zur untergeordneten App ist eine Anforderung, wenn Sie das In-Process-Hostingmodell verwenden.The assignment of a separate app pool to the sub-app is a requirement when using the in-process hosting model.

Weitere Informationen zum In-Process-Hostingmodell und Konfigurieren des ASP.NET Core-Moduls finden Sie unter ASP.NET Core-Modul.For more information on the in-process hosting model and configuring the ASP.NET Core Module, see ASP.NET Core-Modul.

Konfiguration von IIS mit der Datei „web.config“Configuration of IIS with web.config

Die IIS-Konfiguration wird von dem Abschnitt <system.webServer> der Datei web.config für IIS-Szenarien beeinflusst, die für ASP.NET Core-Apps mit dem ASP.NET Core-Modul funktional sind.IIS configuration is influenced by the <system.webServer> section of web.config for IIS scenarios that are functional for ASP.NET Core apps with the ASP.NET Core Module. Beispielsweise eignet sich die IIS-Konfiguration für dynamische Komprimierung.For example, IIS configuration is functional for dynamic compression. Wenn IIS auf Serverebene für die Verwendung der dynamischen Komprimierung konfiguriert ist, kann diese Einstellung mit dem <urlCompression>-Element in der Datei web.config der App für eine ASP.NET Core-App deaktiviert werden.If IIS is configured at the server level to use dynamic compression, the <urlCompression> element in the app's web.config file can disable it for an ASP.NET Core app.

Weitere Informationen finden Sie unter den folgenden Themen:For more information, see the following topics:

Lesen Sie den Abschnitt zum Befehl „AppCmd.exe“ im Thema Umgebungsvariablen <environmentVariables> in der IIS-Referenzdokumentation, um Umgebungsvariablen für einzelne Apps festzulegen, die in isolierten App-Pools ausgeführt werden (unterstützt für IIS 10.0 oder höher).To set environment variables for individual apps running in isolated app pools (supported for IIS 10.0 or later), see the AppCmd.exe command section of the Environment Variables <environmentVariables> topic in the IIS reference documentation.

Konfigurationsabschnitte von „web.config“Configuration sections of web.config

Konfigurationsabschnitte von ASP.NET 4.x-Apps in der Datei web.config werden von ASP.NET Core-Apps nicht zur Konfiguration verwendet:Configuration sections of ASP.NET 4.x apps in web.config aren't used by ASP.NET Core apps for configuration:

  • <system.web>
  • <appSettings>
  • <connectionStrings>
  • <location>

ASP.NET Core-Apps werden mit anderen Konfigurationsanbietern konfiguriert.ASP.NET Core apps are configured using other configuration providers. Weitere Informationen finden Sie unter Konfiguration.For more information, see Configuration.

AnwendungspoolsApplication Pools

Wenn Sie mehrere Websites auf einem Server hosten, wird empfohlen, die Apps voneinander zu isolieren, indem Sie jede App in ihrem eigenen App-Pool ausführen.When hosting multiple websites on a server, we recommend isolating the apps from each other by running each app in its own app pool. Im IIS-Dialogfeld Website hinzufügen wird standardmäßig diese Konfiguration eingesetzt.The IIS Add Website dialog defaults to this configuration. Wenn ein Websitename angegeben ist, wird der Text automatisch in das Textfeld Anwendungspool übertragen.When a Site name is provided, the text is automatically transferred to the Application pool textbox. Ein neuer App-Pool mit dem Namen der Website wird erstellt, wenn die Website hinzugefügt wird.A new app pool is created using the site name when the site is added.

Anwendungspool IdentityApplication Pool Identity

Mit einem Konto für die Identität des App-Pools können Sie eine App unter einem eindeutigen Konto ausführen, ohne Domänen oder lokale Konten erstellen und verwalten zu müssen.An app pool identity account allows an app to run under a unique account without having to create and manage domains or local accounts. Unter IIS 8.0 oder höher erstellt der IIS-Administratorworkerprozess (WAS) ein virtuelles Konto mit dem Namen des neuen App-Pools und führt die Workerprozesse des App-Pools standardmäßig unter diesem Konto aus.On IIS 8.0 or later, the IIS Admin Worker Process (WAS) creates a virtual account with the name of the new app pool and runs the app pool's worker processes under this account by default. Stellen Sie sicher, dass in der IIS-Verwaltungskonsole unter Erweiterte Einstellungen für den App-Pool die Identity (Identität) auf ApplicationPoolIdentity festgelegt ist:In the IIS Management Console under Advanced Settings for the app pool, ensure that the Identity is set to use ApplicationPoolIdentity:

Dialogfeld „Erweiterte Einstellungen“ für den Anwendungspool

Der IIS-Verwaltungsprozess erstellt im Windows-Sicherheitssystem einen sicheren Bezeichner mit dem Namen des App-Pools.The IIS management process creates a secure identifier with the name of the app pool in the Windows Security System. Ressourcen können mithilfe dieser Identität geschützt werden.Resources can be secured using this identity. Allerdings ist diese Identität kein echtes Benutzerkonto und wird in der Windows-Benutzerverwaltungskonsole nicht angezeigt.However, this identity isn't a real user account and doesn't show up in the Windows User Management Console.

Wenn der IIS-Workerprozess erhöhte Rechte für den Zugriff auf Ihre Anwendung erfordert, ändern Sie die Zugriffssteuerungsliste (ACL) für das Verzeichnis mit der App:If the IIS worker process requires elevated access to the app, modify the Access Control List (ACL) for the directory containing the app:

  1. Öffnen Sie Windows Explorer, und navigieren Sie zum Verzeichnis.Open Windows Explorer and navigate to the directory.

  2. Klicken Sie mit der rechten Maustaste auf das Verzeichnis, und klicken Sie auf Eigenschaften.Right-click on the directory and select Properties.

  3. Klicken Sie auf der Registerkarte Sicherheit auf die Schaltfläche Bearbeiten und dann auf die Schaltfläche Hinzufügen.Under the Security tab, select the Edit button and then the Add button.

  4. Wählen Sie die Schaltfläche Speicherorte aus, und stellen Sie sicher, dass das System ausgewählt ist.Select the Locations button and make sure the system is selected.

  5. Geben Sie im Bereich Geben Sie die Namen der auszuwählenden Objekte ein den Wert IIS AppPool\<Name_des_AppPools> ein.Enter IIS AppPool\<app_pool_name> in Enter the object names to select area. Klicken Sie auf die Schaltfläche Namen überprüfen.Select the Check Names button. Überprüfen Sie für DefaultAppPool die Namen mit IIS AppPool\DefaultAppPool.For the DefaultAppPool check the names using IIS AppPool\DefaultAppPool. Bei Auswahl der Schaltfläche Namen überprüfen wird im Bereich für Objektnamen der Wert DefaultAppPool angegeben.When the Check Names button is selected, a value of DefaultAppPool is indicated in the object names area. Es ist nicht möglich, den Namen des App-Pools direkt in den Bereich für Objektnamen einzugeben.It isn't possible to enter the app pool name directly into the object names area. Verwenden Sie das Format IIS AppPool\<Name_des_AppPools> , wenn Sie die Objektnamen überprüfen.Use the IIS AppPool\<app_pool_name> format when checking for the object name.

    Dialogfeld „Benutzer oder Gruppen auswählen“ für den App-Ordner: Der Name des App-Pools, „DefaultAppPool“, wird an „IIS AppPool"“ im Bereich der Objektnamen angehängt, bevor „Namen überprüfen“ ausgewählt wird.

  6. Klicken Sie auf OK.Select OK.

    Dialogfeld „Benutzer oder Gruppen auswählen“ für den App-Ordner: Nach Auswahl von „Namen überprüfen“ wird der Objektname „DefaultAppPool“ im Bereich der Objektnamen angezeigt.

  7. Standardmäßig sollten Lese- und Schreibberechtigungen gewährt werden.Read & execute permissions should be granted by default. Erteilen Sie weitere Berechtigungen, sofern erforderlich.Provide additional permissions as needed.

Zugriff kann auch über eine Eingabeaufforderung mit dem Tool ICACLS gewährt werden.Access can also be granted at a command prompt using the ICACLS tool. Im folgenden Befehl wird als Beispiel DefaultAppPool verwendet:Using the DefaultAppPool as an example, the following command is used:

ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool":F

Weitere Informationen finden Sie im Thema icacls.For more information, see the icacls topic.

HTTP/2-UnterstützungHTTP/2 support

HTTP/2 wird für Out-of-Process-Bereitstellungen unterstützt, die die folgenden Grundanforderungen erfüllen:HTTP/2 is supported for out-of-process deployments that meet the following base requirements:

  • Windows Server 2016/Windows 10 oder höher, IIS 10 oder höherWindows Server 2016/Windows 10 or later; IIS 10 or later
  • Öffentlich zugängliche Edge-Server-Verbindungen verwenden HTTP/2, aber die Reverseproxyverbindung mit dem Kestrel-Server verwendet HTTP/1.1.Public-facing edge server connections use HTTP/2, but the reverse proxy connection to the Kestrel server uses HTTP/1.1.
  • Zielframework: Nicht zutreffend für Out-of-Process-Bereitstellungen, da die HTTP/2-Verbindung vollständig von IIS verarbeitet wird.Target framework: Not applicable to out-of-process deployments, since the HTTP/2 connection is handled entirely by IIS.
  • TLS 1.2-Verbindung oder höherTLS 1.2 or later connection

Wenn eine HTTP/2-Verbindung hergestellt wurde, meldet HttpRequest.ProtocolHTTP/1.1.If an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

HTTP/2 ist standardmäßig aktiviert.HTTP/2 is enabled by default. Verbindungen führen ein Fallback auf HTTP/1.1 aus, wenn keine HTTP/2-Verbindung hergestellt wurde.Connections fall back to HTTP/1.1 if an HTTP/2 connection isn't established. Weitere Informationen zur HTTP/2-Konfiguration mit IIS-Bereitstellungen finden Sie unter HTTP/2 unter IIS.For more information on HTTP/2 configuration with IIS deployments, see HTTP/2 on IIS.

CORS-PreflightanforderungenCORS preflight requests

Dieser Abschnitt gilt nur für ASP.NET Core-Apps, die auf das .NET Framework ausgerichtet sind.This section only applies to ASP.NET Core apps that target the .NET Framework.

Für eine ASP.NET Core-App, die auf das .NET Framework ausgerichtet ist, werden OPTIONS-Anforderungen in IIS standardmäßig nicht an die App übergeben.For an ASP.NET Core app that targets the .NET Framework, OPTIONS requests aren't passed to the app by default in IIS. Informationen dazu, wie Sie die IIS-Handler der App in web.config so konfigurieren, dass OPTIONS-Anforderungen übergeben werden, finden Sie unter Aktivieren ursprungsübergreifender Anforderungen in ASP.NET-Web-API 2: Funktionsweise von CORS.To learn how to configure the app's IIS handlers in web.config to pass OPTIONS requests, see Enable cross-origin requests in ASP.NET Web API 2: How CORS Works.

Bereitstellungsressourcen für IIS-AdministratorenDeployment resources for IIS administrators

Zusätzliche RessourcenAdditional resources