Buscar

Programando ASP NET 3 5 - Acesso a dados e recursos Avançados - Módulo 02

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 73 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 73 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 73 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

Curso Programando ASP.NET 
3.5: Acesso a Dados e 
Recursos Avançados 
 
 
 
 
 
MÓDULO II 
 
 
 
 
Atenção: O material deste módulo está disponível apenas como parâmetro de estudos para 
este Programa de Educação Continuada. É proibida qualquer forma de comercialização do 
mesmo. Os créditos do conteúdo aqui contido são dados aos seus respectivos autores 
descritos na Bibliografia Consultada. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
MÓDULO II 
 
Caching 
 
Aplicações Web que exigem alta escalabilidade tem de ser pensadas sob o ponto 
de vista de desempenho desde a sua concepção. Caching é um recurso importante no 
desenvolvimento de aplicações de alto desempenho. Nós, que trabalhamos com TI, 
sabemos que recuperar informações da memória é uma operação muito mais rápida do 
que a leitura em disco, mesmo que esta leitura seja oriunda de um super banco de dados 
altamente otimizado. Agora imagine e seguinte situação: uma loja virtual coloca um 
produto em promoção, o que pode causar dezenas de milhares de acessos por minuto à 
página do produto. Normalmente, a cada requisição, ou seja, a cada vez que um usuário 
solicitar a página, o ASP.NET vai executar uma consulta ao banco de dados, processar e 
renderizar a página e submetê-la ao navegador que efetuou a requisição. Este processo 
passa então a ser executado dezenas de milhares de vezes por minuto. Não seria mais 
inteligente colocar isso tudo na memória, para que a cada requisição o ASP.NET 
entregasse ao navegador esta versão? 
Felizmente isto é possível. O recurso de caching permite o instanciamento de 
objetos em memória. Funciona mais ou menos assim: o objeto é colocado em memória, 
podendo ser determinado o tempo de expiração. Quando o tempo expira, o objeto é 
retirado da memória. Na próxima vez que o objeto for solicitado ao cache, verifica-se a 
existência do objeto em memória, existindo, ele simplesmente é utilizado, caso contrário, 
é efetuada uma nova alocação. 
Podemos utilizar caching diretamente em uma Web Form ou em um User Control, 
ou de forma declarativa, onde armazenamos e recuperamos objetos do cache de acordo 
com nossa necessidade. Não podemos utilizar caching em Master Pages. Programar 
caching manualmente é bastante simples, e se assemelha ao uso de variáveis de sessão 
e aplicação que estudamos no primeiro curso. A maneira mais simples e eficiente de 
entender o mecanismo de caching é utilizando uma variável de data e hora, já que a 
informação, quando armazenada, se torna estática. Para executar o exemplo abaixo crie 
 
 
 
 
 
48 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
um Web Form e adicione um controle Label, depois digite o código abaixo no evento 
OnLoad da página. O código verifica se o cache está nulo, e neste caso armazena um 
valor. Ao final do bloco, o valor do cache é exibido em um controle label. Execute a 
página, atualizando a mesma diversas vezes. Note que o valor de data e hora não é mais 
atualizado, pois na primeira execução da página o valor foi adicionado ao cachê. Nas 
demais execuções, a rotina simplesmente lê o valor armazenado e exibe no controle 
label: 
 
 
Protected Sub Page_Load(ByVal sender As Object, ByVal e As 
System.EventArgs) Handles Me.Load 
If Cache("hora") Is Nothing Then 
 Cache("hora") = DateTime.Now 
End If 
 
 Label1.Text = Cache("hora") 
End Sub 
 
 
protected void Page_Load(object sender, EventArgs e) 
{ 
 if (Cache["hora"] == null) 
 { 
 Cache["hora"] = DateTime.Now; 
 } 
 
 Label1.Text = Convert.ToString( Cache["hora"]); 
} 
 
 
Para atualizar o valor em cache, basta ler o novo valor da variável. Para deslocar 
a variável basta chamar o método remove. No exemplo abaixo um botão desloca o 
caching. Isto significa que na próxima execução do evento OnLoad da página a data será 
atualizada: 
 
Protected Sub Button1_Click(ByVal sender As Object, ByVal 
e As System.EventArgs) Handles Button1.Click 
 Cache.Remove("hora") 
End Sub 
 
 
protected void Button1_Click(object sender, EventArgs e) 
{ 
 Cache.Remove("hora"); 
} 
 
 
 
 
 
49 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
Podemos utilizar o cache também através do método insert. No exemplo abaixo o 
primeiro parâmetro é o nome da variável, o segundo, o valor a ser armazenado: 
 
Protected Sub Page_Load(ByVal sender As Object, ByVal e As 
System.EventArgs) Handles Me.Load 
 If Cache("hora") Is Nothing Then 
 Cache.Insert("hora", DateTime.Now) 
 End If 
 Label1.Text = Cache("hora") 
End Sub 
 
 
protected void Page_Load(object sender, EventArgs e) 
{ 
 if (Cache["hora"] == null) 
 { 
 Cache.Insert("hora",DateTime.Now); 
 } 
 
 Label1.Text = Convert.ToString( Cache["hora"]); 
 
} 
 
 
Através do método insert podemos utilizar alguns recursos avançados, que 
podem ser obtidos através de uma sobrecarga, como dependências, tempo de expiração 
absoluto e tempo de expiração relativo. Dependências associam o cache a algum objeto: 
quando este objeto sofrer alteração, o cache expira. Tempo de expiração absoluto é 
aquele em que a expiração ocorrerá em uma determinada data e hora, e o relativo, onde 
a expiração ocorre após o tempo informado, a partir da data de inserção do valor no 
cachê. 
Neste próximo exemplo definimos uma expiração absoluta e uma relativa ao 
caching, que são os dois últimos parâmetros, respectivamente. Como a expiração 
absoluta contém o valor MaxValue do objeto DateTime, significa que a expiração deverá 
ocorrer no tempo relativo: 5 segundos: 
 
Protected Sub Page_Load(ByVal sender As Object, ByVal e As 
System.EventArgs) Handles Me.Load 
If Cache("hora") Is Nothing Then 
 Cache.Insert("hora", DateTime.Now, Nothing, 
 DateTime.MaxValue, TimeSpan.FromSeconds(5)) 
End If 
 Label1.Text = Cache("hora") 
End Sub 
 
 
 
 
 
50 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
protected void Page_Load(object sender, EventArgs e) 
{ 
if (Cache["hora"] == null) 
{ 
 Cache.Insert("hora", DateTime.Now, null, 
DateTime.MaxValue, TimeSpan.FromSeconds(5)); 
} 
 Label1.Text = Convert.ToString( Cache["hora"]); 
} 
 
 
Ao final do tempo de expiração, o valor deverá ser atualizado automaticamente. 
 
