Сбой преобразования web.config, если для преобразования не существует значения - PullRequest
6 голосов
/ 15 марта 2012

Сегодня произошел инцидент, который заставил меня задуматься.У нас есть проект с довольно стандартной настройкой преобразования web.config для наших различных конфигураций.Есть раздел, который контролирует доступ к нашим службам DAO, который выглядит следующим образом:

<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 не совпадает.К сожалению, разработчик, который его создал, этого не сделал, а также проводил локальную отладку с работающими сервисами, что привело к тестовому развертыванию, yup, , указывающему на live .Мы, к счастью, подобрали его довольно быстро, но я уверен, что здесь вы можете увидеть потенциальную крайнюю боль!

Я задумался о вашем намерении при создании файлов трансформации, и мне кажется, что если вы добавитепреобразовать, что вы собираетесь преобразовать что-то .Поэтому было бы неплохо, если бы преобразование (и, следовательно, развертывание) завершилось неудачно, если было преобразование DaoEndPoint, но не было соответствующего элемента DaoEndPoint в главном файле .config.

Так что я вроде как собираю мнения людей,это то, что было бы полезно?Это просто перебор?Я полностью упускаю суть?

Кроме того, есть что-нибудь, что делает это?Я рад найти решение и разработать решение, но я был бы счастлив, если бы кто-то сделал работу для меня;)

1 Ответ

1 голос
/ 16 марта 2012

См. Отличный ответ Саида Ибрагима Хашими на на этот вопрос , который включает создание пользовательского класса, который наследуется от Microsoft.Web.Publishing.Tasks.Transform.Вы можете использовать ту же технику, но наследовать от класса Locator, а затем выдать исключение, если вы не можете найти целевой узел.

Я сам проверил это и смог выдать исключение во время публикации.Однако мой класс локатора (MyMatch) на самом деле ничего не делал, кроме как сгенерировать исключение.Возможно, было бы неплохо переопределить методы, чтобы имитировать класс Match (от которого вы не можете унаследовать), а затем найти подходящее место для окончательной проверки соответствия.

В любом случае, я определенно думаю, что было бы полезно, по крайней мере, иметь параметр, который вы могли бы установить, где публикация не удалась, или дать вам предупреждение, когда ваше преобразование не дало результата.

...