Certificação Microsoft 70-487: Objetivo 5.3 – Configure a web application for deployment

Olá pessoal!
Vamos ao objetivo 5.3, Configure a web application for deployment. Esse objetivo cobre como trocar de release para debug, transformar web.config com XSLT, usar SetParameters e configurar o Windows Azure.

Mudando De Release Para Debug

Ao fazer o build de um projeto, você usa uma build configuration. Duas configurações existem por padrão: release e debug.

Em release, o código é otimizado para rodar o mais rápido possível, o que você com certeza deseja no ambiente de produção.

O modo debug é o ideal para o ambiente de desenvolvimento, pois instruções extra são adicionadas no código compilado, permitindo que ela seja debugado.

Além da build configuration, há uma configuração no web.config que diz respeito a compilação. Mudando o valor do atributo debug para false, você desliga o modo de debug:

<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5" />
</system.web>
</configuration>

No Visual Studio, você tem a opção de escolher quais debuggers utilizar no modo debug:

debuggers

Transformando O Web.Config Com XSLT

No seu arquivo web.config, você guarda vários tipos de configurações como connection strings, app settings customizadas, etc. Esses valores dependem do ambiente que a aplicação está rodando. Você não pode fazer o deploy de uma aplicação com a connection string do seu banco local, por exemplo. Fazer as alterações manualmente, além de levar tempo, é suscetível a erros.

Aí entra o web.config transformation syntax. Com ele você define um XML que descreve as mudanças a serem feitas no web.config ao mudar de debug para release.

Ao criar uma aplicação ASP.NET MVC, os arquivos de transformação são criados automaticamente:

web.config

As transformações trabalham com a sintaxe do XML-Document-Transform. Segue um exemplo de arquivo de transformação que muda a connection string e configura o customErrors:

Você começa especificando o namespace para o arquivo de transformação. Depois, com os atributos xdt:Transform e xdt:Locator, você configura como os elementos devem ser encontrados e o que acontece quando isso acontecer. Nesse exemplo, apenas mudamos a connection string, mas o elemento customErrors é completamente substituído.

Para o atributo Locator, você pode usar os valores Match, XPath e Condition. A explicação detalhada do funcionamento deles pode ser vista aqui. Para o atributo Transform, os possíveis valores são: Insert, InsertBefore, InsertAfter, Remove, RemoveAll, RemoveAttributes e SetAttributes.

Usando SetParameters Para Preparar Um IIS App Pool

A web.config transformation é feita em tempo de compilação. Isso é bom quando você sabe em quais ambientes a aplicação será publicada.

Com Web Deploy, porém, você tem outra opção: parametrização. Com ela você pode parametrizar valores em tempo de instalação, facilitando a distribuição de um pacote para vários lugares.

Um pacote Web Deploy cria alguns arquivos para você, como o {nome do projeto}.zip, que é o pacote Web Deploy, e o {nome do projeto}.deploy.cmd, que permite que você faça o deploy da linha de comando. Há também o arquivo {nome do projeto}.SetParameters.xml, que tem uma série de valores que o MSDeploy.exe usa para fazer o deploy da aplicação. Esse arquivo é gerado dinamicamente, obtendo todas as configurações do seu projeto, como as connection strings do web.config.

A parametrização é feita quando você adiciona um arquivo Parameters.xml para o pacote Web Deploy. Nesse arquivo, você indica o arquivo que quer modificar, quais variáveis serão alteradas e um valor padrão para elas. Na instalação do pacote via IIS Manager, esses valores serão pedidos para o usuário digitar.

Segue um exemplo de uma seção de um web.config abaixo de system.ServiceModel:

O seguinte Parameters.xml pode ser usado:

Segue a explicação de alguns atributos importantes:

  • name: o nome que é mostrado no IIS Manager;
  • description: a descrição que é mostrada no IIS Manager;
  • defaultValue: o valor que é pré-carregado no input;
  • scope: uma expressão regular que mostra os arquivos que o parâmetro se aplica;
  • kind: especifica o tipo do recurso na qual o parâmetro será aplicado (XmlFile ou TextFile);
  • match: no caso de XmlFile, um XPath que seleciona o elemento que será alterado.

Caso você esteja fazendo o deploy pela linha de comando, você pode usar as opções declareParamFile and setParamFile para especificar os arquivos Parameters.xml e SetParameters.xml:

msdeploy.exe -verb:sync -source:apphostconfig="default web site/application"
-dest:archivedir="C:\packages\application" -declareParamFile="C:\source\application\
deployment\declareParamsFile.xml"

msdeploy.exe -verb:sync -dest:apphostconfig="default web site/application"
-source:archivedir="C:\packages\application" -setParamFile="C:\source\application\
deployment\setParamsFile.xml"

Por último, caso você não queira alterar o arquivo SetParameters.xml na mão em um processo de build por exemplo, existe uma task do MSBuild chamada XmlPoke que pode automatizar isso.

Para o exame, lembre-se do seguinte: web.config transformation é feita em tempo de compilação, enquanto parametrização em tempo de instalação.

Configurando O Windows Azure

Um projeto Cloud tem dois arquivos de configuração: ServiceConfiguration.Cloud.cscfg e ServiceConfiguration.Local.cscfg. O arquivo Local tem valores para o Windows Azure Emulator, enquando o Cloud tem os valores que serão usados no deploy para o Azure.

Nesses arquivos você pode configurar o número de instâncias para cada role, quaisquer app settings customizadas, thumbprints para certificados, VPNs no caso de máquinas virtuais (VM), etc.

Ao criar um projeto Cloud com uma web role e uma worker role, o seguinte arquivo de configuração é criado:

O elemento Role, além de especificar o nome da sua role, pode também ter o atributo vmName para ser usado como o nome o DNS para sua VM.

Dentro do elemento Role há o elemento Instances que indica o número de instâncias da role e o elemento ConfigurationSettings, que é uma coleção chave valor.

Outros elementos que podem ser adicionados são o Certificates e o OsImage:

Depois do elemento Roles, você pode especificar o elemento NetworkConfiguration. Essa seção descreve os valores de DNS e VPN. Um exemplo de configuração:


Chegamos ao final desse objetivo :) Faltam apenas 3!

Obrigado pela leitura e fique de olho no próximo post, que será sobre o objetivo Manage packages by using NuGet.

Até mais!