Output Caching 
 
Caching de páginas e controles são chamadas Output Caching. Vamos agora 
colocar uma página inteira em cache, para isto crie um novo Web Form. Adicione um 
controle Label ao formulário e no evento On Load da página, faça, mais uma vez, a 
exibição da data e hora no mesmo: 
 
Protected Sub Page_Load(ByVal sender As Object, ByVal e As 
System.EventArgs) Handles Me.Load 
 Label1.Text = DateTime.Now.ToString 
End Sub 
 
 
protected void Page_Load(object sender, EventArgs e) 
{ 
 Label1.Text = DateTime.Now.ToString(); 
} 
 
 
A cache de página é parametrizado através de uma diretiva de página, no arquivo 
aspx ou ascx (Web Form ou User Control). Diretivas de página são as primeiras linhas do 
arquivo e iniciam com o conjunto de caracteres <%@. Um Web Form possui por padrão 
uma diretiva Page, e um User Control uma diretiva Control. No exemplo de nosso Web 
Form, adicionamos a diretiva OutPutCache logo abaixo da diretiva Page. Dois parâmetros 
são obrigatórios, Duration, que define o tempo de duração do cachê, e VaryByParam, que 
 
 
 
 
 
51 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
permite criar diferentes versões de cachê para a página de acordo com parâmetros. 
VaryByParam vamos estudar a seguir,por isso, neste exemplo o valor deve ser none, 
para não haver variação por parâmetro: 
<%@ Page Language="VB" AutoEventWireup="false" 
CodeFile="Default.aspx.vb" Inherits="_Default" %> 
<%@ OutputCache Duration="5" VaryByParam="none" > 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
 <title>Untitled Page</title> 
</head> 
<body> 
 <form id="form1" runat="server"> 
 <div> 
 <asp:Button ID="Button1" runat="server" Text="Button" /> 
 <asp:Label ID="Label1" runat="server" 
Text="Label"></asp:Label></div> 
 </form> 
</body> 
</html> 
 
 
Execute a aplicação e atualize a página algumas vezes, observe que a data e 
hora na página só são atualizadas após 5 segundos, que foi o tempo que determinamos 
para o cache. O diferencial agora é que, ao invés de apenas uma única variável, 
colocamos toda a página em cache. Vamos voltar ao nosso hipotético exemplo do site de 
comércio eletrônico. Falamos que a aplicação poderia necessitar colocar uma 
determinada página, de um produto em promoção, em cache. Porém, como estamos 
falando de aplicações dinâmicas, normalmente uma única página é programada para 
exibir todos os produtos: a aplicação monta a página dinamicamente com o produto 
desejado, colhendo informações em banco de dados. Isto significa que nosso modelo de 
cache não iria funcionar, pois o usuário seria condenado a ver apenas o produto que foi 
alocado em cache à primeira vez. 
A solução para este problema é criar versões diferentes da página, de acordo 
com parâmetros diversos. Estudamos no primeiro curso o mecanismo de query string, 
onde informações são passadas anexadas a URL da página. O parâmetro VaryByParam, 
que já vimos ser obrigatório na declaração da diretiva de OutputCache e que definimos 
 
 
 
 
 
52 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
como “none” no nosso primeiro exemplo tem esta função: criar uma versão diferente de 
cache para cada valor diferente do parâmetro passado na query string, tudo a fazer é 
preencher o atributo com o nome da variável da query string. Vamos à prática: crie uma 
nova aplicação ASP.NET contendo dois Web Forms: Default.aspx e Default2.aspx. Em 
Default.aspx adicione dois controles HyperLink e defina a propriedade NavigateURL, 
como “~/Default2.aspx?Versao=1” e “~/Default2.aspx?Versao=2” respectivamente, como 
na imagem abaixo: 
 
 
 
 
Estamos fazendo um redirecionamento para a página Default2.aspx, passando 
uma variável na query string de nome Versão. Cada redirecionamento passa um valor 
diferente para a variável. Na página Default2.aspx adicione um controle Label. Agora abra 
o arquivo aspx, insira a diretiva de OutputCache como no exemplo abaixo. Colocamos um 
valor maior de duração, para que tenhamos tempo de testar o efeito antes do cache 
expirar, e definimos VaryByParam com o valor da variável que a página recebe pela query 
string: 
 
 
 
 
 
 
53 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
<%@ Page Language="VB" AutoEventWireup="false" 
CodeFile="Default2.aspx.vb" Inherits="Default2" %> 
<%@ OutputCache Duration="30" VaryByParam="Versao" %> 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
 <title>Untitled Page</title> 
</head> 
<body> 
 <form id="form1" runat="server"> 
 <div> 
 <asp:Label ID="Label1" runat="server" 
Text="Label"></asp:Label></div> 
 </form> 
</body> 
</html> 
 
 
O último passo é, mais uma vez, atribuir o valor de data e hora ao label: 
 
Protected Sub Page_Load(ByVal sender As Object, ByVal e As 
System.EventArgs) Handles Me.Load 
 Label1.Text = DateTime.Now.ToString 
End Sub 
 
 
protected void Page_Load(object sender, EventArgs e) 
{ 
 Label1.Text = DateTime.Now.ToString(); 
} 
 
 
Rode a aplicação, iniciando de Default.aspx, clique no primeiro Link e anote a 
data e hora exibida em Default2.aspx. Utilize o botão voltar de seu navegador, clique no 
segundo Link e novamente anote o valor de data e hora apresentado, que deve ser 
diferente da primeira vez. Agora repita as operações algumas vezes, você vai notar que, 
durante 30 segundos, a data e hora continuam diferentes entre si, mas iguais ao valor 
informado na primeira vez que se navegou até a página. Isto porque o ASP.NET 
armazenou em cache uma versão da página para cada diferente parâmetro informado na 
query string. 
 
 
 
 
 
54 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
E se a página tiver mais de um parâmetro? Sem problema, você pode informar 
mais de um valor de variável em VaryByParam. Basta separá-los por ponto e vírgula. 
Porém aqui deve ficar registrado um cuidado: o objetivo do recurso de caching é otimizar 
a aplicação. Se você colocar em cache muitos parâmetros de uma mesma página, com 
uma grande variação de valores, as quantidades de versões que terão que ser alocados 
em memória e consequentemente os recursos que serão consumidos podem, ao invés de 
beneficiar, derrubar a aplicação. 
 
Web Parts 
 
