detección de servicios de .NET.NET Aspire
En este artículo, aprenderá cómo funciona la detección de servicios dentro de un proyecto de .NET.NET Aspire. .NET .NET Aspire incluye funcionalidad para configurar la detección de servicios en tiempo de desarrollo y pruebas. La funcionalidad de detección de servicios funciona proporcionando la configuración en el formato esperado por el solucionador basado en configuración de puntos de conexión del proyecto AppHost de .NET.NET Aspire a los proyectos de servicio individuales añadidos al modelo de aplicación. Para obtener más información, consulte detección del servicio en .NET.
Detección implícita de servicios mediante referencia
La configuración de la detección de servicios solo se agrega para los servicios a los que hace referencia un proyecto determinado. Por ejemplo, considere el siguiente programa 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);
En el ejemplo anterior, el
Puntos de conexión con nombre
Algunos servicios exponen varios puntos de conexión nombrados. Los puntos de conexión con nombre se pueden resolver especificando el nombre del punto de conexión en la parte del host del URI de solicitud HTTP, siguiendo el formato scheme://_endpointName.serviceName
. Por ejemplo, si un servicio denominado "basket" expone un punto de conexión denominado "dashboard", el URI https+http://_dashboard.basket
se puede usar para especificar este punto de conexión, por ejemplo:
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"));
En el ejemplo anterior, se agregan dos clases HttpClient, una para el servicio de cesta principal y otra para el panel del servicio de cesta.
Puntos de conexión designados mediante la configuración
Con el solucionador de puntos de conexión basado en configuración, los puntos de conexión con nombre se pueden especificar en la configuración mediante el prefijo del valor del punto de conexión con _endpointName.
, donde endpointName
es el nombre del punto de conexión. Por ejemplo, considere esta configuración de appsettings.json que definió un punto de conexión predeterminado (sin nombre) y un punto de conexión denominado "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 */
}
}
}
En el JSONanterior :
- El punto de conexión predeterminado, al resolver
https://basket
es10.2.3.4:8080
. - El punto de conexión del "tablero de control", resuelto mediante
https://_dashboard.basket
es10.2.3.4:9999
.
Puntos de conexión con nombre en .NET.NET Aspire
var basket = builder.AddProject<Projects.BasketService>("basket")
.WithHttpsEndpoint(hostPort: 9999, name: "dashboard");
Puntos finales nombrados en Kubernetes mediante SRV de DNS
Al implementar en Kubernetes, se puede usar el solucionador de extremos de servicio SRV de DNS para resolver puntos de conexión denominados. Por ejemplo, la siguiente definición de recurso dará lugar a que se cree un registro SRV de DNS para un punto de conexión denominado "default" y un punto de conexión denominado "dashboard", ambos en el servicio denominado "basket".
apiVersion: v1
kind: Service
metadata:
name: basket
spec:
selector:
name: basket-service
clusterIP: None
ports:
- name: default
port: 8080
- name: dashboard
port: 9999
Para configurar un servicio para resolver el punto de conexión de "tablero de instrumentos" en el servicio "basket", agregue el resolutor del punto de servicio DNS SRV al generador de hosts de la siguiente manera:
builder.Services.AddServiceDiscoveryCore();
builder.Services.AddDnsSrvServiceEndpointProvider();
Para obtener más información, consulte AddServiceDiscoveryCore y AddDnsSrvServiceEndpointProvider.
El nombre de puerto especial "default" se usa para especificar el punto de conexión predeterminado, resuelto mediante el URI https://basket
.
Como en el ejemplo anterior, agregue la detección de servicios a un HttpClient
para el servicio de cesta:
builder.Services.AddHttpClient<BasketServiceClient>(
static client => client.BaseAddress = new("https://basket"));
Del mismo modo, el terminal "tablero de control" se puede dirigir de la siguiente manera:
builder.Services.AddHttpClient<BasketServiceDashboardClient>(
static client => client.BaseAddress = new("https://_dashboard.basket"));
Consulte también
- detección del servicio en .NET
- Realizar solicitudes HTTP con la clase HttpClient
- IHttpClientFactory con .NET