20

Ich bin in einer Situation, in der ich nur einen Teil der URL eines WCF-Endpunkts aktualisieren möchte. Im Moment tun wir dies, indem wir verschiedene Konfigurationen mit allen Endpunkten pro 'Sorte' einfügen. Dies ist mühsam zu verwalten. Ich möchte dazu in der web.config eine Transformation einrichten.Web.config mit XDT-Transformation zum teilweisen Ersetzen

Dies sind zwei Beispiele für die Dateien

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

und einige mehr dieser

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

Der Unterschied ist, t er servicessta versus servicesdev. Jetzt habe ich auch servicesuat und ein servicesqa etcera. Ich würde die Einrichtung wie eine Transformation nur die ‚dev‘ mit ‚sta‘ ersetzen usw. und nicht der gesamte Block (mit xdt:Transform="Replace")

Aber wie kann ich das tun?

+0

Nur neugierig, was Sie gewinnen, indem Sie eine Teilzeichenfolge der URL anstelle des gesamten Attributs ersetzen? –

+0

Ich habe ein paar mehr Blöcke wie das, restService, die Seife eins usw. Was ich gewinnen würde, ist, dass ich nur eine Datei aktualisieren muss, um die Dienstadresse anstelle aller anderen Dateien zu ersetzen. Wir haben 5 Umgebungen, daher erleichtern die Ersetzungen die Verwaltung. – ranieuwe

+2

Ich glaube ich habe deinen Beitrag missverstanden. Ich dachte, Sie wollten eine Art Teilstring auf dem Attribut ausführen, wenn Sie wirklich nur das Attribut ändern wollten (zumindest das, was ich aus der Antwort erhalte, die Sie als richtig markiert haben). –

Antwort

37

Der erste Code oben (für Entwicklungsumgebung) kann zu Web.config gehen (oder Web.debug.config, aber muss auch xdt transformieren). In Ihrem Web.release.config (dieser wird zur Staging-Umgebung gehen) definieren Sie das folgende 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" /> 

Bitte beachte, dass ich xdt hinzugefügt: Transform = "Ersetzen" in der Release-Konfigurationsdatei. Wenn dieses Attribut vorhanden ist, werden die im Element endpoint definierten Einstellungen die in Ihrer Basisdatei Web.config definierten Einstellungen ersetzen. Für weitere Informationen siehe MSDN.

UPDATE:

Mit der xdt:Transform="Replace" das gesamte <endpoint /> Element ersetzen würde. Um das address Attribut des Elements <endpoint /> selektiv zu ersetzen, verwenden Sie die folgende Transformation.

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

(Beachten Sie, dass, wenn es mehrere <endpoint /> Elemente sind Sie den Locator verwenden möchten auch zuschreiben.)

Was auf der MSDN-Seite ausführlich beschrieben wird gesagt ich oben geschrieben.

+2

Ich bin vertraut mit einem Ersetzen auf einem Knoten (mit xdt: Transform = "Replace"). Ich möchte nur einen Teil der Zeichenfolge ersetzen, sodass ich diese Neudefinition nicht überall habe. – ranieuwe

+0

Ich aktualisierte meine Antwort. – erdinger

+0

Vielen Dank dafür! – ranieuwe

Verwandte Themen