Todas as seções de nossos cursos tratam de temas importantes e fundamentais 
no desenvolvimento de aplicações Web. Web Parts, ao contrário, pode ser classificado 
como não-fundamental ou dispensável, mas é um recurso poderoso, fácil e elegante que 
você não pode deixar de conhecer. Ao invés de explicar o que é, vou falar de um exemplo 
prático. Se você não esteve trancado em uma caverna nos últimos anos, provavelmente 
já acessou, ou ouviu falar, do iGoogle. O iGoogle é um serviço onde você monta um 
página personalizada, com os serviços, informações e funções que você deseja, tudo de 
maneira muito fácil: cliques do mouse e operações de arrastar e soltar: 
 
 
 
 
 
55 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Na parte superior você escolhe o conteúdo que coloca na página, mas abaixo, 
você arrasta os conteúdos entre as regiões, podendo também fechá-los ou minimizá-los. 
É um tipo de aplicação em que o usuário gerencia seu conteúdo, a seu gosto, em tempo 
de execução. A funcionalidade do iGoogle no VS é denominada Web Parts. O recurso 
está disponível nativamente no ASP.NET 3.5, e, ao contrário do que você pode imaginar, 
é muito fácil e intuito de usar: o VS traz quase tudo pronto, tudo a fazer é configurar 
controles, com pouca necessidade de escrita de código. Examine, no VS, o guia Web 
Parts da barra de ferramentas: 
 
 
 
 
 
 
56 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Vamos ver Web Parts na prática. Crie uma nova aplicação ASP.NET e adicione à 
página um controle WebPartManager. Este controle não traz qualquer funcionalidade para 
a página e visualmente, em tempo de execução não produz qualquer efeito, porém é 
fundamental para o funcionamento de Web Parts. Agora adicione sobre o Web Form dois 
controles WebPartZone. Um WebPartZone é um container de conteúdo, são as regiões 
onde o usuário poderá adicionar os itens que deseja. Você pode aplicar uma formatação 
para o controle, acessando a opção Auto format na smart tag dos controles. 
Coloque dentro do primeiro WebPartZone um controle Button e um controle 
DropDownList e no segundo um controle TextBox e um controle ListBox. Se você fez tudo 
certo seu Web Form deve estar semelhante à imagem abaixo: 
 
 
 
 
 
57 
Este material deve ser utilizadoapenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Note que é o controle assume o layout do WebPartZone, e que agora é exibido 
dentro de um frame, para que ofereça suporte a operações de arrastar e soltar, minimizar 
e maximizar. O WebPartManeger deve ser sempre primeiro controle da página. Rode a 
aplicação. Neste ponto já é possível minimizar e restaurar um controle. Também é 
possível fechá-los, porém ainda não há suporte para reabrir um controle fechado. Você 
também não vai conseguir arrastar controles entre as zonas. 
 
 
 
 
 
58 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Antes de fechar a aplicação, minimize dois controles, feche a aplicação e rode 
novamente. Note que os controles permanecem na mesma condição que você os deixou 
antes de fechar o navegador! Como isso é possível? Em cursos de ASP.NET, quando 
peço sugestões do que o ASP.NET fez para manter o estado dos controles, a resposta 
sempre é cookies. Na verdade não, é o mesmo mecanismo utilizado na funcionalidade de 
Membership e Roles: um banco de dados do SQL Server, inclusive, com o mesmo 
schema. Aliás, se você utilizar ambos os recursos na aplicação, eles irão compartilhar o 
banco de dados. Note na imagem abaixo a visualização do banco de dados, lembre-se de 
atualizar a pasta para que o mesmo seja exibido: 
 
 
 
 
 
59 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Antes de adicionarmos mais funcionalidade a nossa aplicação, vamos entender o 
funcionamento dos modos do Web Parts. Os modos definem que tipo controle o usuário 
terá sobre o conteúdo do Web Parts. No modo Browse, que é o padrão e é também o 
modo que nosso exemplo se encontra, é oferecida pouca interatividade: o usuário apenas 
pode minimizar, restaurar ou fechar um conteúdo disponível em uma zona. No modo 
catalog, as possibilidades são maiores: o usuário pode fechar e restaurar conteúdo e 
mesmo mudá-los de uma zona para outra. No modo design é possível ao usuário 
gerenciar as zonas da página, inclusive com operações de arrastar e soltar, e, por último, 
no modo Edit, pode-se alterar as zonas, personalizando-as completamente. 
 
CatalogZone e PageCatalogPart 
 
Vamos agora aprimorar um pouco a aplicação, mudando o modo para Catalog. 
Adicione um controle CatalogZone, este controle é um container para controles 
PageCatalogPart. Adicione um controle PageCatalogPart ao controle CatalogZone: 
 
 
 
 
 
60 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Se você executar a aplicação neste momento, notará que não existe qualquer 
diferença, ainda não é possível gerenciar o conteúdo das zonas, o controle Page Catalog 
sequer é visível em tempo de execução. Isto porque é necessário alterar o modo do Web 
Parts, e isto requer um pouco de código: 
 
 
Protected Sub Page_Load(ByVal sender As Object, ByVal e As 
System.EventArgs) Handles Me.Load 
 Dim WebPart As WebPartManager = 
WebPartManager.GetCurrentWebPartManager(Page) 
 WebPart.DisplayMode = 
WebPart.SupportedDisplayModes("Catalog") 
End Sub 
 
 
 
 
 
 
 
 
61 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
protected void Page_Load(object sender, EventArgs e) 
{ 
 WebPartManager WebPart = 
WebPartManager.GetCurrentWebPartManager(Page); 
 WebPart.DisplayMode = 
WebPart.SupportedDisplayModes["Catalog"]; 
 
} 
 
 
O código acima declara uma variável do tipo WebPartManager, que recebe por 
referência o WebPartManager da página. Em seguida, seu modo é alterado para Catalog. 
Rode a aplicação agora, note que os controles Catalog Zone e Page Catalog agora estão 
visíveis. Faça alguns testes, feche um controle de uma zona, veja que ele é adicionado ao 
Page Catalog. Para restaurar o controle na zona original, ou em outra zona, basta marcá-
lo, escolher a zona em “Add to” e clicar em “Add”. Imediatamente o controle é adicionado 
à zona selecionada. 
 
 
 
 
 
 
62 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
Mas o mais interessante é a possibilidade de arrastar os controles entre as zonas. 
Para isso, basta clicar sobre o título do controle, arrastá-lo até a zona desejada e soltar o 
botão do mouse: 
 
 
 
 
Outro modo é o Design, onde você tem todas as operações que os modos 
Browse e Catalog, porém o Catalog Zone e consequentemente o Page Catalog não é 
exibido. Para colocar a aplicação em mode de Design, basta mudar o parâmetro da 
propriedade SupportedDisplayModes: 
 
 
 
 
 
 
63 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
Protected Sub Page_Load(ByVal sender As Object, ByVal e As 
System.EventArgs) Handles Me.Load 
 Dim WebPart As WebPartManager = 
