c# – 根据环境更改WCF服务引用URL

前端之家收集整理的这篇文章主要介绍了c# – 根据环境更改WCF服务引用URL前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个使用许多WCF服务的Web应用程序.我在各种环境(开发,UAT,生产等)中部署我的Web应用程序.每个WCF服务的URL对于每个环境都是不同的.我使用的是.NET 3.5 andbasicHttpBindings

Web应用程序使用框架在我的web.config文件支持特定于计算机的设置.在实例化WCF服务客户端的实例时,我调用一个函数,该函数使用带有参数的构造函数重载来创建WCF服务客户端的实例:

System.ServiceModel.Channels.Binding binding,System.ServiceModel.EndpointAddress remoteAddress

实质上是< system.serviceModel>< bindings>< basicHttpBinding>< binding> web.config中的配置已在C#代码中复制.

这种方法效果很好.

但是,我现在必须增强此方法以使用使用X509证书的WCF服务.这意味着我必须在C#代码中复制web.config中的以下附加设置:

<!-- 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>

我在查找如何在C#中编写此配置时遇到一些困难.

两个问题

>任何人都可以推荐更好的方法来管理多个环境中的WCF服务参考URL吗?
>或者,欢迎任何有关如何在C#中复制上述web.config部分的建议

解决方法

一种可能的方法是“外化”< system.serviceModel>的某些部分.配置到外部文件,每个环境一个.

例如.我们有“bindings.dev.config”和“bindings.test.config”,然后我们在主web.config中引用,如下所示:

<system.serviceModel>
  <bindings configSource="bindings.dev.config" />
</system.serviceModel>

这样,你需要从DEV更改为PROD就是这一行的配置XML.

基本上,在.NET 2.0配置中,任何配置元素都可以“外部化”.但是,您无法直接外部化configGroups(例如“system.serviceModel”) – 您必须处于“配置元素”级别.

编辑:好的,所以NO配置编辑更改以在环境之间切换…..
在这种情况下,您可能需要设想一个命名方案,例如:以这种方式命名您的绑定,行为和端点,您可以在运行时区分它们.

就像是:

<bindings>
  <binding name="Default_DEV">
    .....
  </binding>
  <binding name="Default_PROD">
    .....
  </binding>
</bindings>

这样,您可以从您的代码和您正在运行的环境中构建所需元素的名称(例如绑定“Default_PROD”),然后从配置文件获取相应的配置,其中包含所有配置设置所有环境.

猜你在找的C#相关文章