Web.config with XDT transform to do partial replace

.net-4.5, c#, visual-studio-2012, web-config, web.config-transform

Solution

The first piece of code above (for dev environment) can go to `Web.config` (or `Web.debug.config` but have to add `xdt` transform as well). In your `Web.release.config` (this one will go to staging environment) define the following element.

<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" />

Note that I added xdt:Transform="Replace" in the release config file. With this attribute present the settings defined within the `endpoint` element will replace those in your base `Web.config` file.

For more information see MSDN.

UPDATE:

Using the `xdt:Transform="Replace"` would replace the entire `<endpoint />` element. To selectively replace the `address` attribute of the `<endpoint />` element use the following transform.

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

(Note that if there are several `<endpoint />` elements you might want to use the Locator attribute as well.)

What I said is described in detail on the MSDN page I posted above.

Problem

I am in a situation where I just want to update a part of a the URL of a WCF endpoint. Right now we do this by including different configs with all the endpoints per 'variety'. This is tedious to manage. I would like to setup a transform in the web.config to do so. These are two examples of the files Dev ``` <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" /> ``` and some more of these Staging ``` <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" /> ``` The difference is the servicessta versus servicesdev. Now I also have servicesuat and a servicesqa etcera. I would like to setup a transform to just replace the 'dev' with 'sta' etc and not the entire block (using `xdt:Transform="Replace"`) But how do I do that?

Original source

Related problems