Verbindingsreeks aanpassen met behulp van .NET Aspire-manifesten

Voltooid

Implementatiehulpprogramma's zoals Visual Studio of de Azure Developer CLI maken manifestbestanden die de inhoud van een .NET Aspire-oplossing beschrijven. Als u de implementatie wilt aanpassen, kunt u rechtstreeks wijzigingen aanbrengen in het manifestbestand.

In de winkel voor buitenapparatuur hebt u besloten om een bestaand Azure Cache voor Redis exemplaar te gebruiken om de uitvoercache voor de microservice van uw web-app te hosten. U wilt ervoor zorgen dat de web-app-service verbinding maakt met het juiste exemplaar van Azure Cache voor Redis.

In deze les leert u hoe u verbindingsreeks s kunt wijzigen in het .NET Aspire-manifestbestand.

Een manifestbestand genereren met behulp van de .NET CLI

Tijdens lokale ontwikkeling en foutopsporing maakt .NET Aspire geen manifestbestand. Als het gaat om implementatie, moet .NET de inhoud van de .NET Aspire-oplossing beschrijven, inclusief de microservices, backingservices en configuratie. Het manifestbestand dient dit doel. Hierin wordt de oplossing in JSON-indeling beschreven.

Als u het manifestbestand wilt maken, voeren Visual Studio en de Azure Developer CLI een .NET CLI-opdracht run uit met een specifiek doel. U kunt dezelfde opdracht handmatig uitvoeren om als volgt uw eigen manifestbestand te maken:

dotnet run --project eShop.AppHost\eShop.AppHost.csproj `
    --publisher manifest `
    --output-path ../aspire-manifest.json

Notitie

Zorg ervoor dat u het app-hostproject opgeeft met de --project optie.

De opdracht produceert uitvoer die vergelijkbaar is met deze tekst:

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

U kunt ook een startprofiel gebruiken om de dotnet opdracht uit te voeren. Een startprofiel is een groep instellingen waarmee een .NET-project wordt geconfigureerd wanneer het wordt uitgevoerd. Met de .NET Aspire Starter-sjabloon worden bijvoorbeeld deze startprofielen gemaakt:

"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"
    }
  }
}

Voeg een startprofiel toe om een manifestbestand te maken met JSON-code die vergelijkbaar is met deze tekst:

"profiles": {
  "generate-manifest": {
    "commandName": "Project",
    "launchBrowser": false,
    "dotnetRunMessages": true,
    "commandLineArgs": "--publisher manifest --output-path aspire-manifest.json"
  }
}

In Visual Studio kunt u vervolgens het profiel genereren-manifest kiezen wanneer u de foutopsporing start. Gebruik --launch-profile de volgende optie op de opdrachtregel:

dotnet run --launch-profile generate-manifest

Indeling van het manifestbestand

Het manifest is een JSON-bestand met één element op het hoogste niveau met de naam resources. Binnen dat object vindt u één object voor elke microservice en backing-service. Voor elk van deze objecten bevatten instellingen verbindingsreeks s, omgevingsvariabelen en namen van containerinstallatiekopieën.

Hier volgt een voorbeeldmanifest voor de .NET Aspire Starter-sjabloon zonder wijzigingen. De oplossing maakt gebruik van een 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
        }
      }
    }
  }
}

Verbindingsreeksen en bindingverwijzingen

In het manifestvoorbeeld zijn er drie resources:

  • webfrontend: Deze resource is de microservice die een webinterface aan klanten presenteert.
  • apiservice: Deze resource is de REST API die de webfrontend aanroept. In de sjabloon is deze aanroep het verkrijgen van weergegevens.
  • cache: Deze resource is de Redis-cache, die wordt gebruikt om de prestaties van de webfrontend microservice te optimaliseren.

U ziet dat elk van de drie resources een bindings sectie bevat met protocollen die u kunt gebruiken om verbinding te maken met die resource.

In het Program.cs-bestand van apiservice

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 het manifestbestand worden deze afhankelijkheden uitgedrukt als omgevingsvariabelen:

"env": {
  "ConnectionStrings__cache": "{cache.connectionString}",
  "services__apiservice__http__0": "{apiservice.bindings.http.url}",
  "services__apiservice__https__0": "{apiservice.bindings.https.url}"
}

Diagram waarin wordt getoond hoe afhankelijkheden in een .NET Aspire-project verwijzingen genereren in een manifestbestand.

De afhankelijkheden gebruiken tijdelijke aanduidingen voor tekenreeksen die verwijzen naar de structuur van het manifestbestand. De derde afhankelijkheid verwijst bijvoorbeeld naar de HTTPS-binding van de API-service:

Diagram waarin wordt getoond hoe tijdelijke aanduidingen worden samengesteld in een .NET Aspire-manifestbestand.

Meer informatie