.NET Aspire incluye funcionalidad para configurar el descubrimiento de servicios durante el desarrollo y las pruebas. La funcionalidad de descubrimiento de servicios funciona proporcionando configuración en el formato esperado para resolver puntos finales basado en configuración del proyecto .NET Aspire AppHost a los proyectos de servicios individuales agregados al modelo de aplicación.
Actualmente, MyWeatherHub
utiliza una configuración estática para conectarse a Api
. Esto no es ideal por varias razones, incluyendo:
- El número de puerto del servicio
Api
puede cambiar. - La dirección IP del servicio
Api
puede cambiar. - Se necesitarían definir múltiples configuraciones para los ajustes de http y https.
- A medida que agregamos más servicios, la configuración se volvería más compleja.
Para abordar estos problemas, utilizaremos la funcionalidad de descubrimiento de servicios proporcionada por el proyecto .NET Aspire AppHost. Esto permitirá que el servicio MyWeatherHub
descubra el servicio Api
en tiempo de ejecución.
-
Abre el archivo
Program.cs
en el proyectoAppHost
. -
Anteriormente agregamos orquestación para incluir varios proyectos usando el método
builder.AddProject
. Esto devolvió unIResourceBuild
que se puede usar para hacer referencia a los proyectos. Vamos a hacer referencia al proyectoApi
en el proyectoMyWeatherHub
actualizando el código:var api = builder.AddProject<Projects.Api>("api"); var web = builder.AddProject<Projects.MyWeatherHub>("myweatherhub") .WithReference(api) .WithExternalHttpEndpoints();
-
El método
WithReference
se utiliza para hacer referencia al proyectoApi
. Esto permitirá que el proyectoMyWeatherHub
descubra el proyectoApi
en tiempo de ejecución. -
Si más adelante decides desplegar esta aplicación, necesitarías la llamada a
WithExternalHttpEndpoints
para asegurarte de que sea público para el mundo exterior.
Cuando agregamos ServiceDefaults a los proyectos, automáticamente los inscribimos en el sistema de descubrimiento de servicios. Esto significa que el proyecto MyWeatherHub
ya está configurado para usar el descubrimiento de servicios.
Algunos servicios exponen múltiples puntos finales con nombres. Los puntos finales con nombres se pueden resolver especificando el nombre del punto final en la parte del host de la URI de la solicitud HTTP, siguiendo el formato scheme://_nombrePuntoFinal.nombreServicio
. Por ejemplo, si un servicio llamado "basket" expone un punto final llamado "dashboard", entonces la URI scheme+http://_dashboard.basket
se puede utilizar para especificar este punto final, 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, BasketServiceClient
utilizará el punto final predeterminado del servicio basket
, mientras que BasketServiceDashboardClient
utilizará el punto final dashboard
del servicio basket
. Ahora, actualicemos el proyecto MyWeatherHub
para que use el descubrimiento de servicios para conectarse al servicio Api
.
Esto se puede lograr actualizando la configuración existente de WeatherEndpoint
en el archivo appsettings.json
. Esto es conveniente cuando se habilita .NET Aspire en una aplicación implementada existente, ya que puedes seguir utilizando la configuración existente.
-
Abre el archivo
appsettings.json
en el proyectoMyWeatherHub
. -
Actualiza la configuración de
WeatherEndpoint
para usar el descubrimiento de servicios:"WeatherEndpoint": "https+http://api"
-
Ahora, la configuración de
WeatherEndpoint
utiliza el descubrimiento de servicios para conectarse al servicioApi
.
Opcionalmente, podemos actualizar la URL para no utilizar la configuración de WeatherEndpoint
.
-
Abre el archivo
Program.cs
en el proyectoMyWeatherHub
. -
Actualiza la configuración de
WeatherEndpoint
para usar el descubrimiento de servicios:builder.Services.AddHttpClient<NwsManager>( static client => client.BaseAddress = new("https+http://api"));
-
Ejecuta la aplicación presionando
F5
o seleccionando la opciónIniciar depuración
. -
Abre la aplicación
MyWeatheApp
seleccionando el punto final en el panel de control. -
Observa que la aplicación
MyWeatherHub
sigue funcionando y ahora utiliza el descubrimiento de servicios para conectarse al servicioApi
. -
En el panel de control, haz clic en
Detalles
para el proyectoMyWeatherHub
. Esto mostrará todas las configuraciones que .NET Aspire configuró al ejecutar la aplicación desde App Host. -
Haz clic en el icono del ojo para revelar los valores y desplázate hasta la parte inferior donde verás
services__api_http_0
yservices__api_https_0
configurados con los valores correctos del servicioApi
.
Esto es solo el comienzo de lo que podemos hacer con el descubrimiento de servicios y .NET Aspire. A medida que nuestra aplicación crece y agregamos más servicios, podemos seguir utilizando el descubrimiento de servicios para conectar servicios en tiempo de ejecución. Esto nos permitirá escalar fácilmente nuestra aplicación y hacerla más resistente a los cambios en el entorno.
Puedes obtener más información sobre el uso y la configuración avanzada del descubrimiento de servicios en la documentación de .NET Aspire Service Discovery.