web-dev-qa-db-ja.com

部分置換を行うためのXDT変換を含むWeb.config

WCFエンドポイントのURLの一部を更新したいだけの状況です。現在、これを行うには、「種類」ごとのすべてのエンドポイントに異なる構成を含めます。これは管理が面倒です。そうするために、web.configで変換をセットアップしたいと思います。

これらはファイルの2つの例です

開発

  <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です。現在、servicesatとservicesqa etceraもあります。ブロック全体ではなく、「dev」を「sta」などに置き換えるように変換を設定したい(xdt:Transform="Replace"を使用)

しかし、どうすればよいですか?

23
ranieuwe

上記の最初のコード(開発環境の場合)は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 [〜#〜] を参照してください。

UPDATE:

xdt:Transform="Replace"を使用すると、<endpoint />要素全体が置き換えられます。 <endpoint />要素のaddress属性を選択的に置き換えるには、次の変換を使用します。

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

<endpoint />要素が複数ある場合は、Locator属性も使用する必要があることに注意してください。)

私が言ったことは、先に投稿したMSDNページで詳しく説明されています。

39
nomad