desarrollo web con asp.net. agenda introducción a asp.net modelo de ejecución web forms trabajo...
TRANSCRIPT
Desarrollo web con Desarrollo web con ASP.NETASP.NET
AgendaAgenda
Introducción a ASP.NETIntroducción a ASP.NET
Modelo de ejecuciónModelo de ejecución
Web FormsWeb Forms
Trabajo con controlesTrabajo con controles
Estado en ASP.NETEstado en ASP.NET
Aplicaciones webAplicaciones web
SeguridadSeguridad
Desarrollo web para dispositivosDesarrollo web para dispositivos
Introducción a ASP.NETIntroducción a ASP.NET
Introducción a ASP.NETIntroducción a ASP.NETHistoria del desarrollo webHistoria del desarrollo web
HTML (1991)HTML (1991)Páginas estáticas orientadas al contenidoPáginas estáticas orientadas al contenido
CGI (1993)CGI (1993)Ejecutables que generan HTML Ejecutables que generan HTML dinámicamentedinámicamente
Versión mejorada: ISAPIVersión mejorada: ISAPI
ASP (1996), PHP (1997), JSP (1999)ASP (1996), PHP (1997), JSP (1999)Páginas HTML que incluyen código script Páginas HTML que incluyen código script dinámicodinámico
Introducción a ASP.NETIntroducción a ASP.NETDiferencias con desarrollo Diferencias con desarrollo WindowsWindows
VB 6VB 6
Private Sub Command1_Click()Private Sub Command1_Click() If List1.SelCount > 0 ThenIf List1.SelCount > 0 Then Label1.Caption = "Hola, " & List1.TextLabel1.Caption = "Hola, " & List1.Text ElseElse Label1.Caption = ""Label1.Caption = "" End IfEnd IfEnd SubEnd Sub
Private Sub Command1_Click()Private Sub Command1_Click() If List1.SelCount > 0 ThenIf List1.SelCount > 0 Then Label1.Caption = "Hola, " & List1.TextLabel1.Caption = "Hola, " & List1.Text ElseElse Label1.Caption = ""Label1.Caption = "" End IfEnd IfEnd SubEnd Sub
Introducción a ASP.NETIntroducción a ASP.NETDiferencias con desarrollo Diferencias con desarrollo WindowsWindows
ASPASP
<html><html>
<%@ Language=VBScript %><%@ Language=VBScript %><% <% nombres = array("Antonio", nombres = array("Antonio",
"Jose", "Alberto", "Jose", "Alberto", "Luis", "Benito")"Luis", "Benito")
%>%>
<body><body><p>Seleccione su nombre:</p><p>Seleccione su nombre:</p><form method="POST" action="HolaMundo.asp"><form method="POST" action="HolaMundo.asp"> <p><select name="nombre" size="5"><p><select name="nombre" size="5"><% for i = 0 to UBound(nombres) <% for i = 0 to UBound(nombres) %>%> <option<option <% if Request.Form("nombre") = nombres(i) then %><% if Request.Form("nombre") = nombres(i) then %> selected <% end if %> >selected <% end if %> > <%=nombres(i) %></option><%=nombres(i) %></option><% next <% next %>%> </select><br><br></select><br><br>
<input type="submit" value="Di hola"></p><input type="submit" value="Di hola"></p></form></form><% if Request.Form("nombre") <> "" then %><% if Request.Form("nombre") <> "" then %><p>Hola, <%=Request.Form("nombre") %></p><p>Hola, <%=Request.Form("nombre") %></p><% end if %><% end if %>
</body></body></html></html>
<html><html>
<%@ Language=VBScript %><%@ Language=VBScript %><% <% nombres = array("Antonio", nombres = array("Antonio",
"Jose", "Alberto", "Jose", "Alberto", "Luis", "Benito")"Luis", "Benito")
%>%>
<body><body><p>Seleccione su nombre:</p><p>Seleccione su nombre:</p><form method="POST" action="HolaMundo.asp"><form method="POST" action="HolaMundo.asp"> <p><select name="nombre" size="5"><p><select name="nombre" size="5"><% for i = 0 to UBound(nombres) <% for i = 0 to UBound(nombres) %>%> <option<option <% if Request.Form("nombre") = nombres(i) then %><% if Request.Form("nombre") = nombres(i) then %> selected <% end if %> >selected <% end if %> > <%=nombres(i) %></option><%=nombres(i) %></option><% next <% next %>%> </select><br><br></select><br><br>
<input type="submit" value="Di hola"></p><input type="submit" value="Di hola"></p></form></form><% if Request.Form("nombre") <> "" then %><% if Request.Form("nombre") <> "" then %><p>Hola, <%=Request.Form("nombre") %></p><p>Hola, <%=Request.Form("nombre") %></p><% end if %><% end if %>
</body></body></html></html>
<html><html>
<%@ Language=VBScript %><%@ Language=VBScript %><% <% nombres = array("Antonio", nombres = array("Antonio",
"Jose", "Alberto", "Jose", "Alberto", "Luis", "Benito")"Luis", "Benito")
%>%>
<body><body><p>Seleccione su nombre:</p><p>Seleccione su nombre:</p><form method="POST" action="HolaMundo.asp"><form method="POST" action="HolaMundo.asp"> <p><select name="nombre" size="5"><p><select name="nombre" size="5"><% for i = 0 to UBound(nombres) <% for i = 0 to UBound(nombres) %>%> <option<option <% if Request.Form("nombre") = nombres(i) then %><% if Request.Form("nombre") = nombres(i) then %> selected <% end if %> >selected <% end if %> > <%=nombres(i) %></option><%=nombres(i) %></option><% next <% next %>%> </select><br><br></select><br><br>
<input type="submit" value="Di hola"></p><input type="submit" value="Di hola"></p></form></form><% if Request.Form("nombre") <> "" then %><% if Request.Form("nombre") <> "" then %><p>Hola, <%=Request.Form("nombre") %></p><p>Hola, <%=Request.Form("nombre") %></p><% end if %><% end if %>
</body></body></html></html>
<html><html>
<%@ Language=VBScript %><%@ Language=VBScript %><% <% nombres = array("Antonio", nombres = array("Antonio",
"Jose", "Alberto", "Jose", "Alberto", "Luis", "Benito")"Luis", "Benito")
%>%>
<body><body><p>Seleccione su nombre:</p><p>Seleccione su nombre:</p><form method="POST" action="HolaMundo.asp"><form method="POST" action="HolaMundo.asp"> <p><select name="nombre" size="5"><p><select name="nombre" size="5"><% for i = 0 to UBound(nombres) <% for i = 0 to UBound(nombres) %>%> <option<option <% if Request.Form("nombre") = nombres(i) then %><% if Request.Form("nombre") = nombres(i) then %> selected <% end if %> >selected <% end if %> > <%=nombres(i) %></option><%=nombres(i) %></option><% next <% next %>%> </select><br><br></select><br><br>
<input type="submit" value="Di hola"></p><input type="submit" value="Di hola"></p></form></form><% if Request.Form("nombre") <> "" then %><% if Request.Form("nombre") <> "" then %><p>Hola, <%=Request.Form("nombre") %></p><p>Hola, <%=Request.Form("nombre") %></p><% end if %><% end if %>
</body></body></html></html>
Introducción a ASP.NETIntroducción a ASP.NETDiferencias con desarrollo Diferencias con desarrollo WindowsWindows
Private Sub Command1_Click()Private Sub Command1_Click() If List1.SelCount > 0 ThenIf List1.SelCount > 0 Then Label1.Caption = "Hola, " & List1.TextLabel1.Caption = "Hola, " & List1.Text ElseElse Label1.Caption = ""Label1.Caption = "" End IfEnd IfEnd SubEnd Sub
Private Sub Command1_Click()Private Sub Command1_Click() If List1.SelCount > 0 ThenIf List1.SelCount > 0 Then Label1.Caption = "Hola, " & List1.TextLabel1.Caption = "Hola, " & List1.Text ElseElse Label1.Caption = ""Label1.Caption = "" End IfEnd IfEnd SubEnd Sub
DiseñoDiseño
LógicaLógica
EventosEventos
PropiedadesPropiedades
Sin estadoSin estado
EstadoEstado
ComposiciónComposiciónHTMLHTML
Paso de Paso de parámetrosparámetros
PeticiónPeticiónRespuestaRespuesta
Introducción a ASP.NETIntroducción a ASP.NET¿Qué es ASP.NET?¿Qué es ASP.NET?
ASP.NET permite generar aplicaciones ASP.NET permite generar aplicaciones web con el paradigma de Windowsweb con el paradigma de Windows
Diseño + lógicaDiseño + lógica
Componentes gráficosComponentes gráficos
EventosEventos
PropiedadesPropiedades
EstadoEstado
Construido sobre .NETConstruido sobre .NET
Introducción a ASP.NETIntroducción a ASP.NET¿Qué es .NET?¿Qué es .NET?
Base Class LibraryBase Class Library
Common Language SpecificationCommon Language Specification
Common Language RuntimeCommon Language Runtime
ADO.NET, XML, Enterprise ServicesADO.NET, XML, Enterprise Services
VBVB C++C++ C#C#
Vis
ual S
tud
io.N
ET
Vis
ual S
tud
io.N
ET
ASP.NET: Web ServicesASP.NET: Web Servicesand Web Formsand Web Forms
JScriptJScript ……
WindowsWindowsFormsForms
Modelo de ejecuciónModelo de ejecución
Modelo de ejecuciónModelo de ejecuciónArquitectura con IIS 5Arquitectura con IIS 5
TCP/IPTCP/IP
INETINFO.exeINETINFO.exe
ISAPI ASP.NETISAPI ASP.NETISAPI ASP.NETISAPI ASP.NET Aspnet_wp.exeAspnet_wp.exe
CLR App DomainCLR App DomainCLR App DomainCLR App Domain
CLR App DomainCLR App DomainCLR App DomainCLR App Domain
CLR App DomainCLR App DomainCLR App DomainCLR App DomainFiltros ISAPIFiltros ISAPIFiltros ISAPIFiltros ISAPI
.ASPX,.ASPX,
.ASCX,.ASCX,
.ASMX.ASMX
ASPNET_WP.exeASPNET_WP.exe
HTTPHandlersHTTPHandlersHTTPHandlersHTTPHandlers
HTTPModulesHTTPModulesHTTPModulesHTTPModules
ASPX ASMX
Auth Sesión Caché
Modelo de ejecuciónModelo de ejecuciónArquitectura con IIS 6Arquitectura con IIS 6
HTTP.SYSHTTP.SYS
W3WP.exeW3WP.exe
ISAPI ASP.NETISAPI ASP.NETISAPI ASP.NETISAPI ASP.NET
Filtros ISAPIFiltros ISAPIFiltros ISAPIFiltros ISAPI
.ASPX,.ASPX,
.ASCX,.ASCX,
.ASMX.ASMX
Aspnet_wAspnet_wp.exep.exeHTTPHandlers
HTTPModules
Modelo de ejecuciónModelo de ejecuciónCompilación dinámicaCompilación dinámica
ISAPIISAPIASP.NETASP.NET
GET test.aspxGET test.aspx
GET test.aspxGET test.aspx
ProcesarProcesar
¿test.aspx ¿test.aspx compilada?compilada?
LeerLeerTest.aspxTest.aspx
GenerarGenerar
Test.csTest.cs
Clase Clase compiladacompilada
CompilarCompilarRespuesta HTMLRespuesta HTML
Respuesta HTMLRespuesta HTML
InstanciarInstanciar
Compilación dinámicaCompilación dinámica
Modelo de ejecuciónModelo de ejecuciónEl código está detrásEl código está detrás
Separación en dos ficheros físicosSeparación en dos ficheros físicosCódigo por detrás de la página (“code-Código por detrás de la página (“code-behind”)behind”)
Código en cualquier lenguaje .NET Código en cualquier lenguaje .NET soportadosoportado
<tags><tags>
test.asp
códigocódigocódigocódigo
<tags><tags>
test.aspx
códigocódigo
test.aspx.cstest.aspx.cs
ASPASP ASP .NETASP .NET
Modelo de ejecuciónModelo de ejecuciónCode-behindCode-behind
GenerarGenerarTest.aspxTest.aspx Test.csTest.cs Test_aspxTest_aspx
TestClass.csTestClass.cs TestClassTestClass
CompilarCompilar
CompilarCompilar
(Opcional)(Opcional)
Deriva Deriva de…de…
Code behindCode behind
Web FormsWeb Forms
Web FormsWeb Forms¿Qué son?¿Qué son?
Formularios semejantes a Windows pero Formularios semejantes a Windows pero en Weben Web
Separación lógica – diseñoSeparación lógica – diseño
Componentes gráficosComponentes gráficos
EstadoEstado
EventosEventos
PropiedadesPropiedades
Web FormsWeb FormsControles de servidorControles de servidor
Componentes que encapsulan la Componentes que encapsulan la generación de HTMLgeneración de HTML
Semejantes a los controles de WindowsSemejantes a los controles de Windows
Pleno soporte desde Visual StudioPleno soporte desde Visual StudioPaleta de componentesPaleta de componentes
LayoutLayout
Diseñadores de propiedadesDiseñadores de propiedades
AsistentesAsistentes
Controles de servidorControles de servidor
Web FormsWeb FormsPropiedades de controlesPropiedades de controles
Los controles tienen propiedadesLos controles tienen propiedadesEditables en modo diseñoEditables en modo diseño
También accesibles desde códigoTambién accesibles desde códigoA partir del llamado árbol de controlesA partir del llamado árbol de controles
Test.aspxTest.aspx
HtmlLiteralHtmlLiteral ListBoxListBox HtmlLiteralHtmlLiteral
<html><html><body><body>
<select><select>……
</select></select>
</body></body></html></html>
Web FormsWeb FormsEstadoEstado
Los controles de servidor mantienen sus Los controles de servidor mantienen sus propiedadespropiedades
Dos mecanismosDos mecanismosProcesamiento automático de variables del Procesamiento automático de variables del postpost
Viewstate: variable de formulario ocultaViewstate: variable de formulario ocultaCuidado con el tamaño, deshabilitar si no se Cuidado con el tamaño, deshabilitar si no se utilizautiliza
Web FormsWeb FormsEventos de servidorEventos de servidor
Los controles pueden lanzar eventosLos controles pueden lanzar eventosYa sean HtmlControl o WebControlYa sean HtmlControl o WebControl
LoadLoad, , ClickClick, , TextChangeTextChange, , SelectedItemChangeSelectedItemChange……
Posibilidad de procesamiento:Posibilidad de procesamiento:En servidorEn servidor
En clienteEn cliente
Encolados hasta siguiente postbackEncolados hasta siguiente postback
Con todo esto cambia el paradigma de Con todo esto cambia el paradigma de desarrollodesarrollo
De De petición-respuestapetición-respuesta a a event-drivenevent-driven
Desarrollo con eventosDesarrollo con eventos
Trabajo con controlesTrabajo con controles
Trabajo con controlesTrabajo con controlesControles HTMLControles HTML
Todos los elementos HTML tienen un Todos los elementos HTML tienen un control asociadocontrol asociado
Sólo hay que marcarlo con runat=“server”Sólo hay que marcarlo con runat=“server”
Sólo tienen sentido si son dinámicos o Sólo tienen sentido si son dinámicos o queremos responder a un eventoqueremos responder a un evento
En caso contrario utilizar literalesEn caso contrario utilizar literales
HtmlImageHtmlImageHtmlImageHtmlImage
Trabajo con controlesTrabajo con controlesControles HTML (II)Controles HTML (II)
HtmlInputControlHtmlInputControlHtmlInputControlHtmlInputControl
System.ObjectSystem.ObjectSystem.ObjectSystem.Object
System.Web.UI.ControlSystem.Web.UI.ControlSystem.Web.UI.ControlSystem.Web.UI.Control
HtmlInputFileHtmlInputFileHtmlInputFileHtmlInputFile
HtmlInputHiddenHtmlInputHiddenHtmlInputHiddenHtmlInputHidden
HtmlInputImageHtmlInputImageHtmlInputImageHtmlInputImage
HtmlInputRadioButtonHtmlInputRadioButtonHtmlInputRadioButtonHtmlInputRadioButton
HtmlInputTextHtmlInputTextHtmlInputTextHtmlInputText
HtmlInputButtonHtmlInputButtonHtmlInputButtonHtmlInputButton
HtmlInputCheckBoxHtmlInputCheckBoxHtmlInputCheckBoxHtmlInputCheckBox
HtmlContainerControlHtmlContainerControlHtmlContainerControlHtmlContainerControl
HtmlControlHtmlControlHtmlControlHtmlControl
HtmlFormHtmlFormHtmlFormHtmlForm
HtmlGenericControlHtmlGenericControlHtmlGenericControlHtmlGenericControl
HtmlSelectHtmlSelectHtmlSelectHtmlSelect
HtmlTableHtmlTableHtmlTableHtmlTable
HtmlTableCellHtmlTableCellHtmlTableCellHtmlTableCell
HtmlTableRowHtmlTableRowHtmlTableRowHtmlTableRow
HtmlTextAreaHtmlTextAreaHtmlTextAreaHtmlTextArea
HtmlAnchorHtmlAnchorHtmlAnchorHtmlAnchor
HtmlButtonHtmlButtonHtmlButtonHtmlButton
<img><img>
<input type=file><input type=file>
<input type=hidden><input type=hidden>
<input type=image><input type=image>
<input type=radio><input type=radio>
<input type=text><input type=text>
<input type=button><input type=button>
<input type=checkbox><input type=checkbox>
<form><form>
<span>, <div>, …<span>, <div>, …
<select><select>
<table><table>
<td>, <th><td>, <th>
<tr><tr>
<textarea><textarea>
<a><a>
<button><button>
Trabajo con controlesTrabajo con controlesWebControlsWebControls
Nuevo conjunto de controles con Nuevo conjunto de controles con propiedades consistentespropiedades consistentes
Ej. Misma propiedad BackColor en Ej. Misma propiedad BackColor en tabletable y y spanspan
Controles complejosControles complejosEj. Calendar, DataGridEj. Calendar, DataGrid
Se adaptan al browserSe adaptan al browser
AdRotatorAdRotatorAdRotatorAdRotator
Trabajo con controlesTrabajo con controlesWebControls (II)WebControls (II)
BaseDataListBaseDataListBaseDataListBaseDataList
System.ObjectSystem.ObjectSystem.ObjectSystem.Object
DataGridDataGridDataGridDataGrid
DataListDataListDataListDataList
ListControlListControlListControlListControl
RadioButtonListRadioButtonListRadioButtonListRadioButtonList
CheckBoxListCheckBoxListCheckBoxListCheckBoxList
DropDownListDropDownListDropDownListDropDownList
ListBoxListBoxListBoxListBox
PanelPanelPanelPanel
TableTableTableTable
RepeaterRepeaterRepeaterRepeater XmlXmlXmlXml
System.Web.UI.ControlSystem.Web.UI.ControlSystem.Web.UI.ControlSystem.Web.UI.Control
WebControlWebControlWebControlWebControl
ButtonButtonButtonButton
CalendarCalendarCalendarCalendar
HyperLinkHyperLinkHyperLinkHyperLink
TextBoxTextBoxTextBoxTextBox
RadioButtonRadioButtonRadioButtonRadioButton
CheckBoxCheckBoxCheckBoxCheckBox
LabelLabelLabelLabel
ImageButtonImageButtonImageButtonImageButton
ImageImageImageImage
Trabajo con controlesTrabajo con controlesWebControls (III)WebControls (III) CalendarCalendarImageButtonImageButton
ImageImage
AdRotatorAdRotator DataGridDataGridDataListDataList
Adaptación al browserAdaptación al browser
Trabajo con controlesTrabajo con controlesControles Internet ExplorerControles Internet Explorer
Controles extendidos complejos DHTMLControles extendidos complejos DHTMLDescargable de forma separadaDescargable de forma separada
ToolbarToolbar
TreeViewTreeView
TabStripTabStrip
MultiPageMultiPage
Trabajo con controlesTrabajo con controlesControles de tercerosControles de terceros
Cientos de nuevos controles en Cientos de nuevos controles en httphttp://www.asp.net/ControlGallery://www.asp.net/ControlGallery
Trabajo con controlesTrabajo con controlesDesarrollo de controlesDesarrollo de controles
WebControlsWebControlsDerivar de System.Web.UI.ControlDerivar de System.Web.UI.Control
Añadir propiedades, eventos, métodosAñadir propiedades, eventos, métodos
Sobrescribir Render()Sobrescribir Render()
Diseñadores, adaptación, Intellisense…Diseñadores, adaptación, Intellisense…
Controles de usuarioControles de usuarioForma sencilla de crear controlesForma sencilla de crear controles
Composición de controles reutilizablesComposición de controles reutilizables
Lógica encapsulada en el controlLógica encapsulada en el control
Controles de usuarioControles de usuario
Trabajo con controlesTrabajo con controlesEnlace a datosEnlace a datos
Todo es enlazableTodo es enlazable
Múltiples mecanismosMúltiples mecanismosEn línea con En línea con <%# Expresión %><%# Expresión %>
Utilizando propiedad DataSource del controlUtilizando propiedad DataSource del control
Utilizando colección DataBindings del Utilizando colección DataBindings del controlcontrol
Para efectuar el enlace llamar a Para efectuar el enlace llamar a DataBind()DataBind()
Enlace a datosEnlace a datos
Trabajo con controlesTrabajo con controlesPlantillas (templates)Plantillas (templates)
Los controles pueden ser personalizados Los controles pueden ser personalizados con sus propiedades o usando hojas CSScon sus propiedades o usando hojas CSS
Colores, bordes, letra, etc.Colores, bordes, letra, etc.
Semejante a Windows 9x / NT / 2000Semejante a Windows 9x / NT / 2000
Las plantillas permiten definir layoutsLas plantillas permiten definir layoutsModificación de porciones del interfazModificación de porciones del interfaz
Semejante a Windows XP / 2003Semejante a Windows XP / 2003
Muchos controles exponen plantillas que Muchos controles exponen plantillas que son personalizablesson personalizables
Ej. Cabeceras, celdas, elemento de lista.Ej. Cabeceras, celdas, elemento de lista.
TemplatesTemplates
Trabajo con controlesTrabajo con controlesControles de validaciónControles de validación
Validan la entrada de datos del usuarioValidan la entrada de datos del usuario
Reglas definidas de forma declarativaReglas definidas de forma declarativaCampo requeridoCampo requerido
Comparaciones, rangosComparaciones, rangos
Expresiones regularesExpresiones regulares
PersonalizadasPersonalizadas
Se ejecutan transparentemente en Se ejecutan transparentemente en cliente y servidorcliente y servidor
Evita roundtripsEvita roundtrips
ValidaciónValidación
Estado en ASP.NETEstado en ASP.NET
Estado en ASP.NETEstado en ASP.NETSesiónSesión
Estado entre peticiones de un mismo Estado entre peticiones de un mismo clientecliente
Dos tiposDos tiposMediante cookie: generada Mediante cookie: generada automáticamenteautomáticamente
ASP.NET_SessionIDASP.NET_SessionID
Cookieless: almacenada en la URLCookieless: almacenada en la URLhttp://server/site/(uqwfp455t2qav155)/http://server/site/(uqwfp455t2qav155)/default.aspxdefault.aspx
Accesible mediante Accesible mediante Page.SessionPage.SessionDiccionario clave / valorDiccionario clave / valor
Estado en ASP.NETEstado en ASP.NETSesión (II)Sesión (II)
El estado de la sesión puede El estado de la sesión puede almacenarse:almacenarse:
In-process, en el proceso de ASP.NETIn-process, en el proceso de ASP.NET
Out-of-process, en un servidor de estado Out-of-process, en un servidor de estado ASP.NETASP.NET
Out-of-process, en una base de datos SQL Out-of-process, en una base de datos SQL ServerServer
In-process más óptimoIn-process más óptimo
Out-of-process fiabilidad y escalabilidadOut-of-process fiabilidad y escalabilidadSobrevive a caídasSobrevive a caídas
Estado compartido entre máquinas de una Estado compartido entre máquinas de una granjagranja
Estado en ASP.NETEstado en ASP.NETViewstateViewstate
El Viewstate puede utilizarse como El Viewstate puede utilizarse como mecanismo genérico de estadomecanismo genérico de estado
Estado entre una petición y la siguienteEstado entre una petición y la siguiente
CaracterísticasCaracterísticasMuy escalableMuy escalable
Uso de ancho de bandaUso de ancho de banda
Útil para datos de pequeña longitudÚtil para datos de pequeña longitud
ViewState["color"] = “rojo";ViewState["color"] = “rojo";strColor =(string)ViewState["color"];strColor =(string)ViewState["color"];
Estado en ASP.NETEstado en ASP.NETEstado de aplicaciónEstado de aplicación
Estado compartido entre todos los Estado compartido entre todos los clientesclientes
Accesible mediante Accesible mediante Page.ApplicationPage.Application
¡Cuidado con la concurrencia!¡Cuidado con la concurrencia!Application.Lock antes de actualizarApplication.Lock antes de actualizar
Application.Unlock después de actualizarApplication.Unlock después de actualizar
¡Cuidado con el rendimiento!¡Cuidado con el rendimiento!Los bloqueos pueden ralentizarLos bloqueos pueden ralentizar
No se comparte entre distintos servidoresNo se comparte entre distintos servidores
Sesión, viewstate y Sesión, viewstate y estado de aplicaciónestado de aplicación
Estado en ASP.NETEstado en ASP.NETCachéCaché
Caché de salida Caché de salida (output caching)(output caching)Permite reutilizar el resultado de una página Permite reutilizar el resultado de una página entre peticionesentre peticiones
Enorme ganancia de rendimiento: páginas Enorme ganancia de rendimiento: páginas cacheadas tan rápidas como las estáticascacheadas tan rápidas como las estáticas
También para controles de usuarioTambién para controles de usuarioSe cachean las porciones de página que no Se cachean las porciones de página que no cambiancambian
Estado en ASP.NETEstado en ASP.NETCaché (II)Caché (II)
VaryByParamVaryByParamVariar por el parámetro especificadoVariar por el parámetro especificado
VaryByHeaderVaryByHeaderVariar por cabecera (ej. User-agent, lenguaje)Variar por cabecera (ej. User-agent, lenguaje)
VaryByCustomVaryByCustomRutina personalizadaRutina personalizada
VaryByPropertyVaryByPropertyVariar por propiedad del controlVariar por propiedad del control
DurationDurationDuración de cachéDuración de caché
<%@ OutputCache VaryByParam=“XXX“ VaryByHeader=“XXX” <%@ OutputCache VaryByParam=“XXX“ VaryByHeader=“XXX” VaryByCustom=“XXX” VaryByProperty=“XXX” Duration=“XX" %>VaryByCustom=“XXX” VaryByProperty=“XXX” Duration=“XX" %>
Estado en ASP.NETEstado en ASP.NETCaché (III)Caché (III)
Caché de datosCaché de datosPermite guardar objetos costosos de Permite guardar objetos costosos de generar entre todos los clientesgenerar entre todos los clientes
Ej. Consulta a base de datosEj. Consulta a base de datos
Accesible desde Accesible desde Page.CachePage.Cache
Los elementos son eliminados teniendo en Los elementos son eliminados teniendo en cuenta:cuenta:
La memoria disponibleLa memoria disponible
PrioridadesPrioridades
Expiración absoluta o relativaExpiración absoluta o relativa
DependenciasDependencias
CachéCaché
Aplicaciones webAplicaciones web
Aplicaciones webAplicaciones webVida de una aplicaciónVida de una aplicación
Cada directorio virtual de IIS es una Cada directorio virtual de IIS es una aplicaciónaplicación
Por defecto todas funcionan en el mismo Por defecto todas funcionan en el mismo procesoproceso
Aisladas con Application DomainsAisladas con Application Domains
Eventos de aplicaciónEventos de aplicaciónLocalizados en global.asaxLocalizados en global.asax
Application_Start, Application_EndApplication_Start, Application_End
Session_Start, Session_EndSession_Start, Session_End
BeginRequest, EndRequestBeginRequest, EndRequest
Aplicaciones webAplicaciones webPipeline de una peticiónPipeline de una petición
Los módulos permiten Los módulos permiten procesamiento adicional por procesamiento adicional por peticiónpetición
Clases que implememtan IHttpModuleClases que implememtan IHttpModule
Configurables en .configConfigurables en .config
Por defecto Sesión, Caché, Por defecto Sesión, Caché, Autenticación, AutorizaciónAutenticación, Autorización
Finalmente la petición es atendida Finalmente la petición es atendida por un handlerpor un handler
Clases que implementan IHttpHandlerClases que implementan IHttpHandler
Configurables en .configConfigurables en .config
Por defecto .aspx asociado al handler Por defecto .aspx asociado al handler PagePage
HttpRuntimeHttpRuntime
HttpApplicationHttpApplication
ModuleModule
Handler FactoryHandler Factory
HandlerHandler
Aplicaciones webAplicaciones webDespliegue de una aplicaciónDespliegue de una aplicación
Despliegue XCOPYDespliegue XCOPYEs posible sobrescribir una aplicación en Es posible sobrescribir una aplicación en calientecaliente
Incluyendo páginas y libreríasIncluyendo páginas y librerías
ASP.NET redirige las peticiones a la nueva ASP.NET redirige las peticiones a la nueva aplicación y concluye las actuales en la aplicación y concluye las actuales en la antiguaantigua
Despliegue Windows InstallerDespliegue Windows InstallerFicheros MSI generados desde Visual StudioFicheros MSI generados desde Visual Studio
Aplicaciones webAplicaciones webConfiguraciónConfiguración
4 niveles para configurar4 niveles para configurarServidor, root, web, subdirServidor, root, web, subdir
Ficheros XML Ficheros XML web.configweb.config
ExtensibleExtensibleOpciones de usuario en Opciones de usuario en <appsettings><appsettings>
Nuevas estructuras XMLNuevas estructuras XML
Modificable en calienteModificable en calienteRecarga automática de aplicaciónRecarga automática de aplicación
RootRootDirDir
RootRootDirDir
SubSubDir1Dir1SubSubDir1Dir1
SubSubDir2Dir2SubSubDir2Dir2
Web.ConfigWeb.ConfigWeb.ConfigWeb.Config
Aplicaciones webAplicaciones webConfiguración (II)Configuración (II)
debug="true" para añadir información de depuración en debug="true" para añadir información de depuración en la compilación. la compilación.
debug="true" para añadir información de depuración en debug="true" para añadir información de depuración en la compilación. la compilación.
Habilita página de error con información detallada.Habilita página de error con información detallada.Habilita página de error con información detallada.Habilita página de error con información detallada.
Controla políticas de autorización y autenticación Controla políticas de autorización y autenticación específicas de ASP.NET.específicas de ASP.NET.
Controla políticas de autorización y autenticación Controla políticas de autorización y autenticación específicas de ASP.NET.específicas de ASP.NET.
Habilita la funcionalidad ASP.NET tracing en la aplicación.Habilita la funcionalidad ASP.NET tracing en la aplicación.Habilita la funcionalidad ASP.NET tracing en la aplicación.Habilita la funcionalidad ASP.NET tracing en la aplicación.
Permite la configuración la gestión de estado ASP.NET.Permite la configuración la gestión de estado ASP.NET.Permite la configuración la gestión de estado ASP.NET.Permite la configuración la gestión de estado ASP.NET.
Configuración de trazasConfiguración de trazas
SeguridadSeguridad
SeguridadSeguridadAutenticaciónAutenticación
Proceso de validación de credencialesProceso de validación de credenciales
Dos niveles de seguridadDos niveles de seguridadIIS: configuración en IIS: configuración en la administración IISla administración IIS
ASP.NET: configuración ASP.NET: configuración en web.configen web.config
SeguridadSeguridadAutenticación IISAutenticación IIS
MétodoMétodoMétodoMétodo
AnónimoAnónimoAnónimoAnónimo
Nivel de seguridadNivel de seguridadNivel de seguridadNivel de seguridad DescripciónDescripciónDescripciónDescripción
NingunoNingunoNingunoNinguno No se realiza autenticaciónNo se realiza autenticaciónNo se realiza autenticaciónNo se realiza autenticación
BásicaBásicaBásicaBásicaBaja (media con SSL)Baja (media con SSL)Baja (media con SSL)Baja (media con SSL) •Se envía usuario y clave en texto claroSe envía usuario y clave en texto claro
•Debe ser cifrado con SSLDebe ser cifrado con SSL•Soportado por la mayoría de browsersSoportado por la mayoría de browsers
•Se envía usuario y clave en texto claroSe envía usuario y clave en texto claro•Debe ser cifrado con SSLDebe ser cifrado con SSL•Soportado por la mayoría de browsersSoportado por la mayoría de browsers
DigestDigestDigestDigestMediaMediaMediaMedia •Envía hash del passwordEnvía hash del password
•Requiere IE 5+Requiere IE 5+•Requiere Directorio ActivoRequiere Directorio Activo
•Envía hash del passwordEnvía hash del password•Requiere IE 5+Requiere IE 5+•Requiere Directorio ActivoRequiere Directorio Activo
IntegradaIntegradacon Windowscon Windows
IntegradaIntegradacon Windowscon Windows
AltaAltaAltaAlta •Usa NTLM o KerberosUsa NTLM o Kerberos•Pensada para IntranetsPensada para Intranets•No funciona a través de un firewallNo funciona a través de un firewall
•Usa NTLM o KerberosUsa NTLM o Kerberos•Pensada para IntranetsPensada para Intranets•No funciona a través de un firewallNo funciona a través de un firewall
Certificados digitalesCertificados digitalesCertificados digitalesCertificados digitalesAltaAltaAltaAlta •El cliente presenta un certificado X509El cliente presenta un certificado X509
•Requiere despliegue del certificadoRequiere despliegue del certificado•Soportado por la mayoría de browsersSoportado por la mayoría de browsers
•El cliente presenta un certificado X509El cliente presenta un certificado X509•Requiere despliegue del certificadoRequiere despliegue del certificado•Soportado por la mayoría de browsersSoportado por la mayoría de browsers
SeguridadSeguridadAutenticación IISAutenticación IIS
ConfiguraciónConfiguraciónConfigurar IIS en el modo elegidoConfigurar IIS en el modo elegido
Utilizar mode = “Windows” en web.configUtilizar mode = “Windows” en web.config
<system.web><system.web><authentication mode=“Windows”/><authentication mode=“Windows”/>
</system.web></system.web>
Opcionalmente utilizar impersonaciónOpcionalmente utilizar impersonación
<identity impersonate=“true”><identity impersonate=“true”>
SeguridadSeguridadAutenticación ASP.NETAutenticación ASP.NET
Basada en formularioBasada en formularioPágina web de inicio de sesión Página web de inicio de sesión
Cookie de autorizaciónCookie de autorización
ConfiguraciónConfiguraciónConfigurar IIS como anónimoConfigurar IIS como anónimo
Añadir sección en web.configAñadir sección en web.config
<system.web><system.web><authentication mode=“Forms”><authentication mode=“Forms”>
<forms loginUrl=“login.aspx” name=“mycookie”/><forms loginUrl=“login.aspx” name=“mycookie”/></authentication></authentication>
</system.web></system.web>
SeguridadSeguridadAutenticación ASP.NETAutenticación ASP.NET
IISIISIISIIS ASP.NETASP.NETASP.NETASP.NET
No existe cookieNo existe cookieNo existe cookieNo existe cookie
UsuarioUsuario
PasswordPassword
SubmitSubmitSubmitSubmit
CookieCookieCookieCookie
Página Página protegidaprotegida
Página Página protegidaprotegida
Existe cookieExiste cookieExiste cookieExiste cookie
Autenticación Autenticación formulariosformularios
SeguridadSeguridadAutenticación ASP.NETAutenticación ASP.NET
El cliente hace la El cliente hace la peticiónpetición
Passport.com Passport.com redirige la petición redirige la petición al servidor inicial, al servidor inicial, estableciendo una estableciendo una cookie de cookie de autenticaciónautenticación
El servidor descifra El servidor descifra la cookie de la cookie de passport y accede a passport y accede a la información del la información del usuariousuario
PassportPassportMecanismo de Mecanismo de autenticación autenticación centralizadocentralizado
Requiere SDKRequiere SDK
Requiere clave Requiere clave cifrado (cuenta cifrado (cuenta Passport)Passport)
SeguridadSeguridadAutorizaciónAutorización
Confirmación de acceso a recursos Confirmación de acceso a recursos por parte de un usuario o rolpor parte de un usuario o rol
Cuatro posibilidadesCuatro posibilidadesDe ficherosDe ficheros
De URLDe URL
DeclarativaDeclarativa
ImperativaImperativa
SeguridadSeguridadAutorización de ficherosAutorización de ficheros
Establecer ACLs Establecer ACLs directamente en los directamente en los ficherosficheros
Utilizando Windows Utilizando Windows ExplorerExplorer
Sólo válido para Sólo válido para autenticación autenticación WindowsWindows
SeguridadSeguridadAutorización de URLAutorización de URL
Añadir autorización en web.configAñadir autorización en web.config<location path=“Webform1.aspx”><location path=“Webform1.aspx”> <system.web><system.web> <authorization><authorization> <allow users=“luis, antonio”><allow users=“luis, antonio”> <allow roles=“amigos, administradores”><allow roles=“amigos, administradores”> <deny users='?'/><deny users='?'/> </authorization></authorization> </system.web></system.web></location></location>
ComodinesComodines*: Todos los usuarios*: Todos los usuarios
?: Usuarios anónimos?: Usuarios anónimos
SeguridadSeguridadAutorización declarativaAutorización declarativa
Permite autorizar a nivel de clase y Permite autorizar a nivel de clase y métodométodo
Mediante atributosMediante atributos[PrincipalPermission(SecurityAction.Demand, Authenticated=true)][PrincipalPermission(SecurityAction.Demand, Authenticated=true)]class Almacen {class Almacen {
[PrincipalPermission(SecurityAction.Demand, Role=“Personal")][PrincipalPermission(SecurityAction.Demand, Role=“Personal")] public int Consultar() { ... }public int Consultar() { ... }
[PrincipalPermission(SecurityAction.Demand, Role="Admins")][PrincipalPermission(SecurityAction.Demand, Role="Admins")] public void Modificar() { ... }public void Modificar() { ... }}}
SeguridadSeguridadAutorización imperativaAutorización imperativa
Comprobación programáticaComprobación programáticaPara tener un grano aún más finoPara tener un grano aún más fino
Propiedad Propiedad Page.UserPage.User
class CuentaCorriente {class CuentaCorriente {
public int Transferir(decimal cantidad) {public int Transferir(decimal cantidad) { if(cantidad > 1000) {if(cantidad > 1000) { if(User.IsInRole(“administrador”)) {if(User.IsInRole(“administrador”)) { // Transferir// Transferir }} }} }}}}
AutorizaciónAutorización
Desarrollo web para Desarrollo web para dispositivosdispositivos
Desarrollo web para Desarrollo web para dispositivosdispositivosMobile Web ControlsMobile Web ControlsJuego de controles Juego de controles
ASP.NET pensados para ASP.NET pensados para dispositivos móvilesdispositivos móviles
Misma infraestructura Misma infraestructura ASP.NETASP.NET
100% integrado con Visual 100% integrado con Visual StudioStudio
Desarrollo web para Desarrollo web para dispositivosdispositivosMobile Web Controls (II)Mobile Web Controls (II)Presentación adaptablePresentación adaptable
WML, cHTML, XHTML, HTML, XMLWML, cHTML, XHTML, HTML, XML
Más de 200 navegadores soportadosMás de 200 navegadores soportados
Mobile Web ControlsMobile Web Controls
•Webcast teóricoWebcast teórico•Talleres en ciudadesTalleres en ciudades•Aplicación MSDN VideoAplicación MSDN Video
•Webcast práctica 13 DiciembreWebcast práctica 13 Diciembre•www.DesarrollaConMSDN.comwww.DesarrollaConMSDN.com
•Código de MSDN VideoCódigo de MSDN Video•CalendarioCalendario•TutorialesTutoriales•SeminariosSeminarios•ArtículosArtículos•ForosForos•Descuento 40% librosDescuento 40% libros
•Webcast teóricoWebcast teórico•Talleres en ciudadesTalleres en ciudades•Aplicación MSDN VideoAplicación MSDN Video
•Webcast práctica 13 DiciembreWebcast práctica 13 Diciembre•www.DesarrollaConMSDN.comwww.DesarrollaConMSDN.com
•Código de MSDN VideoCódigo de MSDN Video•CalendarioCalendario•TutorialesTutoriales•SeminariosSeminarios•ArtículosArtículos•ForosForos•Descuento 40% librosDescuento 40% libros
SepSep OctOct NoNovv
DicDic EneEne FebFeb MaMarr
AbrAbr MaMayy
JunJun
Desarrollo Desarrollo webweb