使用XDT转换的Web.config进行部分替换

时间:2013-08-09 16:11:58

标签: c# visual-studio-2012 web-config .net-4.5 web.config-transform

我处于这样一种情况,我只想更新WCF端点的URL的一部分。现在,我们通过在每个“种类”中包含所有端点的不同配置来实现此目的。这很难管理。我想在web.config中设置一个转换来执行此操作。

这是文件的两个例子

开发

  <endpoint address="http://servicesdev.host.com/RPUtilityServices/LogException.svc/restService"
        behaviorConfiguration="restfulBehavior"
        binding="webHttpBinding"
        contract="Host.RP.Shared.Common.Services.Utility.Interfaces.IExceptionUtilityService"
        name="LogService" />

以及其他一些

分段

  <endpoint address="http://servicessta.host.com/RPUtilityServices/LogException.svc/restService"
            behaviorConfiguration="restfulBehavior"
            binding="webHttpBinding"
            contract="Host.RP.Shared.Common.Services.Utility.Interfaces.IExceptionUtilityService"
            name="LogService" />

不同之处在于servicessta与servicesdev。现在我也有serviceuat和servicesqa etcera。我想设置一个转换,只需将' dev '替换为' sta '等,而不是整个块(使用xdt:Transform="Replace"

但我该怎么做?

1 个答案:

答案 0 :(得分:38)

上面的第一段代码(适用于开发环境)可以转到Web.config(或Web.debug.config,但也必须添加xdt转换。在您的Web.release.config(这将进入登台环境)中定义以下元素。

<endpoint address="http://servicessta.host.com/RPUtilityServices/LogException.svc/restService"
        behaviorConfiguration="restfulBehavior"
        binding="webHttpBinding" 
        contract="Host.RP.Shared.Common.Services.Utility.Interfaces.IExceptionUtilityService"
        name="LogService" xdt:Transform="Replace" />

请注意,我在发布配置文件中添加了 xdt:Transform =“Replace”。使用此属性,endpoint元素中定义的设置将替换基础Web.config文件中的设置。

有关详细信息,请参阅MSDN

<强>更新

使用xdt:Transform="Replace"会替换整个<endpoint />元素。要有选择地替换address元素的<endpoint />属性,请使用以下转换。

<endpoint address="http://servicessta.host.com/RPUtilityServices/LogException.svc/restService"
 xdt:Transform="SetAttributes(address)"/>

(请注意,如果有多个<endpoint />元素,您可能也想使用定位器属性。)

我在上面发布的MSDN页面上详细描述了我所说的内容。