Documentos de Académico
Documentos de Profesional
Documentos de Cultura
NET
Integracin de Sistemas
Diseo e implementacin con .NET
ndice de Contenidos
Introduccin Formularios Web
Server Controls
HTML WebControls
Intrnsecos Validacin RichControls
Seguridad
Autenticacin Autorizacin
Gestin Errores
Nivel Pgina Nivel Aplicacin
PostBack Configuracin
Web.config Global.asax
Gestin de Estado
Cookies Session Transferencia entre pginas
Caso Prctico
MiniPortal
HTML Forms
Un HTML Form es la porcin de un documento HTML que aparece entre las etiquetas <form></form>
HTML Forms
Method = GET <form 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"> . . . </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
Procesamiento en el Servidor
Existen varias tecnologas de procesamiento
CGI (Common Gateway Interface)
Define una API de bajo nivel Popular en entornos UNIX, no tanto en Windows
Qu es ASP.NET?
ASP.NET es el framework de programacin Web dentro de .NET Permite desarrollar aplicaciones Web con un modelo similar al utilizado para aplicaciones Windows El componente fundamental de ASP.NET es el WebForm
Una aplicacin Web ASP.NET consta de uno o ms WebForms
Independencia del cliente (navegador, S.O., dispositivo fsico, etc.) Permite utilizar cualquier lenguaje .NET
Archivos Code-Behind
Archivos asociados a WebForms que contienen cdigo que se ejecutar en el lado del servidor (e.g. VB.NET, C#, etc.)
Directorio BIN
Contiene el assembly de la aplicacin (e.g. MyWebApp.dll) Cero o ms assemblies (Componentes externos)
Compilador 2.
El navegador cliente enva una peticin GET HTTP al servidor El parser de ASP.NET interpreta el cdigo fuente ASP.NET invoca al compilador El Runtime carga y ejecuta el cdigo intermedio (IL)
Navegador Web
http://.../hello.aspx
3. 4.
CLIENTE
SERVIDOR
1.
Navegador Web 2.
http://.../hello.aspx
El navegador cliente enva una peticin GET HTTP al servidor El Runtime carga y ejecuta inmediatamente el cdigo intermedio ya compilado durante el primer acceso
CLIENTE
SERVIDOR
Arquitectura ASP.NET
Cliente Web
HTTP
HttpRuntime
IIS
Aspnet_isapi.dll ASPNETWP HttpApplication Module HttpApplication
HttpModule
Handler Factory
HttpHandler Handler
Controles de servidor
HTML WebControls
e.g.
<%@ Page Language="C#" CodeBehind="PageName.aspx.cs" ErrorPage="/DefaultError.html" Trace="true"%>
Comentarios
<!-- html comment --> <%-- asp.net comment --%>
Bloques de cdigo
<script runat="server"> ... </script>
Render code
<%= %> o <% %> No recomendado; preferible etiquetas <script runat="server"> asociadas a los eventos de los controles
} } }
e.g. PageName.aspx.designer.cs
public partial class PageName Incluye cdigo autogenerado por el IDE
10
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
Para esto hacen uso del atributo ViewState
HTML
Por defecto, los elementos HTML no son accesibles desde cdigo del lado del servidor 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:
<input type="text" id="txtName" runat="server"/> <span id="spnStart" runat="server">Start</span>
11
WebControls
Slo accesibles del lado del servidor Poseen mayor funcionalidad, y pueden contener otros objetos
Dependen del Namespace
System.Web.UI.WebControls
Ejemplo
<asp:TextBox ID="txtUserName" runat="server" Text="Write your name"/>
Tipos de WebControls
Intrnsecos, de Validacin, Ricos, listas vinculables datos
Botn HTML
<input type="button" value="Search"/>
12
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
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)
14
Propiedades importantes
ControlToValidate Text ErrorMessage Display
En el lado del servidor se puede determinar si todas las validaciones fueron exitosas mediante la Page.IsValid Muy importante!
La propiedad IsValid no est disponible en los eventos Init ni Load del WebForm
15
SERVIDOR
1. Analizar mensaje 2. Llamar al manejador apropiado
Respuesta
ejemplo.aspx
Manejador
16
PostBack
A instancias de un formulario Web mostrado en el cliente cada evento sucedido en l genera un POST hacia el servidor y una respuesta (BACK). Este ida y vuelta dentro de un mismo formulario Web se llama PostBack
ViewState
Es un mecanismo que permite (de forma automtica) mantener el estado de los controles del formulario Web entre PostBacks El estado de los controles viaja en un campo oculto, denominado ViewState, por cada PostBack
17
PostBack
Ocurre cuando una pgina genera un formulario HTML cuyos valores son reenviados a la misma pgina
Ejemplo: validacin de controles
18
PostBack
El evento Page_Load se lanza en cada peticin a un Web Form
Comportamiento diferente dependiendo de si es o no la primera vez que se muestra la pgina
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 } }
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 diferente Propiedades relacionadas:
control.PostBackUrl
Direccin de la pgina empleada como PostBack
Page.PreviousPage
Direccin de la pgina que origin el PostBack
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
19
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>
Configuracin
Niveles configurables
servidor, root, subdirectorios web
Machine.config
Ficheros
Machine.config Web.config
Web.config Root Root Dir Dir Sub Sub Dir1 Dir1 Sub Sub Dir2 Dir2
20
Configuracin
Machine.config
Ubicacin
C:\WINDOWS\Microsoft.NET\Framework\vn.n.nnnnn\CONFIG\machine.config
Configuracin
Web.config
Equivalente Web al fichero App.config
Opciones de usuario en la seccin <appSettings>
Conjunto pares (clave/valor) Accesibles mediante ConfigurationSettings.AppSettings[key]
21
Configuracin
Web.config
Existe la posibilidad de definir secciones personalizadas
ConfigurationSettins.GetSection(SECTION_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
Configuracin
Web.config
<?xml version="1.0"?> <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <appSettings> <!-- Connection String --> <add key="ConnectionString" value="Data Source=localhost\SQLExpress; Initial Catalog=miniportal; User ID=user; Password=password"/> </appSettings> <system.web> <trace enabled="true" localOnly="true" pageOutput="true" /> <compilation debug="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>
22
Configuracin
Web Site Administration Tool
Configuracin
Web Site Administration Tool
23
Configuracin
Global.asax Situado en la carpeta raz de la aplicacin Web
No accesible a travs del Servidor Web
Configuracin
Global.asax: orden eventos
Primera Peticin
Application_Start
Cada Peticin
Application_BeginRequest Application_Authenticate Application_EndRequest
24
Configuracin
Global.asax: uso tpico de eventos
Application_Start
til para cargar la informacin de configuracin especfica de un sitio Web
Session_Start
Inicializacin variables de sesin
Application_BeginRequest
Acciones de personalizacin Texto para ser incluido al principio de cada pgina
Applicattion_Authenticate
Cdigo adicional a la autenticacin: log, comprobacin de roles, etc.
Application_EndRequest
Texto para ser aadido al final de cada pgina
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
Escribir a un log o base de datos los logout de cada usuario
Application_End
til para escribir a un log cuando se ha parado una aplicacin Web
Parmetros comunes
Object sender EventArgs e
25
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) { } << ... >> }
26
Cookies
Limitaciones
Tamao mximo (4Kb) Nmero total (300) Cookies por sitio web (20)
27
Caractersticas
Puede deshabilitarse a nivel de control o a nivel de pgina (habilitado por defecto)
EnableViewState="false"
Lectura
HttpCookie cookie = Request.Cookies["loginName"];
Borrado
HttpCookie cookie = Request.Cookies["loginName"]; cookie.Expires = DateTime.Now.AddDays(-1); Response.Cookies.Add(cookie);
28
Cookies
Ejemplo Registro de la ltima visita
protected void Page_Load(object sender, EventArgs e) { String lastVisit; if (Request.Cookies["lastVisit"] == null) lblWelcome.Text = "Welcome. This is your first visit today"; else { lastVisit = Request.Cookies["lastVisit"]; lblWelcome.Text = "Your last visit was on " + lastVisit + "."; } DateTime time = DateTime.Now; Response.Cookies["lastVisit"] = time.ToString(); Response.Cookies["lastVisit"].Expires = time.AddDays(1); }
Expires
Fecha (objeto DateTime) en la que el navegador borrar la cookie
Name
Nombre de la cookie
Path
Prefijo URL de la cookie
Value
Contenido de la cookie
29
Variables de Sesin
Accesibles slo al propietario de la sesin Requieren envo de SessionID
Almacenamiento persistente
ASP.NET State Service Base de Datos
30
Problemas
HTTP es no orientado a estado (stateless) HTTP es no orientado a sesiones (sessionless)
Concepto de sesin manejado a nivel de programacin Estado aplicacin se almacena en una instancia de la clase HttpSessionState Accesible a travs de la propiedad Page.Session Coleccin pares (clave, valor) Ejemplo acceso: Session["loginName"];
31
Keys
Conjunto de las claves almacenadas en la sesin
IsNewSession
Indica si la sesin se ha creado durante la carga de la pgina actual
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
32
Server.Transfer
Similar a una redireccin, pero internamente en el servidor
Server.Execute
Ejecuta una pgina y devuelve el control a la pgina origen Ambas pginas deben pertenecer al mismo servidor
Response.Redirect
Indica al servidor Web que cambie a otra pgina
Response.Redirect("/MainPage.aspx");
33
Server.Transfer
Redirecciona al usuario a una nueva pgina
Server.Transfer("/MainPage.aspx");
Mantiene recursos
Request se mantiene nicamente se transfiere el control a una nueva pgina del servidor
Server.Execute
Flujo 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 entre las pginas
34
Autenticacin
Proceso mediante el que se validan las credenciales de usuario Objetivo: controlar acceso a recursos Niveles:
IIS ASP.NET
Configurable desde web.config
Autenticacin
Autenticacin Internet Information Server Configurar IIS en el modo de autenticacin elegido
Annimo Bsica Digest Certificados Digitales Integrada
35
Autenticacin
Autenticacin ASP.NET
Modos de autenticacin
None
No se realiza autenticacin Acceso annimo permitido a toda la aplicacin Web
Windows
Delega autenticacin en IIS
Forms
Autenticacin basada en formularios
Passport
Autenticacin a travs del servicio Web MS Passport
Autenticacin
Autenticacin ASP.NET
Configuracin
Establecer autenticacin IIS como annima Web.config
<system.web> <authentication mode="Forms"> <Forms loginURL="/loginForm.aspx" name="loginForm"/> </authentication> </system.web>
36
Autenticacin
Autenticacin ASP.NET
IIS IIS
No existe cookie
ASP.NET ASP.NET
Existe cookie
Usuario Password
Pgina protegida
Submit Submit
loginForm.aspx
Cookie
Autenticacin
Autenticacin ASP.NET
Validacin Usuario: personalizada o integrada en web.config Redireccin automtica
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
Response.Redirect, Server.Transfer, Server.Execute FormsAuthentication.SetAuthCookie FormsAuthentication.GetAuthCookie
37
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
Se configura en el web.config e.g. slo se permite acceso al sitio Web a los usuarios autenticados
<authorization> <deny users= "?" /> </authorization>
Comodines
* todos los usuarios ? Usuarios annimos
38
Autorizacin
Es posible definir control de acceso para recursos especficos, mediante una seccin <location>
e.g. se concede permiso de acceso a la pgina Register.aspx a todos los usuarios
<location path="Register.aspx"> <system.web> <authorization> <allow users ="*" /> </authorization> </system.web> </location>
Pginas de Error
Ejecucin aplicacin web puede originar excepciones
Controladas: IncorrectPasswordException, DuplicateInstanceException,... No Controladas
Originadas por algn tipo de error interno
Acceso a base de datos etc.
Errores HTML
Pgina no encontrada Error Servidor Etc.
Pgina de Error
Pgina a la que se redirecciona la aplicacin en caso de ocurrir una excepcin no controlada
39
Pginas de Errores
Nivel de Pgina Atributo PageError
Especifica que pgina se muestra cuando la pgina actual origina 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 mode="RemoteOnly" defaultRedirect="InternalError.aspx"> <error statusCode="403" redirect="NoAccess.htm" /> <error statusCode="404" redirect="FileNotFound.htm" /> </customErrors>
Off
Deshabilita los errores personalizados Esto permite mostrar los errores detallados estndar
RemoteOnly
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
40
Pginas de Errores
Event Log Global.asax
protected void Application_Error(object sender, EventArgs e) { string logName = "MiniPortal"; string message = " Url " + Request.RawUrl + "\n" + " Client Address: " + Request.UserHostAddress + "\n" + " Error: " + Server.GetLastError(); // Create event log if it doesnt exist if (!EventLog.SourceExists(logName)) { EventLog.CreateEventSource(logName, logName); } // Fire off to event log EventLog log = new EventLog(); log.Source = logName; log.WriteEntry(message, EventLogEntryType.Error); }
Master Pages
Java: sistema de plantillas "Tiles" ASP.NET 1.x careca de sistema de plantillas
Solucin: controles de usuario
41
Master Pages
Pgina Maestra (Master Page) Pgina de Contenido (Content Page)
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" runat="server"> </asp:ContentPlaceHolder> </div> <!-- Footer. --> <div id="footer">© Universidad de A Corua - 2007</div> </div> </body> </html>
42
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" value="Say me hello" /> </div> </form> </asp:Content>
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 %> <%@ Master %>
default.aspx
<%@ Page MasterPage<%@ Page MasterPageFile="Site.master" %> File="Site.master" %> <asp:Content <asp:Content ContentPlaceHolderID= ContentPlaceHolderID= "Main" RunAt="server" /> "Main" RunAt="server" />
http://.../default.aspx
</asp:Content> </asp:Content>
43
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>
Master Pages
Pginas maestras anidadas Es posible crear una pgina maestra que haga referencia a una pgina maestra ya existente
Una pgina maestra (padre) define la apariencia general del sitio Otra pgina maestra basada en la primera (hija) extiende la apariencia visual del sitio Web
De utilidad en grandes sitios Web en los que existen subconjuntos de pginas que comparten apariencia visual
44
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
Archivo Web.config
<configuration> <system.web> <pages masterPageFile="~/MasterPage.master" /> </system.web> </configuration>
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
AvantGo, Default, Docomo, Ericsson, IE, Jphone, MME, Mozilla, Netscape, Nokia, Openwave, Opera, Panasonic, Pie, Webtv
45
Trazas
ASP.NET soporta traceado de pginas asp
Sencillo incluir sentencias de debug
No necesario debug mediante Response.WriteLine()
Trazas
Objeto Trace
Tipo: System.Web.TraceContext Accesible a travs de objeto Page
Mtodos
Trace.Write:
Mensajes Informativos
Trace.Warn:
Mensajes de Error
Propiedades
Trace.IsEnabled:
True si la traza est habilitada para la aplicacin o la pgina actual
Trace.Mode
SortByTime SortByCategory
46
Trazas
Habilitacin a nivel de pgina
Directiva Trace
<%@ Page trace="true" localOnly="true"%>
Trazas
Habilitacin a nivel de pgina
Contenido Pgina
Contenido Traza
47
Trazas
Informacin contenida en una traza
Detalles Solicitud
SessionID, Get/Post, Hora,
Informacin Seguimiento
Listado llamadas a mtodos
Formularios
Coleccin formularios
rbol de Control
Controles incluidos en la pgina
Cadenas de Consulta
Query String
Estado Sesin
Variables de sesin
Estado Aplicacin
Variables de Aplicacin
Cookies Solicitud
Trazas
Habilitacin a nivel de aplicacin
48
Trazas
Habilitacin a nivel de aplicacin
http://localhost/trace.axd
Detalle
Trazas
Habilitacin a nivel de aplicacin Opciones configuracin traza
enabled requestLimit
Limita el almacenamiento de las trazas a un nmero especificado
pageOutput
Muestra informacin de traza en la propia pgina Equivalente a traza a nivel de pgina
traceMode
Visualizacin por tiempo (SortByTime) o por categora (SortByCategory)
localOnly
Traza nicamente visible en la mquina local
49