ASP.NET(1) by usr10478

VIEWS: 928 PAGES: 54

									 ASP.NET(1)
Lic. Israel García Anido
¿Como trabajan las aplicaciones Web?




                 INTERNET




                 ARQUITECTURA CLIENTE SERVIDOR
       Aplicaciones WEB
Cliente: Browsers, Internet Explorer,
Netscape, Opera browser, (generalmente
indeterminado)
Server: Las aplicaciones corren sobre el
servicio IIS, quien es el encargado de
procesar los pedidos de los clientes
mediante el protocolo HTTP.
     Que sucede cuando un browser hace una
           solicitud a un archivo aspx

http://server/hello.aspx   IIS Recibe el Pedido.                  SERVER



                                                   ASP.NET WORK PROCESS

                           EXISTE EN                         PARSING
                           OUTPUT CACHE?
                                       NO
                                                   NO
                                                            COMPILAR
                           COMPILADA?                       A MSIL
                           Segundo pedido.


http://server/hello.aspx    IIS Recibe el Pedido.                  SERVER



                                                    ASP.NET WORK PROCESS

                             EXISTE EN                        PARSING
                             OUTPUT CACHE?
                                        NO


                                                             COMPILAR
                             COMPILADA?                      A MSIL
         ASP vs ASP.NET
ASP:
Archivos con extensión .asp
ASP.NET:
Archivos con extension .aspx

ASP:
Código interpretado.
ASP.NET:
Código compilado.
         ASP vs ASP.NET
ASP:
Lenguajes Scripts (MS VBScript, MS Jscript)
ASP.NET:
Independiente de lenguaje.

ASP:
Dificultad para reusar código. (.js, includes…)
ASP.NET:
User controls y codebehind.
              ASP vs ASP.NET
ASP:
Necesidad de escribir codigo para hacer cualquier operación.
ASP.NET:
Controles del servidor.

ASP:
HTML and ActiveX Controls.
ASP.NET:
Client and Server Controls.
              ASP vs ASP.NET
ASP:
Todos los eventos son del lado del cliente.
ASP.NET:
Eventos del lado del cliente y del lado del servidor.

ASP:
Lee los valores de los controles por Request.Form.
ASP.NET:
Lee los valores de los controles a traves de sus
propiedades.
               ASP vs ASP.NET
ASP:
Global.asa.
ASP.NET:
Global.asax.

ASP:
Orden de ejecucion determinada por la posicion en el
archivo.
ASP.NET:
El orden de ejecucion es majedada por eventos.
              ASP vs ASP.NET
ASP:
Informacion persistente debe mantenerse utilizando Session
o Application.
ASP.NET:
Session, Application, ViewState y archivo de configuracion:
web.config

ASP:
Orden de ejecucion determinada por la posicion en el
archivo.
ASP.NET:
El orden de ejecucion es majedada por eventos.
                Code Inline
Utilizado por ASP y por ASP.NET
El código fuente de la aplicación está embebido dentro
de el codigo HTML.
Dificultad para diseñar las páginas.
Bueno para desarrollar aplicaciones pequeñas y
sencillas.
Compilación según se vaya accediendo a las páginas
(ASP.NET) o compilacion previa de todas las clases de
las paginas (recomendable), según se desee.
Pueden producirse errores en tiempo de ejecución.
Errores que podrian detectarse si compilasemos la
aplicación completa previamente, ej: asignacion inválida
de tipos. Errores de sintaxis.
               Code behind
Utilizado por ASP.NET.
El código fuente de la aplicación está separado del
HTML.
Se puede diseñar el código HTML
independientemente al procesamiento de
instrucciones.
Bueno para desarrollar aplicaciones escalables y
reusables.
Código compilado previamente. (Acceso rápido)
Detección de errores en tiempo de compilación.
Solo podrian producirse errores severos en tiempo
de ejecución y pueden ser capturado mediante
excepciones.
       Ejemplo code inline.
