Академический Документы
Профессиональный Документы
Культура Документы
ASP.NET
Integracin de Sistemas
Parte II. Diseo e implementacin de
aplicaciones Web con .NET
ndice de Contenidos
Introduccin
Formularios Web
PostBack
Configuracin
Seguridad
Gestin Errores
Master Pages
Trazas
HTML Forms
Un HTML Form es la porcin de un documento HTML que aparece entre las
etiquetas <form></form>
HTML Forms
Method = GET Method = POST
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
Archivos Code-Behind
Archivos asociados a WebForms que contienen cdigo que se ejecutar en
el lado del servidor (e.g. VB.NET, C#, etc.)
Global.asax
Contiene los mtodos desde los que el usuario puede gestionar
los diferentes eventos globales de una aplicacin
Inicio/fin de aplicacin, inicio/fin de sesin, etc.
Directorio BIN
Contiene el assembly de la aplicacin (e.g. MyWebApp.dll)
Contiene referencias proyecto: cero o ms assemblies (externos)
Enlaces a Servicios Web XML
Parser
1. El navegador
cliente enva una
Compilador peticin GET HTTP
hello.aspx
al servidor
Navegador
2. El parser de
Web
ASP.NET
interpreta el
http://.../hello.aspx Memoria
cdigo fuente
Assembly
Assembly IL Cache 3. ASP.NET invoca al
compilador
Execute
4. El Runtime carga
Assembly IL y ejecuta el
HTTP Runtime cdigo intermedio
(IL)
CLIENTE SERVIDOR
Parser
Compilador
hello.aspx 1. El navegador
cliente enva una
Navegador
peticin GET HTTP
Web
al servidor
http://.../hello.aspx
2. El Runtime carga
Assembly
y ejecuta
Memoria Cache
inmediatamente el
cdigo intermedio
Assembly IL Assembly IL
ya compilado
durante el primer
Execute
acceso
HTTP Runtime
CLIENTE SERVIDOR
HTML
WebControls
Eventos en un Web Form
Directivas de pgina
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
Trace: habilitacin de la traza para la pgina actual
EnableViewState: habilitacin de la propiedad VIEWSTATE
etc.
e.g.
<%@ Page Language="C#" CodeBehind="PageName.aspx.cs"
ErrorPage="/DefaultError.html" Trace="true"%>
Controles:
<input type="text">
<asp:Button runat="server">
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
</div>
</form>
</body>
</html>
namespace ASPDotNetTutorial
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.42
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ASPDotNetTutorialMasterPages
{
public partial class Default
{
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
}
}
e.g. PageName.aspx.designer.cs
public partial class PageName
Incluye cdigo autogenerado por el IDE
HTML
Por defecto, los elementos HTML no
son accesibles desde cdigo del lado
del servidor
Desde CodeBehind no es posible
acceder a sus propiedades
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="spnStart" runat="server">Start</span>
.aspx.cs
HtmlButton txtName;
txtName.BackColor = System.Drawing.Color.Grey;
String userName = txtName.Value;
WebControls
Slo accesibles del lado del servidor
Poseen mayor funcionalidad
Definidos como objetos dentro del Namespace
System.Web.UI.WebControls
Ejemplo
<asp:TextBox ID="txtUserName"
runat="server" Text="Your name"/>
Tipos de WebControls
Intrnsecos, de Validacin, Ricos,
listas vinculables datos
No tienen relacin 1:1 con elementos HTML
Botn HTML
<input type="button" value="Search"/>
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)
Propiedades importantes
ControlToValidate
Text
ErrorMessage
Display
Ejemplos:
<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
Mensaje
1. Analizar mensaje
Evento 2. Llamar al manejador
apropiado
Respuesta
ejemplo.aspx
Manejador
PostBack
Ocurre cuando una pgina genera un formulario HTML
cuyos valores son reenviados a la misma pgina
PostBack
El evento Page_Load se lanza en cada peticin a un Web Form
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
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
Ficheros
Machine.config
Machine.config
Web.config Web.config
Root
Dir
Sub
Dir1
Sub
Dir2
Configuracin
Machine.config
Configuracin del servidor
Configuracin
Web.config
Equivalente Web al fichero App.config
Configuracin
Web.config
Existe la posibilidad de definir secciones personalizadas
ConfigurationSettings.GetSection(SECTION NAME)
Puede haber mltiples Web.config por aplicacin Web, pero slo uno por
directorio
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="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
Situado en la carpeta raz de la aplicacin Web
No accesible a travs del Servidor Web
Declaraciones de eventos y objetos a nivel de aplicacin
Eventos originados a nivel de...
Aplicacin
Sesin
Peticin
A diferencia de Machine.config y Web.config, Global.asax
no es XML, sino cdigo fuente
Compilado antes de la primera peticin
Cambios detectados sin reiniciar servidor Web
Configuracin
Global.asax: orden eventos
Primera Peticin
Application_Start
Cada Peticin
Application_BeginRequest
Application_Authenticate
Application_EndRequest
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
Configuracin
Global.asax: ejemplo
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
Application.Lock();
<< ... >>
Application.UnLock();
}
Entonces
Cmo se almacenan datos entre peticiones?
Cmo se envan datos de una pgina a otra?
Cookies
Limitaciones
Tamao mximo (4Kb)
Nmero total (300)
Cookies por sitio web (20)
Usuario puede bloquearlas
Caractersticas
Puede deshabilitarse a nivel de control o a nivel de pgina
(habilitado por defecto)
EnableViewState="false"
Pueden aadirse datos serializables
ViewState["variableName"] = variableValue;
Problema: Uso de ancho de banda
Lectura
Borrado
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 + ".";
}
Response.Cookies["lastVisit"] = time.ToString();
Response.Cookies["lastVisit"].Expires = time.AddDays(1);
}
Variables de Sesin
Accesibles slo al propietario de la sesin
Requieren envo de SessionID
Almacenamiento persistente
ASP.NET State Service
Base de Datos
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
Mantiene recursos
Request se mantiene
nicamente se transfiere el control a una nueva pgina del servidor
Propiedades
Ambas pginas (original y la empleada como parmetro) han de ser internas
al servidor
Se mantiene estado de los objetos entre las pginas
Autenticacin
Proceso mediante el que se validan las credenciales de usuario
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
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
Basada en formularios web
Pgina de autenticacin
Cookie de autorizacin (authentication ticket)
Configuracin
Establecer autenticacin IIS como annima
Web.config
<system.web>
<authentication mode="Forms">
<Forms loginURL="/loginForm.aspx" name="loginForm"/>
</authentication>
</system.web>
Autenticacin
Autenticacin ASP.NET
IIS ASP.NET
Usuario
Pgina
Password protegida
Submit
loginForm.asp
x
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
Autenticacin
Autenticacin ASP.NET
Qu ocurre si cliente deshabilita las cookies?
URL rewriting: authentication ticket en la propia URL
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
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.
Encapsuladas como excepciones InternalErrorException
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
Pginas de Errores
Nivel de Pgina
Atributo PageError
Especifica que pgina se muestra cuando la pgina actual origina una
excepcin no capturada
Ejemplo
Pginas de Errores
Nivel de Aplicacin
Ejemplo web.config
<customErrors mode="RemoteOnly"
defaultRedirect="InternalError.aspx">
</customErrors>
Master Pages
ASP.NET 1.x careca de sistema de plantillas
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>
Master pages
Pgina de contenido
<%@ Page Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true"
Codebehind="HelloUserByPost.aspx.cs"
Inherits="ASPDotNetTutorialMasterPages.Hello.HelloUserByPost"
Title="HelloUserByPost" %>
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
<asp:Content
<asp:ContentPlaceHolder ContentPlaceHolderID=
ID="Main" "Main" RunAt="server" />
RunAt="server" />
</asp:Content>
Master Pages
Contenido por defecto
Los controles ContentPlaceHolder pueden definir contenido por
defecto
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>
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
Trazas
ASP.NET soporta traceado de pginas asp
Sencillo incluir sentencias de debug
No necesario debug mediante Response.WriteLine()
Habilitacin
Nivel de pgina
Nivel de aplicacin
Traza a nivel de pgina prevalece sobre nivel de aplicacin
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
Trazas
Habilitacin a nivel de pgina
Directiva Trace
<%@ Page trace="true" localOnly="true"%>
Trazas
Habilitacin a nivel de pgina
Contenido
Pgina
Contenido
Traza
Trazas
Informacin contenida en una traza
Detalles Solicitud Cookies Respuesta
SessionID, Get/Post, Hora, Cabeceras
Informacin Seguimiento Headers HTTP
Listado llamadas a mtodos Formularios
rbol de Control Coleccin formularios
Controles incluidos en la pgina
Cadenas de Consulta
Estado Sesin Query String
Variables de sesin Variables del Servidor
Estado Aplicacin SERVER_NAME ,
Variables de Aplicacin LOGON_USER,
Cookies Solicitud
Trazas
Habilitacin a nivel de aplicacin
Configuracin a travs de web.config
<configuration>
<system.web>
<trace enabled="true"/>
</sytem.web>
</configuration>
Consulta de la traza
http://sitename/AppName/trace.axd
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