2013-04-23 2 views
2

У меня есть xml-файл, saml.config, который содержит некоторую информацию saml. Эта информация должна быть преобразована в сборки релизов, чтобы включать в себя производственные URL-адреса вместо разработки и размещения URL-адресов. В моей среде разработки и промежуточной стадии преобразование происходит отлично, в среде выпуска преобразование не выполняется.Преобразование пользовательских конфигурационных файлов AppHarbor

Я пробовал http://webconfigtransformationtester.apphb.com/, чтобы проверить трансформации, и они не применяются, но снова VS применяет их идеально.

Файл базы saml.config:

<?xml version="1.0"?> 
<SAMLConfiguration xmlns="urn:componentspace:SAML:2.0:configuration"> 
    <ServiceProvider Name="Portal.Web" AssertionConsumerServiceUrl="http://localhost:49462/SingleSignOn/ConsumeAssertion"/> 
    <PartnerIdentityProvider Name="MTMIdentity" 
          SignAuthnRequest="false" 
          WantResponseSigned="false" 
          WantAssertionSigned="false" 
          WantAssertionEncrypted="false" 
          SingleSignOnServiceUrl="https://identity.*********.com/SingleSignOn/"/> 
</SAMLConfiguration> 

Файл преобразования:

<?xml version="1.0" encoding="utf-8" ?> 
<SAMLConfiguration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xmlns="urn:componentspace:SAML:2.0:configuration"> 
    <ServiceProvider Name="Portal.Web" AssertionConsumerServiceUrl="https://***********.com/SingleSignOn/ConsumeAssertion" xdt:Transform="SetAttributes" xdt:Locator="Match(Name)" /> 
</SAMLConfiguration> 

Результат должен заменить LOCALHOST URL в AssertionConsumerServiceUrl поставщика услуг с ******* ****. com версия, но это не

<?xml version="1.0"?> 
<SAMLConfiguration xmlns="urn:componentspace:SAML:2.0:configuration"> 
    <ServiceProvider Name="Portal.Web" AssertionConsumerServiceUrl="http://localhost:49462/SingleSignOn/ConsumeAssertion" /> 
    <PartnerIdentityProvider Name="MTMIdentity" SignAuthnRequest="false" WantResponseSigned="false" WantAssertionSigned="false" WantAssertionEncrypted="false" SingleSignOnServiceUrl="https://identity.********.com/SingleSignOn/" /> 
</SAMLConfiguration> 

Почему не используется тестер преобразования преобразование?

EDIT:

Я хотел бы добавить, что я использую Аддин/NuGet пакет SlowCheetah для обработки преобразования локально, так и в нашей промежуточной среды.

Учитывая документацию (http://support.appharbor.com/kb/getting-started/managing-environments) утверждает

преобразование файла конфигурации поддерживается на всех .config файлов, имеющих соответствующий файл .release.config.

Я предполагаю, что AppHarbor может сделать это без SlowCheetah. Но опять же, инструмент WebConfigTransformTester не применяет это преобразование.

Итак, вопрос в том, как я могу применить это преобразование? Могу ли я использовать SlowCheetah в AppHarbor?

РЕДАКТИРОВАТЬ:

При дальнейшем исследовании, представляется, что AppHarbor НЕ применения преобразования к Web.Config, а также.

Мои Configs:

enter image description here

AppSettings в Интернете.Config

<appSettings> 
    <add key="webpages:Version" value="2.0.0.0" /> 
    <add key="webpages:Enabled" value="false" /> 
    <add key="aspnet:UseHostHeaderForRequestUrl" value="true" /> 
    <add key="PreserveLoginUrl" value="true" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    <add key="Environment" value="Development" /> 
</appSettings> 

Уведомление окружающей среды устанавливается в "Развитие"

Преобразование релиз:

<?xml version="1.0"?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <appSettings> 
     <add key="Environment" value="Release" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" /> 
    </appSettings> 
    <system.web> 
     <compilation xdt:Transform="RemoveAttributes(debug)" /> 
     <customErrors defaultRedirect="GenericError.htm" mode="Off" xdt:Transform="Replace"> 
      <error statusCode="500" redirect="InternalError.htm"/> 
     </customErrors> 
    </system.web> 
</configuration> 

Обратите внимание, окружающая среда заменяется на "Release"

В AppHarbor среды:

enter image description here

После развертывания в AppHarbor я загрузил сборку и проверил Web.Config, и у нее все еще есть параметр «Окружающая среда» в разделе «Разработка».

EDIT:

Я добавил действия к одному из моих контроллеров, считывающих Environment AppSetting и выходы к представлению, и к моему удивлению, это был «Release» !!!

Так что же дает? Содержимое «Загрузка сборки» не имеет трансформации на месте, но когда происходит запрос, он делает? Когда приложение AppHarbor применяет преобразование? Это во время выполнения, а не во время сборки?

EDIT:

Слышал назад от ребят AppHarbor и преобразование происходит на фактическое публикацию, так что даже если сборка имеет «Опубликованные сайты» папку, это еще не окончательный вывод из опубликовать действия.

Спасибо, Джо

ответ

2

Мы только что внедрили решение (используя новейшие сборки трансформации, как вы указали) для этой проблемы и обновили соответственно http://webconfigtransformationtester.apphb.com/. Теперь ваши преобразования должны применяться, как ожидалось.

Благодарим вас за подробное исследование этой проблемы.

0

Приходите, чтобы узнать, ответ на мой первоначальный вопрос, способ преобразования не происходит, потому, что XMLNS атрибут в корневом узле конфигурационного файла.

К сожалению, http://webconfigtransformationtester.apphb.com/ не дает вам никакой информации о том, почему преобразование не состоялось, но если вы просмотрите код, вы увидите, что есть доступный журнал, но он установлен в null ,

Я закончил тем, что вытащил код и добавил регистратор и нашел предупреждение «Ни один элемент в исходном документе не соответствует»/SAMLConfiguration ». Копая немного дальше, я нашел это сообщение Why does this web.config transform say it can't find the applicationSettings element?, что в ответе Сайэда он утверждает, что более старые задачи преобразования MSBuild не соблюдают атрибут xmlns.

Извлечение атрибута xmlns из файла конфигурации и файла преобразования должно решить проблему.

Однако в моем случае атрибут xmlns требуется и не может быть удален.

Так, до тех пор, пока AppHarbor не обновит свои сборки трансформации, чтобы использовать сборки MSBuild v11.0, я довольно сильно застрял.