Udostępnij za pośrednictwem


odnajdywanie usługi .NET.NET Aspire

Z tego artykułu dowiesz się, jak działa odnajdywanie usług w projekcie .NET.NET Aspire. .NET .NET Aspire obejmuje funkcje konfigurowania odnajdywania usług w czasie programowania i testowania. Funkcja odnajdywania usług działa przez zapewnienie konfiguracji w formacie oczekiwanym przez program rozpoznawania punktów końcowych opartych na konfiguracji z projektu .NET.NET Aspire AppHost do poszczególnych projektów usług dodanych do modelu aplikacji. For more information, see Service discovery in .NET.

Niejawne odnajdywanie usług przez referencję

Konfiguracja odnajdywania usług jest dodawana tylko dla usług, do których odwołuje się dany projekt. Rozważmy na przykład następujący program AppHost:

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);

W poprzednim przykładzie projekt frontendowy odnosi się do projektu katalogu oraz projektu koszyka . The two WithReference calls instruct the .NET.NET Aspire project to pass service discovery information for the referenced projects (catalog, and basket) into the frontend project.

Oznaczone punkty końcowe

Niektóre usługi uwidaczniają wiele nazwanych punktów końcowych. Named endpoints can be resolved by specifying the endpoint name in the host portion of the HTTP request URI, following the format scheme://_endpointName.serviceName. Jeśli na przykład usługa o nazwie "koszyk" uwidacznia punkt końcowy o nazwie "dashboard", identyfikator URI https+http://_dashboard.basket może służyć do określenia tego punktu końcowego, na przykład:

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"));

W poprzednim przykładzie dodano dwie klasy HttpClient, jedną dla podstawowej usługi koszyka i jedną dla pulpitu nawigacyjnego usługi koszyka.

Named endpoints using configuration

Za pomocą programu rozpoznawania punktów końcowych opartych na konfiguracji nazwane punkty końcowe można określić w konfiguracji, prefiksując wartość punktu końcowego za pomocą _endpointName., gdzie endpointName jest nazwą punktu końcowego. Rozważmy na przykład tę konfigurację appsettings.json, która zdefiniowała domyślny punkt końcowy (bez nazwy) i punkt końcowy o nazwie "dashboard":

{
  "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 */
    }
  }
}

In the preceding JSON:

  • Domyślnym punktem końcowym podczas rozpoznawania https://basket jest 10.2.3.4:8080.
  • The "dashboard" endpoint, resolved via https://_dashboard.basket is 10.2.3.4:9999.

Named endpoints in .NET.NET Aspire

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

Named endpoints in Kubernetes using DNS SRV

Podczas wdrażania w Kubernetesprogram rozpoznawania punktów końcowych usługi DNS SRV może służyć do rozpoznawania nazwanych punktów końcowych. Na przykład poniższa definicja zasobu spowoduje utworzenie rekordu SRV DNS dla punktu końcowego o nazwie "default" i punktu końcowego o nazwie "dashboard", zarówno w usłudze o nazwie "koszyk".

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

To configure a service to resolve the "dashboard" endpoint on the "basket" service, add the DNS SRV service endpoint resolver to the host builder as follows:

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

Aby uzyskać więcej informacji, zobacz AddServiceDiscoveryCore i AddDnsSrvServiceEndpointProvider.

Specjalna nazwa portu "default" służy do określania domyślnego punktu końcowego, rozpoznawana przy użyciu identyfikatora URI https://basket.

As in the previous example, add service discovery to an HttpClient for the basket service:

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

Similarly, the "dashboard" endpoint can be targeted as follows:

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

Zobacz też