Tengo una aplicación web que utiliza varios Servicios WCF. Implemento mi aplicación web en diversos entornos (desarrollo, UAT, producción, etc.). La URL de cada servicio WCF es diferente para cada entorno. Estoy usando .NET 3.5 y basicHttpBinding
sCambio del URL de referencia del servicio WCF según el entorno
La aplicación web utiliza un marco para admitir configuraciones específicas de la máquina en mi archivo web.config. Cuando una instancia de una instancia de un cliente de servicio WCF que llamo una función que crea la instancia del cliente de servicio WCF utilizando la sobrecarga de constructor que toma los argumentos:
System.ServiceModel.Channels.Binding binding,
System.ServiceModel.EndpointAddress remoteAddress
En esencia la configuración <system.serviceModel><bindings><basicHttpBinding><binding>
en web.config ha sido replicados en el código C#.
Este enfoque funciona bien.
Sin embargo, ahora tengo que mejorar este enfoque para trabajar con un servicio WCF que utiliza un certificado X509. Esto significa que tengo que replicar los siguientes ajustes adicionales en web.config en código C#:
<!-- inside the binding section -->
<security mode="Message">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
<message clientCredentialType="Certificate" algorithmSuite="Default" />
</security>
<behaviors>
<endpointBehaviors>
<behavior name="MyServiceBehaviour">
<clientCredentials>
<clientCertificate storeLocation="LocalMachine" storeName="My"
x509FindType="FindByThumbprint" findValue="1234abcd" />
<serviceCertificate>
<defaultCertificate storeLocation="LocalMachine" storeName="My"
x509FindType="FindByThumbprint" findValue="5678efgh" />
<authentication trustedStoreLocation="LocalMachine"
certificateValidationMode="None" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
estoy teniendo algunas dificultades para encontrar la manera de codificar esta configuración en C#.
Dos preguntas
- ¿Alguien puede recomendar un mejor enfoque para la gestión de las direcciones URL de referencia de servicio WCF a través de múltiples entornos?
- Alternativamente, alguna sugerencia sobre cómo reproducir la sección de web.config anterior en C# serán recibidos
Agregué algunos pensamientos adicionales a mi respuesta - podría ir con enlaces con nombre, etc. de tal forma que pueda determinar el nombre basado en su entorno, y luego cargar los valores apropiados de su archivo de configuración. –
La siguiente pregunta se relaciona con este http://stackoverflow.com/questions/798684/programmatically-set-identity-on-wcf-endpointaddress –
Me doy cuenta de que está haciendo esto en código en lugar de en archivos de configuración, pero ¿por qué no usar config transformaciones y colocar la configuración específica del entorno en el archivo de configuración apropiado (Web.config.dev, Web.config.Test, Web.config.Release, etc.)? – camainc