Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ASP.NET
Agenda
Introducción a ASP.NET
Modelo de ejecución
Web Forms
Trabajo con controles
Estado en ASP.NET
Aplicaciones web
Seguridad
Desarrollo web para dispositivos
Introducción a ASP.NET
Introducción a ASP.NET
Historia del desarrollo web
HTML (1991)
Páginas estáticas orientadas al contenido
CGI (1993)
Ejecutables que generan HTML dinámicamente
Versión mejorada: ISAPI
ASP (1996), PHP (1997), JSP (1999)
Páginas HTML que incluyen código script dinámico
Introducción a ASP.NET
Diferencias con desarrollo Windows
VB 6
<body>
<p>Seleccione su nombre:</p>
ASP <form method="POST" action="HolaMundo.asp">
<p><select name="nombre" size="5">
<% for i = 0 to UBound(nombres) %>
<option
<% if Request.Form("nombre") = nombres(i) then %>
selected <% end if %> >
<%=nombres(i) %></option>
<% next %>
</select><br><br>
</body>
</html>
Introducción a ASP.NET
Diferencias con desarrollo Windows
Sin estado
<html>
Diseño
<%@ Language=VBScript %>
<%
nombres = array("Antonio",
"Jose", "Alberto", Petición
"Luis", "Benito")
%> Respuesta
<body>
<p>Seleccione su nombre:</p>
<form method="POST" action="HolaMundo.asp">
<p><select name="nombre" size="5">
<% for i = 0 to UBound(nombres) %>
<option
<% if Request.Form("nombre") = nombres(i) then %>
selected <% end if %> >
Eventos <%=nombres(i) %></option> Composición
<% next %>
</select><br><br> HTML
Private Sub Command1_Click()
If List1.SelCount > 0 Then <input type="submit" value="Di hola"></p>
Label1.Caption = "Hola, " & List1.Text </form>
Else <% if Request.Form("nombre") <> "" then %>
Label1.Caption = "" <p>Hola, <%=Request.Form("nombre") %></p>
End If <% end if %>
End Sub
Propiedades </body>
</html>
Estado
Lógica Paso de
parámetros
Introducción a ASP.NET
¿Qué es ASP.NET?
ASP.NET permite generar aplicaciones web con
el paradigma de Windows
Diseño + lógica
Componentes gráficos
Eventos
Propiedades
Estado
Construido sobre .NET
Introducción a ASP.NET
¿Qué es .NET?
VB C++ C# JScript …
Visual Studio.NET
ASP.NET: Web Services Windows
and Web Forms Forms
TCP/IP
Modelo de ejecución
Arquitectura con IIS 6
W3WP.exe
ISAPI ASP.NET
Aspnet_w
HTTPHandlers
p.exe
.ASPX,
.ASCX, HTTPModules
.ASMX
Filtros ISAPI
HTTP.SYS
Modelo de ejecución
Compilación dinámica
¿test.aspx Leer
compilada? Test.aspx
Procesar
Generar
GET test.aspx
ISAPI
ASP.NET Instanciar
GET test.aspx
Test.cs
Respuesta HTML
Clase Compilar
Respuesta HTML compilada
Compilación dinámica
Modelo de ejecución
El código está detrás
Separación en dos ficheros físicos
Código por detrás de la página (“code-behind”)
Código en cualquier lenguaje .NET soportado
código
Generar Compilar
Test.aspx Test.cs Test_aspx
Deriva
de…
Compilar
TestClass.cs TestClass
(Opcional)
Code behind
Web Forms
Web Forms
¿Qué son?
Formularios semejantes a Windows pero en Web
Separación lógica – diseño
Componentes gráficos
Estado
Eventos
Propiedades
Web Forms
Controles de servidor
Componentes que encapsulan la generación de
HTML
Semejantes a los controles de Windows
Pleno soporte desde Visual Studio
Paleta de componentes
Layout
Diseñadores de propiedades
Asistentes
Controles de servidor
Web Forms
Propiedades de controles
Los controles tienen propiedades
Editables en modo diseño
También accesibles desde código
A partir del llamado árbol de controles
Test.aspx
System.Web.UI.Control
HtmlControl
HtmlButton <button>
Trabajo con controles
WebControls
Nuevo conjunto de controles con propiedades
consistentes
Ej. Misma propiedad BackColor en table y span
Controles complejos
Ej. Calendar, DataGrid
Se adaptan al browser
Trabajo con controles
WebControls (II)
System.Object
System.Web.UI.Control
Repeater Xml
WebControl
AdRotator ListControl
BaseDataList RadioButtonList
DataGrid CheckBoxList
DataList DropDownList
Button ListBox
Calendar Panel
CheckBox Table
RadioButton Image
HyperLink ImageButton
TextBox Label
Trabajo con controles
WebControls (III) ImageButton Calendar
Image
TreeView
TabStrip
MultiPage
Trabajo con controles
Controles de terceros
Cientos de nuevos controles en
http://www.asp.net/ControlGallery
Trabajo con controles
Desarrollo de controles
WebControls
Derivar de System.Web.UI.Control
Añadir propiedades, eventos, métodos
Sobrescribir Render()
Diseñadores, adaptación, Intellisense…
Controles de usuario
Forma sencilla de crear controles
Composición de controles reutilizables
Lógica encapsulada en el control
Controles de usuario
Trabajo con controles
Enlace a datos
Todo es enlazable
Múltiples mecanismos
En línea con <%# Expresión %>
Utilizando propiedad DataSource del control
Utilizando colección DataBindings del control
Para efectuar el enlace llamar a DataBind()
Enlace a datos
Trabajo con controles
Plantillas (templates)
Los controles pueden ser personalizados con
sus propiedades o usando hojas CSS
Colores, bordes, letra, etc.
Semejante a Windows 9x / NT / 2000
Las plantillas permiten definir layouts
Modificación de porciones del interfaz
Semejante a Windows XP / 2003
Muchos controles exponen plantillas que son
personalizables
Ej. Cabeceras, celdas, elemento de lista.
Templates
Trabajo con controles
Controles de validación
Validan la entrada de datos del usuario
Reglas definidas de forma declarativa
Campo requerido
Comparaciones, rangos
Expresiones regulares
Personalizadas
Se ejecutan transparentemente en cliente y
servidor
Evita roundtrips
Validación
Estado en ASP.NET
Estado en ASP.NET
Sesión
Estado entre peticiones de un mismo cliente
Dos tipos
Mediante cookie: generada automáticamente
ASP.NET_SessionID
Cookieless: almacenada en la URL
http://server/site/(uqwfp455t2qav155)/default.aspx
Accesible mediante Page.Session
Diccionario clave / valor
Estado en ASP.NET
Sesión (II)
El estado de la sesión puede almacenarse:
In-process, en el proceso de ASP.NET
Out-of-process, en un servidor de estado ASP.NET
Out-of-process, en una base de datos SQL Server
In-process más óptimo
Out-of-process fiabilidad y escalabilidad
Sobrevive a caídas
Estado compartido entre máquinas de una granja
Estado en ASP.NET
Viewstate
El Viewstate puede utilizarse como mecanismo
genérico de estado
Estado entre una petición y la siguiente
Características
Muy escalable
Uso de ancho de banda
Útil para datos de pequeña longitud
ViewState["color"] = “rojo";
strColor =(string)ViewState["color"];
Estado en ASP.NET
Estado de aplicación
Estado compartido entre todos los clientes
Accesible mediante Page.Application
¡Cuidado con la concurrencia!
Application.Lock antes de actualizar
Application.Unlock después de actualizar
¡Cuidado con el rendimiento!
Los bloqueos pueden ralentizar
No se comparte entre distintos servidores
Sesión, viewstate y estado
de aplicación
Estado en ASP.NET
Caché
Caché de salida (output caching)
Permite reutilizar el resultado de una página entre
peticiones
Enorme ganancia de rendimiento: páginas
cacheadas tan rápidas como las estáticas
También para controles de usuario
Se cachean las porciones de página que no cambian
Estado en ASP.NET
Caché (II)
<%@ OutputCache VaryByParam=“XXX“ VaryByHeader=“XXX”
VaryByCustom=“XXX” VaryByProperty=“XXX” Duration=“XX" %>
VaryByParam
Variar por el parámetro especificado
VaryByHeader
Variar por cabecera (ej. User-agent, lenguaje)
VaryByCustom
Rutina personalizada
VaryByProperty
Variar por propiedad del control
Duration
Duración de caché
Estado en ASP.NET
Caché (III)
Caché de datos
Permite guardar objetos costosos de generar entre
todos los clientes
Ej. Consulta a base de datos
Accesible desde Page.Cache
Los elementos son eliminados teniendo en cuenta:
La memoria disponible
Prioridades
Expiración absoluta o relativa
Dependencias
Caché
Aplicaciones web
Aplicaciones web
Vida de una aplicación
Cada directorio virtual de IIS es una aplicación
Por defecto todas funcionan en el mismo
proceso
Aisladas con Application Domains
Eventos de aplicación
Localizados en global.asax
Application_Start, Application_End
Session_Start, Session_End
BeginRequest, EndRequest
Aplicaciones web
Pipeline de una petición
Los módulos permiten procesamiento
HttpRuntime
adicional por petición
Clases que implememtan IHttpModule
HttpApplication Configurables en .config
Por defecto Sesión, Caché, Autenticación,
Autorización
Module Finalmente la petición es atendida por un
handler
Handler Factory Clases que implementan IHttpHandler
Configurables en .config
Por defecto .aspx asociado al handler Page
Handler
Aplicaciones web
Despliegue de una aplicación
Despliegue XCOPY
Es posible sobrescribir una aplicación en caliente
Incluyendo páginas y librerías
ASP.NET redirige las peticiones a la nueva aplicación
y concluye las actuales en la antigua
Despliegue Windows Installer
Ficheros MSI generados desde Visual Studio
Aplicaciones web
Configuración
4 niveles para configurar Root
Dir
Web.Config
Extensible
Opciones de usuario en <appsettings>
Nuevas estructuras XML
Modificable en caliente
Recarga automática de aplicación
Aplicaciones web
Configuración (II)
debug="true" para añadir información de depuración en
la compilación.
Habilita página de error con información detallada.
Baja (media con SSL) •Se envía usuario y clave en texto claro
Básica •Debe ser cifrado con SSL
•Soportado por la mayoría de browsers
IIS ASP.NET
Usuario
Página
Password protegida
Submit
Cookie
Autenticación formularios
Seguridad
Autenticación ASP.NET
Passport
El servidor descifra la
Mecanismo de cookie deElpassport y
cliente hace la petición
accede a la información
autenticación del usuario
centralizado
Requiere SDK
Requiere clave cifrado
Passport.com redirige la
(cuenta Passport) petición al servidor inicial,
estableciendo una cookie
de autenticación
Seguridad
Autorización
Confirmación de acceso a recursos por parte
de un usuario o rol
Cuatro posibilidades
De ficheros
De URL
Declarativa
Imperativa
Seguridad
Autorización de ficheros
Establecer ACLs
directamente en los
ficheros
Utilizando Windows
Explorer
Sólo válido para
autenticación Windows
Seguridad
Autorización de URL
Añadir autorización en web.config
<location path=“Webform1.aspx”>
<system.web>
<authorization>
<allow users=“luis, antonio”>
<allow roles=“amigos, administradores”>
<deny users='?'/>
</authorization>
</system.web>
</location>
Comodines
*: Todos los usuarios
?: Usuarios anónimos
Seguridad
Autorización declarativa
Permite autorizar a nivel de clase y método
Mediante atributos
[PrincipalPermission(SecurityAction.Demand, Authenticated=true)]
class Almacen {
[PrincipalPermission(SecurityAction.Demand, Role=“Personal")]
public int Consultar() { ... }
[PrincipalPermission(SecurityAction.Demand, Role="Admins")]
public void Modificar() { ... }
}
Seguridad
Autorización imperativa
Comprobación programática
Para tener un grano aún más fino
Propiedad Page.User
class CuentaCorriente {
Desarrollo
web
•Webcast teórico
•Talleres en ciudades
•Aplicación MSDN Video
•Webcast práctica 13 Diciembre
•www.DesarrollaConMSDN.com
•Código de MSDN Video
•Calendario
•Tutoriales
•Seminarios
•Artículos
•Foros
•Descuento 40% libros