20

Sono in una situazione in cui voglio solo aggiornare una parte dell'URL di un endpoint WCF. In questo momento lo facciamo includendo diverse configurazioni con tutti gli endpoint per "varietà". Questo è noioso da gestire. Mi piacerebbe impostare una trasformazione in web.config per farlo.Web.config con trasformazione XDT per sostituire parziale

Questi sono due esempi di file

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

e alcuni più di questi

messa in scena

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

La differenza è t lui servicessta contro servicesdev. Ora ho anche servizi e servizi, ecc. Vorrei configurare una trasformazione di sostituire solo la 'dev' con 'sta' etc e non l'intero blocco (utilizzando xdt:Transform="Replace")

Ma come posso fare?

+0

Solo curioso cosa guadagni sostituendo una sottostringa dell'URL invece dell'intero attributo? –

+0

Ho ancora alcuni blocchi come quello, restService, quello soap ecc. Ciò che vorrei ottenere è che devo aggiornare solo un file per sostituire l'indirizzo del servizio invece di tutti gli altri file. Abbiamo 5 ambienti, quindi le sostituzioni semplificano la gestione. – ranieuwe

+2

Penso di aver frainteso il tuo post. Ho pensato che volessi eseguire una sorta di sottostringa sull'attributo quando volevi davvero solo modificare l'attributo (almeno questo è quello che sto ottenendo dalla risposta che hai contrassegnato come corretta). –

risposta

37

Il primo pezzo di codice sopra (per l'ambiente di sviluppo) può andare a Web.config (o Web.debug.config ma è necessario aggiungere anche la trasformazione xdt). Nel tuo Web.release.config (questo andrà all'ambiente di staging) definisci il seguente elemento.

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

Nota che ho aggiunto xdt: Transform = "Sostituisci" nel file di configurazione di rilascio. Con questo attributo presente le impostazioni definite all'interno dell'elemento endpoint sostituiranno quelle del file Web.config di base.

Per ulteriori informazioni, vedere MSDN.

UPDATE:

Uso del xdt:Transform="Replace" dovrebbe sostituire l'intero elemento <endpoint />. Per sostituire selettivamente l'attributo address dell'elemento <endpoint />, utilizzare la seguente trasformazione.

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

(Si noti che se ci sono diversi elementi <endpoint /> si potrebbe desiderare di utilizzare il Locator attribuire pure.)

Quello che ho detto è descritto in dettaglio nella pagina di MSDN ho postato sopra.

+2

Ho familiarità con come eseguire una sostituzione su un nodo (con xdt: Transform = "Sostituisci"). Voglio solo sostituire una parte della stringa in modo da non avere quella ridefinizione ovunque. – ranieuwe

+0

Ho aggiornato la mia risposta. – erdinger

+0

Grazie per quello! – ranieuwe