<%@ Page Language="C#" %>
    <script runat="server">

        // Insert page code here
        //

    </script>
<html>
    <head>
    </head>
    <body>
            <form runat="server">
                    <!-- Insert content here -->
            </form>
    </body>
</html>
                 Ejemplo Code behind
                              WebForm1.aspx
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb"
Inherits="Web1.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
         <HEAD>
                  <title>WebForm1</title>
                  <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
                  <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
                  <meta name="vs_defaultClientScript" content="JavaScript">
                  <meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
         </HEAD>
         <body MS_POSITIONING="GridLayout">
                  <form id="Form1" method="post" runat="server">
                           &nbsp;
                  </form>
         </body>
</HTML>


  En el archivo WebForm1.aspx.cs se almacena informacion de la clase que
  controla la página.
            Ejemplo Code behind
                     WebForm1.aspx.cs

Public Class WebForm1
    Inherits System.Web.UI.Page

    Region de código adicionado por el VS para la funcionalidad
y la inicializacion de la página.

    Private Sub Page_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load
        'Put user code to initialize the page here
    End Sub

End Class
         HTTP Runtime
Código administrado
   Se ejecuta en un proceso no administrado
Permite 100% de disponibilidad
   Procesa asincrónicamente todas las
    llamadas
   Multithreaded
Reemplaza ISAPI
   Internet Server Application Programming
    Interface
                 Configuración
Conceptos y Arquitectura
   Arch. de configuración: web.config
      Basado en XML, legible y modificable por “humanos”
      El archivo se mantiene en el mismo directorio que la
      aplicación
      Los cambios se detectan automáticamente
   Arquitectura de configuración jerárquica
      Afecta el subdirectorio actual y todos los dependientes

                  Root                web.config
                   Dir
                            Sub
                            Dir1
                                      Sub
                                      Dir2
      Mejoras de seguridad
Autenticacion integrada a windows, passport y basada
en formularios.
ASP solo puede manejarse la autenticacion integrada a
windows.
ASP.NET trae incorporado un conjunto de clases que
permiten manejar los procesos de autenticación de una
manera amigable y orientada a objetos.
Permite hacer impersonalizacion en aplicaciones para
que la aplicación pueda correr basado en las
credenciales de algun usuario específico.
En ASP las aplicaciones corren bajo un usuario anónimo
especificado en el IIS o bajo uno autenticado en
windows.
                           Seguridad
ASP.NET sigue trabajando en forma muy ligada con IIS y el
Sistema Operativo para implementar la seguridad. Salvo que
ahora, muchas de las configuraciones que antes se hacían
con la consola de IIS, ahora se pueden realizar directamente
sobre el archivo Web.config.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <system.web>
  <authentication mode="Windows" />
  <authorization>
     <allow users="*" />
  </authorization>
  </system.web>
</configuration>
La arquitectura de IIS esta basada en filtros ISAPI, esto significa que
el trabajo que IIS hace cada vez que se realiza un request de un
determinado archivo, es fijarse en el mapeo correspondiente (o sea
quien se "ocupa" de ese archivo) y le transfiere el pedido al
componente adecuado. Por esta razón es que pueden convivir en la
misma máquina ASP y ASP.NET.
                 Seguridad
Uno podría asumir que aspnet_isapi.dll se va a estar
ejecutando dentro del espacio de proceso que la invoca,
esto es InetInfo.exe, como Inetinfo.exe se ejecuta bajo
la cuenta SYSTEM, esto significaría que los usuarios
van a estar ejecutando los request bajo esta cuenta.
Pero en realidad, lo que sucede es que el request a
aspnet_isapi.dll se hace bajo esta cuenta, pero aquí
comienza a jugar la seguridad propia de ASP.NET, ya
que esta DLL reenvía el request a aspnet_wp.exe, que
es el Aplication Worker Process.
                                Seguridad
                             IIS Mapping                 User SYSTEM
                                           .aspx       Aspnet_isapi.dll
