Desarrollo web con ASP.NET - PowerPoint - PowerPoint by bns26590

VIEWS: 0 PAGES: 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",
                                                                    "Luis", "Benito")
                                                                                                  Petición
                                                        %>                                      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
                                         HTTPHandlers Domain
      .ASCX,
      .ASMX                                    CLR App Domain
                                  Auth      Sesión      Caché

                Filtros ISAPI                 CLR App
                                         HTTPModules Domain




                 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                       passport y
                            cookie deEl 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

								
To top