Implantando um aplicativo Web ASP.NET com SQL Server Compact usando o Visual Studio ou o Visual Web Developer: Web.Config Transformações de Arquivo – 3 de 12

por Tom Dykstra

Baixar o Projeto Inicial

Esta série de tutoriais mostra como implantar (publicar) um projeto de aplicativo Web ASP.NET que inclui um banco de dados SQL Server Compact usando o Visual Studio 2012 RC ou o Visual Studio Express RC 2012 para Web. Você também poderá usar o Visual Studio 2010 se instalar a Atualização de Publicação na Web. Para obter uma introdução à série, consulte o primeiro tutorial da série.

Para obter um tutorial que mostra os recursos de implantação introduzidos após o lançamento do RC do Visual Studio 2012, mostra como implantar SQL Server edições diferentes de SQL Server Compact e mostra como implantar no Serviço de Aplicativo do Azure Aplicativos Web, confira Implantação da Web ASP.NET usando o Visual Estúdio.

Visão geral

Este tutorial mostra como automatizar o processo de alteração do arquivo deWeb.config ao implantá-lo em diferentes ambientes de destino. A maioria dos aplicativos tem configurações no arquivo Web.config que devem ser diferentes quando o aplicativo é implantado. Automatizar o processo de fazer essas alterações impede que você precise fazê-las manualmente toda vez que implantar, o que seria entediante e propenso a erros.

Lembrete: se você receber uma mensagem de erro ou algo não funcionar durante o tutorial, marcar página de solução de problemas.

Transformações de Web.config versus parâmetros de implantação da Web

Há duas maneiras de automatizar o processo de alteração Web.configconfigurações de arquivo: transformações deWeb.config e parâmetros de Implantação da Web. Um arquivo de transformação Web.config contém marcação XML que especifica como alterar o arquivo Web.config quando ele é implantado. Você pode especificar alterações diferentes para configurações de build específicas e para perfis de publicação específicos. As configurações de build padrão são Depuração e Versão, e você pode criar configurações de build personalizadas. Um perfil de publicação normalmente corresponde a um ambiente de destino. (Você aprenderá mais sobre perfis de publicação no tutorial Implantando no IIS como um ambiente de teste .)

Os parâmetros de Implantação da Web podem ser usados para especificar muitos tipos diferentes de configurações que devem ser definidas durante a implantação, incluindo configurações encontradas em arquivosWeb.config . Quando usados para especificar Web.config alterações de arquivo, os parâmetros de Implantação da Web são mais complexos de configurar, mas são úteis quando você não sabe o valor a ser definido até a implantação. Por exemplo, em um ambiente corporativo, você pode criar um pacote de implantação e dá-lo a uma pessoa no departamento de TI para instalar em produção, e essa pessoa precisa ser capaz de inserir cadeias de conexão ou senhas que você não conhece.

Para o cenário que este tutorial aborda, você sabe tudo o que deve ser feito no arquivo Web.config , portanto, não precisa usar parâmetros de Implantação da Web. Você configurará algumas transformações que diferem dependendo da configuração de build usada e algumas que diferem dependendo do perfil de publicação usado.

Criando arquivos de transformação para perfis de publicação

Em Gerenciador de Soluções, expanda Web.config para ver os arquivos de transformação Web.Debug.config e Web.Release.config criados por padrão para as duas configurações de build padrão.

Web.config_transform_files

Você pode criar arquivos de transformação para configurações de build personalizadas clicando com o botão direito do mouse no arquivo Web.config e escolhendo Adicionar Transformações de Configuração no menu de contexto, mas para este tutorial você não precisa fazer isso.

Você precisa de mais dois arquivos de transformação, para configurar alterações relacionadas ao destino de implantação em vez da configuração de build. Um exemplo típico desse tipo de configuração é um ponto de extremidade WCF diferente para teste versus produção. Em tutoriais posteriores, você criará perfis de publicação chamados Teste e Produção, portanto, precisará de um arquivo Web.Test.config e um arquivo Web.Production.config .

Os arquivos de transformação vinculados a perfis de publicação devem ser criados manualmente. Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto ContosoUniversity e selecione Abrir Pasta no Windows Explorer.

Open_folder_in_Windows_Explorer