http://server/default.aspx




                                                         Aspnet_wp.exe

                                                         User ASPNET




     Machine.config
     <processModel enable="true" timeout="Infinite"....
             userName="MACHINE" password="AutoGenerate" ..../>
                         Seguridad.
<processModel enable="true" timeout="Infinite" ....
       userName="Dominio\Usuario" password="ClaveDeAcceso"
..../>

Esta configuración nos permite controlar más específicamente los
permisos de acceso y ejecución de toda la aplicación para el caso de
sufrir ataques de hackers.

Para esto hay que considerar que esta cuenta tiene que tener los
siguientes permisos, como mínimo, en los directorios que se detallan
a continuación:

•Lectura en el directorio de la aplicación.
•Lectura en la raíz de instalación del Framework y su jerarquía para poder
acceder a los Assemblies del sistema.
•Lectura-Escritura sobre el directorio ASP.NET Temporary Files que se
encuentra dentro del árbol donde se instaló el Framework.
•Lectura-Escritura sobre el directorio Temp.
          Impersonalización
Otra particularidad es que en realidad, cada vez que un
usuario hace un request, aspnet_wp.exe crea un hilo de
ejecución (thread) en el cual impersona al usuario
configurado en el processModel del archivo
machine.config. En condiciones de autenticación por
Windows, es posible impersonar determinado thread con
otro usuario diferente al que se está impersonando en la
aplicación ASP.NET.

Uno de los grandes cambios con respecto a la versión
anterior de ASP, es la granularidad en la configuración
de las aplicaciones en ASP.NET. Así que, por supuesto,
se puede sobrescribir la configuración de la entrada
processModel de machine.config que se aplica a todo el
framework, con una personalización del proceso en el
archivo web.config.
               Impersonalización
  Si la impersonalización False está habilitada entonces la
  aplicación se ejecuta bajo el usuario definido en el
  processModel.
  Si la impersonalización está en TRUE, pero no hay
  definido un usuario perteneciente a una cuenta de
  Windows, ASP.NET impersona al usuario pasado por IIS.
  Si la impersonalización está en TRUE y hay definido un
  usuario de Windows, en este caso corre bajo la identidad
  del usuario definido en la entrada indentity. Ejemplo:

Web.config
<identity impersonate="true" name="JuanPerez" password="MiClave" />
           Jerarquia de Clases
                               System.Object


                          System.Web.UI.Control


System.Web.UI.                  WebControl
WebControls
                 ListControl                    Table

    ListBox                                    Button

  CheckBoxList
                                               TextBox

          ...
                                    ...
              Escalabilidad
ASP.NET puede distribuir los elementos de session
en otra PC o en un servidor SQL server.
Si el servidor Web cae, no se pierden los valores
de session de los usuarios en linea.
Transacciones bancarias, mecanismos de flujo
amplio.
Al restaurarse el servidor o reemplazarse por otro,
se recuperan inmediatamente los elementos de
session almacenados en otra PC.
Disminuye el overhead del servidor Web.
    Sessiones sin cookies.
ASP.NET puede mantener variables de
session para clientes Web que no
soporten cookies.
Trasmite el sessionid en cada request-
response de manera automática.
Antes habia que pasar el sessionid en el
querystring en cada solicitud de
manualmente.
                Html controls.

Todos los Controles HTML son soportados desde
la librería de clases del .NET Framework y tienen
un componente vinculado desde esta
Por ejemplo para un <TABLE> está el objeto
HtmlTable, para un <a> está el objeto HtmlAnchor.
Todos están ubicados en el espacio de nombres:
System.Web.UI.HtmlControls.
Posibilidad de trabajar con nuevos controles
creados con nuevos tags ejemplo:
System.Web.UI.HtmlControls.HtmlGenericControl
                Html controls.