WebPartManager.GetCurrentWebPartManager(Page) 
 WebPart.DisplayMode = 
WebPart.SupportedDisplayModes("Design") 
End Sub 
 
 
protected void Page_Load(object sender, EventArgs e) 
 { 
 WebPartManager WebPart = 
WebPartManager.GetCurrentWebPartManager(Page); 
 WebPart.DisplayMode = 
WebPart.SupportedDisplayModes["Design"]; 
 
 } 
 
 
Modo Edit 
 
O último e mais completo modo que vamos estudar é o Edit. Neste modo o 
usuário tem total poder de personalizar o conteúdo das zonas. As funcionalidades são 
muitas, por isso, vamos testá-las em partes. Inicialmente adicione um controle EditorZone. 
Este controle também é um container para controles de edição, sendo eles 
ApperanceEditorPart, que permite personalizar a aparência, BehaviorEditorPart, que 
admite personalizar o comportamento, LayoutEditorPart que aceita personalizar o 
comportamento e finalmente, PropertyEditorPart, que comporta a personalização de 
propriedades. 
 
ApperanceEditorPart 
 
Adicione um controle EditorZone no seu Web Form, em seguida adicione um 
controle ApperanceEditorPart dentro do EditorZone. Na tela abaixo, uma visão parcial do 
Web Form em tempo de design, onde podemos ver o EditorZone e o 
ApperanceEditorPart: 
 
 
 
 
 
64 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Para que o modo de edição funcione é preciso um pouco mais de configurações e 
código. Inicialmente devemos ver se é possível a mudança de modo, em seguida 
devemos mudar o modo: 
 
 
Protected Sub Page_Load(ByVal sender As Object, ByVal e As 
System.EventArgs) Handles Me.Load 
If WebPartManager1.Personalization.Scope = 
PersonalizationScope.User AndAlso 
WebPartManager1.Personalization.CanEnterSharedScope 
Then 
 
 
 
 
 
65 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 WebPartManager1.Personalization.ToggleScope() 
End If 
 
Dim WebPart As WebPartManager = 
WebPartManager.GetCurrentWebPartManager(Page) 
WebPart.DisplayMode = 
WebPart.SupportedDisplayModes("Edit") 
End Sub 
 
 
 
 
 
A próxima autorização é no web.config. O modo Edit necessita de permissões 
específicas para poder funcionar. O elemento abaixo deve ser adicionado dentro do 
elemento system.web: 
<webParts> 
 <personalization> 
 <authorization> 
 <allow users="*" roles="admin" verbs="enterSharedScope"/> 
 </authorization> 
 </personalization> 
</webParts> 
 
Pronto, agora você já pode executar a aplicação. Note que cada controle ganhou 
um novo item de menu, Editar: 
 
 
 
 
 
66Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Ao clicar em Editar, o controle, e apenas o controle onde clicamos Editar, entra 
em modo de edição de Aparência, através do controle AppearenceEditor. Altere 
informações como Título e Altura, clique em Aplicar: 
 
 
 
 
 
 
 
67 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
Veja imediatamente o resultado no controle que colocamos em modo de edição: 
 
 
 
BehaviorEditorPart 
 
Vamos agora testar o editor de comportamento, o BehaviorEditorPart. Para não 
sobrecarregar a tela e tornar as coisas confusas, remova o AppearenceEditor do 
EditorZone e adicione um BehaviorEditorPart. Rode a aplicação, escolha em controle e 
clique em Editar no seu menu. Observe que o modo de comportamento traz diversas 
opções: 
 
 
 
 
 
68 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Adicionei um link para imagem do ícone do título no exemplo. Veja o resultado: 
 
 
 
 
 
69 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
LayoutEditorPart 
 
Remova o BehaviorEditorPart do EditorZone e adicione um LayoutEditorPart. 
Rode a aplicação e clique em editar no menu de seu controle. Veja as opções: 
 
 
 
 
 
 
 
70 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
A alteração de zona produz o mesmo efeito do CatalogZone e PageCatalogPar. 
 
ASP.NET Ajax 
 
Em nosso primeiro curso falamos de Web 2.0 e Ajax. Nesta seção vamos 
recordar alguns conceitos. Para o usuário, Ajax significa uma experiência de uso da 
aplicação melhor: o navegador dará respostas mais rápidas, estará ativo entre um post 
back e outro e a tela estará sempre visível. Em termos técnicos, o Ajax significa 
processamento mais veloz, menor utilização de recursos e processamento assíncrono. 
Para entender mais, releia a parte de Ajax e Web 2.0 em nosso primeiro curso. 
Do ponto de vista do desenvolvedor, existem dois grupos de recursos para 
utilização do Ajax no ASP.NET 3.5: o primeiro são os controles Ajax Extensions, que já 
estão instalados no ambiente do VS 2008.O segundo grupo de recursos se chamam 
ASP.NET AJAX Control Toolkit: trata-se de um conjunto de controles com funções mais 
específicas que tem que ser instalado à parte no VS. 
 
AJAX Extensions 
 
Inicialmente vamos estudar o AJAX Extensions. Estes são os controles oficiais do 
ASP.NET AJAX e que permitem adicionar funcionalidades de processamento assíncrono 
a aplicações ASP.NET 3.5, sendo de uso mais genérico e extremamente fáceis de utilizar. 
 
 
 
 
 
71 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
Vamos ver qual a função de cada controle: 
 
• ScriptManager: Controle indispensável, que faz o Ajax funcionar na página. Todo 
Web Form que utilizar Ajax tem que conter um ScriptManager. 
• ScriptManagerProxy: Substitui a ScriptManger em uma página de conteúdo 
associada a uma Master Page, que deve conter um controle ScriptManager; 
• Timer: Um evento assíncrono pode ser disparado por uma ação do usuário, como 
um clique em um botão. Porém, quando queremos, por algum motivo, que o evento 
seja disparado em determinado intervalo, utilizamos o controle Timer. 
• UpdatePanel: Este controle é um container para qualquer controle ASP.NET. Os 
controles em seu interior terão seu processamento assíncrono. Na prática, este é o 
controle que faz o ASP.NET Ajax funcionar. 
 
 
 
 
 
