Sdílet prostřednictvím


.NET .NET Aspire zjišťování služby

V tomto článku se dozvíte, jak funguje zjišťování služeb v rámci projektu .NET.NET Aspire. .NET .NET Aspire zahrnuje funkce pro konfiguraci zjišťování služeb při vývoji a testování. Funkce zjišťování služeb funguje tím, že poskytuje konfiguraci ve formátu očekávaném překladačem koncových bodů založeným na konfiguraci z projektu .NET.NET Aspire AppHost do jednotlivých projektů služeb přidaných do aplikačního modelu. Další informace naleznete v tématu Zjišťování služby v .NET.

Implicitní zjišťování služeb podle odkazu

Konfigurace pro zjišťování služeb se přidá jenom pro služby, na které odkazuje daný projekt. Představte si například následující 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);

V předchozím příkladu odkazuje projekt front-endu na projekt katalogu a na projekt košíku . Dvě volání WithReference instruují projekt .NET.NET Aspire, aby předával informace o zjišťování služeb pro odkazované projekty (kataloga košík) do projektu frontend.

Pojmenované koncové body

Některé služby zpřístupňují více pojmenovaných koncových bodů. Pojmenované koncové body lze vyřešit zadáním názvu koncového bodu ve formátu scheme://_endpointName.serviceNamev hostitelské části identifikátoru URI požadavku HTTP. Pokud například služba s názvem "basket" zveřejňuje koncový bod s názvem "řídicí panel", můžete použít identifikátor URI scheme+http://_dashboard.basket k určení tohoto koncového bodu, například:

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

V předchozím příkladu se přidají dvě třídy HttpClient, jednu pro službu základního košíku a jednu pro řídicí panel služby košíku.

Koncové body pojmenované prostřednictvím konfigurace

Pomocí překladače koncových bodů založených na konfiguraci je možné pojmenované koncové body zadat v konfiguraci předponou hodnoty koncového bodu _endpointName., kde endpointName je název koncového bodu. Představte si například tuto konfiguraci appsettings.json, která definovala výchozí koncový bod (bez názvu) a koncový bod s názvem "řídicí panel":

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

V předchozím JSON:

  • Výchozí koncový bod při řešení https://basket je 10.2.3.4:8080.
  • Koncový bod řídicího panelu, vyřešený přes https://_dashboard.basket, je 10.2.3.4:9999.

Pojmenované koncové body v .NET.NET Aspire

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

Pojmenované koncové body v Kubernetes pomocí DNS SRV

Při nasazování do Kuberneteslze použít resolver koncových bodů DNS SRV k řešení pojmenovaných koncových bodů. Například následující definice prostředku způsobí vytvoření záznamu DNS SRV pro koncový bod s názvem "default" a koncový bod s názvem "dashboard" ve službě s názvem "basket".

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

Pokud chcete nakonfigurovat službu tak, aby vyřešil koncový bod "dashboard" ve službě "basket", přidejte do tvůrce služby překladač koncových bodů služby DNS SRV takto:

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

Další informace najdete v tématu AddServiceDiscoveryCore a AddDnsSrvServiceEndpointProvider.

Speciální název portu "default" slouží k určení výchozího koncového bodu, který se překládá pomocí identifikátoru URI https://basket.

Stejně jako v předchozím příkladu přidejte zjišťování služby do HttpClient pro službu košíku:

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

Podobně můžete koncový bod řídicího panelu cílit takto:

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

Viz také