Cuando un control del cliente es insertado en la
página, no se refleja ninguna cambio en el
codebehind.
Cuando un control del servidor es insertado en la
página se crea un objeto dentro de la clase de la
página para poder acceder a las propiedades de
este.
Los controles del servidor adicionan un nuevo
atributo: runat=“Server”
Los controles del servidor poseen estado,
almacenan el estado de sus propiedades entre
sucesivos postbacks.
        Controles HTML del servidor

<body>
 <form id="Form1" method="post" runat="server">
  <INPUT id="Button1" type="button" value="Boton" name="Button1" runat="server">
 </form>
</body>



      Caracteristica que hace que un HtmlControl pertenezca al servidor. Y por
      tanto se pueda acceder desde el codebehind.
                Ejercicio
Crear una aplicación web simple.
Colocarle un boton HTML control
Ejecutar la aplicación.
Hacer el boton html un control del servidor.
Procesar el evento on_load de la pagina en el
server y cambiarle el texto al boton.
              Web Controls
Proveen mayor funcionalidad. (Propiedades,
Eventos, Métodos.)

Pueden proveer varias interfaces hacia distintos
browsers, detectan el browser que lo solicita y se
muestran de manera compatible con el.

Se encuentran agrupados en el espacio de
nombres: System.Web.UI.WebControls
             Web Controls
Debe cuidarse el ViewState para simplificar la
transferencia entre páginas.

Pueden mostrarse como un conjunto de controles
HTML o de manera personalizada.

Siempre y cuando podamos realizar una operación
con un HtmlControl la haremos sin utilizar un
WebControl. (¿para que matar un mosco con un
misil?)
               Web Controls
Sintaxis de Controles
   Controles del Lado del servidor
      <ASP:TextBox id=“MyTb1“ runat=“server“>
   Propiedades del control del servidor
      <ASP:TextBox maxlength=“80“ runat=“server“>
   Sub propiedad (del lado del cliente)
      <ASP:Label font-size=“14“ runat=“server“>
   Vinculación a eventos del control
      <ASP:Button OnClick=“MyClick“ runat=“server“>
                          Ejemplo
                         WebForm1.aspx.cs


<%@ Page Language="vb" AutoEventWireup="false"
Codebehind="WebForm1.aspx.vb" Inherits="Web1.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
  <HEAD>
    <title>WebForm1</title>
  </HEAD>
  <body>
    <form id="Form1" method="post" runat="server">
       <asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
       <asp:Button id="Button2" runat="server" Text="Button"
ForeColor=“Red"></asp:Button>
    </form>
  </body>
</HTML>
Public Class WebForm1
  Inherits System.Web.UI.Page
                                                       WebForm1.aspx.cs
#Region " Web Form Designer Generated Code "

    'This call is required by the Web Form Designer.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub
    Protected WithEvents Button2 As System.Web.UI.WebControls.Button
    Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox

    'NOTE: The following placeholder declaration is required by the Web Form
Designer.
    'Do not delete or move it.
    Private designerPlaceholderDeclaration As System.Object

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Init
        'CODEGEN: This method call is required by the Web Form Designer
        'Do not modify it using the code editor.
        InitializeComponent()
    End Sub

#End Region

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
        'Put user code to initialize the page here
    End Sub

End Class
              Ejercicio
Crear una página con tres controles un
TextBox un Label y un Button.
Al hacer click en el Boton se imprimirá en
el label el nombre que sea proporcionado
por el usuario en el TextBox.
Observar como se mantiene el estado del
TextBox.
                ViewState
En ASP.NET se introduce un concepto y una
variable nueva. El ViewState.
Proporciona el mantener el estado de los Controles
del servidor cuando se hace un postback.
El viewState se crea automaticamente en la página
como un HIDDEN control y almacena de manera
encriptada la informacion de los Server controls
que deseen mantener su estado.
Es posible escribir valores adicionales en el
ViewState para conservarlos durante las
transiciones entre una misma página mediante un
postback
              PostBack
