2012-03-15 58 views
6

今天發生了一些事情,讓我想到了這一點。我們有一個項目,它爲我們的各種配置提供了一個非常標準的web.config變換設置。這裏是控制我們的DAO接入服務部分,看起來像這樣:當變換值不存在時發生web.config變形失敗

<endpoint address="http://myserver/myservice1.svc/basicHttp" 
binding="basicHttpBinding" contract="MyAssembly.IItem" name="DataAccessEndPoint" 
kind="" endpointConfiguration="" /> 
<endpoint address="http://myserver/myservice2.svc/basicHttp" 
binding="basicHttpBinding" contract="MyAssembly.IItem2" name="LoggingEndPoint" 
kind="" endpointConfiguration="" /> 

以及變換是這樣的:

<endpoint address="http://mytestserver/myservice1.svc" name="DaoEndPoint" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" /> 
<endpoint address="http://mytestserver/myservice2.svc" name="LoggingEndPoint" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" /> 

希望你會發現這裏的錯誤 - 對DaoEndPoint名稱不匹配。不幸的是,創建它的開發者沒有,並且也在本地對現場服務進行了調試,這導致了測試部署到,指向。我們很幸運地把它撿起來很快,但我相信你可以看到這裏極端痛苦的可能性!

我在創建轉換文件的時候考慮過你的意圖,在我看來,如果你把你想要轉換的變換。因此,如果在主.config文件中存在DaoEndPoint轉換但沒有匹配的DaoEndPoint項,則轉換(因此部署)失敗將會很好。

因此,我對人們的觀點進行了一些調整,這是否會有用?這是純粹的矯枉過正?我完全錯過了這一點嗎?

此外,有沒有什麼這樣做?我很高興挖掘和開發一個解決方案,但如果有人爲我做了修改,我會更高興;)

+0

不知道會引起異常的任何事情,儘管可能有用。可能只想在主web.config中留下空白值,如果它沒有被轉換,你很快就會在應用程序中出錯。沒有幫助,但可以防止任何意外的PROD訪問。 – dbugger 2012-03-15 23:04:25

+0

這樣做的問題是,如果不添加值,則無法在本地進行調試,這會使我們回到原始問題,當開發人員忘記再次取出該值時... – 2012-03-28 09:12:48

回答

1

請參閱Sayed Ibrahim Hashimi對this question的很好的回答,其中涉及創建一個自定義類,它繼承自Microsoft.Web.Publishing.Tasks.Transform。您可以使用相同的技術,但是繼承Locator類,然後在無法匹配目標節點時拋出異常。

我自己實際測試過這一點,並能在發佈期間拋出異常。但是,我的自定義定位器類(MyMatch)除了拋出異常外,實際上並沒有做任何事情。覆蓋方法來模擬Match類(您不能從中繼承),然後找出合適的位置對失敗進行最終檢查,這可能是相當不錯的工作。

無論如何,我絕對認爲至少有一個選擇是可以設置發佈失敗的選項,或者當您的轉換沒​​有效果時給出警告。

+0

布里爾,這只是一種我正在尋找的東西,我會嘗試並在未來幾周內將它們放在一起併發布到github上。 (對於遲到的答覆,順便說一句,沒有互聯網的休假!) – 2012-03-28 09:14:13

相關問題