72 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
• UpdateProgress: Este controle permite dar um feedback ao usuário durante o 
processamento da requisição. Normalmente, ao clicar em um botão, o usuário fica 
sem saber realmente o que está acontecendo. 
 
Vamos à prática. Crie uma nova aplicação ASP.NET sobre o Web Form criado, 
adicione um controle ScriptManager e, em seguida, um controle UpdatePanel. Dentro do 
UpdatePanel adicione um controle DropDownList e um controle Label. 
 
 
 
 
Na Smart Tag do DropDownList, marque a opção Enable AutoPostBack para que 
o controle cause post back a cada alteração de valor. Em seguida clique em Edit Items e 
adicione algumas cores, como no exemplo abaixo: 
 
 
 
 
 
 
73 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Adicione, porém fora do UpdatePanel, outro controle DropDownList e outro 
controle Label. Defina os mesmos itens para este novo DropDownList, e também marque 
o mesmo como AutoPostBack: 
 
 
 
 
 
74 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Clique em ok e dê um duplo clique sobre o DropDownList que se encontra dentro 
do UpdatePanel. No manipulador de evento criado digite o seguinte código: 
 
Protected Sub DropDownList1_SelectedIndexChanged(ByVal 
sender As Object, ByVal e As System.EventArgs) 
 System.Threading.Thread.Sleep(5000) 
 Label1.Text = DropDownList1.SelectedItem.Text 
End Sub 
 
 
protected void DropDownList1_SelectedIndexChanged(object 
sender, EventArgs e) 
{ 
 System.Threading.Thread.Sleep(5000); 
 Label1.Text = DropDownList1.SelectedItem.Text; 
} 
 
Faço o mesmo para o DropDownList que está fora do UpdatePanel. Tome 
cuidado de mudar o Label que vai receber a cor: 
 
 
 
 
 
75 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
Protected Sub DropDownList2_SelectedIndexChanged(ByVal 
sender As Object, ByVal e As System.EventArgs) Handles 
DropDownList2.SelectedIndexChanged 
 System.Threading.Thread.Sleep(5000) 
 Label2.Text = DropDownList2.SelectedItem.Text 
End Sub 
 
 
protected void DropDownList2_SelectedIndexChanged(object 
sender, EventArgs e) 
{ 
 System.Threading.Thread.Sleep(5000); 
 Label2.Text = DropDownList2.SelectedItem.Text; 
} 
 
 
O código acima causa um delay no servidor de 5 segundos, isto para simularmos 
um processamento mais demorado por estarmos criando uma rotina simples com acesso 
local. Rode a aplicação e altere valores nos DropDownLists. Note que no primeiro a 
aplicação continua ativa e não há qualquer sinal de processamento ou travamento. Você 
pode inclusive alterar novamente um valor do DropDownList enquanto a cor não muda no 
controle Label. No segundo DropDownList, que está fora do UpdatePanel e 
consequentemente sem o AJAX, o processamento é diferente: a página “trava”, o controle 
só é retornado ao usuário ao final do processamento. 
Uma forma mais fácil de visualizar esta diferença de processamento em 
aplicações simples como a que utilizamos de exemplo é observar o logo do Internet 
Explorer na guia da página. No processamento síncrono ele muda para um círculo 
animado, indicativo de que está aguardando o processamento. No processamento 
assíncrono, ele sequer muda: 
 
 
 
 
 
76 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
UpdateProgress 
 
O controle UpdateProgress tem por objetivo dar um feedback ao usuário durante 
um processamento assíncrono. O controle é um container, internamento você pode 
colocar um gif animado, um flash, uma simples mensagem de textoou o que você 
imaginar, lembrando que seu conteúdo somente será exibido durante o post back 
assíncrono. O controle é conectado diretamente ao UpatePanel, a partir de então seu 
funcionamento é totalmente automático. 
Vamos ver um exemplo. Crie uma nova aplicação ASP.NET, no formulário 
principal adicione um controle ScritpManager, um controle UpdatePanel e internamente 
um controle Button, em seguida adicione um controle UpdateProgress, em sua janela de 
propriedades, defina a propriedade AssociatedUpdatePanelID com o valor UpdatePanel1, 
como na imagem abaixo: 
 
 
 
 
 
77 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Como dito, você pode colocar o que quiser dentro do UpdateProgress. No meu 
exemplo eu simplesmente coloquei um label com um texto e uma fonte diferenciada. Dê 
um duplo clique sobre o botão, o código desta vez apenas causa um atraso simulando um 
processamento: 
 
 
Protected Sub Button1_Click(ByVal sender As Object, ByVal 
e As System.EventArgs) Handles Button1.Click 
 System.Threading.Thread.Sleep(5000) 
End Sub 
 
 
protected void Button1_Click(object sender, EventArgs e) 
{ 
 System.Threading.Thread.Sleep(5000); 
} 
 
Seu exemplo, em tempo de design, deve estar semelhante à imagem abaixo: 
 
 
 
 
 
78 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
Rode a aplicação, clique no Button, observe que durante o processamento de 
servidor, o conteúdo do UpdateProgress é exibido, ao final do processamento ele se torna 
invisível: 
 
 
 
 
 
 
79 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
Timer 
 
Nos exemplos anteriores, tínhamos sempre um post back causado por uma 
intervenção de um usuário, iniciando-se então o processamento assíncrono no servidor. 
Porém, para resolver alguns problemas do dia-a-dia pode ser necessário que este post 
back seja causado automaticamente, durante determinado intervalo de tempo. Com esta 
função, temos o controle Timer. 
Sua utilização também é simples: ele deve ser colocado no container do 
UpdatePanel, e o código de servidor a ser disparado deve ser atribuído ao seu evento 
Tick. Vamos a um exemplo. Crie uma aplicação ASP.NET, adicione um controle 
ScriptManager e um controle UpdatePanel na página. No Update Panel adicione um 
controle Label e um Controle Timer, como na imagem abaixo: 
 
 
Altere a propriedade Interval do Timer para 1000. Esta propriedade define, em 
milissegundos, o intervalo de execução do evento: 
 
 
 
 
 
80 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Dê um duplo clique sobre o controle Timer para abrir o seu manipulador de evento 
Tick, adicione o código abaixo para que, a cada intervalo, o horário seja atualizado no 
controle Label: 
 
Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e 
As System.EventArgs) Handles Timer1.Tick 
 Label1.Text = DateTime.Now.ToString 
End Sub 
 
 
protected void Timer1_Tick(object sender, EventArgs e) 
{ 
 Label1.Text = DateTime.Now.ToString(); 
} 
 
 
Execute a aplicação e observe a atualização da data a cada segundo: 
 
 
 
 
 
81 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Triggers 
 
