Top Banner
TMSASP35AV Novembro/2010 ASP.NET 4.0 Avançado
190

Asp Net 4 0 avancado versao final

Jan 25, 2023

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Asp Net 4 0 avancado versao final

TMSASP35AV Novembro/2010

ASP.NET 4.0Avançado

Page 2: Asp Net 4 0 avancado versao final

Apostila desenvolvida especialmente para a Target InformáticaLtda.

Sua cópia ou reprodução é expressamente proibida. Novembro/2010

Page 3: Asp Net 4 0 avancado versao final
Page 4: Asp Net 4 0 avancado versao final

ASP.NET 3.5 AvançadoSumário

1. Segurança....................................................1Objetivos........................................................2Conceitos de Segurança...........................................3Habilitando o site para utilizar o gerenciamento de segurança do Asp.Net 4.0......................................................5

Entendendo o gerenciamento da segurança.......................6Criando Usuários e explorando a estrutura criada..............8Validando usuários com o Login...............................11Utilizando o ChangePassword para trocar as senhas............12Entendendo e utilizando os controles LoginStatus, LoginName e LoginView....................................................13

Gerenciamento Manual de usuários................................17Classes Membership e MembershipUser..........................18Utilizando Grupos............................................19

Exercícios......................................................23Espaço para Anotações........................................24

2. Globalização e Localização..................................25Objetivos.......................................................26O que é globalização e localização?.............................27Localizando valores em uma aplicação asp.Net....................28Traduzindo interfaces do usuário com o asp.net..................32Exercícios......................................................38

Espaço para Anotações........................................39

3. Utilizando Componentes no ASP.NET...........................40Objetivos.......................................................41O que são componentes?..........................................42

Utilizando uma DLL externa...................................43Private Assemblys e Shared Assemblys............................46

Analisando as referências....................................46Espaço para Anotações........................................48

4. Web Parts...................................................50Objetivos.......................................................51O que são web parts ?...........................................52

A arquitetura de Web Parts...................................53O WebPartManager e as WebZones...............................53Utilizando as Web Parts......................................55Construindo Web Parts........................................61

T@rgetTrust Treinamento & Tecnologia I

Page 5: Asp Net 4 0 avancado versao final

ASP.NET 3.5 AvançadoExercícios......................................................67

Espaço para Anotações........................................68

5. LINQ........................................................69Objetivos.......................................................70O que é o LINQ..................................................71LINQ TO OBJECTS.................................................73LINQ to SQL.....................................................78

Entendendo o DataContext.....................................78Utilizando LINQ to SQL em nossa aplicação....................79

Utilizando LINQ to SQL em 3 camadas.............................86Exercícios......................................................97

Espaço para Anotações........................................98

6. Manutenção de Estado........................................99Session........................................................101HiddenField....................................................104

ViewState...................................................104QueryString.................................................105Cookies.....................................................106Application.................................................106

Exercícios.....................................................109Espaço para Anotações.......................................110

7. Web Services...............................................111Objetivos......................................................112Web Services...................................................113Criando e utilizando um Web Service............................115Chamando um XML Web Service por HTTP...........................117Utilizando um WebService externo...............................119Exercícios.....................................................123

Espaço para Anotações.......................................124

8. Utilizando AJAX no ASP.NET.................................125Objetivos......................................................126O que é AJAX ?.................................................127

Por que usar AJAX no ASP.NET?...............................127Utilizando Ajax em uma aplicação Web........................127O controle ScriptManager....................................129O controle UpdatePanel......................................130O Controle UpdateProgress...................................131O Controle Timer............................................132Triggers....................................................133T@rgetTrust Treinamento & Tecnologia II

Page 6: Asp Net 4 0 avancado versao final

ASP.NET 3.5 AvançadoInclusão de Scripts via ScriptManager.......................134

AJAX Control Toolkit...........................................136Utilizando controles do Ajax Control Toolkit...................138

ValidatorCalloutExtender....................................138CollapsiblePanelExtender....................................140PopupControlExtender........................................141

Espaço para anotações..........................................144

9. Reflection.................................................145Objetivos......................................................146O que é Reflection?............................................147

Funcionalidades e ganhos de utilizar reflexão em nossa aplicação...................................................147O tipo Assembly.............................................147O tipo AssemblyName.........................................148O tipo Module...............................................149

Trabalhando com Tipos..........................................150Recuperando um objeto Type..................................150

Utilizando Reflection em nossa aplicação.......................151Espaço para anotações..........................................156

10. Distribuindo sua Aplicação.................................157Objetivos......................................................158Distribuindo sua Aplicação ASP.NET.............................159

Publicando sua aplicação....................................160Espaço para Anotações..........................................162

T@rgetTrust Treinamento & Tecnologia III

Page 7: Asp Net 4 0 avancado versao final

ASP.NET 3.5 Avançado

T@rgetTrust Treinamento & Tecnologia IV

Page 8: Asp Net 4 0 avancado versao final

ASP.NET 3.5 Avançado

1.1.SegurançaSegurança

T@rgetTrust Treinamento & Tecnologia 1

Page 9: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Objetivos

Ao final deste capítulo você estará apto à: Conhecer o sistema de segurança de sites asp.net

implementados pelo .net framework 4.0. Entender as diferenças entre as principais formas

de autenticação disponíveis no asp.net. Utilizar os controles de segurança do asp.net. Gerenciar grupos de usuários e atribuir

características de permissão aos grupos.

T@rgetTrust Treinamento & Tecnologia 2

Page 10: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Conceitos de Segurança

Garantir a segurança de sites é uma questão complexa e criticapara os desenvolvedores de web sistes. Para garantir a segurança énecessário um planejamento cuidadoso, tanto os administradores doweb site como os programadores devem ter um claro entendimento dasopções de segurança disponíveis.

No asp.net clássico e em outras linguagens de programação todoo controle de segurança e de acesso aos sites, bem como ogerenciamento de usuários e seus respectivos privilégios deacessos, ficam atrelados ao trabalho do desenvolvedor responsávelpor criar um mecanismo que gerencie toda essa informação e essecontrole.

O Asp.net 4.0 trabalha em conjunto com o Microsoft .NetFramework 4.0 e o Microsoft Internet Information Service (IIS)para ajudar a fornecer segurança em nossas aplicações Web. Desde aversão do 1.1 do .Net Framework já existia uma implementação parao gerenciamento de segurança de nossas aplicações web, mas muitascoisas evoluiram.

Na versão 4.0 do .net framework temos duas funções principaisde segurança:

Autorization.

Authentication.

A função Autorization Limita direitos de acesso, por permitire negar permissões, para uma identidade autenticada e pré-estabelecida

A função Authentication ajuda a verificar se o usuário érealmente quem ele diz ser. A aplicação obtém credenciais de umusuário, como nome e senha, e validades as credenciais contraalguma autoridade. Se as credencias forem validas então o usuáriorealmente é quem ele diz ser.

Geralmente a função autorization é utilizada para identificarquem tem o privilégio de acessar determinados arquivos via web. Jáa função Authentication, por ser mais dinâmica é amplamente

T@rgetTrust Treinamento & Tecnologia 3

Page 11: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

utilizada como o método de gerenciar o acesso de usuários emnossas aplicações web. Em função de ser mais utilizada, vamosdirecionar nossos estudos sobre a função authentication.

O Asp.Net implementa a authentication através deauthentication providers, que contém o código necessário paraautenticar as credencias do usuário solicitante. Junto com oasp.net temos dois authentication providers pré implementados.

Windows Authentication Provider.

Forms Authentication Provider.

A autenticação baseada no Windows Authentication Providerutiliza o usuário windows corrente no IIS como o usuárioautenticado em uma aplicação Asp.net. Ela é bem utilizada paraaplicativos asp.net do tipo Intranet para aproveitar as credenciasdo usuário para ter permissão em determinados diretórios.

A autenticação baseada no Forms Authentication Providerpermite autenticar usuários usando seu próprio código e depoismanter um token de autentição em um cookie ou no URL da página.

Para usar a autenticação baseada em formulários você cria umapagina de login que irá coletar as credencias dos usuários e deveincluir código para validar as credencias. Normalmente a soluçãoasp.net é configurada para direcionar á pagina de login sempre queo usuário tentar entrar em uma página que só seja disponibilizadaapós o usuário ser autenticado. Após a autenticação, se o usuáriofor um usuário com permissão então ele é direcionado para a páginaque ele tentou entrar antes, senão ele tem o acesso barrado atéque ele se autentique.

O modelo de autenticação por formulários (FormsAuthentication) é amplamente utilizado em desenvolvimentos deaplicações web.

Uma conveniente maneira para trabalhar com FormsAuthentication é utilizar Asp.Net MemberShip e Asp.Net LoginControls. O Asp.Net MemberShip permite armazenar e gerenciarinformações de usuários e inclui métodos para autenticarusuários.O Asp.Login Controls são controles fornecidos peloAsp.Net que trabalham em conjunto com o Asp.Net MemberShip. Oscontroles encapsulam a lógica para solicitar aos usuários

T@rgetTrust Treinamento & Tecnologia 4

Page 12: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

credenciais, validar os usuários, recuperar senhas e outras açõesvinculadas com o gerenciamento de usuários. O resultado disso éque o Asp.Net MemberShip e os Asp.Net Login Controls fornecem umacamada de abstração sobre a autenticação por formulários. Essesrecursos substituem a maior parte ou todo o trabalho que vocênormalmente teria que fazer para utilizar a autenticação porformulários.

T@rgetTrust Treinamento & Tecnologia 5

Page 13: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Habilitando o site para utilizar ogerenciamento de segurança do Asp.Net 4.0

Ao criarmos um projeto no Visual Stuido 2010 podemos utilizaro template “Asp.Net Web Application”. Esse template irá criar umaaplicação asp.net com as páginas responsáveis por implementar asegurança dentro da pasta chamada Account. O projeto já estaráconfigurado para utilizarmos o gerenciamento de segurança doasp.net.

Mas para entendermos como implementar de uma forma eficiente aautenticação baseada em formulários, a aplicação base de nossocurso é baseada no template “Asp.Net Empty Web Application” que éum template que não cria nenhuma página pré definida em nossaaplicação. Esse template foi utilizado para que nós mesmospossamos estabelecer a estrutura de gerenciamento da segurança denossa aplicação.

Vamos criar uma pasta chamada “Security” em nossa aplicação evamos inserir 4 web forms dentro dessa pasta: Admin, Login,NewUser e ChangePassword.

A estrutura deve ficar conforme a figura abaixo.

T@rgetTrust Treinamento & Tecnologia 6

Page 14: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Após termos criado essa estrutura, com a pagina Default.aspxsetada como pagina inicial, vamos rodar nossa aplicação e note quepodemos navegar livremente em nossa aplicação.

Para que o nosso site utilize a autenticação por formulários énecessário que seja setada uma configuração no arquivo web.configde nossa aplicação asp.net.

Devemos configurar o web.config da seguinte maneira:

Essa configuração deve ser inserida dentro da Tag <system.web>do arquivo web.config. Nesta configuração informamos que o modo deautenticação será “Forms” e que o cookie de autenticação será“.ASPXAUTH”(o cookie padrão de autenticação do asp.net). Setamostambém o formulário responsável pela autenticação do usuário e oformulário default de nossa aplicação.

Agora vamos rodar nossa aplicação, com qualquer página setadacomo página (a pagina Admin.aspx por exemplo). Note quecontinuamos navegando livremente por qualquer página de nossaaplicação web. Isso ocorre porque nós definimos o método deautenticação de nosso site, mas não restringimos ainda o acesso aosite.

Para que possamos restringir o acesso a nossa aplicaçãodevemos adicionar a tag authorization no web.config logo abaixo datag authentication, dentro da tag principal <system.web>. Dentrodessa tag é configurado o nível de autorização de acesso que osusuários terão em nossa aplicação web.

Para desabilitar o aceso de usuários que não estejamautenticados em nosso site devemos adicionar ao arquivo web.configo seguinte código:

Após termos adicionado essa configuração no web.config, definaa página Default.aspx como a página inicial de nossa aplicação e

T@rgetTrust Treinamento & Tecnologia 7

Page 15: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

rode o sistema. Iremos perceber agora dois comportamentosdiferentes do que estava ocorrendo:

Você foi redirecionado para a página login.aspx. Istoocorre porque está é a página que nós configuramos como apágina onde o usuário irá se autenticar para ter acessoao nosso sistema e como nós restringimos o acesso ausuários desconhecidos, agora somente usuáriosautenticados poderão navegar dentro de nosso web site.

Na url, o asp.net adicionou informações da página que foitentado o acesso. Isso é necessário para que o asp.netsabia para qual página ele deve redirecionar o site logoapós.

Entendendo o gerenciamento da segurança

Agora que já trancamos o acesso de qualquer pessoa que não seautentique em nossa aplicação devemos criar uma funcionalidade quedisponibilize a usuários que criem contas para acesso em nossosite. Dependendo do tipo de aplicação essa página só será acessadapor administradores de sistema ou pode ser uma página que tenhalivre acesso. Um exemplo prático seria um sistema de um fórum ondepara ter acesso o usuário deve ser cadastrar no sistema. Dessaforma a página de criação de usuários teria livre acesso e aspáginas do fórum só seriam acessadas por usuários logados.

Na montagem das páginas de nossa aplicação nós definimos umapágina responsável por criar novos usuários chamada“NewUser.aspx”. Vamos configurar em nossa aplicação que o acesso ápágina de criação de usuários pode ser pública, como no exemplo dofórum.

Para que possamos configurar uma página com acesso públicodevemos adicionar uma nova chave após o fechamento do nó<system.web>, a chave location. Dentro da chave location iremosapontar o caminho da página que ela irá gerenciar e iremos criar,dentro da chave location uma nova refencia ao <system.web> e iremosconfigurar uma nova authorization, que gerenciará somente a páginaapontada pela location.

Uma das grandes desvantagens de trancar o acesso ao conteúdode nosso site, como fizemos em nossa aplicação, é que todo o

T@rgetTrust Treinamento & Tecnologia 8

Page 16: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

conteúdo fica desabilitado para interação com o usuário. Você podeconfirmar esse problema, se rodar a aplicação novamente e limpar ocache do navegador (ctrl + f5 no ie). Após limparmos o cache donavegador iremos perceber que toda a formatação de layout de nossosite realizada a partir dos arquivos css foi perdida. Isso ocorreporque o usuário ainda não se autenticou e está proibido deacessar o conteúdo da pasta que armazena os arquivos css. Paracontornar esse problema devemos habilitar o acesso de todos osusuários para as pastas que contem arquivos css, javascripts eoutros conteúdos que o sistema deve utilizar sem que o usuárioesteja logado no sistema.

Para habilitarmos o acesso de usuários não autenticados apágina de criação de usuários e aos arquivos de css devemosinserir o seguinte código no arquivo web.config:

Após termos inserido esse código no web.config vamos inserirum texto na página de login de nossa aplicação e um hyperlink queirá redirecionar um usuário para a página de criação de contas deusuários. Dessa forma será possível que um usuário que não tenhanenhuma conta possa se registrar em nosso sistema.

Agora vamos rodar nosso sistema com a página Default.aspxsetada como página inicial de nossa aplicação. Poderemos ver queautomaticamente seremos redirecionados para a página de Login eagora teremos um hyperlink que nos redirecionará para a página de

T@rgetTrust Treinamento & Tecnologia 9

Page 17: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

criação de usuários. Podemos reparar que tanto a página deusuários como a configuração de layout (css) voltaram a seracessíveis por usuários que não estão logados em nosso sistema.

O próximo passo é inserirmos a funcionalidade de criação deusuários, porque até agora apenas disponibilizamos a navegação atéa página de criação de usuários, mas a página ainda não possuinenhuma funcionalidade.

Criando Usuários e explorando a estrutura criada

O Visual Studio 2010 disponibiliza o controleCreateUserWizard. Esse controle é responsável por toda a criaçãode novos usuários que estarão vinculados com nossa aplicação.Todo o gerenciamento de criação de usuários está encapsuladodentro do controle.

Para utilizarmos esse controle basta adicionarmos o controleem nossa página de criação de usuários. O controle possui diversaspropriedades de customização. É interessante que você dê umaolhada nas propriedades do controle para ter uma idéia dacapacidade de personalização.

Seguindo a construção de nossa aplicação, agora vamosadicionar o controle CreateUserWizard ao formulário NewUser.aspx.O código do formulário deve ficar conforme a figura abaixo.

T@rgetTrust Treinamento & Tecnologia 10

Page 18: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Após ter inserido esse código no NewUser.aspx, coloque oformulário em modo design, clique com o botão direito sobre ocontrole, selecione a opção Auto Format e selecione o schemaProfessional e aplique. Com isso iremos deixar o nosso controlecom uma aparência pré-definida.

Agora vamos rodar a nossa aplicação, iremos ir direto para apágina de login, utilizaremos o atalho para navegar até a páginade criação de usuários e iremos realizar um cadastro de nossousuário para navegar em todo o nosso sistema.

O preenchimento do controle será como o da figura abaixo.

Após termos criado o usuário o controle muda de aparência einforma que o usuário foi criado com sucesso!

T@rgetTrust Treinamento & Tecnologia 11

Page 19: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Após termos criado o usuário vamos voltar em nossa aplicação evamos explorar a estrutura criada pelo asp.net para gerenciamentodos dados referentes aos usuários do sistema.

Para explorarmos a estrutura criada devemos ir ao SolutionExplorer e expandir a pasta App_Data, note que dentro desta pastafoi criado um banco SQL Express chamado ASPNETDM.MDF. Dentro destebanco estarão as tabelas responsáveis por armazenar todos osusuários e informações relacionadas à segurança em nossaaplicação.

Ao darmos um duplo clique sobre o banco de dados será aberta ajanela Database Explorer. Dessa forma poderemos analisar toda aestrutura de tabelas de nosso banco de dados. Visualize os dadosda tabela aspnet_Users e perceba que os dados do usuáriocadastrado estão armazenados dentro desta tabela.

T@rgetTrust Treinamento & Tecnologia 12

Page 20: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Uma das grandes limitações de trabalhar com o modelo degerenciamento de segurança do asp.net é que ele trabalha emconjunto com o banco ASPNETDB.MDF e muitas vezes queremos que asegurança trabalhe em conjunto com nossa aplicação. Para contormaresse problema devemos implementar um Membership Provider apontadopara a nossa base de dados. Quando implementamos um MemberShipProvider estamos sobreescrevendo as funcionalidades degerenciamento de segunança do asp.net e estamos adotando a nossaimplementação como o gerenciador de segurança. Para mais detalhesde como implementar um MemberShip Provider consulte o seguintelink: http://msdn.microsoft.com/en-us/library/6tc47t75.aspx.

Validando usuários com o Login

Após termos criado um usuário para acessar nossa aplicaçãodevemos agora preparar uma tela de login, onde o usuário iráentrar com suas credenciais e o sistema irá validar se elerealmente é quem ele diz ser e caso a resposta seja positiva osistema deva permitir o livre acesso do usuário a áreas que a elasejam permitidas.

Para executar o processo de validação do usuário o asp.netdisponibiliza o controle Login. Toda a lógica de controle deacesso do usuário está encapsulada dentro do controle.

T@rgetTrust Treinamento & Tecnologia 13

Page 21: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Para implementarmos essa funcionalidade em nossa aplicação,vamos na página Login.aspx e vamos arrastar um controle login paradentro de nosso form, abaixo da tag de fechamento do parágrafo(<p></p>). Para deixarmos o visual com um aspecto legal éinteressante adicionar uma linha (<br />) entre o final doparágrafo e o nosso controle. Após termos inserido o controlevamos definir o estilo do controle como Professional. O resultadodeve ficar igual à figura abaixo.

Vamos rodar o sistema, ao digitarmos o usuário e a senhacorreta seremos direcionados para a página Default.aspx, casodigitemos usuário ou senha errado, ficaremos trancados na tela delogin.

Com esse controle o asp.net gerencia todo o controle de acessoao nosso sistema e não precisamos programar nenhuma linha.

Utilizando o ChangePassword para trocar assenhas

Outra funcionalidade importante que todo o gerenciamento desegurança deve possuir e a possibilidade de trocar as senhas dosusuários da aplicação.

O asp.net disponibiliza o controle ChangePassword. Essecontrole é responsável por gerenciar a troca de senhas dosusuários. Para utilizá-lo basta arrastar o controle para dentro deum web form. Toda a regra de negócio já está encapsulada dentro docontrole. Nós não precisamos escrever nenhuma linha de código paraque o controle funcione.

