Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
Informationen zu ASP.NET in .NET Framework finden Sie unter Konfigurieren einer ASP.NET-App für Azure App Service. Wenn Ihre ASP.NET Core-App in einem benutzerdefinierten Windows- oder Linux-Container ausgeführt wird, finden Sie weitere Informationen unter Konfigurieren eines benutzerdefinierten Containers für Azure App Service.
ASP.NET Core-Apps müssen in Azure App Service als kompilierte Binärdateien bereitgestellt werden. Das Visual Studio-Veröffentlichungstool erstellt die Projektmappe und stellt dann die kompilierten Binärdateien direkt bereit. Das App Service-Bereitstellungsmodul stellt zuerst das Code-Repository bereit und kompiliert dann die Binärdateien.
Dieser Leitfaden enthält wichtige Konzepte und Anweisungen für ASP.NET Core-Entwickler. Wenn Sie Azure App Service zum ersten Mal verwenden, folgen Sie zuerst der Schnellstartanleitung ASP.NET Core und ASP.NET Core mit SQL-Datenbanklernprogramm.
Anzeigen unterstützter .NET Core-Runtimeversionen
In App Service sind auf den Windows-Instanzen bereits alle unterstützten .NET Core-Versionen installiert. Um die .NET Core-Runtime- und SDK-Versionen anzuzeigen, die Ihnen zur Verfügung stehen, wechseln Sie zu Ihrer Kudu-Website.
Wechseln Sie im Azure-Portal zu Ihrer App, und wählen Sie dann Entwicklungstools>, Erweiterte Tools aus. Klicken Sie auf Starten. Wählen Sie in Kudu die Debugkonsole für CMD oder PowerShell aus.
Führen Sie den folgenden Befehl in der browserbasierten Konsole aus:
dotnet --info
Anzeigen der .NET Core-Version
Führen Sie zum Anzeigen der aktuellen .NET Core-Version den folgenden Befehl in Azure Cloud Shell aus:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Um alle unterstützten .NET Core-Versionen anzuzeigen, führen Sie den folgenden Befehl in Cloud Shell aus:
az webapp list-runtimes --os linux | grep DOTNET
Festlegen der .NET Core-Version
Legen Sie das Zielframework in der Projektdatei für das ASP.NET Core-Projekt fest. Weitere Informationen finden Sie unter Auswählen der zu verwendenden .NET Core-Version.
Um die .NET Core-Version auf 8.0 festzulegen, führen Sie den folgenden Befehl in Cloud Shell aus:
az webapp config set --name <app-name> --resource-group <resource-group-name> --linux-fx-version "DOTNETCORE|8.0"
Was geschieht mit veralteten Laufzeiten in App Service?
Veraltete Runtimes werden von der verwaltenden Organisation nicht mehr unterstützt oder weisen erhebliche Schwachstellen auf. Dementsprechend werden sie aus dem Erstellen und Konfigurieren von Seiten im Portal entfernt. Wenn eine veraltete Laufzeit im Portal ausgeblendet ist, wird jede App, die diese Laufzeit verwendet, weiterhin ausgeführt.
Wenn Sie eine App mit einer veralteten Laufzeitversion erstellen möchten, die nicht mehr im Portal angezeigt wird, verwenden Sie die Azure CLI-, ARM-Vorlage oder Bicep. Mit diesen Bereitstellungsalternativen können Sie veraltete Laufzeiten erstellen, die im Portal entfernt wurden, aber weiterhin unterstützt werden.
Wenn eine Laufzeit vollständig von der App Service-Plattform entfernt wird, erhält Ihr Azure-Abonnementbesitzer vor dem Entfernen eine E-Mail-Benachrichtigung.
Anpassen der Buildautomatisierung
Wenn Sie Ihre App mithilfe von Git- oder ZIP-Paketen mit aktivierter Buildautomatisierung bereitstellen, folgt die App Service-Buildautomatisierung dieser Sequenz:
- Ausführen eines benutzerdefinierten Skripts, falls durch
PRE_BUILD_SCRIPT_PATH
angegeben - Führen Sie
dotnet restore
aus, um NuGet-Abhängigkeiten wiederherzustellen. - Führen Sie
dotnet publish
aus, um eine Binärdatei für die Produktion zu erstellen. - Ausführen eines benutzerdefinierten Skripts, falls durch
POST_BUILD_SCRIPT_PATH
angegeben
PRE_BUILD_COMMAND
und POST_BUILD_COMMAND
sind Umgebungsvariablen, die standardmäßig leer sind. Um vordefinierte Befehle auszuführen, definieren Sie PRE_BUILD_COMMAND
. Um Postbuildbefehle auszuführen, definieren Sie POST_BUILD_COMMAND
.
Im folgenden Beispiel werden die beiden Variablen für eine Reihe von Befehlen angegeben, die durch Kommas getrennt sind.
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings PRE_BUILD_COMMAND="echo foo, scripts/prebuild.sh"
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings POST_BUILD_COMMAND="echo foo, scripts/postbuild.sh"
Weitere Umgebungsvariablen, die Sie zum Anpassen der Buildautomatisierung verwenden können, finden Sie unter Oryx-Konfiguration.
Weitere Informationen, wie App Service ASP.NET Core-Apps in Linux ausführt und erstellt, finden Sie unter Oryx-Dokumentation: Erkennen und Erstellen von .NET Core-Apps.
Zugreifen auf Umgebungsvariablen
In App Service können Sie App-Einstellungen außerhalb Ihres App-Codes festlegen. Anschließend können Sie in jeder Klasse mithilfe des standardmäßigen ASP.NET Core-Abhängigkeitsinjektionsmusters auf sie zugreifen:
using Microsoft.Extensions.Configuration;
namespace SomeNamespace
{
public class SomeClass
{
private IConfiguration _configuration;
public SomeClass(IConfiguration configuration)
{
_configuration = configuration;
}
public SomeMethod()
{
// retrieve nested App Service app setting
var myHierarchicalConfig = _configuration["My:Hierarchical:Config:Data"];
// retrieve App Service connection string
var myConnString = _configuration.GetConnectionString("MyDbConnection");
}
}
}
Wenn Sie eine App-Einstellung mit demselben Namen in App Service und in appsettings.json
konfigurieren, hat beispielsweise der App Service-Wert Vorrang vor dem appsettings.json
Wert. Mithilfe des lokalen appsettings.json
Werts können Sie die App lokal debuggen, aber mithilfe des App Service-Werts können Sie die App in der Produktion mit Produktionseinstellungen ausführen. Verbindungszeichenfolgen funktionieren auf die gleiche Weise. Mithilfe dieser Methode können Sie ihre Anwendungsgeheimnisse außerhalb Ihres Code-Repositorys beibehalten und auf die entsprechenden Werte zugreifen, ohne den Code zu ändern.
Hinweis
Sie können auch sicherere Konnektivitätsoptionen berücksichtigen, die keine Verbindungsschlüssel erfordern. Weitere Informationen finden Sie unter Sichere Konnektivität mit Azure-Diensten und -Datenbanken aus Azure App Service.
Es wird auf die hierarchischen Konfigurationsdaten in der Datei appsettings.json
mit dem __
-Trennzeichen (doppelter Unterstrich) zugegriffen, das standardmäßig auf Linux in .NET Core Verwendung findet. Wenn Sie eine bestimmte hierarchische Konfigurationseinstellung in App Service außer Kraft setzen möchten, legen Sie den Namen der App-Einstellung mit dem gleichen Trennzeichenformat im Schlüssel fest. Sie können das folgende Beispiel in Cloud Shell ausführen:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings My__Hierarchical__Config__Data="some value"
Es wird auf die hierarchischen Konfigurationsdaten in der Datei appsettings.json
mit dem :
-Trennzeichen zugegriffen, das standardmäßig in .NET Core Verwendung findet. Wenn Sie eine bestimmte hierarchische Konfigurationseinstellung in App Service außer Kraft setzen möchten, legen Sie den Namen der App-Einstellung mit dem gleichen Trennzeichenformat im Schlüssel fest. Sie können das folgende Beispiel in Azure Cloud Shell ausführen:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings My:Hierarchical:Config:Data="some value"
Bereitstellen von Projektmappen mit mehreren Projekten
Wenn eine Visual Studio-Projektmappe mehrere Projekte enthält, wählt der Veröffentlichungsprozess von Visual Studio automatisch das bereitzustellende Projekt aus. Wenn Sie für die App Service-Bereitstellungs-Engine bereitstellen, z. B. mit Git oder einer ZIP-Bereitstellung mit aktivierter Buildautomatisierung , wählt die App Service-Bereitstellungs-Engine das erste Website- oder Webanwendungsprojekt aus, das als App Service-App gefunden wird. Sie können angeben, welches Projekt App Service verwenden soll, indem Sie die App-Einstellung PROJECT
angeben. Führen Sie beispielsweise den folgenden Befehl in Cloud Shell aus:
az webapp config appsettings set --resource-group <resource-group-name> --name <app-name> --settings PROJECT="<project-name>/<project-name>.csproj"
Zugreifen auf Diagnoseprotokolle
ASP.NET Core bietet einen integrierten Protokollierungsanbieter für App Service. Fügen Sie in der Datei Ihres Projekts program.cs
den Anbieter über die ConfigureLogging
Erweiterungsmethode zu Ihrer Anwendung hinzu, wie im folgenden Beispiel gezeigt:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddAzureWebAppDiagnostics();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Anschließend können Sie Protokolle mit dem standardmäßigen .NET Core-Muster konfigurieren und generieren.
Um auf die Konsolenprotokolle zuzugreifen, die aus Ihrem Anwendungscode in App Service generiert wurden, aktivieren Sie die Diagnoseprotokollierung, indem Sie den folgenden Befehl in Cloud Shell ausführen:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Mögliche Werte für --level
sind Error
, Warning
, Info
und Verbose
. Jede nachfolgende Ebene enthält die vorherige Ebene. Enthält z. B. Error
nur Fehlermeldungen.
Verbose
enthält alle Nachrichten.
Führen Sie nach dem Aktivieren der Diagnoseprotokollierung den folgenden Befehl aus, um den Protokolldatenstrom anzuzeigen:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Wenn Konsolenprotokolle nicht sofort angezeigt werden, überprüfen Sie es in 30 Sekunden erneut.
Wenn Sie das Protokollstreaming jederzeit beenden möchten, wählen Sie STRG+C aus.
Weitere Informationen zur Problembehandlung ASP.NET Core-Apps in App Service finden Sie unter Problembehandlung ASP.NET Core für Azure App Service und IIS.
Zugreifen auf eine detaillierte Ausnahmeseite
Wenn Ihre ASP.NET Core-App eine Ausnahme im Visual Studio-Debugger generiert, zeigt der Browser eine detaillierte Ausnahmeseite an, aber in App Service wird diese Seite durch einen generischen "HTTP 500" oder "Fehler beim Verarbeiten Ihrer Anforderung" ersetzt. Um die detaillierte Ausnahmeseite in App Service anzuzeigen, fügen Sie ihrer App die ASPNETCORE_ENVIRONMENT
App-Einstellung hinzu, indem Sie den folgenden Befehl in Cloud Shell ausführen.
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings ASPNETCORE_ENVIRONMENT="Development"
Erkennen einer HTTPS-Sitzung
In App Service erfolgt die TLS/SSL-Terminierung in den Modulen für den Netzwerklastenausgleich, sodass alle HTTPS-Anforderungen Ihre App als unverschlüsselte HTTP-Anforderungen erreichen. Wenn Ihre App-Logik wissen muss, ob Benutzeranforderungen verschlüsselt sind, konfigurieren Sie die Forwarded Headers Middleware in Startup.cs
:
- Konfigurieren Sie die Middleware mit
ForwardedHeadersOptions
so, dass die HeaderX-Forwarded-For
undX-Forwarded-Proto
inStartup.ConfigureServices
weitergeleitet werden. - Fügen Sie den bekannten Netzwerken private IP-Adressbereiche hinzu, damit die Middleware dem App Service-Lastenausgleich vertrauen kann.
- Rufen Sie die Methode
UseForwardedHeaders
inStartup.Configure
auf, bevor Sie andere Middleware aufrufen.
Wenn Sie die drei Elemente zusammenstellen, sieht ihr Code wie im folgenden Beispiel aus:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
// These three subnets encapsulate the applicable Azure subnets. At the moment, it's not possible to narrow it down further.
options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("::ffff:10.0.0.0"), 104));
options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("::ffff:192.168.0.0"), 112));
options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("::ffff:172.16.0.0"), 108));
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseForwardedHeaders();
...
app.UseMvc();
}
Weitere Informationen finden Sie unter Konfigurieren von ASP.NET Core für die Arbeit mit Proxyservern und Lastenausgleichen.
Umschreibungs- oder Umleitungs-URL
Um eine URL umzuschreiben oder umzuleiten, verwenden Sie die URL-Umschreibungs-Middleware in ASP.NET Core.
Öffnen einer SSH-Sitzung im Browser
Um eine direkte SSH-Sitzung mit Ihrem Container zu öffnen, sollte Ihre App ausgeführt werden.
Verwenden Sie den Befehl az webapp ssh .
Wenn Sie noch nicht authentifiziert sind, müssen Sie sich mit Ihrem Azure-Abonnement für die Verbindung authentifizieren. Nach der Authentifizierung wird im Browser eine Shell angezeigt, über die Sie Befehle innerhalb Ihres Containers ausführen können.
Hinweis
Alle Änderungen, die Sie außerhalb des /home
Verzeichnisses vornehmen, werden im Container selbst gespeichert und bleiben nicht über einen App-Neustart hinaus bestehen.
Informationen zum Öffnen einer SSH-Remotesitzung von Ihrem lokalen Computer aus finden Sie unter Öffnen einer SSH-Sitzung per Remote-Shell.
Die Roboter933456-Nachricht in den Protokollen ignorieren.
Möglicherweise wird die folgende Meldung in den Containerprotokollen angezeigt:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
Diese Meldung können Sie problemlos ignorieren.
/robots933456.txt
ist ein Dummy-URL-Pfad, den App Service verwendet, um zu überprüfen, ob der Container in der Lage ist, Anforderungen zu verarbeiten. Eine 404-Antwort gibt an, dass der Pfad nicht vorhanden ist, und signalisiert dem App-Dienst, dass der Container fehlerfrei ist und bereit ist, auf Anforderungen zu reagieren.