É comum a aplicação ter controles diferentes para disparar o evento e exibir o 
resultado, por exemplo. Um post back assíncrono vai retornar informações de ambos os 
controles. Uma forma de otimização é com a utilização de Triggers, através dos quais 
podemos separar o conteúdo a ser atualizado do controle que disparou o evento. Para 
você entender na prática como funciona, crie uma nova aplicação contendo um 
ScriptManager e um UpdatePanel. Internamente ao UpdatePanel adicione um Controle 
Label, em outra área do Web Form e fora do UpdatePanel, adicione um controle Button, 
como na imagem abaixo: 
 
 
 
 
 
82 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Dê um duplo clique sobre o controle Button para criar o manipulador de evento 
OnClique, e adicione o seguinte código para atualizar o controle label com a hora atual: 
 
Protected Sub Button1_Click(ByVal sender As Object, ByVal 
e As System.EventArgs) Handles Button1.Click 
 Label1.Text = DateTime.Now.ToString 
End Sub 
 
 
protected void Button1_Click(object sender, EventArgs e) 
{ 
 Label1.Text = DateTime.Now.ToString(); 
} 
 
 
Até aqui não há nenhuma novidade além do fato do controle Button estar fora do 
UpdatePanel. Vamos agora definir o Trigger para o evento. No controle UpdatePanel, 
localize a propriedade Triggers: 
 
 
 
 
 
83 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Clique no botão de reticências, no UpdatePanelTrigger Collection Editor clique em 
Add, selecione AsyncrPostBackTrigger. Em ControlID selecione Button1 e em EventName 
escolha Click: 
 
 
 
 
 
84 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
Rode a aplicação. 
 
ASP.NET AJAX Control Toolkit 
 
Vamos agora falar do ASP.NET AJAX Control Toolkit. O ASP.NET AJAX Control 
Toolkit, embora não seja um produto oficial da Microsoft, é suportado por esta. Você pode 
encontrar informações, tutoriais, exemplos e downloads do Toolkit em 
http://www.asp.net/ajax/ajaxcontroltoolkit/. Também pode achar o ToolKit na seção de 
downloads do site. Existem diversas opções, baixe inicialmente AjaxControlToolkit-
Framework3.5SP1-NoSource.zip, que contém os exemplos de utilização. Em outro 
momento, você pode querer baixar AjaxControlToolkit-Framework3.5SP1.zip, que possui 
todo o pacote, inclusive com os códigos fonte, ou ainda AjaxControlToolkit-
Framework3.5SP1-DllOnly.zip, que tem apenas o assembly com os controles, útil para 
você empregar em suas aplicações. Tudo a fazer é colocar o assembly na pasta Bin da 
aplicação, adicionar os controles à sua barra de ferramentas e utilizá-los. 
 
 
 
 
 
85 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
Depois de baixar o arquivo AjaxControlToolkit-Framework3.5SP1-NoSource.zip, 
descompacte-o em algum diretório qualquer. No VS, acesse o menu File, opção Open 
Web Site, selecione a opção File System, selecione a pasta que foi descompactada e 
clique em Open: 
 
 
 
É aberta uma aplicação ASP.NET com mais uma dezena de pastas. Cada uma 
possui um exemplo de utilização de um controle do ToolKit: 
 
 
 
 
 
86 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Abra a pasta Bin, veja que dentro temos o AjaxControlToolkit.dll, como dito acima. 
Este assembly possui todos os controles, ele é tudo que você vai precisar em outras 
aplicações que utilize o ToolKit. Antes de rodar a aplicação, vamos ver como adicionar os 
controles à sua caixa de ferramentas. Com os controles na Toolbox fica mais fácil utilizá-
los, basta arrastá-los para o formulário. Clique com o botão direito sobre o Toolbox e 
selecione Add tab: 
 
 
 
 
 
87 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
No cursor aberto acima, digite AJAX Control Toolkit:Clique novamente com o botão direito sobre a Tookbox, selecione Choose Items: 
 
 
 
 
 
88 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Clique em Browse. Você deve navegar até encontrar a pasta Bin de sua aplicação 
ASP.NET que baixou e abriu no VS. Encontrando a pasta selecione AjaxControlToolkit.dll 
e clique em Open. Você está de volta à janela anterior. Observe, rolando a barra de 
rolagem, que todos os controles marcados em azul serão adicionados à barra de 
ferramentas: 
 
 
 
 
 
89 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
Clique em Ok. Uma grande quantidade de controles é adicionada à guia Ajax 
Control Toolkit de sua barra de ferramentas: 
 
 
 
 
 
90 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
 
 
 
 
91 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
Lembre-se que adicionamos os controles a uma aplicação que já possui exemplos 
de utilização de todos os controles. Isto porque não vamos estudar neste curso a 
utilização de cada uma dessas dezenas de controles, o que seria inviável. O importante é 
que você agora tem acesso a implementação de cada um deles e já sabe como adicionar 
os controles à barra de ferramentas em seus projetos. Vamos agora observar alguns dos 
exemplos prontos. 
Um dos controles mais interessantes, e que já encontramos diversos sites que 
utilizam recurso semelhante, é o autocomplete, que é capaz de sugerir opções enquanto 
digitamos o texto. Rode a aplicação, no menu lateral clique em AutoComplete. No campo 
digite algumas palavras e veja que a página apresenta algumas sugestões. Neste 
exemplo, as sugestões são puramente aleatórias, mas, na vida real, você pode, por 
exemplo, programar o controle para fazer uma busca em um banco de dados trazendo, 
por exemplo, nome de clientes. 
 
 
 
 
 
 
 
92 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
Observe também que em cada página de exemplos existem instruções de como 
usar o controle, suas principais propriedades e configurações. 
 
Gerenciado sua Aplicação 
 
Ao longo dos cursos fizemos várias alterações no arquivo web.config, que é o 
arquivo de configuração de uma aplicação ASP.NET: nele definimos forma de 
autenticação e permissão, strings de conexão, permissões para o uso de Web Parts entre 
outros. O VS possui uma ferramenta visual, que roda sobre o navegador, que permite que 
as principais configurações do web.config sejam feitas de uma forma mais amigável. A 
ferramenta, ASP.NET Configurator, está disponível como o último comando no Solution 
Explorer: 
 
 
Para testá-la, crie uma aplicação nova, em que não tenham ocorrido alterações 
de configuração. Vamos ver um exemplo prático do uso da ferramenta para a uma 
configuração que já utilizamos: autenticação por formulários, por isso logo que criar a 
aplicação verifique no web.config que a autenticação (elemento authentication) tem seu 
modo definido como Windows. Ao clicar em ASP.NET Configurator a ferramenta é aberta 
em um navegador: 
 
 
 
 
 
