J'ai une application Web qui utilise un certain nombre de services WCF. Je déploie mon application web dans différents environnements (dev, UAT, production etc). L'URL de chaque service WCF est différente pour chaque environnement. J'utilise .NET 3.5 et basicHttpBinding
sModification de l'URL de référence du service WCF en fonction de l'environnement
L'application Web utilise un cadre pour prendre en charge les paramètres spécifiques à la machine dans mon fichier web.config. Lors de l'instanciation d'une instance d'un client de service WCF j'appelle une fonction qui crée l'instance du client de service WCF en utilisant la surcharge du constructeur qui prend les arguments:
System.ServiceModel.Channels.Binding binding,
System.ServiceModel.EndpointAddress remoteAddress
En substance, la configuration <system.serviceModel><bindings><basicHttpBinding><binding>
dans web.config a été répliquées en code C#
Cette approche fonctionne bien.
Cependant, je dois maintenant améliorer cette approche pour travailler avec un service WCF qui utilise un certificat X509. Cela signifie que je dois répliquer les paramètres suivants dans web.config en code 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>
J'ai du mal à comprendre comment coder cette configuration en C#.
Deux questions se
- Quelqu'un peut-il recommander une meilleure approche de la gestion des URL de référence de service WCF sur plusieurs environnements?
- Vous pouvez également des suggestions sur la façon de reproduire la section web.config ci-dessus en C# seront accueillis
Ajout de quelques réflexions supplémentaires à ma réponse - vous pouvez aller avec des liaisons nommées, etc. de telle manière que vous puissiez déterminer le nom en fonction de votre environnement, puis charger les valeurs appropriées à partir de votre fichier de configuration. –
La question suivante se rapporte à cela http://stackoverflow.com/questions/798684/programmatically-set-identity-on-wcf-endpointaddress –
Je réalise que vous faites ceci dans le code plutôt que dans les fichiers de configuration, mais pourquoi ne pas utiliser la configuration Transformer et placer les paramètres spécifiques à l'environnement dans le fichier de configuration approprié (Web.config.dev, Web.config.Test, Web.config.Release, etc.)? – camainc