Baixe o app para aproveitar ainda mais
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-----------------
Compartilhar