es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Múltiples entornos para la referencia de servicio WCF en .NET Core.

Estoy tratando de agregar una referencia de servicio WCF a mi aplicación .NET Core con la capacidad de cambiar a qué entorno (punto final de servicio) está apuntando.

Usando .NET Framework, puedes especificar múltiples puntos de conexión de clientes dentro del web.config y luego pasar el nombre especificado al cliente de servicio.

¿Existe una manera similar de lograr esto en .NET Core?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma similar de lograr esto en .NET Core utilizando el sistema de configuración. Puede definir un archivo de configuración JSON o XML con las diferentes direcciones de los puntos finales para cada entorno, y luego utilizar el patrón IOptions para inyectar la URL de punto final correcta en su cliente de servicio en tiempo de ejecución.

    Aquí tienes un ejemplo de cómo puedes configurarlo:

    1. Crea un archivo appsettings.json (o .xml) con los diferentes puntos finales para cada entorno:
    {
      "ServiceEndpoints": {
        "Development": "http://localhost:12345/MyService",
        "Production": "https://mywebservice.com/MyService"
      }
    }
    
    1. Agrega el archivo de configuración al sistema de configuración de tu aplicación .NET Core:
    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                config.AddJsonFile("appsettings.json", optional: true);
            })
            .UseStartup<startup>();
    
    1. Crea una clase de configuración para almacenar las URLs de los puntos finales:
    public class ServiceEndpointsConfig
    {
        public string Development { get; set; }
        public string Production { get; set; }
    }
    
    1. Agrega la clase ServiceEndpointsConfig al contenedor de inyección de dependencias de tu aplicación:
    services.Configure<serviceendpointsconfig>(
        Configuration.GetSection("ServiceEndpoints"));
    
    1. Inyecta la interfaz IOptions<serviceendpointsconfig> en tu cliente de servicio:
    public class MyServiceClient
    {
        private readonly HttpClient _httpClient;
        private readonly ServiceEndpointsConfig _endpointsConfig;
    
        public MyServiceClient(HttpClient httpClient, IOptions<serviceendpointsconfig> endpointsConfig)
        {
            _httpClient = httpClient;
            _endpointsConfig = endpointsConfig.Value;
        }
    
        public async Task<string> GetName()
        {
            var endpoint = GetEndpointForEnvironment();
            var response = await _httpClient.GetAsync(endpoint);
            return await response.Content.ReadAsStringAsync();
        }
    
        private string GetEndpointForEnvironment()
        {
            var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
            if (env == "Production")
            {
                return _endpointsConfig.Production;
            }
            else
            {
                return _endpointsConfig.Development;
            }
        }
    }
    

    Ten en cuenta que puedes personalizar esta implementación para adaptarla a tu caso de uso específico, como utilizar un formato de archivo de configuración diferente o definir otras opciones de configuración.

Comments are closed.