T@rgetTrust Treinamento & Tecnologia 14

Page 22: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Para implementarmos essa funcionalidade em nossa aplicação,vamos na página ChangePassword.aspx e vamos inserir o controle emnosso formulário. O código do web form deve ficar conforme abaixo.

Após ter inserido o controle configure o controle parautilizar o estilo Professional. Devemos também inserir um atalhode navegação para a tela de trocar senha em nossa aplicação. Paraisso insira o código abaixo na página Main.master logo abaixo dofechamento da div que utiliza a class “title”.

Agora vamos rodar nossa aplicação, note que somenteconseguiremos navegar para a página de trocar a senha após termoslogado no sistema. O resultado dá página de trocar a senha deveser igual a figura abaixo.

Após termos realizado a alteração de uma senha o controle deveapresentar uma mensagem informando que a alteração foi realizadacom sucesso.

Um comportamento que nossa aplicação está tendo que não élegal é sempre apresentar para o usuário a opção de trocar a

T@rgetTrust Treinamento & Tecnologia 15

Page 23: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

senha, mesmo que o usuário não esteja logado. O correto éapresentar essa opção somente para quem já se logou no sistema.Veremos adiante como podemos resolver esse problema.

Entendendo e utilizando os controlesLoginStatus, LoginName e LoginView

Podemos ver em nossa aplicação que ainda não criamos nenhumatalho a tela de login e nem uma opção para o usuário efetuar ologout do sistema. Para implementarmos essa funcionalidade podemosutilizar o controle LoginStatus que o asp.net fornece.

O controle LoginStatus funciona como um atalho para o login oupara o loginout do usuário. O controle funciona com duasvisualizações: Logged Out, que funciona quando o usuário não estáautenticado e a visualização Logged In que funciona quando ousuário já se autenticou em nosso sistema.

Para entendermos o funcionamento do LoginStatus vamos utiliza-lo em nossa aplicação. Vamos na página Main.master e vamosadicionar um controle LoginStatus logo acima do hyperlink detrocar senha. No controle LoginStatus vamos definir a visão comoLoggedOut e vamos rodar nossa aplicação.

Note que enquanto não nos logamos no sistema o texto que ocontrole apresenta é “Login” e sempre que clicarmos no controleseremos redirecionados para a página de login. Após termos noslogado o controle irá apresentar o texto Logout. Quando clicarmosno controle LoginStatus e ele estiver apresentando a opção delogout o nosso cookie de autenticação será excluído e seremosredirecionados para a página de login para novamente nosautenticarmos em nossa aplicação.

T@rgetTrust Treinamento & Tecnologia 16

Page 24: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Outra funcionalidade importante em aplicações web é apresentaro nome do usuário que está logado no sistema. Para isso temos ocontrole LoginName. Esse controle simplesmente apresenta o nome dousuário autenticado em nossa aplicação.

Para termos um efeito mais profissional em nossa aplicaçãoutilizamos a propriedade formatString para mesclar textosjuntamente com o nome do usuário.

Vamos implementar essa funcionalidade em nossa aplicação.Vamos na página Main.master e vamos adicionar o seguinte códigologo acima do controle LoginStatus.

Agora vamos rodar nossa aplicação, enquanto não estivermos logado nenhuma mensagem será apresentada, mas após nos logarmos emnosso sistema será apresentado à mensagem: “Seja bem-vindo (nome do usuário que se logou)”.

Podemos perceber que a opção de Trocar Senha sempre ficavisível, mesmo que o usuário não esteja autenticado. Já levantamosessa questão e apontamos como uma falha de design em nossa

T@rgetTrust Treinamento & Tecnologia 17

Page 25: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

aplicação. Para resolvermos isso podemos utilizar o controleLoginView.

O controle LoginView tem como objetivo exibir determinadoconteúdo quando o usuário estiver autenticado e outro conteúdoenquanto o usuário não se autenticar em nosso sistema.

O controle é formado por dois templates: Anonymous e Loggedin.No template Anonymous colocaremos o conteúdo que queremos que sejaapresentado quando o usuário não esteja autenticado e no templateLoggedin colocaremos o conteúdo que queremos que seja apresentadoquando o usuário se autenticar.

Para entendermos melhor esse funcionamento vamos em nossaaplicação, na página Main.master e vamos alterar o conteúdo queestá dentro da div que utiliza a class “loginDisplay”. Vamosadicionar um loginView e dentro do template anonymous vamosadicionar uma label que irá informar para o usuário que não temnenhum usuário logado no sistema e dentro do template Loggedinvamos colocar o nosso hyperlink de trocar a senha. O código deveficar conforme abaixo:

Agora vamos rodar a nossa aplicação. Enquanto o usuário não seloga o loginview irá exibir a label informando que o usuário nãose logou.

T@rgetTrust Treinamento & Tecnologia 18

Page 26: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Após o usuário ter se logado o loginview irá apresentar ohyperlink de trocar a senha.

T@rgetTrust Treinamento & Tecnologia 19

Page 27: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Gerenciamento Manual de usuários

Vimos até agora como podemos implementar segurança em nossasaplicações asp.net utilizando os controles disponibilizados peloasp.net. Os controles encapsulam todas as regras de negócio efuncionam de uma forma pré-definida em seu desenvolvimento.

Muitos programadores simplesmente não gostam de deixar ogerenciamento de uma funcionalidade tão importante, como asegurança do site, ao cargo de controles em que o programador nãoconsegue gerenciar todo o fluxo de trabalho. Pensando emdisponiblizar uma maior flexibilidade ao programador o .netframework disponibiliza todas as funcionalidades de seus controlesdentro de classes que estão na namespace System.Web.Security.Dessa forma tudo que vimos até agora podemos implementarmanualmente.

Na tabela abaixo é apresentado algumas das classes disponíveisno System.Web.Security e suas funcionalidades.

Classe Funcionalidade

Membership Responsável por validarcredenciais de usuários egerenciar configurações deusuários.

MembershipCreateUserException Armazena os possíveis erros aocriar novos usuários.

MembershipPasswordException Armazena os possíveis errosrefentes a senhas dos usuários.

MembershipProvider Define os contratos deimplementação do membershipprovider do asp.net comproviders customizados.

MembershipUser Responsável por buscar eatualizar informações do usuário

T@rgetTrust Treinamento & Tecnologia 20

Page 28: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

na base de dados.

Roles Gerencia a participação dousuário em grupos de funções.

Em função de possuirmos muitas classes nesse namespace estamoscitando apenas algumas classes. Para um estudo mais aprofundado detodas as opções acesse:http://msdn.microsoft.com/en-us/library/kt5ssstk.aspx

Classes Membership e MembershipUser

Essas duas classes podem ser consideradas as mais importantesquando queremos implementar manualmente o gerenciamento desegurança. Abaixo vamos listar alguns dos principais métodosdessas classes.

Classe Membership

o CreateUser – Cria um novo usuário.

o DeleteUser – Exclui um usuário.

o FindUserByEmail – Localiza usuários a partir doemail cadastrado.

o FindUserByName – Localiza usuário a partir do nome.

o GeneratePassword – Gera um senha randômica.

o GetAllUsers – Retorna uma coleção com todos osusuários.

o UpdateUser – Atualiza as informações do usuário.

o ValidateUser – Validad se o nome do usuário e asenha são válidos.

Para mais informações sobre a classe Membership acesseo seguinte link:http://msdn.microsoft.com/en-us/library/system.web.security.membership.aspx

Classe MembershipUser

T@rgetTrust Treinamento & Tecnologia 21

Page 29: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

o CreationDate – Data e hora de criação do usuário.

o Email – Retorna ou seta o email de um determinadousuário.

o IsOnline – Indica se o usuário está online.

o PasswordQuestion – Retorna a questão da senha que ousuário cadastrou.

o ChangePassword – Altera a senha de um usuário.

o ResetPassword – Reseta a senha do usuário, gerandoautomaticamente uma nova senha.

Para mais informações sobre a classe MembershipUseracesse o seguinte link: http://msdn.microsoft.com/en-us/library/system.web.security.membershipuser.aspx.

Utilizando GruposEstudamos os métodos de gerenciamentos de usuários

implementados com controles e com o auxilio de classes manuais,mas ainda falta entendermos como funcionam os Grupos(roles) dosusuários.

Grupos servem para definir perfis dos usuários que estãovinculados a ele. Por exemplo, normalmente em um sistema temos ogrupo administrativo que tem acesso a todas as funcionalidades dosistema e temos o grupo operacional onde os usuários deste grupotêm acesso a algumas páginas que usuários não autenticados nãopossuem e não tem acesso a algumas páginas que somente usuários dogrupo administrativo têm.

O gerenciamento de grupos de usuários não é realizado comcontroles. Deve ser implementado pelo programador. O fluxo detrabalho é de gerar grupos e associar o grupo com os usuários quedevem fazer parte dele.

Para entendermos o funcionamento dos grupos de usuários vamosimplementá-lo em nossa aplicação.

Primeiramente devemos habilitar em nossa aplicação ogerenciamento de grupos de usuários. Por padrão essa opção é

T@rgetTrust Treinamento & Tecnologia 22

Page 30: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

desabilitada. Para isso devemos inserir o seguinte código noweb.config de nossa aplicação dentro da tag <system.web>.

Após termos configurado nossa aplicação para utilizar ogerenciamento de grupos vamos adicionar uma página, na pastaSecurity, chamada cadGrupos.aspx e vamos incluir uma opção no menude acesso a essa página.

O comportamento que queremos em nossa aplicação é criar umgrupo chamado admin e somente usuários vinculados com o grupoadmin possuam acesso a página “admin.aspx” que está dentro dapasta security em nossa aplicação.

Para isso vamos criar na página cadGrupos.aspx as seguintesfuncionalidades:

Uma listagem apresentando todos os usuários cadastrados.

Uma caixa de texto e um botão onde o usuário irá digitaro nome do grupo e o botão irá criar esse grupo.

Uma listagem que irá apresentar todos os grupos criados.

Um botão que irá associar os usuários do sistema com osgrupos disponíveis.

Para conseguirmos essa interface vamos inserir o seguintecódigo na página cadGrupos.aspx.

T@rgetTrust Treinamento & Tecnologia 23

Page 31: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Quando renderizarmos nossa página ela deve ficar com oseguinte aspecto.

O próximo passo é carregarmos a listBox de usuários com todosos usuários disponíveis e gerarmos um método que irá carregar alistBox de grupos com todos os grupos disponíveis.

T@rgetTrust Treinamento & Tecnologia 24

Page 32: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Vamos inserir o seguinte código na página cadGrupos.aspx.

Note que estamos atualizando a listBox de usuários sempre quecarregamos a pagina e colocamos o carregamento da listBox degrupos no método “Grupos_Databind”. Criamos o método“Grupos_Databind” para que esse método possa ser reaproveitado emmais de uma situação em nossa página.

O próximo passo é criarmos o código do botão “AdicionarGrupo”. Vamos dar um duplo clique no botão e vamos inserir ocódigo abaixo.

Esse código irá chamar o método CreateRole passando o nome dogrupo que foi digitado na TextBox, dessa forma criando um novogrupo. Após criar o grupo o método chama o método para atualizar alistBox de grupos e limpa a TextBox.

Roda sua aplicação e crie um grupo chamado admin.

