Desenvolvimento ASP.net Desenvolvimento ASP.net Framework .net Conceitos de C# Common Language Runtime Assembly Garbage Collection Características da Linguagem Operadores e estruturas ASP .net Paradigma ASP.net Visual Studio .NET Web Forms, Server Controls e User Controls Gestão do estado ADO .Net 1 Framework .net Visão .net 3 Framework .net Conjunto de tecnologias para o desenvolvimento e utilização de componentes para a criação de: Web Forms Web Services Aplicações Windows Suporta todos as fases da produção de Software Desenvolvimento Debugging Distribuição Manutenção 4 Common Language Runtime - CLR Ambiente que permite a execução em tempo real de aplicações. Fornece um conjunto de serviços, ao nível das fases de desenvolvimento, de distribuição e de execução, que melhoram o desempenho da aplicação. 5 CLR - Serviços Fase de Desenvolvimento Fase de Instalação Diversas linguagens de programação Aumento de produtividade Processo de instalação resume-se a uma cópia de ficheiros (XCOPY) A gestão de versões de componentes é feita no processo de compilação Fase de Execução Performance Escalabilidade Disponibilidade 6 CLR - Arquitectura Faz a integração com a .NET Framework class library. Base Class Library (.NET Framework) Support Sequencia a distribuição dos componentes Tratamento de erros Procedimentos de segurança baseados na Thread identificação Support do utilizadorCOM Marshalerdo e na localização código Fornece classes e interfaces para Type Checker utilização de threads Exception Manager Converte código MSIL para código nativo optimizado Impede conversões inadequadas e gere o Security Engine acesso às variáveis Debug Engine Permite aplicação MSIL to Native Codefazer debug daGarbage Gestão de memória Compilers (JIT) Manager Collector (GC) Controla a execução do código Class Loader Gere a metadata e o carregamento das classes necessárias. 7 CLR - Características Sistema Comum de Tipos Compilador Just-in-time (JIT) Evita problemas de “falta de memória disponível” Tratamento de Excepções O JIT converte o código intermédio (MSIL) em código nativo optimizado Gestão de memória – Garbage Collection Conversão directa dos tipos de informação da Linguagem de programação para os da Framework Permite um tratamento de erros mais elegante Gestão de Threads 8 Compilação e Execução EXE/DLL (MSIL and metadata) Compiler Source Code Class Loader Class Libraries (MSIL and metadata) JIT Compiler with optional verification Trusted, pre-JITed code only Managed Native Code Call to an uncompiled method Execution Security Checks Runtime Engine 9 Assembly Contêm código e metadata para o CLR Constitui-se como unidade básica de distribuição Podem ser do tipo EXE e DLL 10 DEMO 01: ildasm.exe Desenvolver uma pequena aplicação em VB .NET e em C# Utilizar a aplicação ildasm para verificar o código MSIL gerado 11 DEMO 01 Ficheiro Demo1.cs using System; namespace Ades { public class Demo { public static void Main() { Console.WriteLine("Ola Mundo"); Console.ReadLine(); } } } csc /t:exe /out:Demo1CS.exe Demo1.cs ildasm Demo1CS.exe 12 DEMO 01 Ficheiro Demo1.vb Imports System namespace Ades public class Demo public Shared Sub Main() Console.WriteLine("Ola Mundo") Console.ReadLine() end Sub end class end namespace vbc /t:exe /out:Demo1VB.exe Demo1.vb ildasm Demo1VB.exe 13 Algoritmo “Garbage Collection” Espera que todas as threads terminem Verifica quais os objectos que estão referenciados. A memória ocupada pelos objectos não referenciados é libertada. Desloca os objectos válidos para a “compact heap” Actualiza as suas referências 14 Garbage Collection 15 Conceitos de C# Introdução ao C# Linguagem baseada no C/C++ com inspiração no Java preserva investimentos e conhecimentos adquiridos permite um código mais “limpo” possui construções sintácticas especiais para retirar partido da framework Tudo são objectos Ficheiros têm extensão .cs 17 Tipos de dados object string sbyte, short, int, long byte, ushort, uint, ulong char float, double, decimal bool Estes tipos são alias para os tipos definidos na framework Por exemplo, int == System.Int32 18 Classes e namespaces Organização do código dentro de classes Classes organizadas dentro de namespaces namespace Demo { public class MyClass { ... } } 19 Métodos Sintaxe semelhante ao C/C++ Podem ser públicos ou privados Suporta overloading public class MyHelloWorld { ... public void SayHello() { ... } private void SetTitle(String Title) { ... } } 20 Passagem de parâmetros Por valor Por referência out – parâmetro de saída ref – parâmetro de entrada e saída public void func1(int x) { ... } public void func2(out int x) { ... } public void func2(ref int x) { ... } 21 Herança Apenas existe herança simples public class MyClassBase { ... public void Func() { ... } } public class MyClassDeriv : MyClassBase { ... public new void Func() { base.Func(); ... } } 22 Propriedades Sintaxe alternativa para acesso a membros de dados da classe mas com as vantagens dos métodos public class Button : Control { private string m_caption; public string Caption { get { return m_caption; } set { m_caption = value; Repaint(); } } ... } 23 Operadores Atribuição Relacionais < <= > >= == != Lógicos = && || ! Aritméticos + - * / % += -= *= /= ++ -- 24 Criação de objectos // definição da classe public class MyClass { ... } // definição da variável MyClass obj; // criação do objecto obj = new MyClass(); 25 Construtores Seguem as regras do C/C++ Mesmo nome da classe Sem tipo de retorno Podem ter ou não argumentos public class MyClass { ... public MyClass() { ... } public MyClass(String Title) { ... } } 26 Ciclos // repetição n vezes for (int x = 0; i < vec.Length; i++) Console.WriteLine(vec[i]); // repetição condicional int i = 0; while (i < vec.Length) { Console.WriteLine(vec[i]); i++; } // enumeração (colecções) foreach (String x in vec) Console.WriteLine(x); 27 Estruturas Condicionais // teste de decisão if (i < vec.Length) Console.WriteLine(vec[i]); else Console.WriteLine(“Erro!!!”); // teste múltiplo switch (x) { case 1: ...; break; case 2: ...; goto case 3; case 3: ...; break; default: ...; break; } 28 ASP.net O que é o ASP.net? Sucessor da tecnologia Active Server Pages Independente da linguagem utilizada Independente do browser cliente Informação inserida no cliente é directamente processada no servidor (conceito de Web Form) Criação de aplicações Web distribuídas por meio de “Web Services” 30 IIS – Internet Information Server Servidor Web produzido pela Microsoft Incluído no Windows 2000, Windows XP Professional, Windows 2003 Suporte para ASP e ASP.Net Servidor IIS do DEI – w2ks.dei.isep.ipp.pt Referencia local ao IIS - localhost 31 Colocação de conteúdos ASP.net no IIS Num servidor IIS local Aceder a c:\inetpub\wwwroot Criar uma directoria para colocar as páginas do site Classificar essa directoria como sendo uma Directoria Virtual (recorrendo a Computer Management no painel de controlo) O acesso web é feito pela URL http://localhost/nomeDirectoriaVirtual 32 Colocação de conteúdos ASP.Net no IIS No w2ks Os alunos de ADES têm uma directoria com o nome de xxxxxxw$ (onde xxxxxx representam os 6 dígitos da direita do numero do aluno) Essa directoria está classificada como directoria virtual (com nome xxxxxx). Para colocar conteúdos nessa directoria devem aceder a \\w2ks\xxxxxxw$ O acesso web é feito pela URL http://w2ks.dei.isep.ipp.pt/xxxxxx 33 Aplicação ASP.net ASP.NET Web Server Clients Internet Web Services Output Cache Web Forms Page1. aspx Page2. aspx XML Data Codebehind pages global. asax Database Web. config machine. config Components 34 Modelo de Execução ASP.net 35 Visual Studio .NET Um só IDE (Integrated Development Environment) para múltiplas linguagens e múltiplos tipos de projectos Múltiplas linguagens num só projecto Múltiplos projectos numa só solução Integra browser Permite efectuar debbug Gera código .net 36 Templates de Projectos A lista dos templates de projectos baseia-se no perfil do utilizador e na escolha do tipo de projecto 37 Toolbox IDE VS.net Editor/Browser Object Browser Solution Explorer Properties Server Explorer Task List 38 Dynamic Help Processo de Desenvolvimento Fase de análise e especificação Criar um projecto Produzir a interface e escrever código Fase de testes Compilar Visual Studio .NET Disponibilizar 39 Ficheiros da aplicação Web Solution files (.sln, .suo) Project files (.vbproj, .csproj) Web application files Web forms (.aspx) User Controls (.ascx) Web services (.asmx) Classes, code-behind pages (.cs, .vb) Global application classes (.asax) Web.config file Project assembly (.dll) 40 Estrutura de Ficheiros da Aplicação Web Inetpub My Documents Visual Studio Projects Solution wwwroot ProjectA Solution.sln ProjectA.csproj WebForm1.aspx WebForm1.aspx.cs Development Files Assembly Files (Code-behind page) Bin Build ProjectA.dll 41 DEMO 02: Visual Studio .NET Apresentação do IDE VS.NET Criar um Projecto de Aplicação Web em C# 42 O que são Web Forms? Ficheiros com extensão aspx Constituídos essencialmente por: Atributo Page (directiva @Page) <%@ Page language="c#“ Codebehind="WebForm1.aspx.cs” Inherits=“nomeAplicacao.WebForm1”%> Atributo Body <body MS_POSITIONING="GridLayout"> Atributo Form <form id="Form1" method="post" runat="server"> 43 Web Forms – Modelo de Objectos As Web Forms possuem um modelo de objectos interno constituído por: Objecto Server Objecto Page Representa a página Web Objecto Request Representa o Servidor Web Representa o pedido efectuado pelo browser cliente Objecto Response Represente a resposta a enviar ao cliente pelo servidor 44 Web Forms – Atributo FORM Dentro do atributo FORM colocam-se controlos denominados “Server Controls” Web Server Controls Intrinsic controls (asp:TextBox) Validation controls (asp:RequiredFieldValidator) Rich controls (asp:Calendar) List-bound controls (asp:DataGrid ) Internet Explorer Web Controls (http://www.asp.net/IEWebControls/Download.aspx) HTML Server Controls Controlos HTML básicos (DIV, IMG, HR ,...) 45 Server Controls <asp:Button id=“Button1” runat=“server” Text=“Submit”/> Runat=“server” Têm funcionalidades intrínsecas Modelo de programação comum São executados no Servidor Web Armazenam informação de estado (viewstate) Todos têm os atributos Id e Text Geram código HTML específico para o browser cliente 46 HTML server controls Baseados nos elementos HTML Runat=“server” Existem no namespace System.Web.UI.HtmlControls <input type="text" id="txtName" runat="server" /> 47 Web server controls Existem no namespace System.Web.UI.WebControls Sintaxe ASP.net <asp:TextBox id="TextBox1" runat="server">Text_to_Display </asp:TextBox> HTML gerado <input name="TextBox1" type="text" value="Text_to_Display" Id="TextBox1"/> 48 Escolher o Controlo Adequado Optar por HTML Server Controls se: Optar por Web Server Controls se: Preferir trabalhar com a estrutura de objectos HTML Preferir trabalhar com um modelo de programação orientado a objectos Pretender fornecer rapidamente funcionalidades ASP.NET a páginas HTML já existentes Pretender desenvolver páginas que serão visualizadas por diversos tipos de browsers O controlo irá interagir com scripts no cliente e no servidor Necessitar de funcionalidades especificas tais como um “calendar” A largura de banda for limitada A largura de banda disponível não constituir um problema 49 DEMO 03: Server Controls Criar um Web Form Utilizar Server Controls (Label, Button e calendar) 50 Como programar em ASP .NET Três métodos de implementar código: Colocar o código no mesmo ficheiro que contem os Server Controls misturado com as definições dos mesmos (mixed) Colocar o código no mesmo ficheiro que contem os Server Controls, mas numa zona separada das definições dos controlos (inline code) Colocar o código num ficheiro separado (codebehind pages) Por defeito o VS .NET utiliza ficheiros separados de código (code-behind) 51 Programação Inline Definição dos controlos e código no mesmo ficheiro Secções separadas para o código e para o HTML <HTML> <asp:Button id="btn" runat="server"/> </HTML> <SCRIPT Language="c#" runat="server"> private void btn_Click(object sender, System.EventArgs e) { . . . } </SCRIPT> 52 Programação Code-Behind Código e HTML em ficheiros separados Programadores e Web Designers podem trabalhar de forma independente Um só ficheiro Ficheiros separados código <tags> Form1.aspx <tags> Form1.aspx código Form1.aspx.cs 53 Como funcionam as página com Code-Behind? Ficheiros separados para interface e para o código A ligação dos ficheiros é feita pela directiva @ Page no processo de pré-compilação (JIT-compile) Page1.aspx <% @ Page Language="c#" Inherits="Project.WebForm1" Codebehind="Page1.aspx.cs" Src = "Page1.aspx.cs" %> Page1.aspx.cs public class WebForm1 { private void cmd1_Click() { … } } 54 O que são Event Procedures? Acções em resposta à interacção do utilizador com os controlos numa página 55 Scripts no cliente Só utilizados com controlos HTML Interpretado pelo browser e executado no cliente Não acede a recursos do servidor <SCRIPT language="language"> Internet .HTM Pages 56 Scripts no servidor Utilizado em qualquer tipo de Server Control Compilado e executado no servidor Tem acesso aos recursos do servidor <SCRIPT language=“cs“ runat="server"> Internet .ASPX Pages 57 Tratamento de eventos no Cliente e no Servidor 58 DEMO 04: Eventos Criar procedimentos que permitam responder a eventos capturados pelos controlos da web form 59 Tratamento do evento Postback - uso de Page.IsPostBack O evento Page_Load ocorre em cada pedido á página. A propriedade IsPostBack do objecto Page permite verificar se se trata do primeiro pedido ou não. private void Page_Load(object sender, System.EventArgs e) { if (!Page.IsPostBack) { //Código executado somente no primeiro pedido } //este código será executado em todos os pedidos } 60 Como se processa o Postback? 61 DEMO 05: Page_Load Definir procedimento Page_load Utilizar a propriedade Page.IsPostBack 62 Análise da “Maquina de Calcular” 63 O que é validação da informação inserida pelo utilizador? Verifica se o valor inserido num controlo está minimamente coerente com a informação pretendida Bloqueia o processamento da página até que todos os valores sejam validos. 64 Validação no Cliente e no Servidor ASP.NET cria processos de User Enters validação no cliente e no Data Error servidor Message Validação no Cliente Dependente do browser Valid? Resposta imediata No Reduz número de pedidos Client Yes ao servidor Validação no servidor Server Repete todas as validações Valid? efectuadas no cliente No Permite utilizar recursos Yes externos (p.e. bases de dados) Web Application Processed 65 Controlos de Validação O ASP.NET fornece controlos de validação para: Comparar valores Comparar com uma fórmula pré-definida Verificar se um valor pertence a um intervalo Confrontar com expressões regulares Exigir preenchimento de informação Sumariar as validações inseridas numa página 66 Controlos de Validação Como utilizar? 1. 1 Colocar o controlo na web form 2. 2 Seleccionar o controlo que se pretende validar 3. 3 Configurar as propriedades de validação <asp:TextBox id="txtName" runat="server" /> <asp:Type_of_Validator id="Validator_id" runat="server" ControlToValidate="txtName" ErrorMessage="Message_for_error_summary" Display="static|dynamic|none" Text="Text_to_display_by_input_control"> </asp:Type_of_Validator> 67 Controlos de validação Combinação Pode haver vários controlos de validação afectos a um mesmo objecto Somente o RequiredFieldValidator verifica se a informação está preenchida 68 Controlos de Validação RequiredFieldValidator InitialValue CompareValidator ValueToCompare or ControlToCompare Type Operator RangeValidator MinimumValue MaximumValue Type 69 Controlos de Validação RegularExpressionValidator Permite confrontar valores com expressões regulares O VS .NET já inclui algumas expressões regulares (p.e: emails) <asp:RegularExpressionValidator … ControlToValidate=“Email"… ValidationExpression= "\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" >*</asp:RegularExpressionValidator > 70 Controlos de Validação CustomValidator Permite validar no cliente, no servidor, ou em ambos ClientValidationFunction OnServerValidate <asp:RequiredFieldValidator id="txtNameValidator" runat="server" ControlToValidate="txtOddNum" ClientValidationFunction="ClientValidateName" OnServerValidate="ServerValidateName" ErrorMessage="You must enter an odd number" display="dynamic" Text="*"> </asp:RequiredFieldValidator> 71 Controlos de Validação ValidationSummary Apresenta as mensagens de erro de todos os controlos de validação da página <asp:ValidationSummary id="valSummary" runat="server" HeaderText="These errors were found:" ShowSummary="True" DisplayMode="List"/> 72 Propriedade Page.IsValid Verifica o estado de todos os controlos de validação inseridos na página private void cmdSubmit_Click(object s, System.EventArgs e) { if (Page.IsValid) { Message.Text = "Page is Valid!"; // Actualização de uma base de dados ou // outra tarefa sensivel } } 73 DEMO 06: Validações Usar controlos de validação Utilizar a propriedade Page.IsValid 74 O que é um User Control? Um User Control é um Web Server Control definido pelo programador Tem extensão .ascx Simplifica a reutilização de componentes de interface dentro de uma aplicação web Não contem as etiquetas <HTML>, <BODY> e <FORM> Possui directiva @Control <%@ Control Language=“c#" %> Contem o código para tratar os seus próprios eventos 75 Porquê utilizar User Controls? Reutilização de componentes de interface e de código Control1.ascx Aplicação A Aplicação B Page3.aspx Page1.aspx Page2.aspx 76 Criação de um User Control Dois métodos: A Utilizando o Visual Studio .NET Converter uma página ASP.NET para user control interacção é feita alterando as propriedades public int pNum { get { return Convert.ToInt32(txtNum.Text); } set { txtNum.Text = Convert.ToString(value); } } As páginas utilizadoras do controlo deverão estar em flow layout 77 DEMO 07: User Control Criação de User Controls Utilização de User Controls 78 Gestão do estado Sem gestão de estado Com gestão de estado Login.aspx Login.aspx Please enter your logon information: First Name Please enter your logon information: First Name John Last Name John Last Name Chen Chen Submit Greetings.aspx Hello Web Server Submit Web Server Greetings.aspx Hello John Chen I forget who you are!! 79 Tipos de Gestão de Estado No Servidor No Cliente Objecto Application Informação fica disponível para todos os utilizadores da aplicação Cookies Ficheiro de texto com informação do estado Objecto Session Só o utilizador da sessão terá acesso á informação Propriedade ViewState Permite guardar valores entre pedidos á página Base de Dados Poderá ser utilizada uma BD para manter informação do estado Query strings Informação inserida no final da URL 80 Gestão de Estado no Servidor O objecto Application permite armazenar informação de toda a aplicação web O uso de Session está condicionado á sessão do browser cliente A sessão ASP.NET é identificada pela propriedade SessionID do objecto session Servidor Web Cliente Variáveis de Sessão e de Aplicação SessionID 81 Gestão de Estado no Cliente Utilização de cookies (persistentes / temporárias) Menos fiável que a gestão no servidor O utilizador pode apagar as cookies Limite ao tamanho da informação Restrições no cliente ao tamanho de ficheiros Servidor Cliente Cookies 82 Global.asax Só um ficheiro Global.asax por aplicação Web Colocado na raiz da directoria virtual Utilizado para tratar os eventos dos objectos Application e Session 83 Global.asax Eventos tratados Application_Start Executado imediatamente antes da aplicação ser criada. Session_Start Executado imediatamente antes da sessão ser criada Application_BeginRequest Executado por cada pedido ao servidor Application_EndRequest Executado no final de cada pedido ao servidor Application_AuthenticateRequest Executado antes da autenticação de um utilizador Application_Error Executado por cada erro não previsto na aplicação Session_End Executado imediatamente antes do final da instância da sessão Application_End Executado imediatamente antes do final da instância da aplicação 84 Métodos de Autenticação do ASP.NET Windows Forms Assenta no SO e no IIS Utilizador faz um pedido seguro que é transferido ao IIS Após as credencias serem verificadas, o pedido é satisfeito É feito um acesso não autenticado a um Form HTML onde serão fornecidas as credenciais Após verificação é atribuída uma cookie de autenticação Microsoft Passport Serviço de autenticação centralizado XML Web Service 85 Métodos de Autenticação 86 Comparação entre os Métodos de Autenticação Método Vantagens Desvantagens Windows Utiliza infra-estrutura Windows Controla acesso a informação sensível Não se adequa à maioria das aplicações web Forms Adequado à maioria das aplicações web Suporta todos os tipos de clientes Baseia-se em cookies Microsoft Passport Uma só assinatura para diversos sites web Não necessita de armazenar informação do utilizador Baseia-se em cookies Serviço pago 87 Acesso a Bases de Dados ADO .NET Namespace System.Data Modos de aceder à informação Aplicativo .Net OLE DB – namespace System.Data.OleDb SQL - namespace System.Data.SqlClient Objectos OLE DB Objectos OLE DB OLE DB Informação TDS Informação SQL Server 88 Objecto Connection SqlConnection / OleDbConnection string strConn = "data source=localhost; " + "initial catalog=northwind; " + "integrated security=true"; SqlConnection conn = new SqlConnection(strConn); Parâmetros da string de conexão Connection timeout Data source Initial catalog Integrated security Password Persist security info Provider User ID 89 Objecto Command SqlCommand / OleDbCommand SqlCommand com = new SqlCommand(); com.Connection = conn; com.CommandText="Select * From Tabela;"; SqlDataReader Info = com.ExecuteReader(); Executar comandos SQL ExecuteReader – executa comandos que devolvam linhas de informação (ex: SELECT) ExecuteNonQuery – executa comandos que retornam dados (ex: INSERT, UPDATE, DELETE) ExecuteScalar - retorna um valor único como resultado de uma função agregada (ex: COUNT) 90 Objecto DataReader SqlDataReader / OleDbDataReader SqlDataReader Info = com.ExecuteReader(); DataGrid1.DataSource=Info; Percurso forward-only em modo read-only Propriedades e métodos mais usais FieldCount IsClosed Close GetString GetInt32 91 Acesso a Bases de Dados 92 DEMO 08: ADO .NET Objectos Connection, Command e DataReader 93 Perguntas & Respostas Mais Informação... MSDN Library .net framework center http://msdn.microsoft.com/vcsharp/ ASP.net http://msdn.microsoft.com/netframework/ C# http://msdn.microsoft.com/library http://www.asp.net Laboratório .net do ISEP/IPP http://www.dei.isep.ipp.pt/labdotnet/ 95 Tutoriais http://www.gotdotnet.com/ http://www.w3schools.com/aspnet/ http://www.asp-php.net/tutorial/asp.net/ http://www.dei.isep.ipp.pt/ades/ 96 Desenvolvimento ASP.net