Implantando um aplicativo Web ASP.NET com o SQL Server Compact usando o Visual Studio ou o Visual Web Developer: Transformações de arquivo Web.Config – 3 de 12
por Tom Dykstra
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 2012 RC para Web. Você também pode 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 a versão RC do Visual Studio 2012, mostra como implantar edições do SQL Server diferentes do SQL Server Compact e mostra como implantar nos Aplicativos Web do Serviço de Aplicativo do Azure, consulte ASP.NET Implantação da Web usando o Visual Studio.
Visão geral
Este tutorial mostra como automatizar o processo de alteração do arquivo Web.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 evita que você tenha que fazê-las manualmente toda vez que implantar, o que seria tedioso e propenso a erros.
Lembrete: Se você receber uma mensagem de erro ou algo não funcionar durante o tutorial, verifique a página de solução de problemas.
Transformações Web.config versus parâmetros de implantação da Web
Há duas maneiras de automatizar o processo de alteração das configurações do arquivo Web.config : transformações Web.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 compilação específicas e para perfis de publicação específicos. As configurações de compilação padrão são Depuração e Versão, e você pode criar configurações de compilação personalizadas. Um perfil de publicação normalmente corresponde a um ambiente de destino. Saiba mais sobre a publicação de perfis na 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 arquivos Web.config . Quando usados para especificar alterações de arquivo Web.config , 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é implantar. Por exemplo, em um ambiente corporativo, você pode criar um pacote de implantação e entregá-lo a uma pessoa do 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 abordado neste tutorial, você sabe tudo o que precisa 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
No 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.
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 as alterações relacionadas ao destino da implantação, e não à configuração de compilação. Um exemplo típico desse tipo de configuração é um ponto de extremidade WCF diferente para teste e produção. Em tutoriais posteriores, você criará perfis de publicação chamados Teste e Produção, portanto, você precisa 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. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto ContosoUniversity e selecione Abrir Pasta no Windows Explorer.
No Windows Explorer, selecione o arquivo Web.Release.config , copie-o e cole duas cópias dele. Renomeie essas cópias Web.Production.config e Web.Test.config e feche o Windows Explorer.
No 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.
Para impedir que esses arquivos sejam implantados, selecione-os no 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 compilação são automaticamente impedidos de serem implantados.)
Agora você está pronto para inserir transformações Web.config nos arquivos de transformação Web.config .
Limitando o acesso ao 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 Elmah NuGet 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
customErrors
atributo do elemento de "RemoteOnly" para "On" e execute o aplicativo no Visual Studio. Cause um erro solicitando um URL inválido, 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 .
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.axd
) e pressione Enter:
Não se esqueça de definir o elemento de volta para o customErrors
modo "RemoteOnly" quando terminar.
Em seu computador de desenvolvimento, é conveniente permitir acesso gratuito à página de log de erros, mas na produção isso seria um risco de 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 "Insert" faz com que esse location
elemento seja adicionado como um irmão a qualquer elemento existente 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 é efetiva.
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, certifique-se de investigar maneiras pelas quais o ELMAH pode ser configurado para minimizar os riscos de segurança. O exemplo ELMAH neste tutorial não deve ser considerado uma configuração recomendada. É um exemplo que foi escolhido para ilustrar como lidar com uma pasta na qual o aplicativo deve ser capaz de criar arquivos.
Configurando um indicador de ambiente
Um cenário comum é ter configurações de arquivo Web.config 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 de configuração determina se o aplicativo acrescentará "(Dev)" ou "(Test)" ao título principal na página mestra Site.Master:
O indicador de ambiente é omitido quando o aplicativo está em execução na produção.
As páginas da Web da Contoso University leem um valor definido no appSettings
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 adicionado anteriormente:
<appSettings>
<add key="Environment" value="Prod" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
O xdt:Transform
valor de 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
Environment
appSettings
atributo do elemento seja definido como "Prod" no arquivo Web.config implantado na produção.
Em seguida, aplique a mesma alteração ao arquivo Web.Test.config , exceto definir como value
"Test" em vez de "Prod". Quando terminar, a appSettings
seção em Web.Test.config será semelhante ao exemplo a seguir:
<appSettings>
<add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
Desativando o modo de depuração
Para uma compilação de versão, você não deseja que a depuração seja habilitada, independentemente do ambiente em que está implantando. Por padrão, o arquivo de transformação Web.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á em arquivos de transformação de Teste e Produção porque você os criou copiando o arquivo de transformação de Versão. Você não precisa duplicá-lo lá, então 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< nos arquivos de transformação Web.Test.config e 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 como System.Data.SqlClient
, o que não funciona para o 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 de provedor errado.)
Agora você especificou todas as transformações Web.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 de propriedades do projeto.
Mais informações
Para obter mais informações sobre os tópicos abordados neste tutorial, consulte o cenário de transformação Web.config em ASP.NET Mapa de Conteúdo de Implantação.