Tambien es un nuevo concepto
introducido por ASP.NET.
Un postback es un POST especial sobre
la misma página.
Se utiliza una función en el cliente script
llamada _doPostBack para enviar los
datos del formulario hacia la misma
página.
Es transparente para el programador.
                Ejercicio
Observar en el ejercicio anterior en el source
generado por el Server como se generan el
VIEWSTATE y el _doPostBack
Poner la propiedad del TextBox
“EnableViewState” en false y observar como no
se mantiene el estado del mismo despues del
postback.
En el evento onload grabar un valor en el
ViewState y luego mostrarlo en cada postback de
la página.
Crear una propiedad especial para trabajar mas
fácil con el ViewState.
               Validators
Son Web Controls que proveen funcionalidad para
automaticamente hacer validaciones en los
controles del formulario.
Pueden hacer chequeos en el cliente o en el
servidor. Para que se haga chequeo en el cliente
el Browser deberá soportar DHTML.
Se pueden hacer chequeos personalizados tanto
en el cliente como en el servidor.
Solo chequean controles que corran del lado del
servidor. Html server controls o Web Controls
                         Tipos de Validators
Nombre del control           Descripción

RequiredFieldValidator       Se asegura de que el usuario no omita ninguna entrada.


CompareValidator             Compara una entrada de usuario con un valor constante o un valor de
                                propiedad de otro control mediante un operador de comparación
                                (menor que, igual a, mayor qué, entre otros).
RangeValidator               Comprueba que una entrada de usuario se encuentra entre los límites
                                superior e inferior especificados. Se pueden comprobar los intervalos
                                entre pares de números, caracteres alfabéticos o fechas. Los límites
                                se pueden expresar como constantes.
RegularExpressionValidator   Comprueba que la entrada coincide con un patrón definido por una
                                expresión regular. Este tipo de validación permite comprobar
                                secuencias de caracteres previsibles, como las de los números de la
                                seguridad social, las direcciones de correo electrónico, los números
                                de teléfono y los códigos postales, entre otras.

CustomValidator              Comprueba la entrada del usuario mediante lógica de validación que
                                codifica el usuario. Este tipo de validación permite comprobar los
                                valores derivados en tiempo de ejecución.
ValidationSummary            Muestra los errores de validación en forma de resumen para todos los
                                validadores de la página.
                      Validators
                       WebForm1.aspx.cs

<%@ Page Language="vb" AutoEventWireup="false"
Codebehind="WebForm1.aspx.vb" Inherits="Web1.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
  <HEAD>
    <title>WebForm1</title>
  </HEAD>
  <body>
    <form id="Form1" method="post" runat="server">
        <asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
        <asp:RequiredFieldValidator id="RequiredText"
runat="server" ErrorMessage="Valor Requerido."
ControlToValidate="TextBox1">*</asp:RequiredFieldValidator>
        <asp:Button id="Button2" runat="server" Text="Button"
ForeColor=“Red"></asp:Button>
    </form>
  </body>
</HTML>
 Ejercicio(RequiredValidator)
Crear una aplicación con un TextBox para
nombre de usuario y uno para introducir el
password.
Añadir un botton Sign In.
Añadir un RequiredValidator para que el
nombre de usuario y el password sean
requeridos antes del procesamiento.
Ejecutar la aplicación.
   Ejercicio.(CompareValidator)
Utilizando la aplicación anterior adicione un boton “Register” para que el
usuario pueda hacer una inscripción.
Ejecutar el ejemplo y observar que al presionar “Sign In” el Validator
actúa y no deja entrar en la otra página.
Solución 1: Que no sea un Web Control el boton. Podria ser un link de
cliente. <a href = “register.aspx”>Register</a>
Solución 2: Cambiar la propiedad de CausesValidation del Button
“Register” a false.
Crear una nueva página “register.aspx” donde existan tres textbox, uno
para el nuevo nombre de usuario y otros dos para introducir el nuevo
password dos veces.
Añadir un boton y un CompareValidator para verificar que los dos
passwords sean introducidos correctamente.
Ejecutar la aplicación.
  Ejercicio (RegularExpresionValidator,
             RangeValidator)