O próximo passo é criarmos a funcionalidade de vincularusuários com grupos de usuários. Para isso vamos inserir o códigoabaixo no evento click do botão “Vincular usuários com grupo((btnVincularUsuarioGrupo).

T@rgetTrust Treinamento & Tecnologia 25

Page 33: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Neste código é pego o nome do usuário que está selecionado nalistBox de usuários e o nome do grupo que está selecionado nalistBox de Grupos e é realizado a vinculação entre o usuário e ogrupo através do método AddUserToRole.

O próximo passo é Adicionar o código do botão Grupos dousuário, que irá apresentar todos os grupos vinculados com ousuário que está selecionado na listBox de usuários. Para issovamos inserir o seguinte código do evento click do botão grupos deusuário.

Agora vamos rodar nossa aplicação e vamos criar um novousuário, este usuário não irá ser vinculado com nenhum grupo e iráservir para testarmos se realmente a aplicação irá trancar oacesso de usuários que não estão vinculados com o grupo adminpodem ter acesso a pagina Admin.aspx. Após termos criado o novousuário vamos na página de grupos e vamos vincular o usuário queestamos utilizando em nossa aplicação com o grupo Admin. Apóstermos efetuado o vinculo selecione o primeiro usuário na caixa delistagem e clique em grupos de usuário e veja o grupo admin sendomostrado como uma grupo vinculado, após selecione o novo usuário eclique em grupos de usuários e note que nenhum grupo seráapresentado.

Agora temos que garantir que somente usuários do grupo adminpossam acessar a página Admin.aspx, para isso vamos adicionar oseguinte código em nosso web.config, logo abaixo do fechamento datag location referente a página “Security/newUser.aspx”.

T@rgetTrust Treinamento & Tecnologia 26

Page 34: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

A estrutura do nó é muito semelhante a estrutura criada paragerenciar a pagina NewUser.aspx. A diferença é que aqui negamostodos os acessos a página menos os de usuários que pertencem aogrupo admin.

Agora crie um atalho para a página Admin.aspx no menu daMaster Page, rode o sistema, primeiro acesse com o novo usuáriocriado e note que não consegue acessar a página. Troque o usuáriologado para o usuário que está vinculado ao grupo admin e percebaque agora é possivel acessar a página.

T@rgetTrust Treinamento & Tecnologia 27

Page 35: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Exercícios

1. Crie uma aplicação web que implemente os controles desegurança do asp.net 4.0.

2. Refaça os controles de segurança de sua aplicaçãogerenciando todas as funcionalidades de segurança manualmente.

3. Vincule seus usuários com grupos pré-definidos e apresenteconteúdo personalizado para os usuários em virtude dos grupos queeles estão vinculados. Lembre-se que um usuário pode estarvinculado com mais de um grupo.

T@rgetTrust Treinamento & Tecnologia 28

Page 36: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Espaço para Anotações

T@rgetTrust Treinamento & Tecnologia 29

Page 37: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

2.2.Globalização eGlobalização eLocalizaçãoLocalização

T@rgetTrust Treinamento & Tecnologia 30

Page 38: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Objetivos

Ao final deste capítulo você estará apto à: Conhecer os recursos de localização e globalização

do ASP.Net. Formatar os dados de suas paginas asp.net

respeitando a cultura do browser. Utilizar os recursos de tradução local e global em

sua aplicação ASP.Net

T@rgetTrust Treinamento & Tecnologia 31

Page 39: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

O que é globalização e localização?

Globalização é o processo de criar uma aplicação que atenda asnecessidades de usuários de múltiplas culturas. Este processoenvolve muito mais do que simplesmente traduzir elementos deinterface do usuário da aplicação em múltiplas linguagens, eletambem inclui usar o sinal da moeda corrente, formato dedata/hora, calendário, etc. Acomodar essas diferenças culturais emuma aplicação é chamado de localização.

Localizar uma aplicação ASP.NET significa ajustar a aplicaçãoa cultura corrente do browser do usuário, fazendo com que dadossejam apresentados em um formato familiar do usuário. Abaixoalguns exemplos de dados que sofrem interferência pelalocalização:

Formato de Data

o Cada país possui uma notação padrão para datas.Exemplo: Brasil utiliza o padrão dd/mm/aaaa; EUAutiliza mm/dd/aaaa

Idioma

o Seria como traduzir o seu aplicativo para dois oumais idiomas.

Formato de moeda

o Tal qual o formato de data, cada país tem suanotação padrão para moeda. Por exemplo, Brasilutiliza R$999.999,99; EUA utiliza U$999,999.99

Existem dois tipos de cultura a serem consideradas em umaplicativo ASP.NET:

• Culture - Responsável pela formatação de dados a seremutilizados pelo sistema (data, moeda etc.);

• UICulture - Responsável pela formatação dos recursos a seremapresentados na interface com o usuário, isso é, tradução dosdados existentes no Web Form (conteúdo e propriedades de controlescomo: labels, botões, títulos, tooltips etc.).

T@rgetTrust Treinamento & Tecnologia 32

Page 40: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

O .Net Framework 4.0 suporta um mínimo de 354 culturasdiferentes, tendo evoluído de um mínimo de 203 culturas no .netframework 3.5. Muito dessas culturas são culturas neutras queforam incluídas para adicionar informações a culturas pais.

T@rgetTrust Treinamento & Tecnologia 33

Page 41: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Localizando valores em uma aplicação asp.Net

Para que uma aplicação asp.net exiba para o usuário dadoslocalizados em uma determinada cultura é necessário que sejaconfigurado o parâmetro culture. Este parâmetro é responsável porinformar ao asp.net como ele deve proceder em relação a dados delocalização dentro da aplicação.

O parâmetro culture pode ser configurado das seguintesmaneiras:

Detectar automaticamente a cultura do usuário;

Detectar automaticamente a cultura do usuário e caso nãogerencie a cultura corrente utilizar uma cultura padrão;

Forçar a utilização de uma determinada cultura.

Agora para alcançarmos um entendimento da utilização deculturas, vamos configurar nossa aplicação para trabalhar comculturas.

Como nossa aplicação trabalha com Master.Pages vamos colocarum controle na master que estará integrado com as culturas e outrocontrole na página Default.aspx. Vamos colocar em dois lugaresdiferentes para acompanharmos os cuidados que devemos ter aoutilizar culturas nas Master.Pages.

Primeiro passo devemos adicionar o seguinte código em nossoarquivo Site.css.

Após termos inserido o tratamento visual para a tag h2 dentroda div Title, vamos atualizar o código da div Title do Main.masterconforme abaixo.

T@rgetTrust Treinamento & Tecnologia 34

Page 42: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

O próximo passo é inserirmos o seguinte código na pagina decódigos do Main.master.

Com estas alterações sempre que entramos em nossa aplicaçãoiremos apresentar a data atual no cabeçalho de nossa Main.master.

Agora o próximo passo é atualizar a página Default.aspx comcontroles que irão apresentar a data na página. O primeiro passo éatualizar a tag h2 com o seguinte código.

O próximo passo é atualizar o code behind dá mesma forma quefizemos com a main.master. Abaixo o código que deve ser inseridona default.aspx.cs.

No exemplo acima inserimos uma label que irá apresentar a datae a hora atual tanto na página default.aspx como na main.master.Ao executarmos a nossa aplicação é possivel visualizar aformatação dos dados de acordo com as configurações regionais doservidor em que a aplicação está sendo executada. Mas devemos nospreocupar que em aplicações que atendam diferentes culturas, asconfigurações regionais do servidor não são as mesmasconfigurações regionais do usuário. Uma forma de detectarmos qual

T@rgetTrust Treinamento & Tecnologia 35

Page 43: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

é a cultura do usuário é a partir da configuração regional do seubrowser. Se o browser é um internet Explorer podemos verificar oseu idioma a partir do seguinte caminho:

Menu ferramentas;

Opções de internet;

Aba Geral, botão idiomas;

Vamos definir a língua americana para ser o idioma default dobrowser e vamos rodar nossa aplicação. Podemos ver que nenhumamudança de comportamento ocorre quando mudamos o idioma dobrowser. Para que a aplicação entenda que deve utilizar a culturado browser do usuário devemos adicionar o parâmetro culture nadiretiva da pagina default.aspx. Note que a main.Master não possuio parâmetro culture em suas opções. Isso ocorre porque todas asMaster Pages herdam de System.Web.UI.UserControl e as diretivasreferentes a globalização estão dentro de SystemWeb.UI.Page.

Para continuarmos nosso exercício devemos configurarDefault.aspx conforme a imagem abaixo.

Vamos rodar novamente nossa aplicação, note que na tela delogin o campo data que está na master Page está mostrando a data

T@rgetTrust Treinamento & Tecnologia 36

Page 44: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

com o formato em português (ou a configuração regional docomputador que você está utilizando). Após logarmos a aplicaçãoseremos redirecionados para a página Default.aspx e o campo datatanto da página default.aspx como da master Page estarãoapresentando o formato da data em inglês (levando em conta quevocê está usando o idioma inglês em seu browser, caso não estejautilizando coloque o idioma do browser para inglês).

Navegue entre as opções do menu e note que quando saímos dapágina default.aspx o campo data da master page muda o formato dadata apresentado. Esse comportamento ocorre porque a master pageimplementa a cultura da página filha que ela está apresentando.Para que não tenhamos esse comportamento devemos configurar acultura dentro do web.config.

Sempre que configuramos a cultura no web.config, estaconfiguração irá refletir em todo o sistema. Esta é uma opçãomuito vantajosa para nós programadores. Image a seguinte situação:Temos uma aplicação asp.net que possui aproximadamente 200 webforms. Para setarmos as diretivas de Culture de todos os web formsteríamos que entrar em cada um deles e configurar na sua diretivade pagina o valor do parâmetro Culture. Fazendo com que tenhamos umgrande trabalho manual. Se configurarmos no web.config basta umaúnica linha de código e toda nossa aplicacação irá utilizar asdiretivas de cultura especificadas no web.config.

Configuramos o web.config com a seguinte diretiva dentro datag <system.web>.

Após termos atualizado nosso web.config rode a aplicação enote que a data apresentada na master page não sofre mais

T@rgetTrust Treinamento & Tecnologia 37

Page 45: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

alterações quando mudamos de página. Agora todas as páginas denosso sistema utilizam a mesma cultura.

Existe situações em que a cultura do browser não é suportadapelo .net framework 4.0. Neste caso a cultura utilizada é a doservidor.

Caso exista a necessidade de forçar uma cultura especificaquando o .net framework não suporte a cultura do browser oparâmetro culture será configurado da seguinte maneira.

No exemplo acima quando a aplicação não suportar a cultura dobrowser irá utilizar a cultura portuguesa do Brasil (PT-BR) comocultura default da página.

T@rgetTrust Treinamento & Tecnologia 38

Page 46: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Traduzindo interfaces do usuário com oasp.net

Um aspecto fundamental para que aplicações multiculturaistenham sucesso na integração com usuários de diferentes culturas éa tradução de todas as interfaces de usuários que são apresentadospela aplicação.

O parâmetro responsável por gerenciar a linguagem deapresentação dos recursos de interface é o UICulture.

Podemos definir como recursos de interface do usuáriopropriedades como text e tooltip de uma textBox. O gerenciamentode UICulture irá buscar o valor apropriado em um arquivo derecurso e irá substituir o valor dessas propriedades com o valorcontido dentro do arquivo de recurso corresponde a cultura dobrowser do usuário. Dessa forma é possivel que um usuário com seubrowser definido com o idioma em inglês visualize a aplicação eminglês e um usuário com o idioma francês visualize a aplicação emfrancês.

Abaixo vamos realizar um exercício prático para que possamosvisualizar uma aplicação sendo apresentada em diversos idiomas.Neste caso vamos preparar algumas partes da aplicação que estamosdesenvolvendo nesse curso para apresentar alguns textos de acordocom o idioma do browser do cliente.

O primeiro passo é irmos a nossa página Default.aspx esubstituir os textos digitados na página por labels. O aspx dapágina deve ficar conforme a figura abaixo.

Agora nossa página possui duas labels (lblBemVindo elblIntroCurso) que apresentam os textos da página em português.

T@rgetTrust Treinamento & Tecnologia 39

Page 47: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Apesar de termos colocado nossos textos dentro de controlesasp.net da forma como a página está ainda não é possivel gerenciarqualquer tradução para as interfaces de nossa página.

O asp.net disponibiliza duas formas de traduzir nossasinterfaces com o usuário.

Tradução por página;

Tradução global do sistema;

Na tradução por página devemos vincular um arquivo, que irágerenciar o conteúdo apresentado por cada idioma, a cada webformde nossa aplicação. O arquivo responsável por gerenciar o conteúdoé do tipo resource.resx é deve ter seu nome igual ao nome dapagina acrescentado com o nome da cultura que ele gerencia. Porexemplo uma pagina chamada menu.aspx terá como um arquivo derecurso chamado menu.en.resx responsável pela tradução para oidioma inglês e um arquivo de recurso chamado menu.fr.resxresponsável pela tradução para o idioma francês.

Os arquivos de recursos devem ficar contidos dentro da pasta“app_LocalResources”. Essa pasta é uma pasta especifica doasp.net. Para habilitarmos essa pasta devemos clicar com o botãodireito em nosso web site, dentro do solution Explorer, e ir àopção add asp.net folder e selecionar a pasta app_LocalResources.Todos os arquivos de recursos para tradução por paginas deverãoser inseridos, obrigatoriamente, dentro desta pasta.

T@rgetTrust Treinamento & Tecnologia 40

Page 48: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Seguindo nosso exercício agora vamos inserir arquivos derecurso para a página Default.aspx. Devemos inserir um arquivo derecurso sem fazer mensão a nenhum idioma, esse arquivo de recursoserá o default de nossa página, e outro arquivo de recursoreferente ao idioma inglês.

O primeiro passo é inserirmos o arquivo de recurso default denossa página (em português). Após adicionarmos a pastaapp_LocalResource em nossa solução, vamos clicar com o botãodireito em cima dela e adicionarmos um novo item (Add newitem...). O tipo do item deve ser uma resource file e o nome doarquivo será Default.aspx.resx

T@rgetTrust Treinamento & Tecnologia 41

Page 49: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Dentro do arquivo de recursos será colocado todas as chaves detradução referente aos controles da pagina Default.aspx do nossoexemplo. O arquivo de recurso é formato por uma listagem de 3colunas. A primeira coluna é o nome da chave de tradução, asegunda coluna será o valor da tradução e a terceira coluna é umcomentário. A primeira e a segunda coluna são obrigatórias e aterceira coluna é opcional.

Obrigatoriamente o nome da chave de tradução deverá ter oseguinte formato: nomedachave.propriedade dessa forma é possívelvincular uma propriedade a chave de tradução, informando assimqual propriedade do controle que deve ter seus valor trocado pelovalor do arquivo de recurso associado a página. Isso é importante,pois possibilita que um controle tenha diferentes propriedadessuas traduzidas com diferentes valores.

No exemplo acima podemos ver o arquivo de recurso associado apagina Default. O próximo passo é inserirmos outro arquivo derecurso, o arquivo de recurso deve ser chamadoDefault.aspx.en.resx, devemos inserir as mesmas chaves queinserimos no arquivo de recurso anterior, única coisa que devemos

T@rgetTrust Treinamento & Tecnologia 42

Page 50: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

mudar são as propriedades value, que agoram devem conter o textoque deve ser apresentado quando o idioma do usuário for o idiomainglês.

O arquivo de recurso em inglês deve ficar conforme a figuraabaixo.

O próximo passo é alterar nossa pagina para que ela utilize aglobalização de interface. Para que a pagina entenda que devetraduzir seus elementos de interface deve ser modificado oparâmetro UICulture da pagina para true.

O atributo UICulture também pode ser configurado dentro doweb.config na tag Globalization para que ele tenha efeito em todoo sistema.

O próximo passo é vincular os controles da pagina com a suachave do arquivo de recurso. Para isso utilizamos o atributometa:resourceKey. Esse atributo é o elo de ligação entre ocontrole e o arquivo resourceKey. Quando utilizamos ometa:resourceKey não é mais necessário preencher as propriedadesdo controle que serão traduzidas, como por exemplo a propriedadeText.

Abaixo podemos ver como ficará a pagina Default.aspx com seuscontroles vinculados ao arquivo de resource através dometa:resourceKey.

T@rgetTrust Treinamento & Tecnologia 43

Page 51: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Se rodarmos nossa aplicação e ficarmos alternando o idioma dobrowser entre português e inglês iremos ver nosso conteúdo deinterface traduzido na linguagem do browser.

A outra forma de traduzir nossos elementos de interface é atradução global do sistema. Essa forma é a mais utilizada emprojetos .net devido a sua facilidade de manutenção ereaproveitamento de código. Imagine a seguinte situação: Umprojeto tem aproximadamente 200 web forms diferentes e esteprojeto deve ser traduzido para 5 idiomas. Se utilizarmos atradução por paginas então teríamos 5 arquivos de resources paracada pagina. Somente de arquivo de resources teríamos 1000arquivos em nosso projeto. A grande vantagem da tradução global dosistema é que existe um arquivo de resource por idioma e estearquivo de resource pode ser utilizado por qualquer web form denosso projeto. Na situação hipotética que acabamos de levantarteríamos apenas 5 arquivos de resource em nosso projeto ao invésde 1000 arquivos.

Na tradução global os arquivos de resources devem ficar dentroda pasta “app_GlobalResources”. Essa pasta é uma pasta especificado asp.net. Para habilitarmos essa pasta devemos clicar com obotão direito em nosso web site, dentro do solution Explorer, e irna opção add asp.net folder e selecionar a pastaapp_GlobalResources. Todos os arquivos de recursos para traduçãoglobal deverão ser inseridos, obrigatoriamente, dentro destapasta.

A diferença dos arquivos de resources que atuam em formaglobal é que a chave não pode possuir .propriedade. Elas somenteirão ter um nome. Isso é necessário porque o arquivo global não

T@rgetTrust Treinamento & Tecnologia 44

Page 52: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

fica vinculado a nenhuma página e a utilização de suas chaves deveser configurada manualmente dentro das propriedades dos controlesde interface.

Prosseguindo em nosso exercício, vamos inserir dois arquivosde resources globais dentro de nossa aplicação. Um chamadoGlobal.resx, que será o resource default de nossa aplicação, e oarquivo Global.en.resx que será o resource global responsávelpelos elementos de tradução da língua inglesa em nossa aplicação.

Em nossos arquivos de resource vamos criar uma chave chamadamsgTeste. No arquivo Global.resx o valor da chave msgTeste será“Teste em português!” e no arquivo Global.en.resx o valor da chavemsgTeste será “Teste em Inglês!”.

Agora vamos na pagina Default.aspx e iremos inserir uma label,logo abaixo do parágrafo de introduçõ do curso, com a seguintesintaxe:

Diferentemente da tradução por página em que o atributometa:resourceKey se encarregava de vincular o controle com a chavedo resource, na tradução global é inserido um código aspx dentroda propriedade que queremos que apresente seu valor traduzido. Na

T@rgetTrust Treinamento & Tecnologia 45

Page 53: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

label lblMsgTeste está sendo configurado que na propriedade Textirá aparecer o valor da chave msgTeste do arquivo resource chamadoGlobal.

Agorá vamos rodar nossa aplicação e iremos perceber que se oidioma de nosso browser for inglês será exibido na lblMsgTeste otexto “Teste em inglês!” senão, se o idioma for português ouqualquer outro, será exibido o texto “Teste em português!”.

T@rgetTrust Treinamento & Tecnologia 46

Page 54: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Exercícios

1. Implementa a tradução, por página, na página de login.

2. Faça com que a nossa aplicação suporte o idioma francês.

3. Implementa tradução global na página master.

T@rgetTrust Treinamento & Tecnologia 47

Page 55: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Espaço para Anotações

T@rgetTrust Treinamento & Tecnologia 48

Page 56: Asp Net 4 0 avancado versao final

ASP.NET 3.5 Avançado

3.3.UtilizandoUtilizandoComponentes no ASP.NETComponentes no ASP.NET

T@rgetTrust Treinamento & Tecnologia 49

Page 57: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Objetivos

Ao final deste capítulo você estará apto à: Trabalhar com múltiplos projetos no Visual

Studio.NET Utilizar Dll’s externas Instanciar classes de outros assemblys

T@rgetTrust Treinamento & Tecnologia 50

Page 58: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

O que são componentes?

Desde as primeiras versões das ferramentas de desenvolvimentoMicrosoft, umas das características mais marcantes nestasferramentas é a capacidade de utilizarmos recursos parareutilização de código. Nas aplicações ASP.NET isto não édiferente. Quando construímos uma aplicação em ASP.NET, o ideal étentarmos dividir a aplicação em módulos menores, a fim de tornaro gerenciamento e a manutenção da aplicação mais facilitada.

Para criarmos uma aplicação mais modularizada podemos fazeruso de componentes no ASP.NET. Os componentes são blocos de códigocompilados em um assembly (DLL) que podem ser utilizados emdiversas aplicações. Para criarmos um componente, devemos criar umprojeto do tipo Class Library. Este tipo de projeto nos permite acriação de classes que podem conter boa parte da lógica daaplicação. Desta forma, conseguimos modularizar a aplicação emdiversas classes ao invés de termos toda a codificação daaplicação inserida diretamente nas páginas ASP.NET.

T@rgetTrust Treinamento & Tecnologia 51

Page 59: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Utilizando uma DLL externaPara entendermos a utilização de Dll’s externas, vamos

implementar a funcionalidade do Google maps em nossa aplicação.Pege a DLL GMaps no site (

http://googlemaps.subgurim.net/descargar.aspx ) e adicionereferencia em nosso projeto da Dll gmaps.dll.

Depois disso, adiciona em sua Web.config um <AppSettings> e uma<key>

O próximo passo é criarmos um novo web form em nossa aplicaçãochamado “Mapa”. Após criarmos o formulário vamos adicionar um itemno menu principal, para que possamos navegar até esse formulário.

O próximo passo é criarmos o conteúdo do aspx de nossoformulário. Neste exercício vamos disponibilizar para o usuáriouma interface onde ele possa digitar latitude, longitude ecomentário de um ponto e quando ele clicar em um botão, vamosapresentar o Google Maps apontando para a localização que ousuário escolheu.

O código do aspx deve ficar conforme a imagem abaixo.

T@rgetTrust Treinamento & Tecnologia 52

Page 60: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

O próximo passo é inserirmos o código fonte em nossoformulário. Vamos dar dois cliques no botão processar e inserir ocódigo a ser executado.

O código fonte total de nosso web form deve ficar conforme aimagem abaixo.

Ao executar nossa aplicação, no campo latitude coloque -30,017604 e no campo longitude coloque -51,191815 e no campocomentário coloque “T@rget Trust”. Vamos clicar no botão processare iremos visualizar a t@rget trust no Google maps.

T@rgetTrust Treinamento & Tecnologia 53

Page 61: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Com esse exercício podemos ver como é simples e fácil autilização de Dll’s externas em nossas aplicações .net, onde apósinserirmos a referência, da dll externa, em nosso projeto podemoscomeçar a utilizar suas classes e seus objetos livremente, damesma forma que utilizamos as funcionalidades do .net framework.

T@rgetTrust Treinamento & Tecnologia 54

Page 62: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Private Assemblys e Shared Assemblys

Se você estiver construindo um componente para um projeto dotipo Web Site, note que quando você adiciona a referência docomponente ao site e compila o projeto, o Visual Studioautomaticamente copia a DLL resultante da compilação do projetopara a pasta BIN do web site.

A pasta BIN é o repositório padrão para componentes de um website. Quando o .NET Framework carrega um web site para execuçãoele automaticamente carrega todas as DLLs presentes na pasta BIN,considerando que estas DLLs são utilizadas pelo site para suasoperações.

Devemos colocar na pasta BIN do web site todas as DLLs .NET asquais o web site faz uso, afim de que o web site funcione damaneira correta.

As dlls que se encontram na pasta BIN são chamadas privateassemblys, pois são dlls utilizadas apenas para aquela aplicação,ou seja, para que a aplicação faz uso delas é preciso que elasestejam na pasta BIN da aplicação.

Analisando as referências

Em um projeto web, temos como verificar quais componentesnosso projeto está fazendo uso. Para isto, basta clicar com obotão direito sobre o web site no Solution Explorer e selecionar aopção “Property Pages”. A seguinte tela será apresentada.

T@rgetTrust Treinamento & Tecnologia 55

Page 63: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Nesta tela podemos adicionar novas referências através dobotão Add Reference.

T@rgetTrust Treinamento & Tecnologia 56

Page 64: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Se tentarmos incluir um componente da aba “.NET” ao invés daaba Project ou Browse, iremos perceber um comportamento diferentepara estes componente. Se adicionarmos ao Project o componenteSystem.Transactions por exemplo, ao compilarmos o projeto, podemosperceber que a DLL deste componente não é adicionada a pasta BINdo projeto. Isto ocorre porque estes assemblys são chamadosassemblys compartilhados (shared assemblys). Tais assemblys estãodisponíveis para toda a máquina na qual estão registrados. Umexemplo de shared assemblys são os próprios componentes do .NETFramework (que iniciam com prefixo System). Estes componentes nãorequerem uma cópia na pasta Bin projeto, pois estão disponíveisglobalmente para a máquina.

Para verificarmos o conteúdo do Global Assembly Cache, bastaabrirmos o Windows Explorer e acessarmos a pasta \WINDOWS\Assembly.

T@rgetTrust Treinamento & Tecnologia 57

Page 65: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Espaço para Anotações

T@rgetTrust Treinamento & Tecnologia 58

Page 66: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

T@rgetTrust Treinamento & Tecnologia 59

Page 67: Asp Net 4 0 avancado versao final

ASP.NET 3.5 Avançado

4.4.Web PartsWeb Parts

T@rgetTrust Treinamento & Tecnologia 60

Page 68: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Objetivos

Ao final deste capítulo você estará apto à: Compreender as Web Parts do ASP.NET. Usar as Web Parts padrão em um página Web. Criar uma Web Part personalizada. Usar a Web Part personalizada em uma página da Web.

T@rgetTrust Treinamento & Tecnologia 61

Page 69: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

O que são web parts ?

Um dos grandes aspectos buscados por aplicações web são umainteratividade maior com o usuário, onde o usuário possa definiraspectos de customização pessoais, atingindo dessa forma uma gamamaior de possíveis usuários. As customizações que os usuáriospodem fazer vão desde comportamentos de controles, seleção deconteúdo até o posicionamento de objetos de nossa página.

Pensando nesse aspecto a Microsoft trouxe para o .net oconceito de web parts do SharePoint. No inicio dos anos 2000 oSharePoint surgiu como uma forma altamente avançada para asorganizações criarem portais e ambientes de colaboração. Osharepont introduziu alguns compontentes pré-fabricados parafacilitar a criação de sites colaborativos (ao invés de criá-losdesde o inicio). As paginas da Web com SharePoint são baseadas emum tipo de componente denominado Web Parts, que servem para reunirinformações e funcionalidades para os usuários. Apesar das webparts do .net não serem exatamente a mesma coisa que as web partsdo SharePoint, elas operam de forma muito semelhante.

As Web Parts são, de certa forma, muito parecidas com oscontroles personalizados, pois proporcionam uma forma depersonalizar o HTML gerado pelo seu aplicativo. Diferentemente decontroles personalizados que derivam da classe System.Web.UI.Controlou System.Web.UI.WebControl, as web parts derivam deMicrosoft.Sharepoint.WebPartPages.WebPart. Embora a WebPart seja herdadade System.Web.UI.Control, ela vai além da funcionalidade de umcontrole convencional manipulando as interações com as classesWebPartManager e WebPartZone para dar suporte à adição, exclusão,personalização e conexão das Web Parts em uma página. As classese membros das WebParts estão contidas dentro deSystem.Web.UI.WebControl.WebParts.

Uma grande vantagem de usá-las é que elas combinam aflexibilidade dos controles personalizados com a capacidade degerenciamento de arrastar-soltar dos controles de usuários. Vocêpode arrastar WebParts concluídas das galerias e soltá-las emzonas. Tambem é possivel modificar as propriedades compartilhadasde um grupo de WebParts e torná-las persistentes.

T@rgetTrust Treinamento & Tecnologia 62

Page 70: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Dentro de nossos projetos podemos utilizar WebParts de duasformas. Através de controles ASP.NET (Label, Button, TextBox, etc)ou através da criação de classes que herdem da classeSystem.Web.UI.WebControls.WebParts.WebPart.

Os controles WebParts são úteis para desenvolver sites do tipoportal. Como os portais geralmente possuem funcionalidades muitosemelhantes entre si, faz sentido criar portais a partir de umaestrutura predefinida do que criar o site do zero. A utilização deWebParts neste contexto fornece uma ótima capacidade dereutilização de código e de inserção de novas funcionalidades comum custo menor de esforço.

A arquitetura de Web Parts

Visto que a função das Web Parts é se comportar como um meiode otimizar a interface de usuários, os componentes funcionaisforam desmembrados em gerenciamento de página global egerenciamento de zonas. Os controles WebPart precisam sercoordenados juntos. Além disso, as áreas funcionais diferentes deuma página frequentemente precisam ser manipuladas como um grupode controles.

Em termos de classes de estruturas, as Web Parts são aninhadasem zonas, que são gerenciadas por um determinado WebPartManagerque gerencia todas as zonas de WebPart de uma determinada Página.

O WebPartManager e as WebZones

Como pode ser visto na figura abaixo o WebPartManager gerenciacada WebZone, que consequentemente gerencia cada WebPartindividualmente. Qualquer página que queira utilizar uma WebPartprecisa de uma instância do WebPartManager. O WebPartManager é oresponsável por gerenciar e coordenar a(s) zona(s) e os controlesinseridos nela(s). A WebZone também gerencia qualquer elemento deinterface de usuário que acompanhe o grupo de controles.

Na zona, o ZoneTemplate contém todas as Web Parts. Se umcontrole ASP.NET convencional estiver em um ZoneTemplate, oASP.NET o revestirá como uma Web Part.

T@rgetTrust Treinamento & Tecnologia 63

Page 71: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

As zonas de Web Parts gerenciam o layout de um grupo decontroles. Pronto para o uso, o ASP.NET inclui quatro zonas. Sãoelas:

WebPartZone Essa classe representa a funcionalidadebásica para gerenciar controles do lado do servidor emzonas de uma página. Os controles de WebPartZone sãoresponsáveis em hospedar tanto os controles normais dolado do servidor como também os controles WebPart. Oscontroles normais foram revestidos pelo controleGenericWebPart em tempo de execução para adicionarqualidades WebPart a eles.

CatalogZone Essa zona hospeda os controles CatalogPart.Os catálogos geralmente gerenciam a visibilidades departes de uma página. O controle CatalogZone mostra eoculta seu conteúdo baseado no modo de exibiçãoselecionado pelo usuário em tempo de execução.

Editorzone O controle EditorZone representa o meioatravés do qual os usuários finais podem modificar epersonalizar as paginas da Web de acordo com suaspreferências. Personalizar envolve procedimentos comoconfigurar informações pessoais, esquemas de cores e

T@rgetTrust Treinamento & Tecnologia 64

Page 72: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

layout. O EditorZone ajuda a gerenciar essa funcionalidadeassim como a salvar e carregar essas configurações paraque estejam disponíveis na próxima vez que o usuário seconectar.

ConnectionZone As Web Parts frequentemente são maisúteis quando estão conectadas e se comunicamdinamicamente. O ConnectionZone gerencia essafuncionalidade.

Além de incluir várias zonas predefinidas o ASP.NET fornecealguns controles WebPart. Alguns são para gerenciar catálogos,enquanto outros são para gerenciar a edição. Eis um resumo doscontroles WebPart disponibilizados pelo ASP.NET.

DeclarativeCatalogPart Ao criar uma pagina WebPart,podemos adicionar as WebParts dinamicamente ou de formadeclarativa. O Controle DeclarativeCatalogPart gerencia oscontroles do lado servidor adicionados de formadeclarativa a um catálogo em uma pagina Web.

PageCatalogPart Uma forma pela qual os usuários finaisprovavelmente desejarão personalizar um site é pelaabertura e fechamento de controles. O controlePageCatalogPart representa um catalogo de página paraarmazenar controles que foram adicionados anteriormente auma página que agora se encontra fechada.

ImportCatalogPart Permite aos usuários importarem umadescrição Web Part de dados XML.

AppearanceEditorPart É usado para editar aspropriedades de aparência de um controle WebPart ouGenericWebPart associado.

BehaviorEditorPart Oferece suporte a edição decomportamento de um controle WebPart ou GenericWebPart.

LayoutEditorPart Serve para editar as propriedades delayout de um controle WebPart ou GenericWebPart.

PropertyGridEditorPart Oferece suporte aos usuários naedição de propriedades personalizadas de controlesWebPart.

T@rgetTrust Treinamento & Tecnologia 65

Page 73: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Utilizando as Web Parts

Para visualizarmos o funcionamento das web parts, vamosrealizar um exercício adicionando web parts em nossa aplicação. Oobjetivo do exercício será adicionarmos a página default duascolunas de web parts onde dentro de cada coluna irá existirhyperlinks para outros sites. Utilizando as web parts o usuáriopoderá configurar onde ele deseja que cada hyperlink sejaapresentado e se o hyperlink deve ser apresentado.

Vamos executar os seguintes passos em nossa aplicação.

1 – Na pasta Styles vamos adicionar um arquivo css chamadoWebPartsLayout.css que irá conter a configuração de css das Divque receberam as web parts. O código do arquivo css deve ficarconforme a figura abaixo.

2 – Na página Default.aspx insira um controle WebPartManager,logo abaixo do parágrafo onde está a label “lblMsgTeste”. EsteWebPartManager será responsável por gerenciar todas as WebParts denossa página.

3 – Insira uma div que contenha outras duas divs dentro dela,onde cada div interna da div principal irá fazer referência asclasses criadas no css. O código das divs deve ficar conformeabaixo.

T@rgetTrust Treinamento & Tecnologia 66

Page 74: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

4 – Após termos configurado as divs, vamos arrastar paradentro de cada uma das divs internas um WebPartZone. Defina oautoFormat da primeira WebPartZone para Professional e o dasegunda para ColorFul.

5 – Dentro da tag ZoneTemplate de cada WebPartZone vamosinserir alguns hyperlinks. Na primeira adicione dois hyperlinks,um apontando para o site da Target Trust e o outro apontado para osite da Microsoft. Na segunda WebPartZone adicione mais doishyperlinks, desta vez um apontando para o site da MSDN e o outroapontando para o site do Asp.Net. O código aspx resultante dopasso 4 e do passo 5 pode ser visualizado na figura abaixo.

T@rgetTrust Treinamento & Tecnologia 67

Page 75: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

6 – Agora vamos executar nossa aplicação e poderemos ver quetemos duas áreas onde os hyperlinks são apresentados e que épossível que o usuário minimize e feche os hyperlinks. Feche aaplicação e executea novamente e verifique como o site recordasuas ações na página. Caso seja necessário voltar para ainicialização original do site, devemos executar o comando“NomeDoWebPartManager.Personalization.ResetPersonalizationState();” dentro de um botão.

T@rgetTrust Treinamento & Tecnologia 68

Page 76: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

7 – O próximo passo é implementarmos uma forma em que possamosmodificar os modos de exibição de nossas WebPartsZones. Para issovamos adicionar um parágrafo logo abaixo de nosso WebPartManager edentro deste parágrafo vamos inserir uma label e uma DropDownList.A drop será responsável por alterar os modos de exibição dapágina. O drop deve ser chamado de “DropDownListDisplayModes”. Ocódigo aspx pode ser visualizado na imagem abaixo.

As Web parts do ASP.NET dão suporte a cinco modos deexibição:

BrowseDisplayMode Esse é o modo normal. Nãodisponibiliza personalização ou edição.

DesignDisplayMode Ativa a personalização de layoutarrastar e soltar.

EditDisplayMode Ativa a personalização depropriedades WebPart e permite ao usuário excluir asWeb Parts.

ConnectDisplayMode Permite conectar as Web Partsem tempo de execução.

T@rgetTrust Treinamento & Tecnologia 69

Page 77: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

CatalogDisplayMode Permite adicionar as Web Partsem uma WebPartZone em tempo de execução.

8 – Agora vamos atualizar o código de nossa páginaDefault.aspx. O código deve ficar igual ao código abaixo. Nocódigo a seguir é adicionado um membro WebPartManager denominado_wpManager à classe para armazenar a instancia do WebPartManageratual da página. É atualizado o método Page_Init para anexar ummanipulador de eventos ao evento InitComplete da página. O códigoexamina detalhadamente o WebPartManager atual em busca dos modos deexibição que recebem suporte e os coloca na DropDownList.

9 – Agora vamos adicionar um código no eventoSelectIndexChanged do DropDownList. O código será responsável poratualizar o modo de exibição do WebPartManager.

T@rgetTrust Treinamento & Tecnologia 70

Page 78: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

10 – O próximo passo é substituir o método PreRender dapágina, para que sempre que ocorrer uma renderização o nossoDropDown apresente o modo de exibição atual do WebPartManager.

11 - Execute o site e note que agora podemos selecionar o modoDesign. Posteriormente quando tivermos mais zonas na página iremoster mais opções de seleção na DropDown. Note que em modo Designagora é possível mover as Web Parts dentro de uma zona para aoutra zona.

T@rgetTrust Treinamento & Tecnologia 71

Page 79: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

12 – O próximo passo é utilizarmos o EditorZone para editarmosalgumas WebParts. Abaixo das divs que estão com as webPartsZonevamos adicionar duas divs, uma dentro da outra, com a div internautilizando a classe DivColunaWebPart. Dentro da div interna vamosadicionar um EditorZone. Na ZoneTemplate do EditorZone vamosadicionar um AppearanceEditorPart. Tanto o EditorZone como oAppearanceEditorPart devem ter seus estilos setados paraProfissional. O resultado desse pedaço do aspx pode ser visto nafigura abaixo.

Agora vamos executar nossa aplicação e você poderá ver que aopção Edit está sendo apresentada em nossa DropDownList. Aoseleciona-lá será habiltiado em cada web part a opção de edição.Quando utilizarmos a edição o controle EditorZone e oAppearanceEditorPart serão apresentados para interação.

13- Após termos utilizado o EditorZone, que nos permite editaraparências de webParts, vamos utilizar agora o CatalogZone que irános permitir incluir novas WebParts ou controles asp.net como sefossem WebParts. Logo abaixo do fechamento das utilizadas com oEditorZone, vamos adicionar outras duas divs, uma dentro da outra,com a interna utilizando a classe DivColunaWebPart. Agora adicioneum CatalogZone dentro da div interna, dentro da tag ZoneTemplate,do CatalogZone, insira um controle DeclarativeCatalogPart, dentro

T@rgetTrust Treinamento & Tecnologia 72

Page 80: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

da tag WebPartsTemplate vamos inserir o tipo de controle quedesejamos adicionar como WebPart.

Neste exercício vamos colocar dentro do WebPartsTemplate umatextBox, vamos adicionar uma propriedade no textBox chamada Title(essa propriedade não é do textBox, mas a engine do CatalogZoneirá utilizar o valor atribuído a essa propriedade como texto deinterface a ser mostrado para os usuários. O código aspx, dessaparte, deve ficar conforme a imagem abaixo.

Agora vamos executar a página novamente. Alterne para CatalogMode, marque a caixa de seleção “Adicionar uma TextBox” e adicioneum controle TextBox à zona links. Dessa forma podemos ver como épossível adicionar em tempo de execução novos controles WebParts anossa página. A Seguir iremos criar uma Web Part e iremos utilizaressa estrutura para que possamos inserir em tempo de execução aweb part que criamos, que irá permitir que o usuário criehyperlinks dinamicamente em nossa página.

Construindo Web Parts

O exercício que realizamos até agora nos mostrou como utilizarWeb Parts em uma página e como alternar entre vários modos doWebPartManager em tempo de execução. Vimos como adicionar umatextBox em tempo de execução. Porém o simples fato de adicionaruma TextBox as WebPartZones não representa muita coisa. Agora nacontinuação do exercício, criaremos uma Web Part de hyperlinksonde o usuário irá personalizar o destino de sua navegação.

Criar uma Web Part é muito simples e bem semelhante aodesenvolvimento de controles personalizados. Para criarmos uma

T@rgetTrust Treinamento & Tecnologia 73

Page 81: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

WebPart bastá criar uma classe que derive deSystem.Web.UI.WebControls.WebParts.WebPart. Após isso, teremos aopção de processar HTML ou compor uma Web Part partindo de outroscontroles. A WebPart inclui a funcionalidade de se integrar aarquitetura da Web Part.

O próximo passo é implementarmos uma WebPart em nossaaplicação, dessa forma poderemos ver como é simples implementaruma web part com um exemplo prático. O exercício a seguir iremoscriar uma Web Part de hyperlink que adicione à WebPartZone linkspernosalizados pelo usuário. Embora possamos adicionar um controleHyperlink convencional ao nosso catálogo, os controles normais nãopossuem o suporte para o usuário modificar os links, por isso olink precisa ser uma Web Part.

Vamos utilizar os seguintes passos na execução desseexercício.

1 – O primeiro passo é adicionar uma Dll em nossa solução echama-lá de WebPartLib. Dentro dessa Dll iremos colocar nossaWebPart. Vamos adicionar uma classe chamada HyperLinkWebPart anossa Dll. Essa classe será a nossa WebPart. Após termos executadoessas ações nosso Solution Explorer deve estar conforme a imagemabaixo.

T@rgetTrust Treinamento & Tecnologia 74

Page 82: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

2 – Devemos colocar referência ao System.Web em nossa Dll.Isso é necessário porque iremos implementar funcionalidades deinterfaces Web em nossa Dll.

3 – O próximo passo é adicionarmos os using na classeHyperLinkWebPart e implementarmos a herança das WebParts naclasse. O código deve ficar conforme a figura abaixo.

4 – A seguir vamos inserir duas variáveis privadas, do tipostring na classe HyperLinkWebPart, uma para representar o nome deexibição da Web Part e a outra para representar o URL real. Ambaserão inicializadas com valores Defaults. Após inserirmos essasduas variáveis vamos inserir outra variável privada, do tipoHyperLink, que terá como funcionalidade otimizar o controleHyperLink. Vamos sobreescrever o método CreateChildControls paracriar uma instância do controle HyperLink e adicioná-lo à coleçãode controles HyperLinkWebPart. Vamos inicializar a propriedadeText do hyperlink com a variável privada que representa o nome deexibição e vamos inicializar a propriedade NavigateUrl com avariável privada que representa o URL. O código inserido deveficar conforme a figura abaixo.

T@rgetTrust Treinamento & Tecnologia 75

Page 83: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

5 – O próximo passo é expor url e nome de exibição comopropriedades para que a arquitetura das web parts possam trabalharcom elas. Para permitir que as propriedades das web parts possamtrabalhar com a arquitetura das web parts através doPropertyGridEditorPart, devemos acrescentar os seguintes atributosas propriedades: Personalizable, WebBrowsable e WebDisplayName. Ocódigo deve ficar conforme abaixo.

T@rgetTrust Treinamento & Tecnologia 76

Page 84: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Após o quinto passo nossa web part está pronta. Agora devemoscompilar a Dll e adicionar a referência entre os projetos.

Após termos adicionado a referência entre os projetos note quenossa web part, HyperLinkWebPart, agora aparece no caixa deferramentas.

T@rgetTrust Treinamento & Tecnologia 77

Page 85: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

O próximo passo agora é utilizarmos nossa web part. Para issovamos em nossa página Default.aspx e coloque nossa CatalogZone emmodo “Edit Template”. Vamos arrastar no HyperLinkWebPart para logoabaixo da textBox que inserirmos no exercício anterior. Adicionetambém uma propriedade Title e coloque o valor que você deseja queseja apresentado quando formos inserir nossa web part. O códigoaspx deve ficar conforme abaixo.

Adicione agora um controle PropertyGridEditorPart à EditorZoneda página. Ele deve ficar logo abaixo do controleAppearanceEditorPart. O controle PropertyGridEditorPart irá provera funcionalidade de personalização das propriedades de nossa webpart.

Agora vamos rodar nossa aplicação. Selecione o modo Catalog eadicione nossa web part para a página. Após isso selecione o modoEdit, vá na nossa web part selecione Edit nela, então vá no

T@rgetTrust Treinamento & Tecnologia 78

Page 86: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

ProperyGridEditorPart que irá aparecer no final da página emodifique os valores do display name e da URL de nossa web part,para algum site que deseja que vá a navegação. Confirme aalteração, clique em nossa web part e verifique como agora nósalteramos suas propriedades de navegação em tempo de execução.

Com esses exercícios pudemos ver como utilizar web parts, suaszonas e como é fácil criarmos nossas próprias web parts. Vimostambém que podemos utilizar tanto controles normais como web partsjunto com a arquitetura das web parts. Relembre-se as web partssão especialmente úteis para aplicativos do tipo portal por terema habilidade de otimizar os utilitários de personalização doasp.net.

T@rgetTrust Treinamento & Tecnologia 79

Page 87: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Exercícios

1. Adicione uma terceira coluna nossa aplicação e insiraalguns controles para trabalharem como web part.

2. Crie uma web part onde o usuário digite uma categoria e aweb part apresenta o nome do departamento que a categoria pertence(utilize nosso banco, BallonShop).

T@rgetTrust Treinamento & Tecnologia 80

Page 88: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Espaço para Anotações

T@rgetTrust Treinamento & Tecnologia 81

Page 89: Asp Net 4 0 avancado versao final

ASP.NET 3.5 Avançado

5.5.LINQLINQ

T@rgetTrust Treinamento & Tecnologia 82

Page 90: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Objetivos

Ao final deste capítulo você estará apto à: Entender o que é o Linq. Visualizar os diferentes tipos de Linq. Utilizar Linq to Objects; Entender o Linq to SQL. Utilizar o Linq to SQL como framework de

persistência de dados. Implementar uma aplicação em 3 camadas com o Linq

to SQL.

T@rgetTrust Treinamento & Tecnologia 83

Page 91: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

O que é o LINQLINQ (Language Integrated Query) é uma funcionalidade, incluída

no framework 3.5, que tem como objetivo preencher a lacuna entre omundo dos objetos e o mundo dos dados.

Tradicionalmente implementamos consultas a dados a partir destrings, que não possuem uma verificação do compilador em runtimee não possuem suporte ao Intellisense, que atuam em conjunto comalguma tecnologia gerenciadora da fonte de dados. Além disso, énecessário o conhecimento de cada linguagem de consulta que atuaem conjunto com a fonte de dados, por exemplo, Banco de dados SQLServer, Bando de Dados Oracle, arquivos XML, Datasets, WebServices, etc. O LINQ se propõe a ser uma linguagem intermediáriaque forneça consultas a diferentes tipos de fonte de dados. Nautilização do LINQ são implementadas consultas em coleções deobjetos fortemente tipados utilizando linguagens e operadoresfamiliares (sintaxe muito parecida com consultas SQL de SGBD).

Resumidamente podemos definir LINQ como uma linguagem deconsulta universal que atua em cima de objetos.

Todas as consultas Linq são baseadas nos tipos genéricos. Não énecessário um conhecimento profundo em genéricos, antes de começara escrever consultas. No entanto devemos entender dois conceitosbásicos.

Quando criamos uma instância de uma classe que é umacoleção genérica, nós substituímos o “T” com o tipo deobjetos que a lista conterá. Por exemplo, uma listagenérica de caracteres é expressa como List <string> e umalista genérica do tipo Customer é expressa como List<Customer>. Se tentarmos adicionar um objeto Customer parauma lista de string iremos obter um erro de compilação. Aslistas genéricas não atuam com o tipo de dados Object esim com o tipo de dados informados em sua criação. Uma dasgrandes vantagens das coleções genéricas é que não énecessário executar a conversão de tipos quando queremosutilizar seus objetos.

IEnumerable <T> é a inteface que permite a coleçõesgenéricos serem enumerados, permitindo com que a coleçãoseja utilizada em conjunto com laços Foreach. Todas ascoleções, mesmo as não genéricas como o ArrayList, possuemsuporte a IEnumerable.

T@rgetTrust Treinamento & Tecnologia 84

Page 92: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Quando implementamos uma consulta Linq sempre executamos 3ações.

Identificação da fonte de dados Todas as fontes de dadosde consultas Linq devem implementar ou derivar deIEnumerable ou IEnumerable<T> ou uma interface derivada,como IQueryable <T>. Se os dados de origem não forem de umtipo passível de consulta então o provedor LINQ deverepresentá-lo como tal. Por exemplo, LINQ to XML carregaum documento XML em um elemento XElement que atua emconjunto com o LINQ. Então, caso desejemos utilizar umafonte de dados que não seja compatível com Linq devemosimplementar uma camada intermediária que suporte umainterface genérica, para que possamos utilizar LINQ.

Consulta A consulta especifica quais informações devemser recuperadas a partir de uma fonte de dados. A consultapode tambem especificar como as informações sãoclassificadas, agrupadas e filtradas. Ao decorrer destecapítulo iremos realizar um estudo detalhando sobre asconsultas.

Execução da consulta Quando geramos a consulta apenas aarmazenamos na variável de consulta. A execução real daconsulta é adiada até que realizemos a interação com aconsulta. Para isso temos dois tipos de execução: Execuçãoretardada e Execução imediata.

o Execução retardada ocorre quando executamos aconsulta a partir da variável de consulta de umcomando foreach.

o Execução imediata ocorre quando utilizamos o comandoToList<TSource> ou ToArray<TSource> na própriacriação da consulta ou quando utilizamos os comandosCount, Max, Average e First em conjunto com avariável de consulta.

Até o momento já ocorreram diversas implementações de LINQ,entre as muitas implementações podemos citar:

Linq To Xml Implementação do LINQ que atua diretamentesobre dados XML.

Linq to Objects Atua sobre coleções de objetos.

Linq to Dataset Realiza consulta sobre datasets.

T@rgetTrust Treinamento & Tecnologia 85

Page 93: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Linq to Flickr Permite que realize consultas sobre fotose armazene-as no web site Flickr.

Linq to SQL Implementação específica para interações doLINQ com o banco de dados SQL Server (iremos estudar estaimplementação ainda neste capítulo).

Linq to Entity (Entity Framework) Trabalha com entidadesrelacionais de diversos bancos de dados.

Em função da arquitetura do Linq ser extremamente dinâmicasempre estaremos vendo novas implementações tanto por parte daMicrosoft (Linq to Objects, Linq to XML, Entity Framework) comopor parte de terceiros (Linq to Flickr).

O próximo passo, para que possamos entender a teoria do quefoi dito até agora é realizarmos exemplos práticos. Vamos estudarLinq to Objects e Linq to SQL na sequência desse capítulo.

T@rgetTrust Treinamento & Tecnologia 86

Page 94: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

LINQ TO OBJECTS

A definição de Linq to Objects refere-se a utilizar consultasLinq com qualquer coleção de objetos que utilizam IEnumerable ouIEnumerable<T>, sem usar qualquer provedor de Linq comointermediário, como o Linq to SQL ou Linq to XML.

Podemos utilizar consultas Linq diretamente sobre coleçõescomo List<T>, Array, Dictionary of <TKey, TValue> e qualquer outraforma de coleção que utilize IEnumerable.

De certa forma Linq to Objects representa uma nova forma deabordagem sobre os dados de coleções. Na forma antiga eranecessário implementar algoritmos complexos para realizarmosbuscas dentro da coleção. Já com o Linq to objects bastaescrevemos uma consulta Linq para realizar uma busca,proporcionando um ganho tremendo em produtividade de código.

Além disso, podemos citar outras vantagens da utilização deLinq to Objects como:

Uma maior legibilidade do código;

Filtragem eficiente, bem como ordenação e agrupamento dedados com um mínimo de código implementado;

Grande portabilidade para outras fontes de dados compouca ou nenhuma modificação.

Resumidamente quanto mais complexa a operação executada nosdados, maior será a percepção de benefícios ao utilizar Linq toObject.

Agora vamos implementar em nossa aplicação uma página queutilize Linq to Objects como um exercício para que possamos teruma boa compreensão de como funciona o Linq to Objects. O objetivodo exercício é implementar um array fixo dentro da página. Napágina teremos dois botões. Um botão responsável por apresentartodos os itens do array e o outro botão irá apresentar os valoresdo array ordenados em ordem crescente e que sejam maiores que umdeterminado valor. Para implementarmos esse exercício vamos seguiros passos abaixos.

T@rgetTrust Treinamento & Tecnologia 87

Page 95: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

1 – O primeiro passo é criarmos uma pasta chamada “Linq”dentro da solution explorer de nossa aplicação, dentro desta pastairemos inserir todas as páginas que iremos utilizar nos exercíciosreferentes a Linq.

Após termos inserido a pasta vamos inserir dentro da pasta umapágina aspx chamada “frmLinqToObjects.aspx”. Esta página será apágina que iremos implementar esse exercício.

A solution explorer deve ficar conforme a imagem abaixo.

2 – Agora vamos inserir um item no menu de nossa aplicação,que fica na main.master, que leve o usuário a página que acabamosde criar.

3 – Vamos criar a interface de nossa página. Devemos inserirdois botões e uma textBox. O código aspx da página deve ficarconforme a figura abaixo.

T@rgetTrust Treinamento & Tecnologia 88

Page 96: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

4 – Agora o próximo passo é inserir a primeira parte do códigoem nossa página.

Inserir referência a System.Text

Declarar um array de int, chamado Números, com um tamanhode 5 posições e inicialize o array com os valores 9, 90,1, 23 e 16. O array deve ser protected e deve ser visívelem qualquer função de nossa página.

O resultado desse primeiro código deve ficar conforme a imagemabaixo.

T@rgetTrust Treinamento & Tecnologia 89

Page 97: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

5 – O próximo passo é adicionarmos código ao evento click dobotão btnSelecionar. O código que devemos inserir pode ser vistona figura abaixo.

Vamos analisar o código que foi inserido.

Na primeira parte do código podemos ver a consulta Linq. Noteque a estrutura da consulta Linq é parecida com uma consulta SQL,a diferença é que a seção select fica no final da consulta.

A palavra var significa que o compilador irá definir qual tipode dados terá a variável. Em nossa consulta todosNumeros que évar o compilador irá repassar para essa variável um list<int>,visto que a fonte de dados (Números) é um array de inteiros.

Na consulta Linq atribuímos Números para n e selecionamostodos os registros de n. Dessa forma retornando todos os registrosdo array. A seção from identifica as fontes de dados de nossaconsulta e a seção select identifica o retorno da consulta.

A consulta que realizamos indica que selecionamos todos osconteúdo do array números e o retorno é todo o conteúdo do arrayna ordem em que está.

Após a consulta utilizamos um foreach para percorrer todos osregistros e inserimos dentro de uma string builder para serinserida, ao final do loop, dentro da textbox de resultado.

5 – O próximo passo de nosso exercício é adicionarmos códigoao evento click do botão btnSeleconarOrdenado. O código que deveser inserido pode ser visto na figura abaixo.

T@rgetTrust Treinamento & Tecnologia 90

Page 98: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Podemos ver que o código é praticamente igual ao código queestá no outro botão, possuindo como diferença a consulta Linq.Podemos ver que nesta segunda consulta estamos utilizando duasseções que não foram utilizadas na outra consulta: where eorderby.

Na seção where é colocada todas as restrições e filtragens denossas consultas. Na consulta que acabamos de implementar estamosrestrigindo que o valor de n deve ser maior que 20. Dessa forma aconsulta irá retornar todos os valores do array “Números” quesejam maior que 20.

A seção orderby é responsável por ordernar o resultado denossa consulta. No exercício estamos ordernando o resultado deforma ascendente (do menor para o maior).

Após termos inseridos esses códigos, vamos salvar nossaaplicação e rodar o sistema. Poderemos ver que quando clicamos noprimeiro botão é apresentado todo o conteúdo do array Números natextbox de resultado, no formato original de seus dados e quandoclicamos no segundo botão (selecionar todos os itens ordenados)são apresentados ordenadamente somente os registros do array quesejam maiores que 20.

O resultado de nosso exercício pode ser visto na figuraabaixo.

T@rgetTrust Treinamento & Tecnologia 91

Page 99: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Com esse exercício podemos visualizar a utilização do Linq toObjects trabalhando com um array fixo de uma página. Mas da mesmaforma que trabalhamos com o array fixo podemos trabalhar comqualquer outra forma de coleção de dados que implemente ainterface IEnumerable e suas variações.

T@rgetTrust Treinamento & Tecnologia 92

Page 100: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

LINQ to SQL

LINQ to SQL é uma implementação do LINQ que atua em conjuntocom o SQL Server que tem como objetivo converter consultasescritas em C# para SQL dinâmico, atuando como um framework depersistência de dados, realizando o mapeamento das tabelas dobanco de dados em classes. A partir dessas classes podemosrealizar operações CRUD no banco de dados.

Em virtude de os fabricantes de banco de dados não adotarem opadrão ANSI o Linq to SQL atua somente com banco de dados SQLServer. Uma implementação que tem a mesma funcionalidade do LINQto SQL que é o Entity Framework atua com multi bancos.

A primeira vista podemos pensar que é apenas mais umalinguagem que devemos aprender e que as operações de CRUD combanco de dados já realizamos com o ADO.NET, mas ao analisarmos ocenário atual de uma forma mais criteriosa podemos entender omotivo do LINQ to SQL de existir.

Como fazemos para acessar um banco de dados relacionalutilizando ADO.NET mantendo o conceito de orientação a objetos?Geralmente efetuamos a representação das tabelas em classes emforma que possamos criar uma camada responsável pelo banco dedados.

Realizamos isso basicamente de duas formas:

1. Realizando o mapeamento objeto-relacional em classes denegócio e acessando os dados utilizando DataReader.

2. Realizando o mapeamento objeto-relacional usando DataSetse o acesso de dados através de DataAdapters ouTableAdapters.

O objetivo do LINQ to SQL é reunir o melhor das duas opções deforma que você possa fazer o mapeamento objeto-relacional criandoclasses que representam as tabelas do banco de dados (inclusivemapeando stored procedures como métodos) e com isso possibilitandoa criação de consultas e alterações no banco de dados usando asintaxe LINQ.

T@rgetTrust Treinamento & Tecnologia 93

Page 101: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Internamente o LINQ to SQL utiliza ADO.NET para realizaracessos ao banco de dados e operações CRUD.

Entendendo o DataContext

O LINQ to SQL possui a classe DataContext. O DataContext atuacomo um elo de ligação entre o banco de dados SQL Server e asclasses das entidades LINQ to SQL mapeadas do banco. O DataContextcontém as informações e os métodos para efetuar a conexão com obanco e a manipulação de dados.

O DataContext possui diversos métodos que podemos utilizar,como o método SubmitChanges que envia as atualizações das classesLINQ to SQL para o banco de dados. Além disso, é permitido criarmétodos dentro do DataContext para mapear stored procedures efunções de forma que executando os métodos criados as storedprocedures e as funções que foram mapeadas pela classe DataContextserão executadas.

O DataContext trabalha em conjunto com o Descritor de ObjetoRelacional (Object Relational Designer – O/R Designer). ODescritor de Objeto Relacional fornece uma interface visual paracriar e editar Classes LINQ to SQL.

Utilizando o Descritor de Objeto Relacional podemos inserir,alterar e excluir classes e gerenciar métodos e propriedades.Todas as ações efetuadas pelo Descritor de Objeto Relacional podeser feita gerenciando o código do DataContext, mas os ganhos emtempo que o O/R Designer nos fornece acaba fazendo com que eleseja utilizado massivamente em projetos que utilizem LINQ to SQL.

Após termos visto estas teorias vamos implementar a utlizaçãode LINQ to SQL em nossa aplicação para que possamos ver na práticaa utilização de LINQ to SQL junto com o DataContext e o O/RDesigner para acessar o banco de dados e gerar algumas consultassobre os dados do banco.

Utilizando LINQ to SQL em nossa aplicação

Agora vamos adicionar em nossa aplicação a utilização do LINQto SQL em uma página que terá a funcionalidade de apresentar todasas categorias de livros que o banco possui e quando selecionarmos

T@rgetTrust Treinamento & Tecnologia 94

Page 102: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

uma categoria automaticamente a página irá apresentar para ousuário um grid com todos os livros pertencentes à categoriaselecionada.

Vamos seguir os seguintes passos para executar esse exercício.

1- Adicione uma pasta chamada Data em nossa aplicação, dentrodesta pasta iremos adicionar o DataContext responsável porgerenciar a ligação de nossa aplicação com o banco de dados.

2 – Configure uma conexão com o banco de dados a partir doDatabaseExplorer.

3 – Adicione dentro da pasta Data um DataContext, paraadicionar um DataContext devemos selecionar um LINQ to SQL Classesque está dentro do Template Data na tela de Inserir novo item.Vamos chamar o DataContext de Ballon.dbml (todo o DataContextpossui a extensão dbml). A figura abaixo apresenta como devemosinserir um DataContext.

Após termos adicionado o item o Descritor de Objeto Relacional(O/R Designer) será apresentado e o arquivo LINQ to SQLBallon.dbml vazio será inserido dentro da pasta Data.

T@rgetTrust Treinamento & Tecnologia 95

Page 103: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

A interface vazia corresponde ao DataContext que está prontopara ser configurado.

O O/R Designer apresenta dois paneis. O primeiro exibe asclasses de entidades e o segundo exibe os métodos do DataContext.A figura abaixo apresenta o DataContext vazio.

4 – O próximo passo é criarmos as classes LINQ to SQL queserão mapeadas para as tabelas do banco de dados. Para criarmos asclasses basta arrastar, a partir do Database Explorer, as tabelasque queremos utilizar no DataContext. Quando arrastamos a tabela,automaticamente é criada a classe de entidade que mapeia a tabelado banco de dados.

Vamo seguir os seguintes procedimentos para criar as entidadesque utilizaremos neste exercício.

Abra o Database Explorer, localize a conexão com o bancode dados BallonShop e expanda o objeto Tables.

Arraste as tabelas Category, ProductCategory e Productpara o O/R Designer e salve o DataContext.

Após termos adicionado as tabelas o nosso contexto deve estarconforme a imagem abaixo.

T@rgetTrust Treinamento & Tecnologia 96

Page 104: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

5 – Após termos preparado nosso Data Context estamos prontopara utilizar as classes geradas pelo contexto em nossa aplicação.Para isso vamos adicionar uma classe chamada Categorias dentro dapasta Data e vamos criar o método getCategorias. O código dométodo pode ser visto abaixo.

T@rgetTrust Treinamento & Tecnologia 97

Page 105: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Ao analisarmos o método percebemos que o retorno do método éum IEnumerable<Category>, como vimos antes todo objeto queimplementa a interface IEnumerable é um resultado Linq, entãopodemos retornar a própria interface genérica.

Quando criamos a variável db do tipo BaloonDataContext estamoscriando uma visão do nosso contexto de dados, então ao utilizarmosa variável db iremos ter acesso as classes e métodos pertencentesao DataContext.

E o retorno é uma consulta LINQ que usa como fonte de dados oobjeto Categories que pertence ao DataContext. O objeto Categoriesfaz o mapeamento da tabela Category do banco de dados.

6 – O próximo passo é criarmos a interface desse exercício.Adicione uma página dentro da past Linq chamadafrmCategoryProducts. Dentro da página adicione uma label com otext = “Categoria:” e uma DropDownList chamada “ddlCategorias”

O código aspx da página deve ficar conforme a imagem abaixo.

7 – Na sequência vamos criar um data source para aDropDownList, o data source deve ser do tipo object e deveselecionar na opção select o método getCategorias que nós criamosna classe Categorias. Para que o método apareça como uma opção deseleção devemos compilar nossa aplicação.

8 – O próximo passo é criarmos uma classe chamada Produtos,dentro da pasta Linq. Nesta classe iremos inserir o métodoresponsável por buscar os produtos vinculados com uma determinadacategoria. Vamos adicionar esse método, o nome dele deve ser

T@rgetTrust Treinamento & Tecnologia 98

Page 106: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

“getProdutosPorCategoria” e o código do método pode ser visto nafigura abaixo.

Ao analisarmos o código podemos visualizar a utilização dojoin, do Where e do orderby.

A seção join faz a união entre objetos a partir de camposchaves, no nosso método estamos juntando o objeto Products com oobjeto ProductCategories quando os campos ProductID de cada objetosejam iguais.

A seção where filtra os dados a partir de uma expressão, emnosso exercício estamos filtrando o objeto Categories onde oCategoryID seja igual ao idcategoria informado na chamada do nossométodo.

A seção orderby orderna os dados da consulta, no nosso casoestamos ordenando a consulta pelo campo ProductID.

9 – O próximo passo é adicionar um gridview a nossa página,vamos chamar o gridview de grdLivros e vamos atribuir algumformato ao autoformat do grid.

T@rgetTrust Treinamento & Tecnologia 99

Page 107: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

10 – Vamos adicionar um Data Source ao nosso grid. O datasource deve utilizar objetos como fonte de dados e no select dodatasource vamos selecionar o método getProdutosPorCategoria queacabamos de criar. O DataSource irá nos perguntar qual fonte eledeve utilizar para passar como parâmetro para o método. Marque quea fonte deve ser um control, selecione nossa DropDownList e apropriedade deve ser o selectvalue (essa propriedade deve serapresentada como default).11 – Marque a propriedade autopostback para true da dropdownlist evamos adicionar o seguinte código no evento SelectedIndexChanged da dropdownlist.

12 – Crie uma opção no menu para acessar a página.

Vamos rodar nossa aplicação e note que sempre queselecionarmos uma categoria os itens do gridview irão mudar,apresentando somente os livros vinculados à categoria. Dessa formautilizamos LINQ to SQL para acessar nosso banco de dados eapresentar para o usuário.

Podemos ver também a utilização de consultas LINQ e comopodemos fazer para utilizar consultas integradas. O resultado doexercício pode ser visto abaixo.

T@rgetTrust Treinamento & Tecnologia 100

Page 108: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

T@rgetTrust Treinamento & Tecnologia 101

Page 109: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Utilizando LINQ to SQL em 3 camadas

É comum termos dúvidas referentes a utilização de 3 camadas.Mas afinal o que é uma aplicação em 3 camadas? Qual o ganho que umprojeto tem ao ser implementado em camadas?

O padrão de 3 camadas começou a ser utilizado a partir danecessidade de adicionar funcionalidades de negocio, banco dedados ou interface em um sistema com o menor impacto possivel nasoutras funcionalidades que o sistema possui.

Quando implamentamos uma arquitetura em 3 camadas nósseparamos as funcionalidades da seguinte maneira:

1. Camada de Interface do Usuário (user interface) – UI –Toda e qualquer lógica de interface com o usuário (umapágina web, um relatório, uma aplicação móbile, etc) éclassificada dentro da camada de interface.

2. Camada de negócio (Bussiness Logic Layer) – BLL –responsável por armazenar a lógica da aplicação.

3. Camada de acesso a dados (Data Acess Layer) – DAL –camada responsável pelo acesso e persistência dos dadosno banco de dados da aplicação.

Imagine que precisamos trocar o banco de dados de nossaaplicação e os comandos SQL não são compatíveis. Em um sistema quenão utiliza 3 camadas poderemos ter impacto dessa alteração emqualquer parte do sistema. Já em um sistema 3 camadas o impactoocorrerá apenas na camada de dados (DAL), facilitando e muito essaimplementação.

Quando montamos nossa aplicação devemos sempre montar de umaforma que a comunicação entre as camadas seja feita de formacorreta.

A camada de dados (DAL) se comunica apenas com acamada de negócios (BLL);

T@rgetTrust Treinamento & Tecnologia 102

Page 110: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

A camada de negócios (BLL) se comunica com a camadade dados (DAL) e com a camada de interface dousuário (UI);

A camada de interface do usuário (UI) se comunicaapenas com a camada de negócio (BLL).

Essas restrições são necessárias para aumentar a segurança denossa aplicação. Imagine a seguinte situação, um hacker consegueinvadir o site (que é nossa UI mesmo ele tendo acesso aos códigosda UI ele não terá nenhum conhecimento de nosso banco, o máximoque ele conseguirá visualizar é a chamada de métodos de nossacamada de negócio.

O LINQ to SQL entra perfeitamente na implementação da DAL,criando mais uma abstração até o banco de dados e gerenciando todoo acesso e a persistência dos dados junto com o banco.

Agora vamos passar da teoria para a prática preparando nossaaplicação para trabalhar em 3 camadas e implementando umformulário de cadastro de produtos em 3 camadas e utilizando LINQto SQL como o responsável pela camada de dados.

Vamos seguir os seguintes passos para executar essaimplementação

1 – Adicione uma nova Class Libray em nossa aplicação chamadaDAL_Balloon, dentro desta DLL iremos implementar a camada dedados.

2 – Adicione uma nova Class Library em nossa aplicação chamadaBLL_Balloon, dentro desta DLL iremos implementar a camada denegócio.

3 – O próximo passo é montar as referências entre os projetos.No nosso site vamos adicionar referência a dll BLL_Balloon e nadll BLL_Balloon vamos adicionar referência a dll DAL_Balloon.

4 – Devemos inserir referência ao System.Data.Linq nosprojetos BLL_Balloon e DAL_Balloon.

5 – Após termos realizados as configurações iniciais vamosmontar a nossa camada de dados. Crie um DataContext naDAL_Balloon, chamado de “db_DAL.dbml” e adicione todas as tabelasdo banco Balloon ao DataContext fazendo com que o contexto faça o

T@rgetTrust Treinamento & Tecnologia 103

Page 111: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

mapeamento de todo o banco de dados. O DataContext deve ficarconforme a imagem abaixo.

Após termos atualizado o DataContext acabamos de terminar todaa camada de dados de nossa aplicação. Note como a utilização doLINQ to SQL facilita, e muito, a integração com banco de dados. Sefosse utilizado ADO.NET teríamos que fazer uma classe para cadatabela, deveríamos criar métodos de inclusão, alteração e deleçãodos dados, propriedades, consultas, etc.

A utilização do LINQ to SQL agrega produtividade nodesenvolvimento de aplicações.

6 – O próximo passo é iniciar a construção da camada denegócio, para isso vamos adicionar na Dll BLL_Balloon uma classede negocio chamada “Produtos”.

7 – Insira dentro da classe produtos um using para a Dll dacamada de dados, DAL_Balloon, e insira as seguinte propriedades.

T@rgetTrust Treinamento & Tecnologia 104

Page 112: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

ProductID – int;

Name – String;

Description – String;

Price – decimal;

OnCatalogPromotion –bool;

OnDepartmentPromotion – bool;

A classe produtos deve ficar conforme a imagem abaixo apósinserirmos as propriedades.

8 – Na sequência vamos criar um método que retorne todos osprodutos do banco de dados com uma lista da classe produtos, dacamada de negócio. Esse método irá fornecer a fonte de dados paraa camada de interface utilizar no preenchimento de grids, queapresentem os produtos cadastrados. O código do método estáapresentado na imagem abaixo.

T@rgetTrust Treinamento & Tecnologia 105

Page 113: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

9 – Após ter criado o método compile a BLL.

10 – O próximo passo é ir até o web site e criar uma páginaweb que irá servir como um cadastro de produtos. Insira uma webpage dentro da pasta Linq chamada cadProduto.aspx e crie uma opçãono menu habilitando a navegação até essa página.

11 – Na sequência insira um GridView na página cadProduto,chame o grid de gridPesquisa, vincule ele a um Data Source. ODataSource deve usar objetos como fonte de dados e deve usar ométodo getProdutos, que nós criamos na Classe produtos da BLL comométodo responsável pelo Select. Após vincular o grid com oDataSource habilite paginação e seleção no GridView. Configuretambém a propriedade DataKeyNames com a chave “ProductID” (a chaveprimária da tabela de produtos.

12 – Após termos inserido o grid vamos programar os métodospara disparar o DataBind do gridview. O código deve ser inseridoconforme abaixo.

T@rgetTrust Treinamento & Tecnologia 106

Page 114: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

13 – O próximo passo é montarmos os campos da interface, parapodermos inserir e alterar registros na tela de cadastro deprodutos. Acima do gridView insira uma Tag <H2> e coloque um nomepara a tela. Abaixo da tag <H2> insira uma tabela de 4 linhas com4 colunas. Insira uma label indicando o campo da tela e umcontrole referente ao campo da tabela de produto. Utiliza Labelpara o productID, checkbox para os dois campos bool e textBox paraos outros controles. Insira também dois botões, um botão de novo eoutro botão de salvar. O código aspx deve ficar conforme a imagemabaixo.

T@rgetTrust Treinamento & Tecnologia 107

Page 115: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

14 – Agora vamos começar a programar nossa interface para queela atue em conjunto com a camada de negócio. Lembre-se que aprogramação na camada de interface pode ter visibilidade somenteem dados de interface e pode evocar funcionalidades da camada denegocio. Nunca a camada de dados pode ser usada na interface. Oprimeiro passo é inserirmos código no botão novo. Clique duasvezes no botão novo e adicione o código abaixo.

O método do botão novo limpa todos os campos e marca oproductID com “0” (zero). Utilizaremos essa informação naimplementação de nossa lógica, dentro da interface.

15 – Agora vamos começar a gerar os métodos de CRUD dentro danossa camada de negócio. O primeiro método que vamos criar será oInserir que deve ser criado dentro da classe Produtos da nossaBLL. Crie o método conforme a imagem abaixo.

T@rgetTrust Treinamento & Tecnologia 108

Page 116: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Ao analisarmos o código do método Inserir, podemos ver que emum primeiro momento abrimos uma conexão com o banco de dados,através de um DataContext da nossa camada de dados. A partir desseDataContext iremos mandar informações para o banco de dados.Depois geramos um objeto referente a classe que queremos inserir oregistro e preenchemos as propriedades do objeto DAL com o valordas propriedades de nosso objeto de negócio.

Na sequência inserimos nosso objeto criado em um fila deinserção a partir do método InsertOnSubmit do DataContext. E aúltima ação mandamos o DataContext atualizar o banco de dados comtodos os registros que estavam em suas filas, a partir do métodoSubmitChanges.

16 – Agora vamos na nossa página, dê dois cliques no botãosalvar e insira o código abaixo, que irá chamar o método deinserção da nossa camada de negócio.

T@rgetTrust Treinamento & Tecnologia 109

Page 117: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

No código do botão é verificado se o valor da labellblProductID é zero. Se for zero então é um registro para serinserido, senão irá ser um registro para ser alterado (a chamadado método AlterarRegistro será criada posteriormente nesseexercício). Ao chamarmos o método inserir registro, criamos umobjeto de negócio, preenchemos as propriedades dele com os valoresde nossosa controles de tela e chamamos o método inserir de nossacamada de negocio.

17 – Após os métodos de inclusão terem sido criados vamoscriar um método na classe de negócio responsável pela alteração deregistros. O código do método pode ser visto abaixo.

T@rgetTrust Treinamento & Tecnologia 110

Page 118: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

18 – Em sequência, vamos criar um método FindOne em nossoobjeto de negócio, esse método será responsável por pesquisar umregistro na camada de négocio e preencher as propriedades dacamada de dados com o retorno da camada de negócio. O código dobaixo está na imagem abaixo.

19 – O próximo passo é inserirmos um tratamento no eventoSelectedIndexChanged do GridView. Esse evento será responsável porchamar os métodos de seleção da BLL e preencher os controles denossa interface com as propriedades do objeto de negócio.Visualize o código do baixo abaixo.

T@rgetTrust Treinamento & Tecnologia 111

Page 119: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

20 – Agora que já consultamos registros salvos e preenchemosos controles de interface com o valor das propriedades doregistro, devemos criar um métdo na interface que chame o métodode alteração da camada de negócio. Vamos criar o método abaixo emnossa interface.

Após ter implementado o método alterar registro, vá ao métododo botão salvar, criado anteriormente, e adicione no else achamada para o método AlterarRegistro.

Finalmente, terminamos de implementar nosso cadastro deprodutos. Rode o sistema, navegue até a página de cadastro deprodutos, navegue entre os registros que são apresentados no grid,altere alguns registros e insira registros novos.

T@rgetTrust Treinamento & Tecnologia 112

Page 120: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Com esse exercício implementamos todo os conceitos das 3camadas em nossa aplicação e deixamos a carga do LINQ to SQL todaa integração e gerenciamento da base de dados, gerando assim umaabstração a mais na camada de dados.

É importante salientar que estudamos os métodos de CRUD doLINQ to SQL, onde visualizamos que o LINQ to SQL não realizasomente consultas ao banco de dados.

No exercício não implementamos o botão excluir, mas casoqueira implementar o botão o código de excluir que fica na BLLpode ser visto na imagem abaixo e o código do botão excluir vocêpode se basear no código de alteração para gerar a implementação.

T@rgetTrust Treinamento & Tecnologia 113

Page 121: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Exercícios

1 – Gere um array de 50 numeros e implemente filtros depesquisa com o LINQ to Object trabalhando em conjunto comcontroles de tela.

2 – Implemente um cadastro da tabela Department utilizando osconceitos de 3 camadas com o LINQ to SQL.

3 – Coloque no cadastro de Departmentos um gridview queapresente todas as categorias que estão vinculadas com oDepartamentos.

T@rgetTrust Treinamento & Tecnologia 114

Page 122: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Espaço para Anotações

T@rgetTrust Treinamento & Tecnologia 115

Page 123: Asp Net 4 0 avancado versao final

ASP.NET 3.5 Avançado

6.6.Manutenção de EstadoManutenção de Estado

T@rgetTrust Treinamento & Tecnologia 116

Page 124: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Uma das características das aplicações web é que elas nãomantem seu estado. Para que elas mantenham informações utilizamosalgumas técnicas entre suas requisições. O IIS por sua vezincorpora um cookie com um identificador único no cabeçalho decada requisição http, que é enviada de volta pelo navegador. Essecookie que torna possível identificar um mesmo usuário entre osdiversos “vai e volta” de uma aplicação Web.

Desta forma a cada requisição poderíamos gravar em um banco dedados às informações importantes daquele momento, vamos supor onome do usuário. Na próxima requisição pegamos novamente esteidentificador único e faríamos uma consulta em no banco de dados,já saberíamos de qual usuário se trata, poderíamos então armazenarneste momento as informações de um produto que o usuário resolvercomprar e assim a vida seguiria tranquilamente.

Esta é uma forma primitiva e árdua de manter estado, existemdiversas outras técnicas, todas com seus prós e contras.

Vamos estudar algumas técnicas nas próximas sessões dessecapítulo. Utilizamos essas técnicas para manter valores dentro damesma página e para passar valores entre páginas diferentes,durante as requisições que executamos em nosso sistema asp.net.

Mas antes de começarmos a estudar as técnicas vamos prepararnossa aplicação para que possamos fazer um exemplo prático erápido de cada técnica de manutenção de estado que iremosaprender. Implemente os passos a seguir em nossa aplicação paranos prepararmos para os estudos.

1 – Insira em nosso Web Site uma pasta chamada “ManEstado”.

2 – Insira dois web forms dentro da pasta criada. O primeirochamado pagInicial e o segundo chamado pagFinal. Em todos osexercícios, que iremos fazer neste capítulo, navegaremos dapagInicial para a pagFinal utilizando técnicas diferentes paramandar informações de uma página para outra.

3 – Crie um atalho no menu para a pagInicial. Somente apagInicial deve ter um atalho, a pagFinal não possui atalho.

T@rgetTrust Treinamento & Tecnologia 117

Page 125: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Após termos preparados nossa aplicação, vamos estudar algumastécnicas de manutenção de estado.

T@rgetTrust Treinamento & Tecnologia 118

Page 126: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Session

Uma das formas mais simples de manutenção de estado é atravésde variáveis de sessão. Cada variável esta associada ao cookie deidentificação do usuário. Por padrão, estas informações estãoarmazenadas no próprio processo do ASP.NET. Uma novidade daera .NET foi a possibilidade de armazenamento de informações desessão em um processo separado (um servidor de estado) ou atémesmo em um SGBD. Isto trouxe novos horizontes ao desenvolvimentode aplicações Web em ASP.NET, pois simplificou a criação doschamados Web Forms, termo que define um conjunto de servidoresrodando uma aplicação específica.

Em nosso curso vamos estudar apenas o gerenciamento de sessãono próprio processo do ASP.NET (inProc), que é o comportamentopadrão.

Uma variável de sessão esta associada a exclusivamente a umaúnica sessão. Isto significa que um dado armazenado em umavariável de nome X para o usuário João não será visível navariável de sessão de mesmo nome do usuário Pedro, e vice-versa.

Sessões podem conter qualquer tipo de objeto, dessa formapodemos armazenar dentro de sessões, desde simples strings atéobjetos complexos de nossa aplicação, para serem utilizados poroutras páginas ou pela própria página que criou a sessão.

Utilizamos o objeto Session para criar as sessões de nossaaplicação. Este objeto é o responsável por criar, alterar, excluire manter as sessões. Utilizando ele nós conseguimos interagir comas sessões.

Para testarmos o uso de variáveis de sessão, vamos implementarseu uso em nossa aplicação. O objetivo do exercício é inserirmosum texto na pagInicial, armazernarmos esse texto em uma session,redirecionarmos a nossa página para a pagFinal e apresentarmos ovalor armazenado na session em uma label. Siga os passos abaixopara executar esse exercício

1 – Insira uma label, uma textBox e um botão na página inicial.A textBox deve se chamar txtSession e o botão btnSession no campotext do botão coloque “Enviar utilizando session” e no campo Text

T@rgetTrust Treinamento & Tecnologia 119

Page 127: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

da label insira “Digite um texto:” O código aspx deve ficarconforme a imagem abaixo.

2 – Insira uma label na pagFinal.aspx, o nome da label deveser “lblResultadoSession”. O código aspx da pagFinal pode servisto abaixo.

3 – Dê dois cliques no botão btnSession da pagInicial e insirao código abaixo.

Note que no código abaixo o primeiro procedimento é verificarse existe uma session chamada “Session_teste”. Caso exista umasession com esse nome ela é removida com o comando Remove. Opróximo passo é adicionar o valor digitado na textBox “txtSession”dentro da session chamada “Session_teste” utilizando o comando

T@rgetTrust Treinamento & Tecnologia 120

Page 128: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Add. A ultima linha do código redireciona nossa página para apagFinal.

4 – Agora vamos na pagFinal.aspx e vamos inserir um código noPage_Load, que deve verificar se existe a session “Session_teste”e caso ela exista deve pegar seu conteúdo e colocar dentro dalabel “lblResultadoSession”. O código deve ficar conforme a imagemabaixo.

Após termos executado esse exercício, rode o sistema, navegueaté a pagInicial e envie os dados para o outro formulário. Noteque é estremamente simples, armazenar e consultar valores deobjetos session e entenda porque está técnica é uma das maisutilizadas para armazenar valores, em tempo de execução, nossistemas web.

T@rgetTrust Treinamento & Tecnologia 121

Page 129: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

HiddenFieldUma das formas mais simples e antigas de manter estado dentro

de uma mesma página é através de campos ocultos. O valor atribuídoao controle é mantido na propriedade value entre post backs, porémnão é renderizado na página. Image um HidenField como uma textBoxinvisível que serve para armazenar textos.

ViewStateImagine a seguinte situação: em um determinado ponto de um

cadastro o usuário, após informar diversos dados cadastrais, temque digitar o CEP para que o sistema faça a busca do endereço. Opost back é acionado e quando a requisição volta ao navegador,todos os dados digitados se perderam em algum lugar do cyberspace.Claro que ninguem vai criar um aplicativo com desta forma, porém oexemplo é para lembrar que no ASP clássico e em outras diversaslinguagens de programação para Web, devemos manter o estado dapágina manualmente, ou seja, digitando muitas linhas de código.

No ASP.NET o recurso de ViewState mantem automaticamente osvalores de controles de servidor entre um post back e outro. Naverdade o ViewState internamente nada mais é do que uma campooculto um pouco mais sofisticado. Se você rodar uma aplicaçãoASP.NET sem qualquer controle verá que é criado um campo ocultopara o armazenamento do ViewState:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGS8mO25pQR00V4slvgSxG3dEvK+hA= = " />

Note que os dados não são exibidos em texto plano, por questõesde segurança. Porém este é um recurso paliativo e não devemosutilizá-lo para manter dados sensíveis.

Você ainda pode usar o ViewState para adicionar “manualmente”valores ao ViewState, lembrando que você vai conseguir recuperá-los apenas entre um post back e outro na mesma página. Abaixo umpequeno exemplo de atribuição de um valor ao ViewState:

T@rgetTrust Treinamento & Tecnologia 122

Page 130: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

ViewState["Nome"] = "T@rgetTrust";

QueryStringOutro modelo clássico de manutenção de estado é o através do

uso de querystrings, que nada mais são do que conjuntos depares/valores anexados a URL, provavelmente você já deve ter vistodezenas de páginas usando este recurso.

Sua utilização é simples, após a URL você adiciona o primeirovalor na forma ?Chave=Valor. Para passar mais de um conjunto, osmesmos devem ser concatenados através do caractere &. Pararecuperar o valor na outra página basta usar Request.QueryString.

Vamos implementar a utilização de QueryString em nossaaplicação, siga os passos a baixo para implementar o exercício.

1 – Insira uma label, um textBox e um botão na pagInicial, logoabaixo dos controles inseridos na exercício de session, vamosutilizar o mesmo modelo de exercícios do exercício de session, aúnica diferença será na nomeclatura dos controles. Utilize aimagem abaixo para identificar a nomenclatura dos controles.

2 – Insira uma label chamada lblQueryString na pagFinal.aspx,logo abaixo do parágrafo da label inserida no exercício desession. O código deve ficar conforme abaixo.

T@rgetTrust Treinamento & Tecnologia 123

Page 131: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

3 – De dois cliques no botão btnQueryString e insira o códigoabaixo. Note como é utilizado o queryString ao redirecionar apágina.

4 – Vá ao evento Page_Load da pagFinal.aspx e insira oseguinte código abaixo do código inserido no exercício anterior.Note a forma que o QueryString é recuperado e tem seu conteúdoescrito na lblQueryString.

Após ter inserido os código rode a aplicação, navegue até apagInicial, escreva algum texto na textbox “txtQueyString”, cliqueno botão de enviar via QueryString e visualize o texto sendoapresentado na pagFinal através do envio por QueryString.

Cookies

Outra forma de manutenção de estado é através do uso decookies, que nada mais é do que um pequeno arquivo de texto quearmazenado na maquina do usuário. Sua grande vantagem é que vocêpode identificar o usuário mesmo dias depois de seu acesso apágina. Este recurso é muito usado, pro exemplo, em sites decomércio eletrônico, para exibir as preferências do usuário osúltimos produtos que ele navegou.

O grande problema dos cookies é que o usuário simplesmentepode desabilitar este recurso em seu navegador.

T@rgetTrust Treinamento & Tecnologia 124

Page 132: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Application

Semelhante em diversos aspectos com variáveis de sessão, comuma importante diferença: As variáveis de aplicação sãocompartilhadas entre todos os usuários da aplicação. Uma variávelde aplicação esta associada a toda a aplicação. Isto significa queum dado armazenado em uma variável de nome X para o usuário Joãoserá visível na variável de aplicação de mesmo nome do usuárioPedro, e vice-versa.

Outra diferença importante é que uma variável de aplicaçãoestará disponível durante toda a vida da aplicação, enquanto umavariável de sessão será perdida ao fim da sessão do usuário.

Vamos implementar um exercício mostrando a utilização doapplication em nossa aplicação, a diferença desse exercício paraos outros exercícios deste capítulo, é que vamos utilizar somentea pagInicial. O objetivo desse exercício será armazenar um valorem um objeto application e escrever esse valor em uma label dentroda pagInicial, para mostrar que mesmo ao fecharmos a aplicação ovalor do objeto application continuará nele, sendo que o objetoapplication só irá perder o valor ao derrubarmos o servidor doasp.net. Siga os passos abaixo para a implementação do exercício.

1 – Insira o código aspx abaixo na pagInicial. Utilize a mesmanomenclatura.

2 – Dê dois cliques no botão “btnApplication” e insira o códigoabaixo. Repare na forma de passar valor para o objeto application.

T@rgetTrust Treinamento & Tecnologia 125

Page 133: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

3 – Insira o código para gerenciar o page.LoadComplete nocódigo da pagInicial.aspx.cs. O objetivo do código deve serinserir o valor do application na label “lblResultApplication”. Caso oapplication não exista então deve ser escrito uma mensagem nalabel informando que o application não possui valor. O códigoabaixo nos mostra como fazer essa implementação.

Rode a aplicação, insira algum valor e clique no botão. Noteque a label irá apresentar o valor digitado. Feche a aplicação eentre nela novamente, note que a label continua apresentandovalor. Agora feche a aplicação, derrube o servidor do asp.net erode novamente a aplicação. Agora note que a mensagem que nãoexiste nenhum valor no application voltou a ser exibida.

Você pode ser perguntar como foi possível recuperar o valor jáque ninguém estava usando a aplicação em determinado momento. Naverdade, mesmo que ninguém utiliza a aplicação, os valores devariáveis de aplicação só serão perdidos quando a última sessãoexpirar.

T@rgetTrust Treinamento & Tecnologia 126

Page 134: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Exercícios

1 – Utilize sessões para armazenar o DataSource de um gridviewe carregue o grid view com o data source a cada requisição feitapela página.

2 – Utilize query string para definir a cor de fundo de umadeterminada página, sendo que esta página pode ser chamada poroutras páginas, onde a página que chama define a cor de fundo quedeve ser apresentada.

3 – Utilize application, para contar quantas vezes um usuáriox se loga em sua aplicação.

T@rgetTrust Treinamento & Tecnologia 127

Page 135: Asp Net 4 0 avancado versao final

Error! Use the Home tab to apply Título 1 to the text that youwant to appear here.

Espaço para Anotações

T@rgetTrust Treinamento & Tecnologia 128

Page 136: Asp Net 4 0 avancado versao final

ASP.NET 3.5 Avançado

7.7.Web ServicesWeb Services

T@rgetTrust Treinamento & Tecnologia 129

Page 137: Asp Net 4 0 avancado versao final

Web Services

Objetivos

Ao final deste capítulo você estará apto à: Explicar o que é um Web Service. Descrever o objetivo e o processo por trás da

chamada de um XML Web Service a partir de um WebForm. Chamar um Web Service diretamente de um browser

através de HTTP (Hypertext Transfer Protocol). Criar um Web Service. Consumir Web Services de terceiros.

T@rgetTrust Treinamento & Tecnologia 130

Page 138: Asp Net 4 0 avancado versao final

Web Services

Web Services

O que é um Web service?

Um Web service é um componente utilizado na integração desistemas de plataformas diferentes. Os web services fornecem umafacilidade para clientes e fornecedores e podem ser vistos como umcomponente de alcance global.

Os web services usam o protocolo padrão HTTP (HypertextTransfer Protocol) para transmitir dados e um formato de dadosportável que é baseado no XML. Os dados são transferidos noformato XML e encapsulados pelo protocolo SOAP.

O HTTP e o XML são tecnologias padronizadas que podem serusadas por outros ambientes de programação fora do .Net Framework,ou seja, você pode criar web services usando o VS 2010, e osaplicativos cliente que estão executando em um ambiente totalmentediferente , como Java, podem usá-los. O inverso também é possível,você pode criar web services usando Java e escrever aplicativoscliente usando C#.

A visão do cliente de um web service é a de uma interface queexpõe vários métodos bem definidos. O cliente precisa chamar essesmétodos usando os protocolos padrão da internet, passando osparâmetros em um formato XML, e recebendo respostas em um formatoXML.

Muitos consideram um web service como uma DLL web, visto queambos tem funcionalidades muito parecidas, tendo como diferençaque as Dll’s rodam dentro do computador e o web service roda em umservidor web.

O SOAP nos Web services

O SOAP (Simple Object Access Protocol) é um protocoloconstruído sobre o HTTP, ele permite a comunicação entreaplicações rodando em diferentes sistemas operacionais, comdiferentes tecnologias e linguagens de programação.

T@rgetTrust Treinamento & Tecnologia 131

Page 139: Asp Net 4 0 avancado versao final

Web ServicesO SOAP define uma gramática XML para especificar os nomes dos

métodos que um cliente deseja invocar em um web service, definindoos parâmetros e valores de retorno. Quando um cliente invoca umweb service, ele deve especificar o método e os parâmetros usandoessa gramática XML.

Estrutura de um Web service

Os web services do .NET framework são similares aosaplicativos Web do ASP.NET pois consistem em duas partes: oarquivo .asmx que define o web service e um arquivo de código C#com o sufixo .cs. O arquivo.cs contem o código c# para os métodosadicionados ao Web service.

O arquivo .asmx contém somente uma linha como a diretivamostrada abaixo:

<%@ WebService Language="C#" CodeBehind="Target.asmx.cs"Class="Service.Target" %>

Manipulando dados complexos

O SOAP permite que você passe estruturas de dados complexasentre um cliente e um web service como parâmetros de entrada,parâmetros de saída ou valores de retorno. Neste caso asestruturas são convertidas em um formato que pode ser transmitidopela rede e remontadas na outra extremidade, conhecidas comoprocesso de serialização. O processo de serialização SOAP convertea classe em XML, envia a versão serializada pela rede usando SOAPe reconstrói a classe em XML na outra extremidade. Podemos tambémpersonalizar o mecanismo de serialização usando as várias classesde atributos SOAP do namespace System.Xml.Serialization.

T@rgetTrust Treinamento & Tecnologia 132

Page 140: Asp Net 4 0 avancado versao final

Web Services

Criando e utilizando um Web Service

Vamos implementar em nossa aplicação um web service local.Para isso vamos seguir os passos abaixo.

1 – Insira duas pastas em nosso web site. Uma pasta chamadaPagesWebService, onde ficarão as páginas que implementaremos nessecapítulo, e uma pasta chamada WebServices, dentro desta pastairemos inserir o Web Service local de nossa aplicação.

2 – Clique com o botão direito na pasta WebServices, selecionenew item e insira um item do tipo WebService, o nome do item deveser Calculo. Dessa forma estamos inserindo um web service em nossaaplicação, basta inserir o item dentro da solution, que serácriado o Web Service.

3 – Apague o método default (Hello World) e insira um métodode cálculo chamado soma. O código do web service pode ser vistoabaixo.

Note que o método Soma possui um atributo WebMethod. Esseatributo torna o método disponível para acesso através da web.Note também que o namespace foi alterado para ficar maisintuitivo.

T@rgetTrust Treinamento & Tecnologia 133

Page 141: Asp Net 4 0 avancado versao final

Web ServicesDentro de um web service, qualquer tipo de função pode ser

escrita como um método, desde um cálculo simples, como o métodoSoma que acabamos de implementar, até uma consulta complexa em umbanco de dados.

4 – Agora vamos incluir um web form, na pasta PagesWebService,o nome do web form deve ser “UtilizandoWS.aspx”. Insira trêslabels, dois textbox e um Button. Utilize o código abaixo paramontar seu aspx. O objetivo do web form é apresentar duas textboxpara que o usuário insira o primeiro e o segundo valor a seremsomados e quando for clicado no botão, será chamado o método doweb form e o resultado será exibido na label lblResultado.

5 – Dê dois cliques no botão btnProcessar e implemente umcódigo que crie um objeto do tipo do web service e depois utilizeesse objeto para chamar o método de soma, passando os valores dastextbox para os parâmetros dos métodos. O resultado do método deveser passado para a label lblResultado. O código abaixo apresentacomo deve ser implementado o método do botão.

6 – Insira uma opção no menu para chamar a página, rode aaplicação e visualize o nosso web service local funcionando

T@rgetTrust Treinamento & Tecnologia 134

Page 142: Asp Net 4 0 avancado versao final

Web Servicesperfeitamente. Podemos ver como é simples implementar um webservice com o .net framework 4.0. Até o framework versão 3.5 eranecessário criar um projeto do tipo asp.net web service, agora como framework 4.0 basta criar um web site normal e adicionar um itemdo tipo web service para dentro do web site.

É importante lembrar que os tipos utilizados como parâmetro etambém os tipos utilizados como retorno do método do WebServicesão transformados em XML antes de serem transportados do clientepara o servidor, por tanto, devemos utilizar classes e tipos quesejam serializáveis.

T@rgetTrust Treinamento & Tecnologia 135

Page 143: Asp Net 4 0 avancado versao final

Web Services

Chamando um XML Web Service por HTTP

O processo de chamar um Web Service por HTTP, também chamadode acesso direto, é tipicamente usado por desenvolvedores em tempode desenvolvimento para identificar e testar Web Services. Oacesso direto permite que se veja os métodos, propriedades e oresultado de um Web Service em um ambiente amigável para odesenvolvedor.

O primeiro passo para acessar um Web Service é encontrar um.Para encontrar Web Services se utiliza serviços de busca. Essesserviços de busca estão evoluindo e mudando rapidamente conforme atecnologia ganha aceitação na comunidade da Internet.

O processo para encontrar e utilizar um Web Service é comosegue:

1. Desenvolvedores de Web Services publicam descrições elocalizações para seus Web Services em um serviço universalchamado UDDI (Universal Description, Discovery andIntegration).

2. Se consulta o site do UDDI para encontrar Web Servicesdisponíveis que satisfaçam as necessidades requeridas. Osite do UDDI oferece uma lista de Web Services que incluemo arquivo .disco (Discovery File - DISCO) com URLs para osWeb Services.

3. Escolhe-se um Web Service e se acessa o arquivo DISCO paralocalizar a URL do Web Service e o documento WSDL (WebServices Description Language).

4. Constrói-se um objeto proxy a partir do documento WSDL.

Uma classe proxy é um código que se parece exatamente com aclasse que ela representa; entretanto, a classe proxy nãocontém nenhuma lógica da aplicação. Ao invés disso, aclasse proxy contém código de conversão e transportelógico. Um objeto proxy permite que um cliente acesse umWeb Service como se ele fosse um objeto COM local.

5. Usa-se o objeto proxy para chamar o Web Service

T@rgetTrust Treinamento & Tecnologia 136

Page 144: Asp Net 4 0 avancado versao final

Web Services6. Usa-se o Web Service a partir de uma WebForm por meio do

proxy.

T@rgetTrust Treinamento & Tecnologia 137

Page 145: Asp Net 4 0 avancado versao final

Web Services

A especificação do UDDI define uma maneira de publicar eprocurar informações a respeito de um Web Service e a respectivaempresa que fornece o mesmo. Empresas registram individualmenteinformações sobre seus Web Services para que sejam utilizados poroutras empresas. Após o registro, o Web Service fica disponível deforma gratuita para qualquer um que queira utilizar o serviço.

Após ter encontrado um Web Service no UDDI, usa-se a URL .asmxpara navegar até a página de descrição, na qual forneceinformações sobre o que o Web Service faz, os métodos que elecontém, seus parâmetros e respostas. Também é possível utilizar apágina de descrição para testar as funcionalidades do Web Service.

Ao acessar a página de descrição do Web Service, o browsermostra todos os métodos disponíveis. Clicando em um método mostraos parâmetros necessário para executar tal método.

Também pode-se clicar no link “Service Description”, no topoda página de descrição, para ver o contrato WSDL, na qual contémuma descrição em XML do Web Service.

Para chamar um método do Web Service, deve-se preencher osparâmetros e clicar em “Invoke”. O WebForm passa o nome do método,os parâmetros necessários e seus respectivos valores para a URL doWeb Service. O Web Service sempre retorna o resultado no formatoXML.

T@rgetTrust Treinamento & Tecnologia 138

Page 146: Asp Net 4 0 avancado versao final

Web Services

Utilizando um WebService externo

Vamos implementar em nossa aplicação a utilização de umWebService externo. Siga os passos abaixo para executar esteexercício.

1 – Insira um web form, na pasta PagesWebService, chamadoUtilizandoWSExterno.aspx.

2 – Clique com o botão direito no web site e selecione a opção“Add Web Reference . . . “, sempre que quisermos utilizar um webservice externo em nossa aplicação devemos adicionar uma webreference.

3 – No campo url, digite o caminho do web service que desejautilizar, neste exercício digite:HTTP://www.bronzebusiness.com.br/webservices/wscep.asmx e cliqueem Go. Após o visual Studio buscar e apresentar as informações doweb service digite wsCep (nome amigável que utilizaremos em nossocódigo para chamar os objetos e métodos do web service) e cliqueem Add Reference. Utilize a figura abaixo como referência.

T@rgetTrust Treinamento & Tecnologia 139

Page 147: Asp Net 4 0 avancado versao final

Web Services

Após termos adiciona a web reference podemos utilizar o webservice como qualquer outro objeto em nossa aplicação.

4 – Dando sequência ao nosso exercício, adicione uma pastachamada ClassesApoio no web site, dentro desta pasta vamos inserirclasses auxiliares para nossos exercícios.

5 – Insira uma classe chamada Endereco.cs dentro da pastaClassesApoio, utilizaremos essa classe para armazenar os valoresdo web service e mandar as informações para a página de interface.Crie as propriedades dessa classe conforme imagem abaixo.

T@rgetTrust Treinamento & Tecnologia 140

Page 148: Asp Net 4 0 avancado versao final

Web Services

6 – Insira uma classe chamada ConsultaCEP.cs. Essa classe irápossuir um método estático que irá retornar um objeto Endereco. Ométodo irá consultar o web service enviando um numero de CEP, oweb service irá retornar as informações relacionadas com o CEP e ométodo preencherá o objeto de retorno Endereco com as informaçõesrecebidas do web service. A imagem abaixo mostra a implementaçãodesta classe.

T@rgetTrust Treinamento & Tecnologia 141

Page 149: Asp Net 4 0 avancado versao final

Web ServicesNote que o serviço é chamado da mesma maneira que criar uma

nova instância de um objeto qualquer. Pode ser visto também que ométodo “cep” do web service retorna um System.Data.DataSet com umaDataTable que possui somente um DataRow com as informaçõesreferente ao CEP.

7 – Agora vamos implementar os controles da páginaUtilizandoWSExterno.aspx. O objetivo é implementar uma textBoxonde o usuário digite o CEP que deseja buscar informações e quandoele clicar em um botão de processamento, o sistema busque asinformações do CEP digitado e escreva elas em outras textBox.Insira o código aspx abaixo na página UtilizandoWSExterno.aspx.

8 – Dê dois cliques no botão Consultar CEP e insira o códigoabaixo.

T@rgetTrust Treinamento & Tecnologia 142

Page 150: Asp Net 4 0 avancado versao final

Web Services

9 – Insira a chamada da página no menu principal do sistema erode a aplicação, navegue até a página, insira algum CEP válido,clique em Consultar CEP e visualize as informações apresentadas.

Note como é simples e funcional utilizar web services deterceiros, após termos criado uma web reference, temos acesso aoweb service como se ele fosse um objeto qualquer dentro de nossaaplicação.

T@rgetTrust Treinamento & Tecnologia 143

Page 151: Asp Net 4 0 avancado versao final

Web Services

Exercícios

Estes exercícios visão revisar o conteúdo visto ao longo destecapítulo sobre XML Web Services.

1. Onde deve-se procurar informações sobre Web Servicesdisponíveis?

2. Como poderia se testar um Web Service rapidamente para veros métodos e parâmetros que ele disponibiliza?

3. Desenvolva um web service que realize a soma entre 2números e teste no browser.

T@rgetTrust Treinamento & Tecnologia 144

Page 152: Asp Net 4 0 avancado versao final

Web Services

Espaço para Anotações

T@rgetTrust Treinamento & Tecnologia 145

Page 153: Asp Net 4 0 avancado versao final

ASP.NET 3.5 Avançado

8.8.Utilizando AJAX no ASP.NETUtilizando AJAX no ASP.NET

T@rgetTrust Treinamento & Tecnologia 146

Page 154: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

Objetivos

Ao final deste capítulo você estará apto à: Entender o que é o Ajax; Utilizar o controle ScriptManager; Utilizar o controle UpdatePanel; Registrar scripts a partir do ScriptManager; Utilizar AjaxControlToolkit;

T@rgetTrust Treinamento & Tecnologia 147

Page 155: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

O que é AJAX ?

Por AJAX entendemos Assynchronous JavaScript And XML, quesignifica execução assíncrona de javascript com uso de XML. Atecnologia AJAX do Microsoft ASP.NET permite a criação de páginasweb pages que incluem uma experiência rica do usuário comelementos mais responsivos e interativos com a interface dousuário (UI). O AJAX do ASP.NET fornece as bibliotecas de scriptde cliente que incorporam ECMAScript (Javascript) cross-browser etecnologias dinâmicas do HTML (DHTML), além de integrar-se com aplataforma de desenvolvimento voltada ao servidor doASP.NET. Usando AJAX, você pode melhorar a experiência do usuárioe a eficiência de suas aplicações web.

Por que usar AJAX no ASP.NET?

AJAX permite construir aplicações web ricas com muitasvantagens sobre as aplicações web baseadas totalmente no servidor.Alguns dos benefícios oferecidos pela tecnologia AJAX são:

Eficiência melhorada executando partes significativas depágina no browser, ao invés do servidor

Elementos familiares de UI tais como indicadores doprogresso, tooltips, e janelas pop-up.

Updates parcial da página, onde somente as partes da webpage que mudaram são atualizadas

Compatibilidade com os browsers os mais populares egeralmente os mais usados, que inclui o InternetExplorer, Firefox, Chrome, etc.

Adição de scripts via código .Net.

Comportamento semelhante a aplicações windows forms.

Quanto a performance, a utilização do Ajax não tem um impactosignificativo.

T@rgetTrust Treinamento & Tecnologia 148

Page 156: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NETUtilizando Ajax em uma aplicação Web

Para entendermos a utilização do Ajax, vamos implementar seuuso em nossa aplicação e a cada tópico que iremos estudando vamosir aumentando nossa implementação.

O primeiro passo é preparar o básico em nossa aplicação paraque possamos realizar exercícios. Siga os passos.

1 – Adicione uma pasta chamada Ajax em nosso web site.

2 – Adicione um web form chamado pagAjaxGeral.aspx dentro dapasta criada!

3 – Adicione um item no menu da aplicação que faça a chamadade página.

4 – Insira os seguintes controles na pagAjaxGeral.aspx: Duaslabels, uma textBox e um Button. O objetivo é digitar um texto,dar uma pausa no processamento e apresentar o texto digitado nalabel de resultado, dessa forma poderemos ver a página sendocarregada de forma normal e a página sendo carregada pelo Ajax.Utilize o código abaixo como base para montar o aspx.

5 – Dê dois cliques no botão btnOk e insira o código abaixo.Leia os comentários do código para entender o objetivo de cadalinha.

T@rgetTrust Treinamento & Tecnologia 149

Page 157: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET6 – Rode o sistema, navegue até a página, digite algum texto e

clique no botão. Repare que o sistema irá dar uma pausa de 3segundos no processamento (em função da chamada do método Sleep),enquanto ocorre o processamento note que a barra de progresso donavegador é apresentada, isso mostra que uma requisição foienviada para o servidor e a página está aguardando a resposta.

Após esse passo já temos o básico para iniciarmos o estudo doAjax em nossa aplicação.

Quando nos referirmos aos controles Ajax, lembre-se que elesestão na caixa de ferramentas, na aba AjaxExtension.

O controle ScriptManager

Toda a página que utiliza os recursos do AJAX necessita de umcontrole em especial, o controle chamado Script Manager. OScriptManager é responsável por gerenciar toda a comunicação dapágina com o servidor, atuando como um Proxy de comunicação. Todosos scripts da página são gerenciados pelo ScriptManager.

Se quisermos utilizar Ajax em uma página, é obrigatória autilização de um ScriptManager ou de um controle que derive dele.

T@rgetTrust Treinamento & Tecnologia 150

Page 158: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NETSe executarmos uma página que contém um controle

scriptManager, podemos perceber que no código HTML serárenderizado uma série de scripts que permitem o uso das funções doAJAX.

Toda página aspx pode ter somente um controle ScriptManager.

Insira um controle ScriptManager na página pagAjaxGeral.aspx,insira o controle acima da tag H2.

Rode o sistema e perceba que nada ocorre, porque oScriptManager trabalha em conjunto com o controle UpdatePanel.

O controle UpdatePanel

Uma das grandes vantagens dos controles AJAX do ASP.NET é queeles não requerem tanta codificação como outras implementações deAJAX disponíveis. Um dos exemplos disso é o controle UpdatePanel.O controle updatepanel nos permite indicar na página quais osconteúdos que poderão ser alterados durante um postback.

Quando inserimos um UpdatePanel ele automaticamente égerenciado pelo ScriptManager da página.

O controle UpdatePanel atua como um container, sendo que elepossui uma tag interna chamada ContentTemplate, onde todo oconteúdo inserido dentro do ContentTemplate irá ter seus métodos ecomportamento gerenciados pelo Ajax.

O UpdatePanel possui também a tag Triggers, onde sãoassociados controles e respectivos eventos que o UpdatePanel deveficar associado. Veremos a utilização de Triggers mais adiante emnosso capitulo.

Para entendermos o funcionamento do UpdatePanel, insira essecontrole, logo abaixo do ScriptManager, na página pagAjaxGeral,abra a tag ContentTemplate do UpdatePanel e arraste todo oconteúdo do aspx que tínhamos inserido antes, para dentro da tagContentTemplate. Se baseie na figura abaixo para arrumar o códigoaspx.

T@rgetTrust Treinamento & Tecnologia 151

Page 159: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

Após ter executado essa ação rode o sistema, digite algo eclique no botão btnOk. Conseguiu notar a diferença? Agora pareceque a página não está fazendo nada e simplesmente a lblResultadoapresenta o texto, sem que a página seja recarregada.

Esse é o comportamento de páginas que utilizam o Ajax. Oprocesso de requisição e espera ao servidor é mascarado e a páginanão é toda renderizada, apenas o conteúdo de dentro do UpdatePanelé atualizado. E mesmo assim esse processo não é apresentado para ousuário.

O Controle UpdateProgress

Quando utilizamos Ajax o processamento passa despercebido parao usuário da aplicação, mas muitas vezes é interessante avisar ousuário que está sendo efetuado um processamento, para isso temoso controle UpdateProgress.

O controle UpdateProgress apresenta uma estrutura HTML,definida pelo programador, para o usuário quando um processamentoestá acontecendo.

T@rgetTrust Treinamento & Tecnologia 152

Page 160: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NETO conteúdo que deve ser apresentado deve ser colocado dentro

da tag interna do UpdateProgress chamada ProgressTemplate.

Vamos inserir um UpdateProgress em nossa aplicação paraentendermos o comportamento do controle.

Primeiramente adicione na solution um gif que represente aação de processamento (um bom site para baixar gif’s é owww.ajaxload.info).

Adicione um controle UpdateProgress logo abaixo do fechamentodo controle UpdatePanel e insira o código que pode ser visto nafigura abaixo.

Agora rode o sistema e veja que quando você disparar umprocessamento o UpdateProgress será apresentado.

O Controle Timer

Outro controle disponível na plataforma AJAX do ASP.NET é ocontrole de Timer. O controle de timer permite que a páginaexecute postbacks em um intervalo regular de tempo, conforme asconfigurações do controle.

O controle de Timer pode ser utilizado em aplicações de trêscenários.

Atualizar periodicamente o conteúdo de um UpdatePanel sematualizar a página inteira

Executar uma determinada função de postback no servidor acada intervalo definido no Timer

Postar a página para o servidor de maneira síncrona,fazendo com que toda a página seja atualizada

T@rgetTrust Treinamento & Tecnologia 153

Page 161: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NETO controle de Timer possui uma propriedade Timer, que indica o

número de milissegundos em que o evento da página deve acontecer.

Vamos inserir um controle Timer em nossa aplicação para quepossamos entender bem o seu funcionamento.

1- Adicione o código abaixo, logo abaixo da abertura doparágrafo de dentro do ContentTemplate do UpdatePanel.

2 – Dê dois cliques no controle Timer e adicione um código aoevento Tick que atualize a lblData com a data atual do sistema. Ocódigo abaixo apresenta como fazer isso.

Rode o sistema e visualize que a cada segundo a lblDataapresenta a data e a hora atual do sistema.

Triggers

O UpdatePanel possui a tag Triggers. Essa tag tem afuncionalidade de acoplar controles fora do ContentTemplate com oUpdateProgress, permitindo que o UpdatePanel gerencie qualquercontrole da página.

Dentro da tag Triggers utilizamos a tag AsyncPostBackTrigger,dentro desta tag preencheremos as propriedades ControlID com onome do controle que queremos associar ao Trigger e a propriedadeEventName com o nome do evento que será acoplado com oUpdatePanel.

T@rgetTrust Treinamento & Tecnologia 154

Page 162: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NETVamos inserir a utilização de Triggers em nossa aplicação para

que possamos ter um pleno entendimento. Siga os passos abaixo paraimplementar o exercício.

1 – Arraste o controle Timer1 para fora do UpdatePanel.

2 – adicione uma tag Triggers no UpdatePanel, acima daabertura da tag ContentTemplate, dentro da tag Triggers adicioneum AsyncPostBackTrigger e preencha a propriedade ControlID com onome do Timer e a propriedade EventName adicione o texto Tick queirá fazer referência ao evento Tick do timer. O resultado do aspxpode ser visto na figura abaixo.

Rode a aplicação e visualize que o updatePanel continuagerenciando o evento tick do timer, mesmo com o timer estando forado ContentTemplate.

Inclusão de Scripts via ScriptManager

Uma funcionalidade muito importante que o ScriptManager possuié gerar, via código .net, código script na página.

T@rgetTrust Treinamento & Tecnologia 155

Page 163: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NETA criação de scripts é realizada utilizando os métodos da

classe responsável pelo ScriptManager e não pelo controle.

O método utilizado é o RegisterClientScriptBlock, que recebecomo parâmetro o local onde ele deve inserir o script (no caso aprópria página), o tipo do objeto, uma nomenclatura do script paraefetuar o registro, o script e uma boolen que indica se deveregistrar a tag do script.

Vamos implementar essa funcionalidade em nossa aplicação.Adicione um botão chamado btnScripts, na página pagAjaxGeral.aspx,e o texto do botão deve ser “Disparar alert javascript”.

Dê dois cliques no botão e insira o código abaixo. Depois rodea aplicação, clique no botão e visualize um alert javascript sendocriado a partir de código .net.

T@rgetTrust Treinamento & Tecnologia 156

Page 164: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

AJAX Control Toolkit

O AJAX Control Toolkit é um pacote adicional que contém umasérie de controles desenvolvidos para a plataforma AJAX ASP.NET.Este pacote não é instalado junto com as extensões de AJAX para oASP.NET, deve ser instalado separadamente (o link para o pacote deinstalação encontra-se no site do AJAX ASP.NET(HTTP://ajax.asp.net).

Tenha muito cuidado na hora do download para baixar a versãodo framework 4.0 do Ajax Control Toolkit. No próprio site doAjaxControlToolkit existe bastante material escrito e vídeos queexplicam como utilizar os controles.

Após a instalação é aconselhável que você adicione oscontroles em sua toolbox do Visual Studio.NET. Para isto, bastaseguir os seguintes passos.

1. Clique com o botão direito sobre a toolbox

2. Selecione a opção Add Tab

3. Dê a tab o nome de AJAX Control Toolkit

4. Clique com o botão direito sobre a área vazia na nova seçãoda toolbox e selecione “Choose Items...”

5. Clique no botão browse e selecione a DLLAjaxControlToolkit.DLL que se encontra na pasta de instalação doToolkit.

Após seguir estes passos os controles do toolkit estarãodisponíveis para uso na sua toolbox, conforme a figura a seguir.

T@rgetTrust Treinamento & Tecnologia 157

Page 165: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

T@rgetTrust Treinamento & Tecnologia 158

Page 166: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

Utilizando controles do Ajax Control Toolkit

Agora vamos implementar em nossa aplicação a utlização dealguns controles pertencentes ao Ajax Control Toolkit.

Dentro do Toolkit temos diversos controles, mas paraapresentarmos a facilidades de utilização desses controles, vamosaprender a utilizar 3 controles, o ValidatorCalloutExtender, oCollapsiblePanelExtender e o PopupControlExtender.

Para utilizar os outros controles pertencentes ao Ajax ControlToolkit, consulte a documentação que pode ser encontrada no sitedo toolkit.

ValidatorCalloutExtender

O controle ValidatorCalloutExtender tem como objetivo ser umextensor dos validadores do asp.net, adicionando a eles umcomportamento mais amigável e a possibilidade de personalizar aaparência do validador.

Vamos implementar a utilização de um ValidatorCalloutExtenderem nossa aplicação. Siga os passos abaixo para executar essaimplementação.

1 – Insira um web form chamado pagValidatour na pasta Ajax denossa aplicação.

2 – Insira o código abaixo no aspx de pagValidatour. Nomomento que for inserir o ValidatorCalloutExtender, arraste ocontrole da toolbox do AjaxControlToolKit.

T@rgetTrust Treinamento & Tecnologia 159

Page 167: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

Note que não estamos utilizando o ScriptManager e sim oToolKitScriptManager. Para utilizarmos os controles do Toolkitdevemos sempre utilizar o ToolKitScriptManager. Este controleherda as implementações do ScriptManager e possui algumasalterações de otimização com os controles do toolkit.

3 – Dê dois cliques no botão Processar e insira um código queescreva na lblResultado a data e a hora atual.

4 – Crie uma opção no menu principal para chamar a página erode o sistema. Não digite nenhum valor da textbox e clique nobotão. Note que vai aparecer um “balão” informando ao usuário queele necessita digitar algum texto. Esse “balão” é o controleValidatourCalloutExtender. A aparência do controle pode sercustomizada, a aparência de “balão” é a default. Visualize nafigura abaixo como o controle é apresentado.

T@rgetTrust Treinamento & Tecnologia 160

Page 168: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

CollapsiblePanelExtender

O controle CollapsiblePanelExtender tem a funcionalidade deficar vinculado com painéis (ou com qualquer controle do tipocontainer visual) e apresentar/esconder as informações do painelconforme receba cliques.

Para que ocorra o entendimento das funcionalidades destecontrole vamos implementar sua utilização em nossa aplicação. Sigaos passos abaixo.

1 - Insira um web form chamado pagCollapsible na pasta Ajax denossa aplicação.

2 – Insira o código abaixo no aspx da pagCollapsible.

T@rgetTrust Treinamento & Tecnologia 161

Page 169: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NETNote que foi inserido dentro do panel panelCorpoInf algumas

tags br e um texto qualquer. É importante salientar que a cor dopanelCorpoInf é vermelha. Estamos utilizando isso em nossoexercício para destacar as informações quando elas serão exibidas.

3 – Crie um item no menu para chamar a página e rode nossaaplicação. Clique no panel azul que é apresentado e note que opanel vermelho é apresentado, clique novamente no panel decabeçalho e perceba que o panel vermelho é escondido.

PopupControlExtender

O controle PopupControlExtender tem a finalidade de adicionarum popup a algum controle. Isso é muito utilizado em Web Mails,como o gmail ou o hotmail, quando vamos escrever algum o nome dodestinatário do email e logo abaixo da caixa de digitação nos éapresentada um popup com os emails que temos cadastrado.

Vamos implementar sua utilização em nossa aplicação para queocorra o entendimento de suas funcionalidades. Siga os passosabaixo.

T@rgetTrust Treinamento & Tecnologia 162

Page 170: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET1 - Insira um web form chamado pagPopup na pasta Ajax de nossa

aplicação.

2 – Insira o código abaixo no aspx da página pagPopup.

Note que foi inserido um código css dentro da página estecódigo é utilizado para dar uma aparência ao panel que seráutilizado como popup. No PopupControlExtender é configurado ocontrole que deve receber o popup (TargetControlID), o controleque deve ser apresentado com o popupControl (PopupControlID) eposição que deve ser apresenado em relação ao controle (Position).

3 – Selecione o controle RadionButtonList1, crie um eventoSelectedIndexChanged e insira o código abaixo.

T@rgetTrust Treinamento & Tecnologia 163

Page 171: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

4 – Crie um item no menu para a página e rode a aplicação.Clique com o mouse sobre a textBox e veja que será apresentado umpopup com o panel. Selecione um item do panel e veja o texto dalistItem ser escrito na textBox.

T@rgetTrust Treinamento & Tecnologia 164

Page 172: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

Espaço para anotações

T@rgetTrust Treinamento & Tecnologia 165

Page 173: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

9.9.ReflectionReflection

T@rgetTrust Treinamento & Tecnologia 166

Page 174: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

Objetivos

Ao final deste capítulo você estará apto à: Entender o que é o Reflection; Utilizar Assembly, AssemblyName e Módulos; Compreender o Type; Implementar Reflexão em sua aplicação;

T@rgetTrust Treinamento & Tecnologia 167

Page 175: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

O que é Reflection?

Reflection é um conjunto de classes que permitem acessar emanipular assemblies, módulos, tipos e os metadados que elescontêm. Por exemplo, você pode utilizar reflection para enumerarassemblies, módulos e classes carregadas e os métodos,propriedades, campos e eventos que cada tipo expõe. O reflectiondesempenha um papel fundamental no .net framework 4.0 e funcionacomo um bloco de construção para outras partes importantes doruntime. O runtime utiliza a reflexão em muitas circunstancias,por exemplo, para enumerar os campos quando um tipo está sendoserializado ou quando sofre marshaling para um outro processo oupara uma máquina. O visual Studio utiliza a reflexãotransparentemente sempre que você acessa um método de um objetopor vinculação tardia.

O código relacionado à reflexão em geral utiliza os tipos nonamespace System.Reflection. A única classe utilizada pelareflexão fora desse namespace é System.Type, que representa umtipo em módulo gerenciado.

Funcionalidades e ganhos de utilizar reflexão em nossa aplicação

A utiilização de reflexão em nossas aplicações tem comoprincipais funcionalidades a automatização de métodos e a criaçãode arquiteturas genéricas.

Utilizando reflexão podemos criar comparadores universais,atribuidores de valores genéricos, personalização de métodos apartir de comparadores de tipos ou atributos, etc. Essa utilizaçãoproporciona ganhos tremendos em questões como segurança de código,otimização de processamento, reutilização de código e ganhos deprodutividade.

Em função da grande gama de implementações que a reflexãodisponibiliza ao desenvolvedor ela é amplamente utilizada emsistemas complexos.

T@rgetTrust Treinamento & Tecnologia 168

Page 176: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NETUma das desvantagens de utilizar reflection é a complexidade

do código gerado, mas depois do programar dominar as técnicas dereflexão, essa desvantagem não é tão impactante.

O tipo Assembly

O tipo Assembly representa um assembly .Net. Esse tipo nãooferece um método construtor porque você nunca realmente cria umassembly, mas simplesmente obtém uma referência a um assemblyexistente.

Após carregarmos o assembly o objeto irá fornecer uma forma dedebugar e inspecionar as propriedades do assembly.

Verifique na imagem abaixo algumas formas de carregar oAssembly.

O tipo AssemblyName

A classe AssemblyName representa o objeto que o .net utilizapara armazenar a identidade e recuperar as informações sobre umassembly. Um objeto AssemblyName completamente especificado tem umnome, uma cultura e um número de versão, mas o runtime também podeutilizar objetos AssemblyName parcialmente preenchidos ao procurarum assembly a ser vinculado ao código chamador. Mais comumente,você obtém uma referência a um objeto AssemblyName existenteutilizando a propriedade GetName do objeto Assembly.

T@rgetTrust Treinamento & Tecnologia 169

Page 177: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

O tipo Module

A classe Module representa um dos módulos em um assembly. Vocêpode enumerar todos os membros em um Assembly utilizando o métodoAssembly.GetModules.

Esta classe serve para destrinchar as funcionalidades de umassembly.

T@rgetTrust Treinamento & Tecnologia 170

Page 178: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

Trabalhando com Tipos

A classe System.Type é central para todas as ações dereflexão. Ela representa um tipo gerenciado, um conceito queinclui classes, estruturas, módulos, interfaces e enums. A classetype fornece todos os meios de enumerar campos, propriedades,métodos e eventos de um tipo, bem como configurar propriedades ecampos e invocar métodos dinamicamente.

Recuperando um objeto Type

A classe Type não possui nenhum construtor porque nunca écriado um objeto Type, ao invés disso, sempre é obtido umareferência a um tipo existente. Quando utilizamos um objeto Type,estamos pegando um tipo existente e utilizando esse tipo parasofrer o máximo de interações possíveis com nosso código, comoverificar se o tipo é uma classe, um enum, uma estrutura ou umainterface.

Utilizamos a classe Type para destrinchar completamente umobjeto ao ponto de descer, em seus maiores detalhes, paraconseguirmos criar um código mais sofisticado, reutilizável egenérico possivel.

T@rgetTrust Treinamento & Tecnologia 171

Page 179: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

Utilizando Reflection em nossa aplicação

Até agora vimos bastante teorias sobre a utilização dereflexão, seus objetos e seus ganhos, agora vamos implementar ouso de reflection em nossa aplicação.

A implementação será a utilização de reflection para preencheros controles da tela, genericamente, a partir de um array que iráservir como fonte de dados.

Siga os passos abaixo para efetuar essa implementação.

1 – Adicionar uma classe chamada Item na pasta ClassesApoio ecrie as propriedades da classe conforme a figura abaixo. A classeitem será a classe base para o array que será a fonte de dados.

2 – Adicione uma classe BasePaginas na Pasta ClassesApoio,essa classe servirá como base para todas as páginas que queiramutilizar reflection. Como é uma classe base ela deve herdar aSystem.Web.UI.Page, para que as páginas que herdem dela recebam asfuncionalidades de uma página. Utilize a figura abaixo como basepara montar sua classe

T@rgetTrust Treinamento & Tecnologia 172

Page 180: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

3 – Insira os métodos de reflexão na classe BasePaginas, oobjetivo desses métodos é receber um objeto e preenchergenéricamente, utilizando reflexão, os controles textBox, da tela,que possuam o mesmo nome que as propriedades do objeto. Visualizaas duas imagens abaixo para criar os métodos.

T@rgetTrust Treinamento & Tecnologia 173

Page 181: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

4 – Crie uma pasta na aplicação chamada Reflection e dentrodesta pasta insira um web form chamado pagReflection.aspx.

5 – Adicione o segundo código no evento Page_Load da página.Este código irá criar uma fonte de dados fake para o nossoexercício.

T@rgetTrust Treinamento & Tecnologia 174

Page 182: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

6 – Arrume a herança do web form, agora ao invés dele herdarde System.Web.UI.Page ele irá herdar de BasePaginas.

7 – Insira os controles abaixo no aspx da página.

T@rgetTrust Treinamento & Tecnologia 175

Page 183: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

8 – Dê dois cliques no Button1 e insira o código abaixo.

9 – Crie uma opção no menu que chame a página, rode o sistema,acesse a página, escreva um numero de 0 à 9 e veja como oscontroles serão preenchidos via reflection, sem que sejaespecificado diretamente o preenchimento de cada controle e simutilizando a estrutura de preenchimento genérica criada a partirdo Reflection.

T@rgetTrust Treinamento & Tecnologia 176

Page 184: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

Espaço para anotações

T@rgetTrust Treinamento & Tecnologia 177

Page 185: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

10.10. Distribuindo suaDistribuindo suaAplicaçãoAplicação

T@rgetTrust Treinamento & Tecnologia 178

Page 186: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

Objetivos

Ao final deste capitulo voce estará apto a:

Entender as diretivas de compilação;

Publicar sua aplicação asp.net;

T@rgetTrust Treinamento & Tecnologia 179

Page 187: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

Distribuindo sua Aplicação ASP.NET

Normalmente todo o software, depois de finalizado, deve serdistribuído. Aplicações convencionais na sua maioria sãodistribuídas através de instaladores específicos, o que permiteque qualquer usuário possa instalar a aplicação em seu computadorde maneira fácil, simplesmente seguindo alguns passos básicos.

Aplicações Web na sua maioria são instaladas em um único ou emalguns poucos servidores. Você pode simplesmente copia-la para odestino ou até mesmo gerar um instalador, como numa aplicaçãoconvencional.

Mas além de distribuir sua aplicação existem outros cuidadosque você deve ter antes de colocar sua aplicação em produção.

Primeiramente quando você cria sua aplicação, por padrão elevai estar com a depuração habilitada. A depuração é habilitada noarquivo web.config.

A depuração, como você deve imaginar, permite que você depureseu aplicativo. Isto tem um custo: Alguns arquivos temporários têmque ser mantidos e o desempenho da aplicação é afetado. Quandovocê roda seu aplicativo pela primeira vez, dentro da IDE do VS,uma caixa de dialogo informa que a depuração esta desabilitada.Você pode habilitá-la ou rodar a aplicação sem depuração, queseria o equivalente a executá-la fora da ambiente do VS:

Ao autorizar a habilitação de depuração,

<compilation debug="true" targetFramework="4.0">

T@rgetTrust Treinamento & Tecnologia 180

Page 188: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

O que isto tem a ver com distribuição de aplicação? É importantelembrar de desabilitar a depuração quando compilar sua aplicaçãopara distribuição, pois será gerado um código otimizado e maiscompacto.

Outra dica importante é colocar a aplicação em modo de Realise, nopróprio VS, como na imagem abaixo:

 

Publicando sua aplicaçãoA ferramenta de publicação cria uma cópia pré-compilada de seu

web site. Para acioná-lo basta clicar com o botão direito no web site e selecionar a opção “Publish...” conforme a imagem abaixo.

Será apresentada uma janela onde iremos selecionar a opção depublicação que queremos executar. Podemos publicar direto para umservidor web, um servidor FTP, um diretório de sistema ou servidorna rede interna e via FPSE.

A figura abaixo apresenta as opções.

T@rgetTrust Treinamento & Tecnologia 181

Page 189: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

Cada opção terá suas respectivas configurações e após devemosclicar em Publish e o Visual Studio ficará encarregado de realizaro resto do processo.

T@rgetTrust Treinamento & Tecnologia 182

Page 190: Asp Net 4 0 avancado versao final

Utilizando AJAX no ASP.NET

Espaço para Anotações

T@rgetTrust Treinamento & Tecnologia 183