93 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
As opções de configuração são divididas em três grupos: Segurança, 
configuração do aplicativo e Configuração do Provedor. Clique em Segurança, veja que 
em Usuários o configurador informa que a autenticação atual é Windows. Clique em 
Selecionar tipo de autenticação: 
 
 
 
 
 
 
94 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Na próxima etapa, você pode optar por “da internet” ou “de uma rede local”. Veja 
que o texto explica que na opção “da Internet” será utilizada autenticação para os 
formulários, por isso, selecione esta opção e clique em Concluído. 
 
 
 
 
 
95 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Abra o web.config e veja que a autenticação mudou para Forms. 
 
 
 
 
 
96 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Distribuindo sua Aplicação 
 
Depois de muito trabalho, sua aplicação ficou pronta: é hora de colocar para 
funcionar. Distribuir uma aplicação Web é bastante diferente do que distribuir uma 
aplicação Windows Forms. Nesta última é criado um instalador, que é disseminado para 
todos os usuários. Estes executam o instalador e estão prontos para operar o sistema. 
Numa aplicação Web, a instalação e configuração são feita apenas no servidor, a partir 
daí ela está pronta para qualquer usuário que tiver um navegador e um acesso ao 
servidor por uma rede local ou pela internet. 
 
 
 
 
 
97 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
Aplicações Web são executadas em servidores de internet, que nada mais é do 
que uma aplicação na forma de serviço, que escuta uma determinada porta, esperando 
requisições. Quando estas requisições são recebidas, o servidor de internet as processa e 
devolve o resultado do processamento a quem fez a requisição. Aplicações ASP.NET 
devem rodar em servidores de internet IIS, em um sistema Operacional Microsoft. Existem 
projetos, como o Mono, que portam aplicações .NET para plataformas não Microsoft, 
porém nesta situação existe uma série de limitações e restrições. Os clientes das 
aplicações podem ser qualquer equipamento, mesmo com sistemas operacionais ou 
navegadores não ligados à Microsoft. 
A publicação da aplicação consiste de duas partes principais: a publicação em si, 
quando são preparados os arquivos para que sejam hospedados em um ambiente de 
produção, e posteriormente a preparação do servidor. A publicação consiste em gerar os 
arquivos necessários para que a aplicação seja executada no servidor, onde você vai 
copiá-los para o servidor (através de um serviço de FTP por exemplo), ou ainda gerar um 
instalador que deverá ser executado no servidor, podendo este ser capaz de fazer as 
configurações necessárias. A configuração do servidor consiste em tarefas como preparar 
a Internet Information Service, o servidor de internet da Microsoft, instalar e configurar o 
servidor de banco de dados entre outras. 
 
Publish Web Site 
 
 Para exemplificar, vou gerar uma publicação e instalar no IIS em um 
equipamento rodando Windowx XP Professional. Instalar em um servidor com Windows 
2003 Server é um procedimento praticamente idêntico. Crie uma nova aplicação 
ASP.NET 3.5, dê à mesma o nome de OlaMundo. Na página Default.aspx criada pelo VS, 
adicione um label com o texto Olá Mundo, em letras garrafais: 
 
 
 
 
 
98 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Uma informação importante antes de continuarmos. Durante o desenvolvimento 
de uma aplicação, precisamos depurar a mesma, que é o processo de avaliar o código 
em tempo de execução, checar valor de variáveis, adicionar pontos de parada no código 
etc. Para que a depuração seja possível, o ASP.NET insere diversos símbolos dentro da 
aplicação. Estes símbolos consomem recursos de processamento e memória, recursos 
estesque não são poucos. 
A configuração para inclusão dos símbolos de depuração é feita através do 
web.config. Por padrão, a depuração está desabilitada. Toda vez que executamos uma 
aplicação clicando em Start Debugging (a seta verde) ou teclamos F5, o ASP.NET inicia a 
aplicação em modo de depuração. Se o valor para a depuração estiver definida com o 
valor padrão no web.config, ou seja, false, você verá esta caixa de diálogo: 
 
 
 
 
 
99 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Isto é um alerta que a depuração está desabilitada. Se deixarmos a primeira 
opção marcada, o web.config será alterado pelo VS e a aplicação irá rodar em modo de 
depuração. Note que logo abaixo da opção existe um alerta de que esta opção não deve 
ser utilizada em ambientes de produção. Na verdade, durante todo o ciclo de 
desenvolvimento da aplicação você vai precisar da depuração. Porém, quando a 
aplicação for para o ambiente de produção, é importante que ela seja desabilitada. Você 
também pode alterar manualmente o modo de depuração, basta para isto alterar o 
web.config. Isto é feito no elemento compilation, atributo debug: 
 
<compilation debug="false" strict="false" explicit="true"> 
 
Vamos agora continuar com a publicação de nossa aplicação. Clique com o botão 
direito sobre o projeto e escolha a opção Publish Web Site: 
 
 
 
 
 
100 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
Você verá a caixa de diálogo Publish Web Site: 
 
 
 
 
 
 
 
101 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 Clique no botão reticências ao final do campo Target Location. Veja que o Visual 
Studio lhe dá diversas opções de publicação: 
• File System: simplesmente copia os arquivos para um diretório no sistema de 
arquivos; 
• Local IIS: publica a aplicação no IIS local, ou seja, em sua própria máquina; 
• FTP Site: publica os arquivos em um servidor FTP, o que é comumente utilizado 
quando estamos hospedando em servidores comerciais de terceiros. 
• Remote Site: publica em um site Remoto. 
 
 
 
Clique na Opção Local IIS, em seguida clique no botão Create New Virtual 
Directory. Informe um alias, que é o nome pelo qual a aplicação vai ser acessada pelo IIS, 
 
 
 
 
 
102 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
e em Folder informe o local físico onde você quer que a aplicação seja publicada. Se a 
pasta não existir, é exibida uma mensagem perguntando se você deseja criar a pasta. 
 
 
 
 
Clique em Ok, confirme as próximas janelas até que você veja na barra de status 
do Visual Studio a mensagem: Publish succeeded: 
 
 
 
 
Neste ponto você deve ser capaz de acessar a publicação pelo IIS: 
 
 
 
 
 
103 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Muitas coisas podem dar errado, porem o IIS é uma aplicação fácil e intuitiva, 
você poderá facilmente configurá-lo. Para abrir o IIS acesse o painel de controle, 
ferramentas administrativas, Internet Information Services. Localize o Web Site Ola 
Mundo, clique com o botão direito em propriedades: 
 
 
 
 
 
 
 
