20

Jestem w sytuacji, w której chcę zaktualizować część adresu URL punktu końcowego WCF. Teraz robimy to, włączając różne konfiguracje ze wszystkimi punktami końcowymi na "odmianę". To jest żmudne do zarządzania. Chciałbym skonfigurować transformację w pliku web.config, aby to zrobić.Web.config z transformacją XDT do częściowej zamiany

Te dwa przykłady plików

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

i kilka z nich

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

Różnica polega na t on servicessta versus servicesdev. Teraz mam również serviceuat i serviceqa etcera. Chciałbym konfiguracji transformacji po prostu zastąpić „dev” z „sta” etc, a nie cały blok (używając xdt:Transform="Replace")

Ale jak mam to zrobić?

+0

Ciekawe, co zyskujesz, zastępując podłańcuch adresu URL zamiast całego atrybutu? –

+0

Mam jeszcze kilka takich bloków, restService, mydło itp. To, co mógłbym zyskać, to to, że muszę zaktualizować tylko jeden plik, aby zastąpić adres usługi zamiast wszystkich innych plików. Mamy 5 środowisk, więc zamienniki ułatwiają zarządzanie. – ranieuwe

+2

Myślę, że źle zrozumiałem twój post. Pomyślałem, że chcesz uruchomić jakiś podciąg na atrybucie, kiedy naprawdę chcesz zmienić tylko atrybut (przynajmniej to, co otrzymuję z odpowiedzi, którą oznaczyłeś jako poprawną). –

Odpowiedz

37

Pierwszy fragment kodu powyżej (dla środowiska programisty) może przejść do Web.config (lub Web.debug.config, ale trzeba również dodać transformację xdt). W swoim Web.release.config (ten przejdzie do środowiska pomostowego) zdefiniuj następujący 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" /> 

Zauważ, że dodałem XDT: Transform = "Zastąp" w pliku konfiguracyjnym release. Po wprowadzeniu tego atrybutu ustawienia zdefiniowane w elemencie endpoint zastąpią ustawienia w pliku bazy Web.config.

Aby uzyskać więcej informacji, zobacz MSDN.

UPDATE:

Używanie xdt:Transform="Replace" zastąpi całą <endpoint /> element. Aby selektywnie zastąpić atrybut address elementu <endpoint />, użyj następującego przekształcenia.

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

(Zauważ, że jeśli istnieje kilka <endpoint /> elementy możesz użyć Locator atrybutów, jak również.)

co powiedziałem jest szczegółowo opisana na stronie MSDN napisałem powyżej.

+2

Jestem zaznajomiony z jak zrobić zamianę na węźle (z xdt: Transform = "Zamień"). Chcę tylko zastąpić część struny, więc nie mam tej redefinicji wszędzie. – ranieuwe

+0

Zaktualizowałem moją odpowiedź. – erdinger

+0

Dziękuję za to! – ranieuwe

Powiązane problemy