Basado en la aplicación anterior, editar la página
register.aspx y añadir un campo de e-mail y de edad.
Añadir un RegularExpresionValidator para verificar que
el e-mail es introducido correctamente, añadir un
RequiredValidator para que el usuario no pueda dejar el
e-mail en blanco.
Añadir un RangeValidator para verificar que la edad del
usuario no pueda ser mayor que 100 ni menor a 0.
Añadir un RangeValidator para que el nombre de
usuario no pueda tener mas de 8 caracteres.
      ValidationSummary
Es un validator que provee funcionalidad
para mostrar todos los mensajes de error
de los validators que se encuentran en la
página.
Mostrará una lista de las propiedades
“ErrorMessage” de los validators que
esten presentes en la página en el
momento en que se active la validación y
resulte errónea.
Ejercicio (ValidationSummary)
Añadir un ValidationSummary al ejercicio
anterior.
Deberán editarse las propiedades
“ErrorMessage” y “Text” de cada validator
en la página.
         CustomValidator
El CustomValidator ofrece una funcionalidad
extendida para que el usuario pueda hacer
su propia validación personalizada en caso
de que los validators Existentes no puedan
hacer.
Validación en el Cliente mediante una
función VBScript o Jscript.
Validación en el Servidor mediante un
evento. (Requiere que se haga un postback)
          CustomValidator en el Cliente
   Se colocará en la propiedad “ClientValidationFunction” el nombre de la funcion de
   validación que se colocará en el cliente ya sea en un bloque VBScript o JScript.
   La función de validación tendrá una forma específica:
   function myvalidator(source, arguments)
   source: es el objeto CustomValidator del cliente
   Arguments: es un objeto con dos propiedades, Value e IsValid. La propiedad Value
   es el valor que se validará y la propiedad IsValid es el booleano utilizado para
   establecer el resultado devuelto de la validación.
   Ejemplo de una funcion de validación en el cliente para determinar que el valor que
   tiene el control a validar es un numero par

<script language="javascript">
  function ClientValidate(source, arguments)
    {
      // even number?
      if (arguments.Value%2 == 0)       <asp:CustomValidator id="CustomValidator1"
         arguments.IsValid = true;      runat="server"
      else                                ControlToValidate="Text1“
         arguments.IsValid = false;       ClientValidationFunction="ClientValidate"
    }                                     Display="Static"
                                          Font-Name="verdana" Font-Size="10pt">
</script>                                 No es un número par
                                        </asp:CustomValidator>
  CustomValidator en el Servidor
 Para obtener la validación personalizada del servidor,
 coloque la validación personalizada en el delegado
 OnServerValidate del validador.
<asp:CustomValidator id="CustomValidator1" runat="server"
  ControlToValidate="Text1"
  OnServerValidate="ServerValidate"
  Display="Static"
  Font-Name="verdana" Font-Size="10pt">
  No es un número par
</asp:CustomValidator>


Sub ServerValidate (sender As Object, value As ServerValidateEventArgs)
  Try
    Dim num As Int32 = Int32.Parse(value.Value)
    If num Mod 2 = 0 Then
      value.IsValid = True
      Exit Sub
    End If
  Catch exc As Exception
  End Try
  value.IsValid = False
End Sub
              Ejercicio
Utilizando el ejercicio anterior, Adicionar
un campo Texto llamado “Clasificación” en
el formulario de “register.aspx”
Crear una validación en el cliente y una en
el servidor utilizando el CustomValidator
para verificar que el control contiene una
cadena que comienza con: “ID”

								
To top