104 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Na guia, certifique-se de ter Default.aspx, que é a pagina inicial de nossa 
aplicação, como documento padrão. Se ele não se encontra na lista, você pode facilmente 
adicioná-lo. Isto é necessário para que o IIS tenha um ponto de referência para iniciar a 
aplicação quando ela é acessada pelo alias. 
 
 
 
 
 
105 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Na guia ASP.NET, certifique-se de estar definindo 2.0 em ASP.NET version. Você 
pode estar se perguntando: “mas eu não fiz a aplicação em ASP.NET 3.5!”. Certo, porém 
o ASP.NET 3.5 roda sobre o serviço do ASP.NET 2.0. 
 
 
 
 
 
 
106 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Estes podem ser os problemas principais relacionados ao IIS. Aproveite e dê uma 
navegada nas demais opções de configuração de seu Web Site. Outro erro comum que 
pode ocorrer é o da imagem abaixo: 
 
 
 
 
 
107 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Este erro pode ocorrer pelo fato de que o IIS não está configurado para trabalhar 
com o ASP.NET. Normalmente ocorre se o IIS foi instalado depois do .NET. Para resolver 
isto, basta executar o seguinte texto na prompt de comando do Windows: 
 
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe 
/i 
 
 
Antes de passarmos para o próximo assunto, vamos voltar à caixa de diálogo 
Publish Web Site. Vamos falar da primeira opção apenas: Alow this precompiled site to be 
updatable: 
 
 
 
 
 
108 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Se você manteve esta opção marcada durante a publicação e abrir a página 
Default.aspx, já publicada, verá que o conteúdo da mesma é exatamente igual ao seu 
conteúdo em tempo de projeto. Já o seu arquivo Default.vb ou Default.cs não está mais 
disponível na publicação: seu conteúdo foi compilado dentro de um assembly: abra a 
pasta Bin dentro da publicação, o assembly é um arquivo com nome estranho e extensão 
DLL. Faça agora um teste. Crie uma nova publicação, porém agora desmarque a opção 
Alow this precompiled site to be updatable. Quando a publicação estiver pronta, abra 
novamente o arquivo Default.aspx. Veja que agora, em vez do conteúdo do arquivo, você 
tem uma mensagem: 
This is a marker file generated by the precompilation tool, and 
should not be deleted! 
 
 
A mensagem diz que o arquivo foi gerado pela ferramenta de pré-compilação e 
não deve ser apagada. Agora, a apresentação da publicação está compilada, assim com 
 
 
 
 
 
109 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
o código de servidor. No modelo anterior era possível alterar o layout da aplicação sem a 
necessidade de pré-compilação. Neste modelo, é preciso uma nova compilação. 
 
Copy Web Site 
 
Outra forma de publicar sua aplicação ASP.NET é através do Copy Web Site, que 
pode ser encontrado no Solution Explorer, no penúltimo botão da barra de ferramentas, 
que na imagem abaixo aparece assinalado em vermelho: 
 
 
Esta opção abre uma interface interessante: de um lado os arquivos locais, do 
outro você poderá ver os arquivos no local de publicação: 
 
 
 
 
 
 
110 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Você inicialmente deve clicar em Connect. As opções de conexão são 
semelhantes à opção de Publish Web Site: 
 
 
 
 
 
111 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
Depois de conectado, clique com o botão direito sobre a área à esquerda, e 
selecione Copy Site to Remote. Os arquivos são então publicados no local remoto. O 
mais interessantedesta ferramenta é que, quando você alterar sua aplicação, o utilitário 
mostra quais arquivos estão com versões diferentes da publicada remotamente. 
 
 
 
 
 
112 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
Note na imagem acima que Default.aspx está sinalizado com uma seta azul, e 
seu Status é changed, indicando que o arquivo foi modificado. A comandar Syncronize, o 
VS envia para a publicação remota apenas os arquivos alterados. 
 
Geração de Instaladores 
 
Uma última opção de publicação que vamos estudar é a geração de um programa 
de instalação. Você pode utilizar um software de geração de instaladores de terceiros, 
porém o VS é capaz de criar um software de instalação para uma aplicação ASP.NET. 
Para nosso exemplo, você vai precisar adicionar um novo projeto a uma solução que já 
tem um projeto ASP.NET. Se seu Solution Explorer não está exibindo a solução, consulte 
na seção de Web Services de nosso curso como tornar a solução visível no Solution 
Explorer. Feito isso, clique como botão direito sobre a solução, selecione Add, opção New 
Project: 
 
 
 
 
 
113 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Localize e expanda o nó Other Project Types, em Templates, selecione Web 
Setup Project e clique em ok: 
 
 
 
 
 
 
114 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
O Visual Studio cria um projeto de instalação. Observe a barra de ferramentas do 
Solution Explorer com o projeto de Instalação Selecionado: 
 
 
 
São diversos editores que nos permitem configurar e personalizar o instalador. 
Através destas opções podemos alterar valores do registro do Windows, verificar 
condições de instalação, incluir caixas de diálogos, entre outras. Vamos primeiramente 
adicionar os arquivos necessários para a geração do instalador. Clique com o botão 
direito na janela File System, selecione Add e em seguida Project Output: 
 
 
 
 
 
115 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
Na janela Add Project Outuput Group, selecione o projeto ASP.NET que deseja 
instalar em Project, selecione Content Files e clique em Ok: 
 
É adicionado um novo item à direita: Content Files from... 
 
 
 
 
 
116 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Agora, com o projeto de instalação ainda selecionado no Solution Explorer, 
localize na Janela de Propriedades a opção Localization. Encontre e altere para 
português. Uma mensagem do VS alerta que em tempo de design o idioma continuará 
sendo em inglês, já que a inclusão dos pacotes de tradução será incluída na compilação. 
 
 
 
 
 
 
117 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
Observe que nesta janela você deve preencher diversas informações sobre a 
aplicação, como produtor, autor, descrição etc. Para gerar o instalador, clique com o 
botão direito sobre o projeto de instalação e selecione Build. Aguarde a mensagem Build 
Succeed na barra de status e clique novamente com o botão direito sobre o projeto de 
instalação. Desta vez selecione a opção Install: 
 
 
O instalador será executado: 
 
 
 
 
 
118 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Para alterar as janelas do instalar, podendo incluir, excluir ou personalizar etapas, 
utilize o User Interface Editor. O instalador é fisicamente gerado dentro da pasta do 
projeto. 
 
 
 
 
 
 
 
 
------------------FIM DO MÓDULO II-----------------

Materiais relacionados

Perguntas relacionadas

Materiais recentes

Perguntas Recentes