Partager via


découverte de service .NET.NET Aspire

Dans cet article, vous allez découvrir comment fonctionne la découverte de service dans un projet .NET.NET Aspire. .NET .NET Aspire inclut des fonctionnalités de configuration de la découverte de service au moment du développement et du test. La fonction de découverte de services fonctionne en fournissant une configuration au format attendu par le résolveur d'endpoints basé sur la configuration du projet AppHost .NET.NET Aspire aux projets de service individuels intégrés au modèle applicatif. Pour plus d’informations, consultez la découverte de services dans .NET.

Découverte de service implicite par référence

La configuration de la découverte de services est ajoutée uniquement pour les services référencés par un projet donné. Par exemple, considérez le programme AppHost suivant :

var builder = DistributedApplication.CreateBuilder(args);

var catalog = builder.AddProject<Projects.CatalogService>("catalog");
var basket = builder.AddProject<Projects.BasketService>("basket");

var frontend = builder.AddProject<Projects.MyFrontend>("frontend")
                      .WithReference(basket)
                      .WithReference(catalog);

Dans l’exemple précédent, le projet front-end référence le projet de catalogue et le projet de panier . Les deux appels WithReference indiquent au projet .NET.NET Aspire de transmettre les informations de découverte de service pour les projets référencés (catalogueet panier ) au projet de front-end.

Points de terminaison nommés

Certains services exposent plusieurs points de terminaison nommés. Les points de terminaison nommés peuvent être résolus en spécifiant le nom du point de terminaison dans la partie hôte de l’URI de requête HTTP, en suivant le format scheme://_endpointName.serviceName. Par exemple, si un service nommé « panier » expose un point de terminaison nommé « tableau de bord », l’URI scheme+http://_dashboard.basket peut être utilisé pour spécifier ce point de terminaison, par exemple :

builder.Services.AddHttpClient<BasketServiceClient>(
    static client => client.BaseAddress = new("https+http://basket"));

builder.Services.AddHttpClient<BasketServiceDashboardClient>(
    static client => client.BaseAddress = new("https+http://_dashboard.basket"));

Dans l’exemple précédent, deux classes HttpClient sont ajoutées, une pour le service panier principal et une pour le tableau de bord du service panier.

Points de terminaison nommés à l’aide de la configuration

Avec le programme de résolution de point de terminaison basé sur la configuration, les points de terminaison nommés peuvent être spécifiés dans la configuration en préfixant la valeur de point de terminaison avec _endpointName., où endpointName est le nom du point de terminaison. Par exemple, considérez cette configuration appsettings.json qui a défini un point de terminaison par défaut (sans nom) et un point de terminaison nommé « tableau de bord » :

{
  "Services": {
    "basket":
      "https": "https://10.2.3.4:8080", /* the https endpoint, requested via https://basket */
      "dashboard": "https://10.2.3.4:9999" /* the "dashboard" endpoint, requested via https://_dashboard.basket */
    }
  }
}

Dans la précédente JSON:

  • Le point de terminaison par défaut, lors de la résolution de https://basket est 10.2.3.4:8080.
  • Le point de terminaison du « tableau de bord », qui est résolu via https://_dashboard.basket, est 10.2.3.4:9999.

Points de terminaison nommés dans .NET.NET Aspire

var basket = builder.AddProject<Projects.BasketService>("basket")
    .WithHttpsEndpoint(hostPort: 9999, name: "dashboard");

Points de terminaison nommés dans Kubernetes à l’aide de DNS SRV

Lors du déploiement sur Kubernetes, le programme de résolution de point de terminaison de service DNS SRV peut être utilisé pour résoudre les points de terminaison nommés. Par exemple, la définition de ressource suivante entraîne la création d’un enregistrement SRV DNS pour un point de terminaison nommé « default » et un point de terminaison nommé « tableau de bord », tous deux sur le service nommé « panier ».

apiVersion: v1
kind: Service
metadata:
  name: basket
spec:
  selector:
    name: basket-service
  clusterIP: None
  ports:
  - name: default
    port: 8080
  - name: dashboard
    port: 9999

Pour configurer un service pour résoudre l'endpoint « dashboard » sur le service « panier », ajoutez le résolveur d'endpoint de service DNS SRV au builder d'hôtes comme suit :

builder.Services.AddServiceDiscoveryCore();
builder.Services.AddDnsSrvServiceEndpointProvider();

Pour plus d’informations, consultez AddServiceDiscoveryCore et AddDnsSrvServiceEndpointProvider.

Le nom de port spécial « default » est utilisé pour spécifier le point de terminaison par défaut, résolu à l’aide de l’URI https://basket.

Comme dans l’exemple précédent, ajoutez la découverte du service à un HttpClient pour le service de panier :

builder.Services.AddHttpClient<BasketServiceClient>(
    static client => client.BaseAddress = new("https://basket"));

De même, le point de terminaison « tableau de bord » peut être ciblé comme suit :

builder.Services.AddHttpClient<BasketServiceDashboardClient>(
    static client => client.BaseAddress = new("https://_dashboard.basket"));

Voir aussi