Ho un'applicazione Web che utilizza un numero di servizi WCF. Dispongo la mia applicazione web in vari ambienti (dev, UAT, produzione, ecc.). L'URL di ciascun servizio WCF è diverso per ogni ambiente. Sto usando .NET 3.5 e basicHttpBinding
sModifica dell'URL di riferimento del servizio WCF in base all'ambiente
L'applicazione Web utilizza un framework per supportare impostazioni specifiche della macchina nel mio file web.config. Quando un'istanza di un'istanza di un client servizio WCF che io chiamo una funzione che crea l'istanza del client WCF Service utilizzando l'overload costruttore che accetta gli argomenti:
System.ServiceModel.Channels.Binding binding,
System.ServiceModel.EndpointAddress remoteAddress
In sostanza la configurazione <system.serviceModel><bindings><basicHttpBinding><binding>
nel web.config è stato replicato nel codice C#.
Questo approccio funziona bene.
Tuttavia, ora devo migliorare questo approccio per lavorare con un servizio WCF che utilizza un certificato X509. Questo significa che devo replicare le seguenti impostazioni aggiuntive nel web.config in codice 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>
Sto avendo qualche difficoltà a capire come codificare questa configurazione in C#.
Due domande
- Qualcuno può raccomandare un approccio migliore per gestire gli URL di riferimento di servizio WCF in più ambienti?
- In alternativa, qualche suggerimento su come replicare la sezione web.config sopra in C# saranno accolti
Sono state aggiunte alcune considerazioni aggiuntive alla mia risposta: è possibile utilizzare i binding denominati ecc. In modo tale che sia possibile determinare il nome in base all'ambiente in uso e quindi caricare i valori appropriati dal file di configurazione. –
La seguente domanda si riferisce a questo http://stackoverflow.com/questions/798684/programmatically-set-identity-on-wcf-endpointaddress –
Mi rendo conto che lo stai facendo in codice piuttosto che nei file di configurazione, ma perché non usare config le trasformazioni e inserire le impostazioni specifiche dell'ambiente nel file di configurazione appropriato (Web.config.dev, Web.config.Test, Web.config.Release, ecc.)? – camainc