2. Si das pescado a un hombre hambriento lo nutres
durante una jornada.
Si le enseñas a pescar, le nutrirás toda su vida
(Lao Tsé).
3. Objetivo
• Construir aplicaciones de
software Web con acceso
a datos y que resuelva
problemas basados en
casos reales utilizando
Visual Studio
● 1.2 Web Forms
Contenido
5. 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
6. Introducción a ASP.NET
Diferencias con desarrollo Windows
VB
Private Sub Command1_Click()
If List1.SelCount > 0 Then
Label1.Caption = "Hola, " & List1.Text
Else
Label1.Caption = ""
End If
End Sub
7. Introducción a ASP.NET
Diferencias con desarrollo Windows
ASP
<html>
<%@ Language=VBScript %>
<%
nombres = array("Antonio",
"Jose", "Alberto",
"Luis", "Benito")
%>
<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 %> >
<%=nombres(i) %></option>
<% next %>
</select><br><br>
<input type="submit" value="Di hola"></p>
</form>
<% if Request.Form("nombre") <> "" then %>
<p>Hola, <%=Request.Form("nombre") %></p>
<% end if %>
</body>
</html>
8. <html>
<%@ Language=VBScript %>
<%
nombres = array("Antonio",
"Jose", "Alberto",
"Luis", "Benito")
%>
<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 %> >
<%=nombres(i) %></option>
<% next %>
</select><br><br>
<input type="submit" value="Di hola"></p>
</form>
<% if Request.Form("nombre") <> "" then %>
<p>Hola, <%=Request.Form("nombre") %></p>
<% end if %>
</body>
</html>
Introducción a ASP.NET
Diferencias con desarrollo Windows
Private Sub Command1_Click()
If List1.SelCount > 0 Then
Label1.Caption = "Hola, " & List1.Text
Else
Label1.Caption = ""
End If
End Sub
Diseño
Lógica
Eventos
Propiedades
Sin estado
Estado
Composición
HTML
Paso de
parámetros
Petición
Respuesta
9. 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
10. Introducción a ASP.NET
¿Qué es .NET?
Base Class Library
Common Language Specification
Common Language Runtime
ADO.NET, XML, Enterprise Services
VB C++ C#
VisualStudio.NET
ASP.NET: Web Services
and Web Forms
JScript …
Windows
Forms
12. Modelo de ejecución
Arquitectura con IIS
HTTP.SYS
W3WP.exe
ISAPI ASP.NET
Filtros ISAPI
.ASPX,
.ASCX,
.ASMX
Aspnet_
wp.exeHTTPHandlers
HTTPModules
13. Modelo de ejecución
Compilación dinámica
ISAPI
ASP.NET
GET test.aspx
GET test.aspx
Procesar
¿test.aspx
compilada?
Leer
Test.aspx
Generar
Test.cs
Clase
compilada
Compilar
Respuesta HTML
Respuesta HTML
Instanciar
14. 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
<tags>
test.asp
código
<tags>
test.aspx
código
test.aspx.cs
ASP ASP .NET
16. Web Forms
¿Qué son?
● Formularios semejantes a Windows pero en Web
○ Separación lógica – diseño
○ Componentes gráficos
○ Estado
○ Eventos
○ Propiedades
17. 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
18. 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
HtmlLiteral ListBox HtmlLiteral
<html>
<body>
<select>
…
</select>
</body>
</html>
19. Web Forms
Estado
● Los controles de servidor mantienen sus propiedades
● Dos mecanismos
○ Procesamiento automático de variables del post
○ Viewstate: variable de formulario oculta
■ Cuidado con el tamaño, deshabilitar si no se utiliza
20. Web Forms
Eventos de servidor
● Los controles pueden lanzar eventos
○ Ya sean HtmlControl o WebControl
○ Load, Click, TextChange, SelectedItemChange…
○ Posibilidad de procesamiento:
■ En servidor
■ En cliente
■ Encolados hasta siguiente postback
● Con todo esto cambia el paradigma de desarrollo
○ De petición-respuesta a event-driven
21. Trabajo con controles
Controles HTML
● Todos los elementos HTML tienen un control asociado
○ Sólo hay que marcarlo con runat=“server”
● Sólo tienen sentido si son dinámicos o queremos responder
a un evento
○ En caso contrario utilizar literales
23. 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
24. AdRotator
Trabajo con controles
WebControls (II)
BaseDataList
System.Object
DataGrid
DataList
ListControl
RadioButtonList
CheckBoxList
DropDownList
ListBox
Panel
Table
Repeater Xml
System.Web.UI.Control
WebControl
Button
Calendar
HyperLink
TextBox
RadioButton
CheckBox
Label
ImageButton
Image
26. Trabajo con controles
Controles Internet Explorer
● Controles extendidos complejos DHTML
○ Descargable de forma separada
Toolbar
TreeView
TabStrip
MultiPage
27. 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
28. 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()
29. 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.
30. 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
31. 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
32. 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
33. 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"];
34. 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
35. 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
36. Estado en ASP.NET
Caché (II)
○ 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
<%@ OutputCache VaryByParam=“XXX“ VaryByHeader=“XXX”
VaryByCustom=“XXX” VaryByProperty=“XXX” Duration=“XX" %>
37. 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
38. 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
39. 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
40. Aplicaciones web
Configuración
● 4 niveles para configurar
○ Servidor, root, web, subdir
● Ficheros XML web.config
● Extensible
○ Opciones de usuario en <appsettings>
○ Nuevas estructuras XML
● Modificable en caliente
○ Recarga automática de aplicación
Root
Dir
Sub
Dir1
Sub
Dir2
Web.Config
41. Seguridad
Autenticación
● Proceso de validación de credenciales
● Dos niveles de seguridad
○ IIS: configuración en
la administración IIS
○ ASP.NET: configuración
en web.config
42. Seguridad
Autenticación IIS
● Configuración
○ Configurar IIS en el modo elegido
○ Utilizar mode = “Windows” en web.config<system.web>
<authentication mode=“Windows”/>
</system.web>
Opcionalmente utilizar impersonación
<identity impersonate=“true”>
44. 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
45. 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() { ... }
}
46. Seguridad
Autorización imperativa
● Comprobación programática
○ Para tener un grano aún más fino
○ Propiedad Page.User
class CuentaCorriente {
public int Transferir(decimal cantidad) {
if(cantidad > 1000) {
if(User.IsInRole(“administrador”)) {
// Transferir
}
}
}
}