No Windows Explorer, selecione o arquivo Web.Release.config, copie o arquivo e cole duas cópias dele. Renomeie essas cópias Web.Production.config e Web.Test.confige feche o Windows Explorer.

Em Gerenciador de Soluções, clique em Atualizar para ver os novos arquivos.

Selecione os novos arquivos, clique com o botão direito do mouse e clique em Incluir no Projeto no menu de contexto.

Incluindo arquivos de configuração de teste e produção no projeto

Para impedir que esses arquivos sejam implantados, selecione-os em Gerenciador de Soluções e, na janela Propriedades, altere a propriedade Ação de Build de Conteúdo para Nenhum. (Os arquivos de transformação baseados em configurações de build são automaticamente impedidos de implantar.)

Agora você está pronto para inserir transformaçõesWeb.config nos arquivos de transformação Web.config .

Limitando o acesso do log de erros aos administradores

Se houver um erro durante a execução do aplicativo, o aplicativo exibirá uma página de erro genérica no lugar da página de erro gerada pelo sistema e usará o pacote NuGet Elmah para log e relatório de erros. O customErrors elemento no arquivo Web.config especifica a página de erro:

<customErrors mode="RemoteOnly" defaultRedirect="~/GenericErrorPage.aspx">
  <error statusCode="404" redirect="~/GenericErrorPage.aspx" />
</customErrors>

Para ver a página de erro, altere temporariamente o mode atributo do customErrors elemento de "RemoteOnly" para "On" e execute o aplicativo no Visual Studio. Causar um erro solicitando uma URL inválida, como Studentsxxx.aspx. Em vez de uma página de erro "página não encontrada" gerada pelo IIS, você verá a página GenericErrorPage.aspx .

Error_page

Para ver o log de erros, substitua tudo na URL após o número da porta por elmah.axd (por exemplo, na captura de tela) http://localhost:51130/elmah.axde pressione Enter:

Elmah_log_page

Não se esqueça de definir o elemento de volta para o customErrors modo "RemoteOnly" quando terminar.

No computador de desenvolvimento, é conveniente permitir o acesso gratuito à página de log de erros, mas em produção isso seria um risco à segurança. Para o site de produção, você pode adicionar uma regra de autorização que restringe o acesso ao log de erros apenas aos administradores configurando uma transformação no arquivo Web.Production.config .

Abra Web.Production.config e adicione um novo location elemento imediatamente após a marca de abertura configuration , conforme mostrado aqui. (Certifique-se de adicionar apenas o location elemento e não a marcação ao redor, que é mostrada aqui apenas para fornecer algum contexto.)

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <location path="elmah.axd" xdt:Transform="Insert">
      <system.web>
        <authorization>
          <allow roles="Administrator" />
          <deny users="*" />
        </authorization>
      </system.web>
    </location>
</configuration>

O Transform valor do atributo de "Insert" faz com que esse location elemento seja adicionado como um irmão a quaisquer elementos existentes location no arquivo Web.config . (Já existe um location elemento que especifica regras de autorização para a página Atualizar Créditos .) Ao testar o site de produção após a implantação, você testará para verificar se essa regra de autorização está em vigor.

Você não precisa restringir o acesso ao log de erros no ambiente de teste, portanto, não precisa adicionar esse código ao arquivo Web.Test.config .

Observação

Observação de segurança Nunca exiba detalhes de erro para o público em um aplicativo de produção ou armazene essas informações em um local público. Os invasores podem usar informações de erro para descobrir vulnerabilidades em um site. Se você usar o ELMAH em seu próprio aplicativo, investigue as maneiras pelas quais o ELMAH pode ser configurado para minimizar os riscos de segurança. O exemplo de ELMAH neste tutorial não deve ser considerado uma configuração recomendada. É um exemplo que foi escolhido para ilustrar como manipular uma pasta na qual o aplicativo deve ser capaz de criar arquivos.

Definindo um indicador de ambiente

Um cenário comum é ter Web.config configurações de arquivo que devem ser diferentes em cada ambiente em que você implanta. Por exemplo, um aplicativo que chama um serviço WCF pode precisar de um ponto de extremidade diferente em ambientes de teste e produção. O aplicativo da Contoso University também inclui uma configuração desse tipo. Essa configuração controla um indicador visível nas páginas de um site que informa em qual ambiente você está, como desenvolvimento, teste ou produção. O valor da configuração determina se o aplicativo acrescentará "(Dev)" ou "(Test)" ao título main na página site.mestre master:

Environment_indicator

O indicador de ambiente é omitido quando o aplicativo está em execução em produção.

As páginas da Web da Contoso University leem um valor definido em appSettings no arquivo Web.config para determinar em qual ambiente o aplicativo está sendo executado:

<appSettings>
    <add key="Environment" value="Dev" />
</appSettings>

O valor deve ser "Teste" no ambiente de teste e "Prod" no ambiente de produção.

Abra Web.Production.config e adicione um appSettings elemento imediatamente antes da marca de abertura do location elemento que você adicionou anteriormente:

<appSettings>
    <add key="Environment" value="Prod" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>

O xdt:Transform valor do atributo "SetAttributes" indica que a finalidade dessa transformação é alterar os valores de atributo de um elemento existente no arquivo Web.config . O xdt:Locator valor do atributo "Match(key)" indica que o elemento a ser modificado é aquele cujo key atributo corresponde ao key atributo especificado aqui. O único outro atributo do add elemento é value, e é isso que será alterado no arquivo Web.config implantado. Esse código faz com que o value atributo do EnvironmentappSettings elemento seja definido como "Prod" no arquivo Web.config implantado na produção.

Em seguida, aplique a mesma alteração a Web.Test.config arquivo, exceto definir como value "Teste" em vez de "Prod". Quando terminar, a appSettings seção em Web.Test.config será semelhante ao seguinte exemplo:

<appSettings>
    <add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>

Desabilitando o modo de depuração

Para um build de versão, você não deseja habilitar a depuração, independentemente do ambiente em que você está implantando. Por padrão , o arquivo de transformaçãoWeb.Release.configé criado automaticamente com o código que remove o debug atributo do compilation elemento :

<system.web>
  <compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>

O Transform atributo faz com que o debug atributo seja omitido do arquivo Web.config implantado sempre que você implantar um build de Versão.

Essa mesma transformação está nos arquivos de transformação Teste e Produção porque você os criou copiando o arquivo de transformação Versão. Você não precisa dele duplicado lá, portanto, abra cada um desses arquivos, remova o elemento de compilação e salve e feche cada arquivo.

Definindo cadeias de conexão

Na maioria dos casos, você não precisa configurar transformações de cadeia de conexão, pois pode especificar cadeias de conexão no perfil de publicação. Mas há uma exceção quando você está implantando um banco de dados SQL Server Compact e está usando Migrações do Entity Framework Code First para atualizar o banco de dados no servidor de destino. Para esse cenário, você precisa especificar uma cadeia de conexão adicional que será usada no servidor para atualizar o esquema de banco de dados. Para configurar essa transformação, adicione um <elemento connectionStrings> imediatamente após a marca de configuração> de abertura< no Web.Test.config e nos arquivos de transformação Web.Production.config:

<connectionStrings>
  <add name="SchoolContext_DatabasePublish" connectionString="Data Source=|DataDirectory|School-Prod.sdf" providerName="System.Data.SqlServerCe.4.0" xdt:Transform="Insert"/>
</connectionStrings>

O Transform atributo especifica que essa cadeia de conexão será adicionada ao elemento connectionStrings no arquivo Web.config implantado. (O processo de publicação cria essa cadeia de conexão adicional automaticamente para você se ela não existir, mas, por padrão, o atributo providerName é definido System.Data.SqlClientcomo , o que não funciona para SQL Server Compact. Ao adicionar a cadeia de conexão manualmente, você impede que o processo de implantação crie um elemento de cadeia de conexão com o nome do provedor incorreto.)

Agora você especificou todas as transformações deWeb.config necessárias para implantar o aplicativo da Contoso University para teste e produção. No tutorial a seguir, você cuidará das tarefas de configuração de implantação que exigem a configuração das propriedades do projeto.

Mais informações

Para obter mais informações sobre os tópicos abordados por este tutorial, consulte o cenário de transformação Web.config em ASP.NET Mapa de Conteúdo de Implantação.