Vous êtes sur la page 1sur 79

Desarrollo web con

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

Private Sub Command1_Click()


If List1.SelCount > 0 Then
Label1.Caption = "Hola, " & List1.Text
Else
Label1.Caption = ""
End If
End Sub
Introducción a ASP.NET
Diferencias con desarrollo Windows
<html>

<%@ Language=VBScript %>


<%
nombres = array("Antonio",
"Jose", "Alberto",
"Luis", "Benito")
%>

<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>

<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
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 …

Common Language Specification

Visual Studio.NET
ASP.NET: Web Services Windows
and Web Forms Forms

ADO.NET, XML, Enterprise Services

Base Class Library

Common Language Runtime


Modelo de ejecución
Modelo de ejecución
Arquitectura con IIS 5
INETINFO.exe ASPNET_WP.exe

ISAPI ASP.NET Aspnet_wp.exe


ASPX ASMX

.ASPX, CLR App Domain


HTTPHandlers
.ASCX,
.ASMX CLR App Domain
Auth Sesión Caché

Filtros ISAPI CLR App Domain


HTTPModules

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

ASP ASP .NET

código

<tags> <tags> código

test.asp test.aspx test.aspx.cs


Modelo de ejecución
Code-behind

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

HtmlLiteral ListBox HtmlLiteral

<html> <select> </body>


<body> … </html>
</select>
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
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
Desarrollo con eventos
Trabajo con controles
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
Trabajo con controles
Controles HTML (II)
System.Object

System.Web.UI.Control

HtmlControl

HtmlImage <img> HtmlContainerControl

HtmlInputControl HtmlForm <form>

HtmlInputFile <input type=file> HtmlGenericControl <span>, <div>, …

HtmlInputHidden <input type=hidden> HtmlSelect <select>

HtmlInputImage <input type=image> HtmlTable <table>

HtmlInputRadioButton <input type=radio> HtmlTableCell <td>, <th>

HtmlInputText <input type=text> HtmlTableRow <tr>

HtmlInputButton <input type=button> HtmlTextArea <textarea>

HtmlInputCheckBox <input type=checkbox> HtmlAnchor <a>

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

DataList AdRotator DataGrid


Adaptación al browser
Trabajo con controles
Controles Internet Explorer
Controles extendidos complejos DHTML
Descargable de forma separada
Toolbar

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

Servidor, root, web, subdir Sub


Dir1

Ficheros XML web.config Sub


Dir2

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.

Controla políticas de autorización y autenticación


específicas de ASP.NET.

Habilita la funcionalidad ASP.NET tracing en la aplicación.

Permite la configuración la gestión de estado ASP.NET.


Configuración de trazas
Seguridad
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
Seguridad
Autenticación IIS
Método Nivel de seguridad Descripción
Ninguno No se realiza autenticación
Anónimo

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

Media •Envía hash del password


Digest •Requiere IE 5+
•Requiere Directorio Activo

Alta •El cliente presenta un certificado X509


Certificados digitales •Requiere despliegue del certificado
•Soportado por la mayoría de browsers

Alta •Usa NTLM o Kerberos


Integrada •Pensada para Intranets
con Windows •No funciona a través de un firewall
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”>
Seguridad
Autenticación ASP.NET
Basada en formulario
Página web de inicio de sesión
Cookie de autorización
Configuración
Configurar IIS como anónimo
Añadir sección en web.config
<system.web>
<authentication mode=“Forms”>
<forms loginUrl=“login.aspx” name=“mycookie”/>
</authentication>
</system.web>
Seguridad
Autenticación ASP.NET

IIS ASP.NET

No existe cookie Existe cookie

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 {

public int Transferir(decimal cantidad) {


if(cantidad > 1000) {
if(User.IsInRole(“administrador”)) {
// Transferir
}
}
}
}
Autorización
Desarrollo web para dispositivos
Desarrollo web para dispositivos
Mobile Web Controls
Juego de controles ASP.NET
pensados para dispositivos
móviles
Misma infraestructura ASP.NET
100% integrado con Visual
Studio
Desarrollo web para dispositivos
Mobile Web Controls (II)
Presentación adaptable
WML, cHTML, XHTML, HTML, XML
Más de 200 navegadores soportados
Mobile Web Controls
Sep Oct Nov Dic Ene Feb Mar Abr May Jun

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

Vous aimerez peut-être aussi