20

Tôi đang ở trong tình huống mà tôi chỉ muốn cập nhật một phần của URL của điểm cuối WCF. Ngay bây giờ chúng tôi làm điều này bằng cách bao gồm các cấu hình khác nhau với tất cả các điểm cuối cho mỗi 'đa dạng'. Điều này là tẻ nhạt để quản lý. Tôi muốn thiết lập một biến đổi trong web.config để làm như vậy.Web.config với biến đổi XDT để thực hiện thay thế một phần

Đây là hai ví dụ về các tập tin

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

và một số chi tiết của những

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

Sự khác biệt là t ông servicessta so với servicesdev. Bây giờ tôi cũng có servicesuat và một serviceqa etcera. Tôi muốn thiết lập một biến đổi chỉ thay thế 'dev' với 'sta' vv và không phải là toàn bộ khối (sử dụng xdt:Transform="Replace")

Nhưng làm thế nào để làm điều đó?

+0

Chỉ cần tò mò bạn có được gì bằng cách thay thế chuỗi con của url thay vì toàn bộ thuộc tính? –

+0

Tôi có một vài khối khác như vậy, restService, xà phòng một vv Những gì tôi sẽ đạt được là tôi cần phải cập nhật chỉ là một tập tin để thay thế địa chỉ dịch vụ thay vì tất cả các tập tin khác. Chúng tôi có 5 môi trường, vì vậy các thay thế giúp việc quản lý dễ dàng hơn. – ranieuwe

+2

Tôi nghĩ tôi đã hiểu nhầm bài đăng của bạn. Tôi nghĩ rằng bạn muốn chạy một số loại chuỗi con trên thuộc tính khi bạn thực sự chỉ muốn thay đổi chỉ thuộc tính (ít nhất đó là những gì tôi nhận được từ câu trả lời bạn đánh dấu là chính xác). –

Trả lời

37

Đoạn mã đầu tiên ở trên (đối với môi trường dev) có thể đi đến Web.config (hoặc Web.debug.config nhưng phải thêm xdt cũng biến đổi). Trong Web.release.config của bạn (điều này sẽ đi đến môi trường dàn dựng) xác định phần tử sau.

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

Lưu ý rằng tôi đã thêm xdt: Biến đổi = "Thay thế" trong file phát hành config. Với thuộc tính này, các cài đặt được xác định trong phần tử endpoint sẽ thay thế các cài đặt đó trong tệp Web.config cơ sở của bạn.

Để biết thêm thông tin, hãy xem MSDN.

UPDATE:

Sử dụng xdt:Transform="Replace" sẽ thay thế toàn bộ phần tử <endpoint />. Để thay thế có chọn lọc thuộc tính address của phần tử <endpoint />, hãy sử dụng biến đổi sau.

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

(Lưu ý rằng nếu có một số <endpoint /> yếu tố mà bạn có thể muốn sử dụng Locator thuộc tính là tốt.)

Những gì tôi nói là mô tả chi tiết trên trang MSDN tôi đã đăng ở trên.

+2

Tôi quen với cách thay thế trên một nút (với xdt: Transform = "Replace"). Tôi chỉ muốn thay thế một phần của chuỗi vì vậy tôi không có định nghĩa lại ở mọi nơi. – ranieuwe

+0

Tôi đã cập nhật câu trả lời của mình. – erdinger

+0

Cảm ơn bạn vì điều đó! – ranieuwe

Các vấn đề liên quan