Anpassen von Verbindungszeichenfolgen mithilfe von .NET Aspire-Manifesten
Bereitstellungstools wie Visual Studio oder die Azure Developer CLI erstellen Manifestdateien, die den Inhalt einer .NET Aspire-Lösung beschreiben. Wenn Sie Ihre Bereitstellung anpassen möchten, können Sie Änderungen direkt an der Manifestdatei vornehmen.
Als Händler für Outdoor-Ausrüstung haben Sie beschlossen, eine vorhandene Azure Cache for Redis-Instanz zu verwenden, um den Ausgabecache für Ihren Web-App-Microservice zu hosten. Sie möchten sicherstellen, dass der Web-App-Dienst eine Verbindung mit der richtigen Instanz von Azure Cache for Redis herstellt.
In dieser Lektion erfahren Sie, wie Sie Verbindungszeichenfolgen in Sicherungsdiensten in der .NET Aspire-Manifestdatei ändern.
Generieren einer Manifestdatei mithilfe der .NET CLI
Während der lokalen Entwicklung und beim Debuggen erstellt .NET Aspire keine Manifestdatei. Bei der Bereitstellung muss .NET den Inhalt der .NET Aspire-Lösung beschreiben, einschließlich ihrer Microservices, Sicherungsdienste und Konfiguration. Die Manifestdatei dient diesem Zweck. Sie beschreibt die Lösung im JSON-Format.
Zum Erstellen der Manifestdatei führen Visual Studio und die Azure Developer CLI einen run
-.NET CLI-Befehl mit einem bestimmten Ziel aus. Sie können denselben Befehl auch manuell ausführen, um wie folgt eine eigene Manifestdatei zu erstellen:
dotnet run --project eShop.AppHost\eShop.AppHost.csproj `
--publisher manifest `
--output-path ../aspire-manifest.json
Hinweis
Stellen Sie sicher, dass Sie das App-Hostprojekt mit der Option --project
angeben.
Der Befehl erzeugt eine Ausgabe, die ungefähr folgendem Text entspricht:
Building...
info: Aspire.Hosting.DistributedApplication[0]
Aspire version: 8.0.1+a6e341ebbf956bbcec0dda304109815fcbae70c9
info: Aspire.Hosting.Publishing.ManifestPublisher[0]
Published manifest to: C:\repos\eShop\aspire-manifest.json
Sie können auch ein Startprofil verwenden, um den dotnet
-Befehl auszuführen. Ein Startprofil ist eine Gruppe von Einstellungen, die ein .NET-Projekt beim Ausführen konfigurieren. Die .NET Aspire Starter-Vorlage erstellt beispielsweise die folgenden Startprofile:
"profiles": {
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:17170;http://localhost:15281",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21147",
"DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:22239"
}
},
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:15281",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19197",
"DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20233"
}
}
}
Fügen Sie ein Startprofil hinzu, um eine Manifestdatei mit JSON-Code zu erstellen, die dem folgenden Text ähnelt:
"profiles": {
"generate-manifest": {
"commandName": "Project",
"launchBrowser": false,
"dotnetRunMessages": true,
"commandLineArgs": "--publisher manifest --output-path aspire-manifest.json"
}
}
In Visual Studio können Sie dann das generate-manifest-Profils auswählen, wenn Sie mit dem Debuggen beginnen. Verwenden Sie in der Befehlszeile die Option --launch-profile
:
dotnet run --launch-profile generate-manifest
Format der Manifestdatei
Das Manifest ist eine JSON-Datei mit einem einzelnen Element namens resources
auf oberster Ebene. Innerhalb dieses Objekts finden Sie für jeden Microservice und Sicherungsdienst ein Objekt. Die Einstellungen jedes dieser Objekte umfassen Verbindungszeichenfolgen, Umgebungsvariablen und Containerimagenamen.
Hier ist ein Beispielmanifest für die .NET Aspire Starter-Vorlage ohne Änderungen. Die Lösung verwendet einen Redis-Cache:
{
"resources": {
"cache": {
"type": "container.v0",
"connectionString": "{cache.bindings.tcp.host}:{cache.bindings.tcp.port}",
"image": "docker.io/library/redis:7.2",
"bindings": {
"tcp": {
"scheme": "tcp",
"protocol": "tcp",
"transport": "tcp",
"targetPort": 6379
}
}
},
"apiservice": {
"type": "project.v0",
"path": "AspireStarter.ApiService/AspireStarter.ApiService.csproj",
"env": {
"OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES": "true",
"OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES": "true",
"OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY": "in_memory",
"ASPNETCORE_FORWARDEDHEADERS_ENABLED": "true"
},
"bindings": {
"http": {
"scheme": "http",
"protocol": "tcp",
"transport": "http"
},
"https": {
"scheme": "https",
"protocol": "tcp",
"transport": "http"
}
}
},
"webfrontend": {
"type": "project.v0",
"path": "AspireStarter.Web/AspireStarter.Web.csproj",
"env": {
"OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES": "true",
"OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES": "true",
"OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY": "in_memory",
"ASPNETCORE_FORWARDEDHEADERS_ENABLED": "true",
"ConnectionStrings__cache": "{cache.connectionString}",
"services__apiservice__http__0": "{apiservice.bindings.http.url}",
"services__apiservice__https__0": "{apiservice.bindings.https.url}"
},
"bindings": {
"http": {
"scheme": "http",
"protocol": "tcp",
"transport": "http",
"external": true
},
"https": {
"scheme": "https",
"protocol": "tcp",
"transport": "http",
"external": true
}
}
}
}
}
Verbindungszeichenfolgen und Bindungsverweise
Im Beispielmanifest gibt es drei Ressourcen:
webfrontend
: Diese Ressource ist der Microservice, der eine Webschnittstelle für Kunden darstellt.apiservice
: Diese Ressource ist die REST-API, die vonwebfrontend
aufgerufen wird. In der Vorlage dient dieser Aufruf zum Abrufen von Wetterdaten.cache
: Diese Ressource ist der Redis-Cache, der verwendet wird, um die Leistung deswebfrontend
-Microservices zu optimieren.
Beachten Sie, dass jede der drei Ressourcen einen bindings
-Abschnitt enthält, der Protokolle angibt, die Sie zum Herstellen einer Verbindung mit dieser Ressource verwenden können.
In der Program.cs-Datei des App-Hosts hängt das webfrontend
-Projekt sowohl von cache
als auch von apiservice
ab:
var cache = builder.AddRedis("cache");
var apiService = builder.AddProject<Projects.AspireStarter_ApiService>("apiservice");
builder.AddProject<Projects.AspireStarter_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithReference(cache)
.WithReference(apiService);
In der Manifestdatei werden diese Abhängigkeiten in Form von Umgebungsvariablen ausgedrückt:
"env": {
"ConnectionStrings__cache": "{cache.connectionString}",
"services__apiservice__http__0": "{apiservice.bindings.http.url}",
"services__apiservice__https__0": "{apiservice.bindings.https.url}"
}
Die Abhängigkeiten verwenden Platzhalterzeichenfolgen, die auf die Struktur der Manifestdatei verweisen. Die dritte Abhängigkeit verweist beispielsweise auf die HTTPS-Bindung des API-Diensts: