Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2009 05 07
2009 05 07
ASP.NET
Integracin de Sistemas
Parte II. Diseo e implementacin de aplicaciones Web con .NET
ndice de Contenidos
Introduccin Componentes de una aplicacin Web ASP ASP.NET NET Formularios Web PostBack Configuracin Gestin del Estado S Seguridad id d Gestin Errores Master Pages Trazas
Integracin de Sistemas
HTML Forms
Un HTML Form es la porcin de un documento HTML que aparece entre las etiquetas <form></form>
Cuando es pulsado, el navegador enva el HTML Form junto con cualquier entrada de datos del usuario al servidor Web
Si el atributo Method del form no est presente o tiene el valor GET, el navegador enviar al servidor un comando HTTP GET Si el atributo Method del form tiene el valor POST, el navegador enviar al servidor un comando HTTP POST
HTML Forms
Method = GET <form method="get"> method= get > . . . </form> GET /suma.html?op1=2&op2=2 HTTP/1.1 . . . Connection: Keep-Alive [blank line] El navegador enva los datos introducidos como una cadena de consulta Method = POST <form method="post"> method= post > . . . </form> POST /suma.html HTTP/1.1 . . Content-Type: ... Content-Length: 11 [blank line] op1=2&op2=2 El navegador enva los datos introducidos en el cuerpo de la solicitud HTTP
Integracin de Sistemas
Procesamiento en el Servidor
Define una API de bajo nivel Popular en entornos UNIX, no tanto en Windows
Son DLL Windows que corren bajo Internet Information Server (IIS) Escritas en C++ Mejor rendimiento que CGI
Simple solucin: HTML + Script del lado del servidor Programadas en JScript o VBScript Objetos intrnsecos que abstraen detalles de bajo nivel de HTTP. Objetos Request y Response Permite usar ADO (ActiveX Data Objects) para acceso a datos
Qu es ASP.NET?
ASP.NET es el framework de programacin Web dentro de .NET Permite desarrollar aplicaciones Web con un modelo similar similar al utilizado para aplicaciones Windows El componente fundamental de ASP.NET es el WebForm
Independencia del cliente (navegador, S.O., dispositivo fsico, etc.) P Permite it utilizar tili cualquier l i l lenguaje j .NET NET
Integracin de Sistemas
Archivos Code-Behind
Archivos asociados a WebForms que contienen cdigo que se ejecutar en el lado del servidor (e.g. VB.NET, C#, etc.)
Un nico archivo Machine.config por servidor Un archivo Web.config por cada aplicacin
Global.asax
Contiene los mtodos desde los que el usuario puede gestionar los diferentes eventos globales de una aplicacin
Directorio BIN
Contiene el assembly de la aplicacin (e.g. MyWebApp.dll) Contiene referencias proyecto: cero o ms assemblies (externos)
Integracin de Sistemas
hello.aspx
Navegador Web
http://.../hello.aspx
CLIENTE
SERVIDOR
Navegador Web
http://.../hello.aspx
1. El navegador cliente enva una peticin GET HTTP al servidor 2. El Runtime carga y ejecuta inmediatamente el cdigo intermedio ya compilado durante el primer acceso
CLIENTE
SERVIDOR
Integracin de Sistemas
File New New Project Asp.NET Web Application Proyecto para la realizacin de aplicaciones Web (es ( el que usaremos) )
File New New Project Asp.NET Service Application Proyecto para la realizacin de servicios web
Qu es un Formulario Web?
Controles de servidor
HTML WebControls
Integracin de Sistemas
Web Form
Es una pgina expresada en lenguaje de marcas que es compilada y ejecutada dinmicamente en el servidor para generar la salida solicitada por el cliente (explorador dispositivo) Se compone de:
Parte vista: Contiene cdigo HTML y declaraciones de controles del lado del servidor
Directivas de pgina p g
Se indican dentro de <%@ Page ... %> Permiten especificar atributos especficos de una pgina .aspx
CodeBehind: fichero de cdigo asociado ContentType: tipo MIME de la response ErrorPage: URL ante aparicin de errores Inherits: clase base del objeto Page Language: lenguaje de programacin empleado T Trace : habilitacin de la traza para la pgina actual EnableViewState: habilitacin de la propiedad VIEWSTATE etc.
<%@ Page Language="C#" CodeBehind="PageName.aspx.cs" ErrorPage="/DefaultError.html" Trace="true"%>
e.g.
Integracin de Sistemas
Controles:
Comentarios
Bloques de cdigo
Render code
<%= %> o <% %> No recomendado; preferible etiquetas <script runat="server"> asociadas a los eventos de los controles
Integracin de Sistemas
} } }
Integracin de Sistemas
Implementa el patrn Page Controller (lo veremos ms adelante) Es una partial class (una sola clase, implementada en dos archivos) que contiene el cdigo asociado a la pgina (controlador)
e.g. PageName.aspx.cs
public partial class PageName : System.Web.UI.Page Incluye cdigo generado por el programador
Componentes que se ejecutan en el lado del servidor Encapsulan partes de la interfaz de usuario Poseen el atributo runat="server" Pueden mantener su estado entre PostBacks al servidor
10
Integracin de Sistemas
HTML
Por defecto, P d f t los l elementos l t HTML no son accesibles desde cdigo del lado del servidor
HTML runat=server
Agregando runat="server" y el atributo id, se convierten en Controles de Servidor HTML Se encuentran definidos como objetos dentro del Namespace
System.Web.UI.HtmlControls
Ejemplo:
.aspx
<input type="text" id="txtName" runat="server"/> < <span id id="spnStart" " St t" runat="server">Start</span> t " ">St t</ >
.aspx.cs
11
Integracin de Sistemas
WebControls
Sl accesibles Slo ibl d del ll lado d d del l servidor id Poseen mayor funcionalidad
System.Web.UI.WebControls
Ejemplo
<asp:TextBox ID="txtUserName" runat="server" Text="Your name"/> /
Tipos de WebControls
Botn HTML
<input type="button" type= button value= value="Search"/> Search />
12
Integracin de Sistemas
HTML equivalente
<input type="submit"> <input type="checkbox"> <a href=""> </a> <img src=""> <input type="image"> <span> </span> <div> </div> <input type="radio"> <table> </table> <input type="text"> <select size=""> </select>
13
Integracin de Sistemas
Son elementos ocultos que validan las entradas de datos contra algn patrn El proceso de validacin puede ser llevado a cabo en:
Cliente
EnableClientScript="True" (opcin por defecto) El navegador del cliente debe soportar lenguaje script Le da al usuario una respuesta inmediata Reduce el nmero de "PostBacks"
Servidor
Repite la validacin (siempre) Permite validaciones ms complejas (e.g. contra datos almacenados en base de datos)
RequiredFieldValidator. Campo obligatorio bli t i RangeValidator. Valor dentro de un rango de tipos RegularExpressionValidator. Valida contra un patrn o expresin regular CompareValidator. Valida contra un valor constante o contra otro control CustomValidator. Se dispara un evento t (Cliente (Cli t o S Servidor) id ) d donde d se controla la validacin ValidationSummary. No es un validador en s mismo. Muestra los mensajes de error generados por otros controles de forma agrupada
14
Integracin de Sistemas
Propiedades importantes
En el lado del servidor se puede determinar si todas las validaciones fueron exitosas mediante la Page.IsValid
La propiedad IsValid no est disponible en los eventos Init ni Load del WebForm
<asp:AdRotator>. Permite mostrar banners de una secuencia predeterminada o aleatoria <asp:Calendar>. Permite disponer de un calendario personalizable <asp:Xml>. Permite formatear y mostrar el contenido de un fichero XML de acuerdo a un conjunto de estilos definidos en un fichero XSL
15
Integracin de Sistemas
SERVIDOR
1. Analizar mensaje 2. Llamar al manejador apropiado
Respuesta
ejemplo.aspx
Manejador
e.g. Default.aspx.cs
protected void btnExampleClick(object sender, EventArgs e) { this.btnExample.Text = "Pulsado"; }
16
Integracin de Sistemas
PostBack
Ocurre cuando una pgina genera un formulario HTML cuyos valores son reenviados a la misma pgina
Vlido para llamadas por GET y POST Controles de servidor se rellenan automticamente tras el PostBack No se almacena estado en el servidor
PostBack
Si un control tiene habilitado el VIEWSTATE , slo necesita inicializarse en la primera llamada (Page.IsPostBack==false)
private void Page_Load(object server, EventArgs e) { if (Page.IsPostBack==false) { // Initialization code } else { // Request is a postback } }
17
Integracin de Sistemas
PostBack
Existe la posibilidad de que el PostBack no devuelva control a la pgina que origin la llamada, sino que lo haga a una pgina dif diferente t Propiedades relacionadas:
control.PostBackUrl
Page.PreviousPage
PreviousPage.IsCrossPagePostBack
Equivalente a IsPostBack Indica si la pgina actual se abri como consecuencia de un PostBack originado en una pgina diferente a la actual
PostBack
<! InitialPage.aspx --> <html> <body> <form id="form1" runat="server"> <asp:TextBox ID="Input" runat="server" /> <asp:Button ID="Button" Text="Test" runat="server" PostBackUrl="TargetPostBack.aspx" /> </form> </body> </html>
18
Integracin de Sistemas
Configuracin
Niveles configurables
Ficheros
Machine.config
Machine.config Web.config
Root Dir Sub Dir1 Sub Dir2 Web.config
Configuracin
Machine.config
Conjunto por defecto de secciones de configuracin Heredado por todas las aplicaciones Web
Ubicacin
C:\WINDOWS\Microsoft.NET\Framework\vn.n.nnnnn\CONFIG\machine.config
19
Integracin de Sistemas
Configuracin
Web.config
Configuracin
Web.config
ConfigurationSettings.GetSection(SECTION g g ( _NAME) )
Puede haber mltiples Web.config por aplicacin Web, pero slo uno por directorio
Configuracin se aplica al propio directorio y a sus subdirectorios Configuracin subdirectorios sobrescribe configuracin heredada
20
Integracin de Sistemas
Configuracin
Web.config
<?xml version="1.0"?> <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <Es.UDC.DotNet.MiniPortal.Properties.Settings> <setting name="UserProfileDAOFactory_providerInvariantName" <value>System.Data.SqlClient</value> </setting> <Es.UDC.DotNet.MiniPortal.Properties.Settings> <system.web> <trace enabled="true" localOnly="true" pageOutput="true" /> <compilation debug= debug="true" true /> <httpRuntime appRequestQueueLimit="100" executionTimeout="600" /> <sessionState mode="InProc" cookieless="false" timeout="20" /> <customErrors mode="RemoteOnly" defaultRedirect="/errors/error.html"> <error statusCode="404" redirect="/errors/pagenotfound.html" /> </customErrors> </system.web> </configuration>
Configuracin
Global.asax
Compilado antes de la primera peticin Cambios detectados sin reiniciar servidor Web
21
Integracin de Sistemas
Configuracin
Global.asax: orden eventos
Primera Peticin
Application_Start
Session_Start
Cada Peticin
Application_Error
Session_End
Application_End
Configuracin
Global.asax: uso tpico de eventos
Application_Start
Session_Start
Application_BeginRequest
Applicattion_Authenticate
Application_EndRequest
22
Integracin de Sistemas
Configuracin
Global.asax: uso tpico de eventos
Application_Error
til para enviar e-mail o escribir al event log cuando un ocurra un error que no pueda ser gestionado
Session_End
Application_End
Parmetros comunes
Configuracin
Global.asax: ejemplo
public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e) { Application.Lock(); << ... >> Application.UnLock(); } protected void Application_End(object sender, EventArgs e) { } protected void Session_Start(object sender, EventArgs e) { } << ... >> }
23
Integracin de Sistemas
Cmo se almacenan datos entre peticiones? Cmo se envan datos de una pgina a otra?
Cliente solicita (request) una pgina inicial Servidor genera respuesta HTTP (response) que se enva al cliente
Esta segunda peticin debe incluir los datos recibidos en la respuesta previamente recibida
24
Integracin de Sistemas
__VIEWSTATE
Cookies
Li it i Limitaciones
Tamao mximo (4Kb) Nmero total (300) Cookies por sitio web (20)
Caractersticas
EnableViewState="false"
ViewState["variableName"] = variableValue;
25
Integracin de Sistemas
Lectura
HttpCookie ttpCoo e coo cookie e = Request.Cookies["loginName"]; equest.Coo es[ og a e ];
Borrado
HttpCookie cookie = Request.Cookies["loginName"]; cookie.Expires = DateTime.Now.AddDays(-1); Response.Cookies.Add(cookie);
Cookies
Ejemplo
26
Integracin de Sistemas
Propiedades
Domain
Servidor del que se descarg la cookie Fecha (objeto DateTime) en la que el navegador borrar la cookie Nombre de la cookie Contenido de la cookie
Expires
Name
Value
Variables de Aplicacin
Variables de Sesin
Almacenamiento persistente
27
Integracin de Sistemas
Estado aplicacin se almacena en una instancia de la clase HttpApplicationState Accesible a travs de la propiedad Page.Application
Qu es una sesin?
Contexto en el que un usuario se comunica con un servidor a travs de mltiples peticiones HTTP
Problemas
Concepto de sesin manejado a nivel de programacin Estado aplicacin p se almacena en una instancia de la clase HttpSessionState Accesible a travs de la propiedad Page.Session
28
Integracin de Sistemas
Session identifier: cadena ascii de 120 bits Session events: Session_OnStart, Session_OnEnd Session variables: almacenamiento datos entre peticiones
ASP.NET_SessionID
Count
Keys
IsNewSession
SessionID
Identificador de sesin
Timeout
Mximo nmero de minutos durante los que la sesin puede permanecer inactiva antes de ser eliminada Tiempo por defecto: 20 minutos
29
Integracin de Sistemas
Server.Transfer
Server.Execute
Ejecuta una pgina y devuelve el control a la pgina origen Ambas pginas deben pertenecer al mismo servidor
Response.Redirect
Response.Redirect("/MainPage.aspx");
Response.Redirect("http://www.google.com/");
30
Integracin de Sistemas
Server.Transfer
Server.Transfer("/MainPage.aspx");
Mantiene recursos
Request se mantiene nicamente se transfiere el control a una nueva pgina del servidor
Server.Execute
Flujo j de informacin
Detiene la carga de la pgina original Inicia la carga de la pgina indicada como parmetro Contina la carga de la pgina original
Propiedades
Ambas pginas (original y la empleada como parmetro) han de ser internas al servidor Se mantiene estado de los objetos j entre las p pginas g
31
Integracin de Sistemas
Autenticacin
Proceso mediante el que se validan las credenciales de usuario Objetivo: controlar acceso a recursos Niveles:
IIS ASP.NET
Autenticacin
Autenticacin Internet Information Server
32
Integracin de Sistemas
Autenticacin
Autenticacin ASP.NET
Modos de autenticacin
None
Windows
Forms
Passport
Autenticacin
Autenticacin ASP.NET
Configuracin
33
Integracin de Sistemas
Autenticacin
Autenticacin ASP.NET
IIS
No existe cookie
ASP.NET
Existe cookie
Usuario Password
Pgina protegida
Submit
loginForm.asp x
Cookie
Autenticacin
Autenticacin ASP.NET
FormsAuthentication.RedirectFromLoginPage(string userName, bool createPersistentCookie) Direccin destino una vez realizada la autenticacin
Solicitud de pgina protegida : se redirecciona a esta pgina Solicitud de pgina de login : se redirecciona a defaultURL (configurado en Web.config)
Redireccin personalizada
FormsAuthentication.SignOut()
34
Integracin de Sistemas
Autenticacin
Autenticacin ASP.NET
Ejemplo:
<system.web> <authentication mode="Forms"> <forms name=".ASPXAUTH" loginUrl="/Authentication.aspx" timeout="30" path="/" defaultUrl="/MainPage.aspx" cookieless="UseUri" /> </authentication> </system.web>
Autorizacin
Es posible controlar de forma declarativa a qu recursos del sitio Web tienen acceso los usuarios
S configura Se fi en el l web.config b fi e.g. slo se permite acceso al sitio Web a los usuarios autenticados
<authorization> <deny users= "?" /> </authorization>
Comodines
35
Integracin de Sistemas
Autorizacin
Es posible definir control de acceso para recursos especficos, mediante una seccin <location>
Pginas de Error
Errores HTML
Pgina de Error
A nivel de pgina: atributo PageError A nivel de aplicacin: seccin customErrors del Web.config
36
Integracin de Sistemas
Pginas de Errores
Nivel de Pgina
Atributo PageError
Especifica p q que p pgina g se muestra cuando la p pgina g actual origina g una excepcin no capturada
Ejemplo
<%@ Page Language="C#" CodeBehind="Register.aspx.cs" Inherits="Es.UDC.DotNet.MiniPortal.HTTP.HTML.Register" PageError="InternalError.aspx" %>
Pginas de Errores
Nivel de Aplicacin
Ejemplo web.config
< <customErrors t E mode="RemoteOnly" d "R t O l " defaultRedirect="InternalError.aspx"> <error statusCode="403" redirect="NoAccess.htm" /> <error statusCode="404" redirect="FileNotFound.htm" /> </customErrors>
On
Habiltita los errores personalizados Si no se especifica el atributo defaultRedirect, los usuarios vern un error genrico. Deshabilita los errores personalizados Esto permite mostrar los errores detallados estndar Especifica que los errores personalizados slo deben mostrarse en los clientes remotos y que los errores de ASP.NET se muestren en el host local. ste es el valor predeterminado
Off
RemoteOnly
37
Integracin de Sistemas
Master Pages
Las Master Pages (pginas maestras) permiten crear un diseo comn, que ser compartido por varias Content Pages (pginas de contenido) Solucin ms elegante al problema de definir un "look and feel" comn
Master Pages
Pgina Maestra (Master Page) Pgina de Contenido (Content Page)
38
Integracin de Sistemas
Master pages
Pgina maestra
<%@ Master Language="C#" AutoEventWireup="true" Codebehind="Site1.master.cs" Inherits="ASPDotNetTutorialMasterPages.Site1" %> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>ASP.NET Tutorial</title> <link href="Styles.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="window"> <!-- Page title. --> <div id="pageTitle">ASP.NET Tutorial</div> <!-- Body content. --> <div> <asp:ContentPlaceHolder ID="ContentPlaceHolder1" ID= ContentPlaceHolder1 runat= runat="server"> server > </asp:ContentPlaceHolder> </div> <!-- Footer. --> <div id="footer">© Universidad de A Corua - 2007</div> </div> </body> </html>
Master pages
Pgina de contenido
<%@ Page Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" Codebehind="HelloUserByPost.aspx.cs" Inherits="ASPDotNetTutorialMasterPages.Hello.HelloUserByPost" Title="HelloUserByPost" %> <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> <form method="POST" action="HelloUser.aspx"> <div id="form"> User name <input type="text" name="userName" size="16" maxlength="16" /> <br /> <br /> <input type="submit" type= submit value= value="Say Say me hello" hello /> </div> </form> </asp:Content>
39
Integracin de Sistemas
Master Pages
Las pginas maestras definen el contenido comn y las zonas de contenido variable (<asp:ContentPlaceHolder>)
Es posible definir varias zonas de contenido variable en una misma pgina maestra
Las pginas de contenido hacen referencia a las pginas maestras y rellenan las zonas de contenido variable (<asp:Content>)
Site.master
<%@ Master %>
default.aspx
<%@ Page MasterPageFile="Site.master" %> <asp:Content ContentPlaceHolderID= "Main" RunAt="server" />
http://.../default.aspx
</asp:Content>
Master Pages
Contenido por defecto
Los controles ContentPlaceHolder pueden definir contenido por defecto El contenido por defecto se muestra nicamente si la pgina de contenido no lo sobrescribe
<%@ Master %> ... <asp:ContentPlaceHolder ID="Main" runat="server"> This is default content that will appear in the absence of a matching Content control in a content page <asp:ContentPlaceHolder>
40
Integracin de Sistemas
Master Pages
Aplicar una pgina maestra a un sitio Web
Es posible designar la pgina maestra de todas las pginas pertenecientes a un mismo sitio Web
Todas las pginas que tengan controles Content se combinarn con la pgina principal especificada Se asegura que todas las pginas del sitio Web seguirn el diseo de la pgina maestra, incluso aqullas que carezcan de las directivas @ Page MasterPageFile Las pginas maestras establecidas utilizando las directivas @ Page MasterPageFile en los archivos .aspx sobrescriben las pginas maestras designadas en el archivo Web.config
Master Pages
Pgina maestra segn el navegador
Es posible seleccionar automticamente una pgina maestra dependiendo del navegador Ejemplo:
<%@ Page Language=C# MasterPageFile=~/General.Master Mozilla:MasterPageFile=~/GeneralMozilla.Master Opera:MasterPageFile=~/GeneralOpera.Master %>
Navegadores g
AvantGo, Default, Docomo, Ericsson, IE, Jphone, MME, Mozilla, Netscape, Nokia, Openwave, Opera, Panasonic, Pie, Webtv
41
Integracin de Sistemas
Trazas
Nivel de pgina Nivel de aplicacin Traza a nivel de pgina prevalece sobre nivel de aplicacin
Trazas
Objeto Trace
Mtodos
Trace.Write:
Trace.Warn:
Propiedades p
Trace.IsEnabled:
True si la traza est habilitada para la aplicacin o la pgina actual SortByTime SortByCategory
Trace.Mode
42
Integracin de Sistemas
Trazas
Habilitacin a nivel de pgina
Directiva Trace
<%@ Page trace="true" localOnly="true"%>
Trazas
Habilitacin a nivel de pgina
Contenido Pgina
Contenido Traza
43
Integracin de Sistemas
Trazas
Detalles Solicitud
SessionID, Get/Post, Hora, Listado llamadas a mtodos Controles incluidos en la pgina Variables de sesin Variables de Aplicacin
Informacin Seguimiento
Formularios
rbol de Control
Cadenas de Consulta
Estado Sesin
Estado Aplicacin
Cookies Solicitud
Trazas
Habilitacin a nivel de aplicacin
http://sitename/AppName/trace.axd
44
Integracin de Sistemas
Trazas
Habilitacin a nivel de aplicacin
http://localhost/trace.axd
Detalle
Trazas
Habilitacin a nivel de aplicacin
enabled requestLimit
pageOutput
traceMode
localOnly
45