Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Material Digital
Contenido
TEMA 1: Introducción a ASP .NET ........................................... 4
Visual Studio .NET. El paradigma. ............................................................................................ 4
Introducción a NET Framework ................................................................................................ 5
Componentes del NET Framework ........................................................................................... 5
Introducción a ASP .NET ......................................................................................................... 6
Autoevaluación ....................................................................................................................... 7
ASP utiliza VBScript, que es básicamente una variación del lenguaje Visual Basic de Microsoft® Con
esa virtud, ASP es adoptado rápidamente por la comunidad de programadores de Basic, dada su
familiaridad con el IDE de Microsoft® Visual Studio® Sin embargo, la evolución del “scripting” de
Visual Basic en ASP no fue consonante con los cambios que se presentaron en otros lenguajes
competidores como Java o PHP.
Actualmente, existen muchos seguidores de ASP y otros de PHP y ha crecido el debate si utilizar una
u otra herramienta. El argumento será finalmente una cuestión de familiaridad con cada herramienta
y lo que la evolución que vayan presentando cada una. En tanto, la posibilidad de utilizar Java o
.NET (o ambos) es actualmente, la coyuntura.
El IDE (que es el entorno de programación) es único para todas las herramientas de Visual Studio
.NET. Esto permite tener un aspecto coherente e independiente del leguaje de programación que se
utilice. Los desarrolladores agradecen esto por cuanto pueden crear aplicaciones utilizando el
lenguaje que más dominan, a sabiendas que posteriormente podrán integrar su solución al resto del
proyecto.
En fin, el NET Framework constituye una infraestructura de lenguajes y servicios que simplifican
importantemente el desarrollo rápido de aplicaciones.
Common Language Runtime (CLR) Este motor gestiona los servicios requeridos por una
aplicación en tiempo de ejecución, incluyendo la integración de lenguajes, seguridad y la
gestión de memoria. En realidad el CLR es el fundamento de la tecnología convirtiéndose en
el motor de tiempo de ejecución de una aplicación .NET Se puede asociar con un agente que
administra el código mientras se está ejecutando y además brinda servicios tales como
administración de la memoria, de los subprocesos, la interacción remota de componentes y la
seguridad estricta de tipos.
Class Base Library (BCL) Son un conjunto de librerías que proporcionan al desarrollador
código reutilizable para tareas tan habituales como el acceso a datos, creación de formularios
Windows o Webs, entre otras.
Entre los objetivos principales del .NET Framework podemos citar los siguientes:
Microsoft® define los componentes del Framework, considerando herramientas (tales como Visual
Basic .NET, Visual C#, Visual J#, Visual C++), metodologías (tales como ASP .NET, ADO .NET y
Smart Devices) Esta visión de Visual Studio .NET se muestra en la ilustración 1. En esta ilustración
podrás observar como nivel superior todos los lenguajes soportados por la herramienta. Más abajo
observarás algunos otros elementos como servicios Web, gestión de datos a través de ADO .NET,
diseñadores de sitios Web como ASP .NET, entre otros productos.
Ilustración 1
Referencias Webs:
http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpguide/html/cpovrIntroductionToNETFrameworkSDK.asp
Permite la creación de páginas Web dinámicas que pueden acceder a recursos del servidor
Web.
Permite el procesamiento de formularios Webs (Web Forms) en el lado del servidor.
Las aplicaciones Webs distribuidas se pueden construir mediante servicios Web XML.
Las aplicaciones Webs creadas con ASP .NET son independientes del navegador y del lenguaje de
implementación.
El componente fundamental de ASP .NET es el formulario Web, el cual es una pantalla de usuario
donde se implementa una determinada funcionalidad. Por ejemplo, algo tan sencillo como ingresar a
un sitio en Internet, las páginas que presentan son formularios Web. Es decir, es la página Web que
visualiza un usuario cuando ingresa a Internet mediante un navegador. Una aplicación Web es un
conjunto de formularios Webs creados para crear una solución específica. Un formulario Web ASP
.NET es una página dinámica que puede acceder a recursos de un servidor de Internet.
Referencias Webs:
http://www.es-asp.net/
http://www.asp.net/es/
http://www.es-asp.net/tutoriales-asp-net/tutorial-61-76/introduccion-a-paginas-asp-net.aspx
Autoevaluación
1. Cite tres características esenciales de Visual Studio .NET.
2. Explique la funcionalidad del framework de Visual Studio .NET
3. ¿Qué es y cuáles funcionalidades ofrece CLR en el framework de Visual Studio .NET?
4. Determine la funcionalidad que tiene BCL en el framework de Visual Studio .NET.
5. Refiérase brevemente a la operatividad de MSIL en el CLR del framework de Visual Studio
.NET.
6. Cite al menos tres objetivos del framework de Visual Studio .NET.
7. ¿Qué son páginas activas de servidor (ASP)?
8. Cite al menos tres características principales de ASP .NET.
TEMA 2: Creación de Web Forms
Un formulario constituye la interface con la cual los usuarios interactúan con la lógica de negocios de
una aplicación y probablemente con una base de datos. En aplicaciones Web se denominan Web
Forms y tienen la función de permitir las entradas de datos del usuario y la salida de información. A
través de formularios Web (Web Forms) podemos implementar la lógica de negocios necesaria para
automatizar procesos de usuario mediante un sitio Web.
En la ilustración 2 podemos observar el IDE genérico de una aplicación de Visual Studio .NET.
Independientemente del lenguaje que escojamos ese entorno va a conservar esa misma interface.
Vamos identificar claramente las mismas opciones: Menús horizontales e icónicos (rápidos),
explorador de la solución, ventana de propiedades de cada objeto, barra de controles reutilizables,
área de trabajo, etc.
Ilustración 2
Directorio Virtual y Físico en aplicaciones Web
(http://localhost – c:\inetpub\wwwroot)
En aplicaciones Web que desarrollemos con ASP .NET, es importante que conozcamos donde se
deben almacenar y cómo ejecutar. Cuando se instala Windows XP, por ejemplo, automáticamente
podemos instalar el IIS (si no se instala se puede hacer posteriormente) que no es más que nuestro
servidor Web. Mediante este servidor Web es que podemos configurar y administrar nuestros sitios
Web.
Físicamente la dirección donde se deben instalar nuestros sitios Web (asumiendo sitios http, que más
adelante explicaré) está ubicada en nuestro disco duro (generalmente en c:\inetpub\wwwroot) Esa
dirección física es virtualmente direccionada por el servidor a través de http://localhost En realidad,
localhost es un nombre reservado que tienen las computadoras equipadas con una tarjeta de red
Ethernet y que sirve para autoreferenciarse (referirse a sí mismo)
Sistema de archivos.
Sistema HTTP.
Sistema FTP.
Ilustración 3
Como puede observarse en la ilustración 3, cuando creamos un sitio Web ASP .NET se nos hablita la
opción de seleccionar el tipo de ubicación que le vamos a dar a nuestro sitio. Las ubicaciones son
mediante sistema de archivos (en carpetas), HTTP y FTP.
Sistema de Archivos:
Una aplicación Web ASP .NET permite mantener los archivos que la conforman en una carpeta de
disco local o en una ubicación compartida de la red de área local. En este caso, el sitio Web no debe
crearse como una aplicación IIS para desarrollarlo o probarlo.
En un sitio Web creado mediante un sistema de archivos se pueden crear y modificar archivos que se
encuentren en las carpetas donde se encuentran, sea localmente o en un entorno de red local. No
se exige la presencia de IIS en dicho equipo para su ejecución y prueba de las páginas desarrolladas
con ASP .NET.
Referencias Webs:
http://msdn2.microsoft.com/es-es/library/e5x4xz73(VS.80).aspx
HTTP:
Las aplicaciones Web que desarrollemos mediante HTTP utilizará los servicios de IIS para su
implementación. Es decir, las páginas (Web Forms) que diseñemos, así como las carpetas del
proyecto, se situarán en el directorio físico del servidor o de la microcomputadora, cuya ubicación es
[Drive]:\Inetpub\wwwroot, que virtualmente se constituiría en http://localhost
Debe crear un sitio Web tipo HTTP cuando deba ser accesible por otros equipos, utiliza autenticación
basada en HTTP, grupos de aplicaciones y filtros ISAPI.
FTP:
FTP es un protocolo estándar que se utiliza para copiar o descargar archivos de un equipo a otro
mediante Internet. Un servidor FTP establece comunicaciones a través de Internet pero no ejecuta
páginas Web, se utiliza para transferencia de archivos entre equipos.
Estos sitios se utilizan básicamente para conectarse a un sitio Web que está instalado en un servidor
FTP. Mediante permisos de lectura/escritura se pueden crear y editar páginas Web en dicho sitio y
administrarse remotamente.
Referencias Webs:
http://msdn2.microsoft.com/es-es/library/bfx5as36.aspx
IIS Local y de servidor
Un sitio IIS local es aquel que está configurado a nivel de equipo del usuario. Es decir, el IIS se
instala en el equipo del usuario una vez que se instala Windows como sistema operativo. Si no se
instaló inicialmente puede hacerlo posteriormente. El proceso es el siguiente:
1. Pulse con el puntero del mouse sobre el botón Inicio de Windows XP o Vista.
2. Seleccione Panel de Control, luego la opción Agregar y Quitar Programas y finalmente
Agregar o quitar componentes de Windows.
3. Una vez ahí se cargará una ventana emergente donde se mostrarán aquellos componentes
instalados y no instalados en su sistema operativo. Ubique la descripción de IIS y si la casilla
de verificación no está habilitada proceda a marcarla e inmediatamente pulsar el botón
siguiente. Es probable que le solicite el disco de instalación de Windows.
Ilustración 4
1. Querer probar la funcionalidad del IIS con un sitio Web que estemos desarrollando en el
equipo del programador, simulando hacerlo en un servidor IIS establecido.
2. El equipo local es a la vez el servidor Web.
3. Se tienen archivos del sitio en una carpeta (a modo archivo) y se desea probar su
funcionalidad mediante un IIS.
Referencias Webs:
http://msdn2.microsoft.com/es-es/library/ckk1e6z4.aspx
http://docentes.uacj.mx/jpaz/WebAppsWeb/dv_VWDcon_web/html/afd8f418-d465-4ee5-
ab7d-92277f584ae7.htm
En la referencia Webs que te indicamos a continuación podrás pormenorizar los conceptos de IIS, así
como debes instalarlo, especificaciones de requerimientos entre otros datos de importancia.
Referencias Webs:
http://www.adrformacion.com/curso/intranet/leccion1/InternetInformationServer.htm
Para iniciar con la creación de un sitio Web vamos a crear el inicio de nuestra aplicación Web que
denominaremos miUniversidad. Para ello siga las siguientes instrucciones:
1. Ingrese a Visual Studio .NET, pulsando sobre el botón de Inicio de Windows. Podrá ubicarlo
generalmente en las opciones de Todos los programas y Microsoft Visual Studio 200x y
nuevamente Microsoft Visual Studio 200x. Lo de la x en 200x significa la versión. En mi caso
sería 2005 pero ya está disponible la versión 2008 o puedes utilizar la versión 2003 o
anterior.
2. Una vez que hayas ingresado a la herramienta, debes seleccionar la opción Archivo del menú
principal de Visual Basic y luego Nuevo sitio Web… tal y como muestra la ilustración 5.
Ilustración 5
3. Una vez que has seleccionado la opción del punto 2 se habilitarán las opciones de desarrollo
de un sitio Web. Deberás seleccionar Sitio Web ASP .NET en la ventana que aparece,
ubicación HTTP, lenguaje Visual Basic y el direccionamiento http://localhost/miUniversidad.
Pulse el botón Aceptar.
Ilustración 6
4. Una vez que aceptaste los valores iniciaste del sitio Web, se mostrará algo similar a lo que se
muestra en la ilustración 7.
Ilustración 7
Observa que existen varias “secciones” del entorno. El AREA DE TRABAJO (que no es más
que una página Web o Web Form) es donde colocamos los controles que vamos a utilizar en
nuestra página. Estos controles (Cajas de Texto, Etiquetas, Botones, etc) son arrastrados
desde la Barra de Controles, la cual puede ser invocada mediante el botón señalado por la
flecha Barra de Controles
El Área de componentes del proyecto lo constituyen todos los formularios (páginas Web),
archivos de configuración (como el web.config), referencias y otros objetos. Puede ser
habilitada pulsando el botón que señala la flecha Explorador de Proyectos
La Ventana de Propiedades es donde se configuran los valores iniciales de cada objeto. Por
ejemplo se le puede poner el nombre a una etiqueta o el color de letra a una caja de texto.
Se puede habilitar utilizando el botón que señala la flecha Ventana de Propiedades.
Finalmente, tenemos las opciones de Habilitar ventana de diseño que es básicamente para
mostrar la interface del formulario y la de Habilitar ventana de código que nos permite
visualizar el código que estamos creando en nuestro formulario Web.
Ilustración 8
6. Ya colocados en el formulario Web, pulsa sobre cada objeto (la etiqueta o Label y el botón
Button) y habilita las propiedades (puedes pulsar botón derecho del mouse y seleccionar
Propiedades, estando encima del objeto) de cada uno con las siguientes propiedades
iniciales:
7. Pulse con el botón derecho del mouse sobre el identificador del proyecto
(http://localhost/miUniversidad/) y seleccione Agregar nuevo elemento. Se mostrará una
ventana de opciones para seleccionar el elemento que agregará al proyecto Web. Escoja
Formulario Web. El sistema le asignará un nombre por defecto (default2.aspx) Dejémoslo así.
9. Repita el paso 6 indicado en este ejercicio para configurar las propiedades de este nuevo
formulario (default2.aspx)
10. Activa el primer formulario Web (default.aspx) y pulsa dos veces con el puntero del mouse
sobre el botón Ejecutar. Aparecerá el editor de código de ASP .NET. Es ahí donde
procederemos a programar nuestro primer formulario Web.
Response.Redirect (“default2.aspx”)
11. Ahora tienes un sitio (que aunque no es nada funcional ya es obra tuya) Falta probarlo y
para ello debes pulsar al mismo tiempo las teclas CTRL y F5. Verás como se ejecuta tu sitio
Web en el navegador que tenga instalado tu máquina.
12. Ahora cambia la línea Response.Redirect(“default2.aspx”) por
Response.Redirect(http://www.asp.net) Observarás que cuando lo ejecutes lo que se
desplegará es el sitio de www.asp.net.
13. En el segundo formulario (default2.aspx) solo resta agregarle en el botón volver el código
Response.Redirect(“default.aspx”) para que retorne a la primera página.
14. La ejecución inicial de nuestro primer sitio Web se asemejaría a lo mostrado en la ilustración
11.
Ilustración 11
Autoevaluación
1. Determine la funcionalidad del IDE de Visual Studio .NET.
2. ¿Para qué es importante mantener un mismo entorno visual de desarrollo (el mismo entorno
que ve el desarrollador de Visual Basic .NET lo ve el desarrollador de C#) para diferentes
lenguajes incluidos en Visual Studio .NET?
3. Explique la operatividad del directorio virtual y el físico utilizado por las aplicaciones ASP .NET
utilizando IIS.
4. Determine la diferencia entre sitios Web implementados en carpetas de archivos, tipo HTTP y
FTP. ¿En qué circunstancias podríamos aplicar uno u otro tipo de proyectos?
5. ¿Qué es y para que se utiliza IIS?
6. ¿Para qué es importante la existencia de un servidor IIS?
TEMA 3: Agregando código a un Web Form
En el tema 2 vimos como podemos crear nuestro primer sitio Web. Aunque no es funcional para
nada por lo menos hemos incursionado en la lógica de diseño y de programación de sitios ASP .NET.
De la forma en que agregamos código a los formularios Web (Web Form) default.aspx y
default2.aspx así podemos agregar más funcionalidad a nuestro sitio Web.
Podemos utilizar muchos componentes y toda la funcionalidad implícita en ellos. Acceso a datos,
transacciones, cálculos complejos, interfaces, todo eso podemos implementar en nuestros sitios. El
código que agreguemos lo podemos hacer en los propios formularios Web o invocarlos desde un
servicio Web (Web Service)
<HTML>
<asp:Button id="btn" runat="server"/>
...
</HTML>
<SCRIPT Language="vb" runat="server">
Sub btnCalcular_Click(s As Object, e As EventArgs) Handles btn.Click
...
End Sub
</SCRIPT>
En este caso se está utilizando código en línea en una página Web donde el HTML y el mismo código
se encuentran en distintas secciones de un único archivo .aspx. La razonabilidad es justa: ofrecer
claridad en la lectura de la página; la funcionalidad, el código y el HTML, los cuales pueden coexistir
en cualquier lugar de la página.
En cuanto el código subyacente es clara la separación de los <tags> y el código. Por ejemplo, en la
creación del primer formulario del tema 2 “default.aspx” se generaron los Tags y el código
subyacente del formulario. El <tags> lo conforma el archivo default.aspx que se creó y que generó
el siguiente código:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Página sin título</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblTitulo" runat="server" Font-Size="XX-Large" Text="PAGINA No. 1"
Width="320px"></asp:Label>
<asp:Button ID="btnEjecutar" runat="server" Font-Size="Medium" Style="z-index: 100;
left: 104px; position: absolute; top: 96px" Text="Button" Width="160px" />
</div>
</form>
</body>
</html>
Una de las ventajas de utilizar código subyacente es que la lógica de programación puede ser
trabajada aparte de la de la parte visual de la misma. Por ende, un desarrollador puede estar
desarrollando la lógica de programación, mientras otro se ocupa de la interfaz gráfica.
Default.aspx
Default.aspx.vb
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub btnEjecutar_Click(ByVal …
End Sub
End Class
Como podrás observar tanto el archivo ASPX (interface gráfica y código) mantienen su relación a
través del encabezado que radica en el código subyacente (ASPX.VB)
Definición de entradas de usuario
La validación de entradas de usuario es un proceso mediante el cual ser verifica, en una página Web,
que los datos digitados por el usuario cumplan con un formato o intervalo de valores, previamente
definidos. Este proceso permite mejorar la experiencia de usuario y coadyuvar a la reducción de
tiempo de espera del usuario (por procesamientos de validación) Se pueden utilizar, por ejemplo, un
control que valide el formato de una dirección electrónica, de un apartado postal o de un número
telefónico. Visual Studio .NET incluye varios objetos para realizar la validación de entradas del
usuario.
La idea principal de este apartado es demostrar cómo se ejecutan los procedimientos de eventos en
el lado del cliente en una aplicación Web ASP .NET.
Básicamente, los procedimientos de eventos que se ejecutan en el lado del cliente en una aplicación
Web ASP .NET se gestionan directamente en el equipo que solicita un formulario Web. En este
caso, el navegador del cliente interpreta el código y realiza la ejecución. No se envía ninguna
información al servidor.
Los procedimientos de eventos que se ejecutan del lado del cliente solo pueden utilizar controles
HTML y nunca tienen acceso a los recursos del servidor. Un ejemplo es tener un SCRIPT de conexión
a una base de datos en el servidor. Esto no es posible.
Los procedimientos de eventos en el lado del cliente son útiles para cuando se requiere de algún
procesamiento pueda realizarse localmente (en el cliente) y no tenga que invocar al servidor para
que lo resuelva. Por ejemplo, podría implementarse en el cliente una validación de un textBox
incluyendo código en el SCRIPT de la propia página del usuario (puede ser que lo digitado cumpla
con un formato preestablecido) La ejecución del código se realiza como un evento del lado del
cliente. Una vez validada puede enviarse al servidor Web para que proceda a otra validación (por
ejemplo puede ser que se verifique en una base de datos.
Contrario al procesamiento de eventos en el lado del cliente, cuando se procesan en el lado del
servidor éste es el responsable de su ejecución. Estos procedimientos son sumamente potentes y
significan costos de tiempo de procesamiento, por lo que se requiere ser muy cuidadoso para cuando
se deben desarrollar.
Los procedimientos que se ejecutan del lado del servidor incluyen código compilado en el servidor
Web. Utilizan controles de servidor Web y HTML para sus operaciones. Se utilizan cuando la
operación a realizar requiere utilizar recursos que radican en el servidor tal como la conectividad a
una base de datos.
Para su creación de un procedimiento de evento en el lado del servidor implica dos situaciones:
Ilustración 12
Afortunadamente, ASP. NET incluye varios controles comunes de validación, tales como:
Este proyecto o sitio Web solo tendrá un formulario, el cual se denominará webForm1 (en realidad
puede dejarlo como default.aspx o ponerle algún otro nombre que sea distintivo para usted)
El formulario Web en este sitio, será similar a la ilustración 13 que se muestra a continuación:
Ilustración 13
La tabla de configuración de los objetos en este formulario Web se especifican en la tabla siguiente:
Una vez que haz colocado los objetos indicados en la tabla anterior, procederemos inicialmente a
programar una función que se ejecutará en la página del cliente. Observa que en la tabla los objetos
Label, TextBox1 y Button no tienen nada en especial. Simplemente, se les puso el nombre y las
etiquetas un título inicial. Sin embargo, el control CustomValidator1 se especifica que existe una
función llamada Validar la cual se ejecutará del lado del cliente. El CustomValidator1 basará su
validación inicial (cliente) de acuerdo al contenido configurado del TextBox1.Text y posteriormente
procederá a ejecutar el código a nivel del servidor (una vez superada la validación del cliente)
Ya que hemos configurado los objetos del formulario Web ahora debemos ingresar a la programación
el SCRIPT del cliente que nos servirá para validar el TextBox1.Text en el formulario. Para ello pulse
sobre el botón Código que se encuentra al pie de nuestro formulario Web. Observa la ilustración 14
(la flecha lo señala) para que sepas donde debes pulsar con el puntero del mouse.
Ilustración 14
Una vez ahí vamos a programar una función en un script Java (similar a C#) la cual validará que la
información digitada por el usuario en el TextBox1.Text del formulario contenga un formato
numérico. Para ello observe el Script de esta página y proceda a escribir (lo que se resalta) a
continuación lo siguiente:
No vamos por ahora a tratar de explicar toda esta codificación. Basta con que observes que hay una
función denominada Validar que recibe dos parámetros: source y arguments. Source lo que permite
es determinar el objeto que hace el llamado a la función, mientras arguments lo que determina es si
la validación en el Script es o no verdadera. Guardemos este archivo y con esto tenemos lista ya la
validación del lado del cliente.
Ahora pulsemos sobre el botón Diseño (observa la ilustración 14) y procedamos ahora a escribir la
validación que realizaremos en el lado del servidor. Para ello pulsaremos sobre el objeto
CustomValidator1 y habilitaremos el evento ServerValidate y escribamos lo siguiente (no escribas lo
que está entre Sub y End Sub):
Ya con este último código hemos validado del lado del servidor a través de un componente Web
(CustomValidator) En la ilustración 15 vemos como la prueba falla (en el campo numérico intento
incluir un valor alfabético)
Ilustración 15
Ahora veamos qué pasa si realmente digitamos un valor numérico (observa la ilustración 16)
Ilustración 16
Observa como indica el mensaje que muestra la ilustración 16 y que escribimos en el Script del
cliente (alert(“PASO la validación en la página del cliente!!!!!) Con esto se ha validado a nivel de
cliente la entrada del usuario en el TextBox1.Text. Ahora falta la ultima prueba que es cuando se
ejecuta la validación a nivel de servidor a través del objeto CustomValidator1. Observa la ilustración
17.
Ilustración 17
En esta se ejecuta el código que está en el control CustomValidator1, evento ServerValidate, el cuál
da verdadero. Con esto damos por concluido este tema.
Variables de aplicación y de sesión
Variables de Aplicación.
Muchas veces es necesario (sino todo el tiempo) que el servidor de Internet “recuerde” algunos
valores existentes entre la navegación de páginas Web. Por ejemplo, puede que un sitio sea accedido
por varios usuarios y queramos ir guardando el valor de visitas. En realidad, es necesario contar con
una variable global que sirva para todas las sesiones de usuario que se establezcan.
ASP .NET para resolver el problema de no poder utilizar variables globales, tal y como se manejan en
aplicaciones Windows, recurre al objeto Application. Este objeto permite (entre otras cosas)
mantener información asignada al objeto, mientras IIS no se reinicie. Esto es persistencia de
valores.
Las variables de aplicación son importantes cuando queremos guardar valores a nivel global, la cual
deba ser compartida por todos los usuarios del servidor Web.
Variables de Session
En otras oportunidades es necesario que la sesión de usuario solamente “recuerde” los contenidos de
ciertas variables de usuario. Funciona similar a las de aplicación con la diferencia que solamente
puede guardar los valores de una sesión de usuario particular.
Para demostrar el uso de estos tipos de variables vamos a crear una pequeña aplicación. Para ello
sigue los siguientes pasos:
1. Pulsa sobre el botón Inicio de Windows, selecciona Todos los programas y luego Microsoft
Visual Studio y nuevamente Microsoft Visual Studio.
2. Una vez en Microsoft Visual Studio selecciona en el menú principal las opciones Archivo y
Nuevo Sitio Web.
3. Selecciona a continuación la opción Sitio Web ASP .NET y ponle WebSessionApplication al
nombre del proyecto y pulsa el botón Aceptar. Observa la ilustración 18 para que tengas una
idea de la ubicación y nombre del proyecto.
Ilustración 18
4. Procede a cambiar el nombre del formulario Web que se crea por defecto (Visual Studio lo
nombra como default.aspx) Cámbiaselo a webForm1. Para ello pulsa con el botón derecho
del mouse sobre este formulario y ponle webForm1. Observa la ilustración 19.
Ilustración 19
5. En el webForm1 arrastra tres controles label (etiquetas), un textbox (caja de texto) y un
button (botón de comando) tal y como se muestra en la ilustración 20.
Ilustración 20
6. Procede a crear otro formulario Web. Ponle webForm2. Deberás colocar tres label
(etiquetas) y un button (botón de comando) Será similar al mostrado en la ilustración 21.
Ilustración 21
7. Ahora debemos agregar un archivo global.asax, el cual se conoce como archivo de aplicación
ASP .NET. Este archivo contiene código que se utiliza en eventos a nivel de aplicación en
ASP .NET o por módulos HTTP. El archivo global.asax radica en el directorio raíz de una
aplicación ASP .NET.
En este ejercicio la usaremos para inicializar una variable global, denominada NumUsers, la
cual se encargará de ir “contando” los usuarios que establezcan conexión a nuestro sitio
Web. Para ello utilizaremos algunos eventos que se gestionan a nivel de aplicación. Es
decir, que inicializaremos una variable a nivel de aplicación que se gestionará a nivel general
y se conocerá su valor en toda la ejecución del sitio.
En el archivo global.asax existen varios eventos programables que tienen que ver con la
lógica de aplicación general. Para agregar un archivo global.asax debes pulsar con el botón
derecho del mouse sobre el nombre del proyecto Web (WebSessionApplication) y seleccionar
Agregar nuevo elemento… Observa la ilustración 22 para que tengas una idea de este
procedimiento.
Ilustración 22
Una vez pulsada esta opción deberás seleccionar el archivo global.asax que se presenta en
una ventana de objeto. Observa la ilustración 23 donde se muestra esta opción. No cambies
el nombre del global.asax (déjalo con ese nombre) Pulsa el botón Agregar.
Ilustración 23
8. Una vez que has pulsado el botón Agregar debes programar el archivo global.asax, para que
almacenes una variable global que vaya incrementando el número de sesiones activas del
sitio. Recuerda que las variables de aplicación se utilizan para cuando estamos controlando
valores a nivel de aplicación (generales) como lo es un sitio Web accesado por una
considerable cantidad de usuarios. Así pues, este ejemplo, lo que pretende es ir
estableciendo cuantos usuarios están conectados al mismo tiempo. La programación del
global.asax queda como sigue (solo escribe lo que está señalado)
10. Ahora vayamos al formulario webForm2 y codifiquemos las acciones que se van a realizar
aquí. El código es el siguiente:
11. La ejecución del sitio Web puedes observarlo en las ilustraciones 24 y 25.
Ilustración 24
Ilustración 25
Cookies
¿Qué son las cookies?
Las cookies constituyen un tema importante en todas las aplicaciones Web. Lógicamente, no es
recomendable basar una aplicación en el funcionamiento de las cookies, dado que el usuario
fácilmente podría borrarlas o modificarlas.
Podríamos definir una cookie como un pequeño trozo de código que acompaña a las solicitudes de
usuario y a las páginas Web mientras éstas viajan hacia el servidor Web y viceversa. Estas cookies
contienen información que la aplicación Web puede leer cada vez que el usuario visita el sitio.
Consideremos el hecho que un usuario se autentica a un determinado sitio Web, el nombre del
usuario podría guardarse en la máquina del usuario, para que la próxima vez que ingrese a ese sitio
pueda cargar, desde la cookie, ese nombre de usuario y no tener que volverlo a digitar.
Cabe indicar que las cookies se asocian a un determinado sitio Web y no a una página específica. Por
tanto, si en el ejemplo anterior el usuario ingreso al sitio de Hotmail o Yahoo, el nombre de usuario
que se almacenará en su computadora será el que se usa en cualquiera de esos sitios.
Una limitación de las cookies es aquella producto de la mayoría de exploradores que solo admiten
cookies de un tamaño máximo de 4096 bytes. Por tanto, se limita a que las cookies solo puedan
almacenar pequeñas cantidades de datos.
También muchos exploradores imponen restricciones en cuanto el número máximo de cookies que
cada sitio puede almacenar. Por ejemplo, la mayoría de exploradores solo permiten almacenar 20
cookies por sitio, conservando solo las últimas 20 que se agreguen del sitio y eliminando las más
viejas. En cuanto la totalidad de cookies que se puedan almacenar en la máquina del usuario, el
explorador generalmente podrá permitir alrededor de 300.
También puede configurarse para que los exploradores rechacen las cookies. Esto constituye un
problema por cuanto muchos sitios Web desearían almacenar información específica del usuario en
su propia máquina y no lo podría hacer porque no puede utilizar cookies, ni tampoco a través de
estados de sesión por que éstos dependen también de las cookies.
Vamos a crear un pequeño ejemplo de la utilización de cookies. Por tanto, sigue las siguientes
instrucciones:
1. Ingresa a Visual Studio .NET y crea un nuevo sitio Web denominado webCookies.
2. Renombra el formulario Web que se crea por defecto. Cámbiale el nombre por webLogin.
3. Desde la barra de controles ubica el agrupador de objetos denominado Inicio de Sesion y
arrastra desde ahí el objeto Login y colócalo en el formulario Web, tal y como se muestra en
la ilustración siguiente:
Ilustración 26
4. Una vez que has colocado el control Login, pulsa sobre cualquier parte del formulario Web,
excepto sobre el control Login y escribe el siguiente código:
Response.Cookies("usuario").Value = Login1.UserName
Response.Redirect("weblogin.aspx")
6. Ahora podrás probar nuestro sitio Web. Pulsa CTRL-F5 y verás como el nombre de usuario
que digites en el control se almacenará en una cookie en tu propia computadora.
Referencias Webs:
http://msdn2.microsoft.com/es-es/library/ms178193(VS.80).aspx
Para iniciar debemos crear un sitio Web denominado WebControlesComunes, que tiene una interface
similar a la mostrada en la ilustración 26. Los pasos a seguir son los siguientes:
Nota: Todos las etiquetas (label) deben tener su propiedad Text en tamaño (size) large.
Objeto Propiedad Valor Inicial
ID RegularExpressionValidator1
ValidationExpression Dirección de correo electrónico
RegularExpressionValidator de Internet
ErrorMessage Dirección de email incorrecto!
ControlToValidate TextBox2
ID RequiredFieldValidator1
RequiredFieldValidator ErrorMessage Se requiere su edad
ControlToValidate TextBox3
ID CompareValidator1
ControlToCompare TextBox4
CompareValidator
ControlToValidate TextBox5
ErrorMessage Las Contraseñas no coinciden!
RadioButtonList ID RadioButtonList1
DropDownList ID DropDownList1
ID Button1
Button
Text Enviar
Tabla No. 6 (continuación)
2. Luego de haber colocado los objetos que se indican en la tabla anterior, deben configurarse,
en tiempo de diseño, los objetos RadioButtonList1 y DropDownList1, tal y como se muestra
en la ilustración No. 27. Observe la flecha en negrita que aparece en la esquina superior
derecha del objeto RadioButtonList1. Pulse sobre ella e inmediatamente aparecerá un menú
de contexto (como en la ilustración 27) Inmediatamente pulse sobre la opción Editar
elementos…
Ilustración 28
3. En la ventana que aparece (observe la ilustración 28) agregue los elementos Masculino y
Femenino. En el botón Agregar se crea una opción en la lista de botones de opción. En la
propiedad Text del objeto creado se agrega el texto que se desea que aparezca cuando se
encuentre en modo ejecución. La propiedad Value permite inicializar el valor del objeto en
tiempo de diseño. Finalmente, en la propiedad Selected si se inicializa en True entonces
aparecerá como habilitado en el momento que el objeto se ejecute. Ponga el objeto
Masculino creado con la propiedad Selected en True.
Ilustración 29
Ilustración 30
6. Como último paso configura las propiedades TextMode del TextBox4 y TextBox5
(contraseñas) con el valor inicial Password para que no se visualice lo digitado en ambos
textbox.
Autoevaluación
1. Explique tres métodos utilizados para agregar código a un formulario Web en ASP .NET.
2. Determine la diferencia entre validación del lado del cliente y validación del lado del servidor.
Explique cuáles son las ventajas de uno u otro tipo de validación.
3. Explique la funcionalidad y las diferencias de variables de sesión y variables de aplicación.
¿En qué casos particulares podrían utilizarse una u otro tipo?
4. ¿Qué son las cookies? ¿Cuándo y en qué circunstancias es adecuado utilizarlas?
5. Explique cuáles son las limitaciones de las cookies.
Caso de Aplicación.
Desarrolle un sitio Web que cumpla con las siguientes condiciones:
1. Una formulario Web que valide en el lado del cliente una palabra clave que contenga los
siguientes requisitos:
a) La longitud de la palabra no exceda los 12 caracteres y que no sea inferior a 8.
b) Que la palabra inicie y termine con una letra.
c) Que a cada letra le anteceda y preceda un número.
d) Contraseñas válidas: a1b2c3d4e, A8B4d5F7t, Y3y6u8m3b5i
Nota de ayuda: Puede validar que los pares de la cadena sean números y los impares
sean letras. Puede utilizar la línea If System.Char.IsLetter(VARIABLE CHAR) = True Then
…
2. En el mismo formulario valide en el lado del servidor que el password concuerde con alguna
de cuatro variables globales creadas en la aplicación. De ahí tomará los datos del nombre
del usuario, país de nacimiento y edad del mismo. Estos datos son también globales.
3. Cree un nuevo formulario Web donde se visualicen los datos del usuario, tal como el nombre,
país de nacimiento y edad. Asimismo que en el título del formulario se visualice el mensaje
“Buenos días “ & NombreUsuario (si es antes de las 12 md) o “Buenas tardes “ &
NombreUsuario (si es después de las 12 md)
TEMA 4: Fundamentos de Web Services
Actualmente Internet facilita a las empresas una mejor comunicación interna y externa de la
información relevante a su funcionamiento. Con Internet se facilitan los negocios en línea, se
proporciona un medio más rápido y oportuno de acceso a la información, se intercomunica a las
personas a través de la conexión de un Chat a Internet o la investigación se enriquece con la
búsqueda y análisis de datos.
Las empresas actuales requieren de sitios Web programables que integren organizaciones,
aplicaciones y servicios. Ese enlace entre aplicaciones lo proporcionan los actuales servicios Web que
ponen a disposición muchas organizaciones con el fin de brindar valor agregado a sus clientes. Esto
proporciona una importante expansión de la funcionalidad de los sitios Web actuales.
Desarrollaremos un WS con las funciones básicas que podría tener una calculadora científica
en la Web.
Desarrollaremos un sitio Web que invoque ese WS para llamar a sus funciones y plasmar sus
resultados en los objetos creados para tal fin en el sitio.
1. Ingrese a Visual Studio .NET, seleccione Archivo, Nuevo sitio Web… y Servicio Web ASP
.NET, tal y como se muestra en la ilustración 30. Se nombrará wsCalculadora.
Ilustración 31
2. Pulse el botón Aceptar. Una vez ahí, se le presentará el editor de código requerido (un WS
no tiene interface, solamente funcionalidad a través de código) Observe la ilustración 31 para
que tenga una idea del entorno que le proporciona el editor del WS. Elimine de este ejercicio
lo que se muestra marcado en la ilustración 31.
Ilustración 32
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
<WebService(Nombrespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class Service
Inherits System.Web.Services.WebService
#Region "AritMetica"
<WebMethod()> Public Function Suma(ByVal x As Double, _
ByVal y As Double) As Double
Return x + y
End Function
<WebMethod()> Public Function Resta(ByVal x As Double, _
ByVal y As Double) As Double
Return x - y
End Function
<WebMethod()> Public Function Multiplicacion(ByVal x As Double, _
ByVal y As Double) As Double
Return x * y
End Function
<WebMethod()> Public Function Division(ByVal x As Double, _
ByVal y As Double) As Double
If x / y > 0 Then
Return x / y
Else
Return 0
End If
End Function
#End Region
#Region "Calculo"
<WebMethod()> Public Function Potencia(ByVal x As Double, _
ByVal y As Double) As Double
Return Math.Pow(x, y)
End Function
<WebMethod()> Public Function RaizCuadrada(ByVal x As Double) As Double
Return Math.Sqrt(x)
End Function
<WebMethod()> Public Function Logaritmo10(ByVal x As Double) As Double
Return Math.Log10(x)
End Function
<WebMethod()> Public Function Seno(ByVal x As Double) As Double
Return Math.Sin(x) 'Devuelve el seno del angulo especificado.
End Function
<WebMethod()> Public Function Tangente(ByVal x As Double) As Double
Return Math.Tan(x) 'Devuelve la tangente del angulo especificado.
End Function
<WebMethod()> Public Function Coseno(ByVal x As Double) As Double
Return Math.Cos(x) 'Devuelve el coseno del angulo especificado.
End Function
#End Region
End Class
Observaciones:
Observa que existen dos regiones: Aritmetica y Calculo. La primera región considera todas las funciones para realizar
operaciones aritméticas (suma, resta, multiplicación y división) la segunda región incorpora las operaciones de cálculo tales
como potencia, raíz cuadrada, seno, coseno, etc.
Las regiones se crean para efectos de facilidad de programación, por ejemplo, podemos colapsar la región de Aritmetica
quedando visible solamente la de Calculo y facilitarnos la escritura de código. Luego podemos expandir la región de Aritmetica
y colapsar la de Calculo y la visible en este caso sería la de Aritmetica y la no visible la de Calculo.
Referencias Webs:
http://www.w3c.es/Divulgacion/GuiasBreves/ServiciosWeb
4. Una vez programado el WS se puede probar los resultados que arrojaría nuestro WS. Al
igual que los sitios Web podemos pulsar las teclas CTRL F5 y se ejecutará nuestro WS. Por
ende, procederemos a ejecutarlo y el entorno muestra lo de la ilustración 32.
Ilustración 33
Ilustración 34
6. Los valores pasados en x, y son 8 y 2, lo que equivale a 82 que es igual a 64. Este resultado
puede observarse al pulsar el botón Invocar en la ilustración 34.
7. Observe, en medio del círculo, el resultado de la invocación de la función Potencia del WS.
8. Guarde el archivo.
En la próxima sección procederemos a crear un sitio Web que utilice el WS que desarrollamos.
Cree un nuevo sitio Web denominado webCalculadora. El formulario Web por defecto, debe
ser similar al mostrado en la ilustración 34.
Ilustración 35
La configuración de los objetos del formulario Web anterior se indican en la tabla No. 7
Nota: En todos los objetos Button configure la propiedad Text de cada uno con el titulo
que aparece en la ilustración 34.
Una vez configurados los objetos de este formulario Web proceda a crear la referencia Web
necesaria para implementar el WS que desarrollamos anteriormente. Para ello pulse sobre el
nombre del proyecto y seleccione agregar referencia Web…, tal y como se muestra en la
ilustración 35.
Ilustración 36
Una vez pulsada esta opción, se visualizará una pantalla que le permitirá buscar los servicios
Web disponibles, sea en la solución actual (la aplicación actual), los WS implementados en el
equipo local o un servidor. La ilustración 36 muestra esta pantalla.
Ilustración 37
Seleccione la opción Servicios Web del equipo local donde ubicará, entre otros, el WS que
desarrollamos anteriormente. Observe la ilustración 37 para seleccionar el WS requerido.
Ilustración 38
Una vez pulsado sobre el nombre del servicio Web (SERVICE) proceda a nombrar la
referencia. Póngale el nombre WSCalculadora y pulse el botón Agregar Referencia. Observe
la ilustración 38.
Ilustración 39
Para utilizar la funcionalidad del WS debemos ahora instanciarlo. Para ello pulse dos veces
sobre el formulario Web y cree una instancia del WS tal y como se muestra en el código
siguiente (sombreado):
A continuación vamos a utilizar el WS invocando a una de sus funciones (Sumar) Para ello
pulse sobre el botón Sumar y escriba el siguiente código:
Label4.Text = aux.RaizCuadrada(Val(TextBox1.Text))
Ahora pruebe la aplicación pulsando las teclas CTRL F5. La ejecución mostrará una pantalla
como la ilustración 39.
Ilustración 40
Como ejercicio final, implemente las demás funciones del WS en este sitio Web.
Autoevaluación
1. Defina la funcionalidad de un servicio Web ASP .NET.
2. Cite y explique 4 características fundamentales de los servicios Web ASP .NET
3. Identifique tres aplicaciones prácticas que usted le daría a servicios Web ASP .NET.
Caso de Aplicación.
Desarrolle un servicio Web y su respectiva implementación en un sitio Web ASP .NET
1. Una función que devuelva los pagos mensuales de un préstamo (utilice la función
Pmt(Rate,Nper,PV))
2. Una función que determine el valor futuro de una anualidad basada en pagos fijos periódicos
e intereses de tasa fija (utilice FV(Rate,Nper,Pmt))
3. Una función que reciba dos parámetros (multiplicador y multiplicando) y aplique el método
de multiplicación á la russe:
(http://micronet.cujae.edu.cu/Docencia/Programacion%20I/Conferencias/CONF1.PDF)
para devolver el resultado de la multiplicación.
4. Implemente el uso del servicio Web en un formulario Web adecuado.
TEMA 5: Uso de datos XML
XML es un lenguaje que está presente en muchas de las opciones de Visual Studio .NET y en el
propio .NET Framework. Mediante XML hay una separación de los datos de presentación y el
proceso que los transforma, de tal manera que permite procesarlos y mostrarlos de la forma en que
se desee. La estructuración de información en XML se basa en etiquetas las cuales no están
predefinidas como en HTML, sino que se pueden anidar unas dentro de otras para crear un esquema
de etiquetas de forma padre e hijo.
Definición de XML
XML (eXtended Markup Language) es un metalenguaje que proporciona un formato para la
descripción de datos. Esto facilita la declaración de contenido de archivos y los resultados de
búsquedas de datos en varias plataformas.
Se podría definir de la siguiente manera: XML es un formato universal que se utiliza para describir e
intercambiar documentos y datos estructurados en Internet.
Elementos
Atributos
Comentarios
<?xml version=”1.0”?>
<autores>
Elementos
<autor ID = “1”>
<nombre>Enrique</nombre> Atributos
</autor>
<!—No más autores.—> Comentarios
</autores>
Recuerda que los atributos son partes o propiedades de los elementos. Por ejemplo, para el caso de
<LIBRO>...<TITLE>XML programando XML</TITLE>...</LIBRO>, este elemento tiene un atributo
denominado Editor, tal y como se muestra en la siguiente línea de código XML:
Los atributos no pueden ser jerárquicos lo que significa que no pueden contener subelementos. Sin
embargo, podría cambiarse el atributo por su propio elemento. El código sería:
<PUBLICACION>
<LIBRO>XML programando XML </BOOK>
<EDITOR>UNED</EDITOR>
</PUBLICACION>
Tecnologías XML
XML ha venido innovando a través de los últimos años y las tecnologías que se han gestado son las
siguientes:
XSD
XSLT
XPath
DOM
XQuery
XSD es un estándar que se utiliza para la definición de esquemas, definiendo la estructura requerida
por un documento XML válido. Puede ser un documento aislado que actúa como un documento
maestro y el cual es referenciado por otros documentos, denominados instancia. El documento
aislado tendrá una extensión .xsd.
XSLT, permite la transformación del contenido de un documento XML fuente en otro documento
diferente en formato o estructura. XSLT es parte de XSL (eXtensible Stylesheet Language) XSLT
utiliza un archivo origen, que tiene un formato correcto y sirve como entrada para la transformación
a XSLT. Por ejemplo, el siguiente es XML válido:
<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="Empleados.xsl"?>
<empleados>
<empleado>
<nombre>Enrique Gómez Jiménez</nombre>
<profesion>Profesor</profesion>
</empleado>
<empleado>
<nombre>Enrique Gómez Duarte</nombre>
<profesion>Programador</profesion>
</empleado>
</empleados>
El segundo paso es convertir el archive XML válido (Empleados.xsl) al formato XSLT. Por tanto, el
código será el siguiente:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<xsl:apply-templates select="//empleado" />
</xsl:template>
<xsl:template match="empleado">
<P>
<xsl:apply-templates />
<HR />
</P>
</xsl:template>
<xsl:template match="nombre">
<FONT COLOR="red" />
<B>
<xsl:value-of select="." />
</B>
</xsl:template>
<xsl:template match="profesion">
<BR/>
<FONT COLOR="blue" />
<xsl:value-of select="." />
</xsl:template>
</xsl:stylesheet>
XQuery, es un lenguaje utilizado para consultas en XML. Dado que la cantidad de información que se
almacena en memoria aumenta cada vez más, es necesario contar con un lenguaje que permita
realizar consultas sobre los datos XML que se almacenaron. Aquí reviste importancia el lenguaje de
consulta XQuery. XQuery permite consultar tanto bases de datos como documentos XML.
Referencias Webs:
http://www.w3c.org
http://www.w3c.es/divulgacion/guiasbreves/tecnologiasXML
http://www.w3c.es/Presentaciones/2003/1211-eadmin-JA/12.html
http://www.w3c.es/gira/paradas/presentaciones/Gregorio_XML.pdf
Caso de Aplicación
Vamos a realizar una pequeña aplicación que demuestre el uso de XML en aplicaciones Web. Para
ello sigue las siguientes instrucciones:
1. Ingresa a Visual Studio .NET y crea un nuevo sitio Web denominado webXML. A
continuación coloca los objetos que se indican en la siguiente tabla:
2. El formulario Web que se diseñaría, según los objetos de la tabla 8, sería similar al mostrado
en la siguiente ilustración:
Ilustración 41
3. Una vez que has definido el formulario Web y todos los objetos que contiene, procederemos
a programarlo. Inicialmente, en las declaraciones del formulario Web invoca el namespace
que utilizaremos. Recuerda que los imports van arriba de la declaración del nombre del
formulario (en este caso del formulario Web Partial Class _Default)
Imports System.Xml
'Se utilizará para cargar los datos provenientes del archivo XML
Dim dst As New Data.DataSet
'Se utilizará como documento XML donde se creará el archivo XML
Dim arbol As New XmlDocument „
'Se utilizará como nodo del documento (cada registro es un nodo)
Dim nodo As XmlNode
'Se crea el nodo que servirá como nodo raíz del árbol de registros del XML
nodo = arbol.CreateElement("Estudiantes")
'Se agrega el nodo al árbol, que es el documento XML a crear
arbol.AppendChild(nodo)
'Se crea una tabla de 10 elementos como ejemplo de creación de registros.
CrearTabla()
Try
dst.ReadXml(Server.MapPath("Prueba.xml"))
DataGrid1.DataSource = dst.Tables(0)
DataGrid1.DataBind()
Catch ex As Exception
Response.Write(ex.Message)
End Try
Dim i = Session("fila")
Table1.Rows(i).Cells(0).Text = TextBox1.Text
Table1.Rows(i).Cells(1).Text = TextBox2.Text
Table1.Rows(i).Cells(2).Text = TextBox3.Text
i=i+1
Session("fila") = i
10. Una corrida típica de esta aplicación será similar a la mostrada en la ilustración siguiente:
Ilustración 42
11. Finalmente, puedes poner otro botón de comando en el formulario Web que te direccione
directamente al archivo XML creado. La instrucción que pondrías en este botón sería la
siguiente:
Response.Redirect("http://localhost/WebXML/Prueba.xml")
Autoevaluación
1. Defina el concepto XML. Investigue un poco sobre XAML.
2. Cite y explique los componentes de un documento XML.
3. Cite y explique al menos tres tecnologías XML actuales.
Caso de Aplicación.
Desarrolle un sitio Web que cumpla con las siguientes condiciones:
El objeto Trace de Microsoft ASP .NET permite mostrar información de una página Web o guardarla
en memoria. El objeto Debug permite mostrar información de depuración en la ventana Resultados
del depurador. Para utilizar Debug necesitamos importar el espacio de nombres
System.Diagnostics.
Habilitar el seguimiento
El seguimiento de depuración se puede habilitar a nivel de página o a nivel de aplicación.
A nivel de página significa que podemos habilitar el seguimiento para que muestre instrucciones en la
página configurada. Para habilitar este seguimiento basta con ubicarse en el código de la página
(ver ilustración 14) y en la directiva @ Page habilitaremos el trace.
Para habilitar el seguimiento a nivel de aplicación se debe modificar el archivo Web.config. Para ello
se agrega el Web.config quedaría configurado de la siguiente manera:
<?xml version="1.0"?>
<!--
Nota: como alternativa para editar manualmente este archivo puede utilizar la
herramienta Administración de sitios Web para configurar los valores de la aplicación. Utilice
la opción Sitio Web->Configuración de Asp.Net en Visual Studio.
Encontrará una lista completa de valores de configuración y comentarios en
machine.config.comments, que se encuentra generalmente en
\Windows\Microsoft.Net\Framework\v2.x\Config
-->
<configuration>
<system.web>
<trace enabled="true" pageOutput="true" localOnly="true"/>
<compilation debug="true"/>
</system.web>
<appSettings>
<add key="WSCalculadora.Service" value="http://localhost/wsCalculadora/Service.asmx"/>
</appSettings>
<connectionStrings/>
<!-- <system.web>
Establezca debug="true" en la compilación para insertar símbolos
de depuración en la página compilada. Dado que este
proceso afecta al rendimiento, debe establecer este valor como true
durante la depuración.
<compilation debug="true"/>
La sección <authentication> permite configurar
el modo de autenticación de seguridad utilizado por
ASP.NET para identificar a un usuario entrante.
<authentication mode="Windows"/>
La sección <customErrors> permite configurar
las acciones que se deben llevar a cabo/cuando un error no controlado tiene lugar
durante la ejecución de una solicitud. Específicamente,
permite a los desarrolladores configurar páginas de error html
que se mostrarán en lugar de un seguimiento de pila de errores.
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
</system.web>
-->
</configuration>
La parte más sombreada configura el seguimiento de depuración en el equipo local. En este caso, se
utilizó el sitio webCalculadora para habilitar el seguimiento de depuración a nivel de aplicación. Para
que se escriban en la página se utiliza el atributo pageOutput del elemento trace. El valor puesto en
True hace que las instrucciones se escriben en cada página. Si se pone en false se escribirían en
memoria y se utilizaría el visor de seguimiento trace.axd para acceder a ellas.
Trace.Write y Trace.Warn trabajan de forma idéntica, con la diferencia de que Warn escribe
mensajes de seguimiento en color rojo.
Por ejemplo, si en el botón sumar del sitio Web webCalculadora modificamos el código de la siguiente
manera:
En algunas ocasiones es posible que deseemos ver los mensajes generados a nivel de página o de
aplicación Web. En este caso, el objeto Trace tiene una propiedad lógica denominada IsEnabled
que permite llamar a cualquiera de los métodos (Write o Warn) solo cuando el seguimiento está
habilitado. Bastaría con averiguar si esta habilitado el seguimiento mediante la instrucción If
Trace.IsEnabled = True Then …. También es posible habilitar o deshabilitar dinámicamente el estado
del seguimiento de una página mediante la instrucción Trace.IsEnabled = False o True
En los resultados de seguimiento se muestran varias categorías, entre las que destacan:
Autoevaluación
1. Explique la funcionalidad de los objetos Trace y Debug.
2. ¿Qué permite habilitar el visor de seguimiento a nivel de aplicación (Trace.axd)? ¿Dónde se
habilita?
3. ¿Qué función realizan los métodos Trace.Write y Trace.Warm? ¿Cómo podemos cambiar
dinámicamente su estado?
4. Cite y explique al menos cuatro categorías de resultados generados en el visor de
seguimiento.
Caso de Aplicación
Aplique la funcionalidad de los objetos Trace y Debug en el seguimiento y depuración del
sitio Web creado en el tema anterior.
TEMA 7: Administración del Estado
En el tema 3 estudiamos las variables de sesión. Recordemos que la conexión que se establece entre
un usuario (equipo cliente) y un servidor Web se denomina sesión. Las sesiones pueden abarcar
múltiples páginas Web, por lo cual el seguimiento a través de ellas debe administrarse a través de
estados. Este proceso se denomina administración del estado y básicamente la intención es
mantener la misma información a través de múltiples peticiones de páginas Web.
Servidor
Web
En la figura anterior podemos notar dos escenarios. El primero trabaja sin administración del estado y
la segunda si utiliza administración del estado. En el primer caso una página de Login invoca al
servidor y cuando este valida el usuario lo remite a una página de listado de estado de cuenta, sin
embargo, no puede identificar al usuario por cuanto el dato no se ha conservado. En el segundo
caso, como si se administra el estado, desde el cliente se determinó el usuario, viajó hasta el
servidor, conservando este dato y reutilizándolo cuando ingreso a la página que muestra su estado
de cuenta.
Cabe indicar que las páginas se crean cada vez que se invocan y se destruyen cada vez que se sale
de ellas para ingresar en otra (con cada petición al servidor) Con ello se crean o se eliminan las
variables y objetos que puedan contener en un instante de tiempo. La información contenida en la
página tiene un ciclo de vida asociada con su ejecución.
ASP .NET permite administrar el estado de sesiones, guardando información en el servidor entre
ejecución de páginas. Esto ayuda a mantener la continuidad de la información (estado) y su
reutilización entre páginas Web de un servidor.
Existen dos tipos de administración del estado: del lado del servidor y del lado del cliente.
La administración del estado del lado del servidor se da a nivel de aplicación, sesión o de bases de
datos. Tiene las siguientes características:
La información está disponible para todos los usuarios de una aplicación Web (estado de la
aplicación) Por ejemplo, el número de usuarios conectados al servidor.
La información está disponible para un usuario particular o de una sesión específica (estado
de sesión) Por ejemplo, los registros de cuenta de un usuario particular conectado a una
aplicación Web financiera.
La información puede estar disponible para todos o para un usuario particular con ayuda de
bases de datos que preservan el estado de sesión en cualquiera de los casos.
La administración del estado del lado del cliente se presenta a nivel de cookies, propiedades de
ViewState o Cadenas de consultas. Tiene las siguientes características:
En el caso de las cookies, éstas son archivos de texto que almacenan información en la
máquina del cliente para mantener el estado de dicha información. Por ejemplo, puede
mantener el nombre del usuario que se conecta a un determinado sitio Web.
En el caso del ViewState, se permite mantener un diccionario con información del estado
permitiendo guardar y restaurar el estado de vista de un control de servidor en las diferentes
solicitudes de una página. La propiedad ViewState se mantiene como un campo oculto en la
página.
Una cadena de consulta es aquel que se agrega al final de la dirección Web del sitio que
accesamos. Por ejemplo, podríamos tener el caso de que estamos utilizando el sitio Web
www.Acme.com y determinado momento pasamos de una página
www.acme.com/agencias.aspx a www.acme.com/distribuidores.aspx podría que en ésta
última se arrastre un determinado valor tal como:
www.acme.com/distribuidores.aspx?sucursal=”La Lima” Observe que en esta ruta la cadena
de consulta se inicia con un signo de interrogación e incluye un atributo (sucursal) y un valor
(La Lima)
Autoevaluación
1. Explique cómo funciona la administración con o sin estado de las sesiones en un sitio Web
ASP .NET.
2. Cite y explique las tres características básicas de la administración del estado de sesión del
lado del servidor.
3. Cite las tres características básicas de la administración del estado del lado del cliente. ¿A
qué tipo de nivel se presenta (cookies, cadenas de consultas, etc.)?
Caso de Aplicación
Se somete a consideración el desarrollo de un sitio Web de una clínica dental que utilice tanto
variables de aplicación, como de sesión y cookies. Algunas condiciones son las siguientes:
Existen dos objetos que permiten la gestión de datos en ADO .NET: Dataset y DataReader.
Los Dataset permiten almacenar varias tablas (DataTables) extraídas desde una fuente de datos.
El Dataset es como una base de datos virtual que se carga en la memoria, siendo como una copia fiel
de la que radica en el servidor. Las relaciones de integridad referencial y reglas de validación se
conservan en el Dataset.
Los objetos Datareader se utilizan para leer datos desde una fuente, cargarlos en memoria y
desconectarse de la fuente cuando ya los cargó. Proporcionan acceso solo hacia adelante (forward-
only) y son de solo lectura (read-only).
Si se requiere escritura y lectura hacia y desde una fuente de datos (los Datareader son solo
de lectura)
Si se requiere combinar tablas de una o más bases de datos. Los Datareader lo hacen de
una sola base de datos a través de una instrucción SQL.
Si se requiere que un formulario Web se enlacen los datos a más de un control. Los
Datareader lo hacen a un único control.
Si requerimos que los datos permanezcan desconectados. Los Datareader mantienen
conexión a la base de datos.
Si se requiere realizar búsquedas en cualquier sentido en una colección de datos (hacia
adelante y hacia atrás de los registros) El Datareader solo realiza búsquedas hacia adelante.
Si se requiere una consulta muy rápida se utiliza el Datareader. El Dataset es mucho más
lento que un objeto Datareader para realizar una consulta. El Dataset almacena los datos en
un objeto del servidor Web.
Utilización de Dataset
Un objeto DataSet constituye una copia local en memoria de una base de datos, la cual proviene de
una fuente de datos. Utilizar un objeto DataSet en un formulario Web significa que éste posee una
semi independencia de la fuente de datos que representa. Se utiliza conjuntamente con un objeto
DataAdapter (Adaptador de Datos) el cual permite establecer la conexión y ejecutar la consulta a la
base de datos fuente. Mediante este objeto se puede conectar y desconectar de la base de datos en
cualquier momento y luego sincronizar los mismos. El framework de Visual Studio .NET incluye un
adaptador de datos para bases de datos nativas SQL Server denominado SqlDataAdapter y otro para
otros origenes de datos que se denomina OleDBAdapter
El objeto DataSet puede cargar datos de una base de datos pero también un archivo XML (recuerda
como cargamos los datos de estudiantes en el tema 5) El objeto DataAdapter es el que permite
rellenar de datos el DataSet cuando existe una conexión a una base de datos. Esto lo hace mediante
la ejecución de una consulta o el llamado a un procedimiento almacenado y estableciendo una
conexión a la base de datos.
En la primera línea de arriba se define la cadena de conexión a la base de datos SQL Server (más
adelante en este mismo tema desarrollamos el mismo) La segunda línea invocamos al adaptador de
datos SQLClient (Cliente SQL) le enviamos una consulta (todos los estudiantes) de una tabla
denominada estudiantes y además le pasamos como parámetro la cadena de conexión.
Existen otras funcionalides importantes de conocer con el DataAdapter. Por ejemplo, las acciones
que se puedan ejecutar sobre los datos que referencia el DataAdapter. Las propiedades del
DataAdapter que permiten estos son:
'Se configura el objeto Command (cmd) con los parámetros requeridos por el procedimiento
cmd.Parameters.Add("@mCarnetID", SqlDbType.NChar, 15, "CarnetID")
cmd.Parameters.Add("@mNombre", SqlDbType.NVarChar, 50, "Nombre")
da.InsertCommand = cmd
'Llena el DataSet con datos.
da.Fill(dst)
Se puede utilizar un objeto DataTables para poblar un objeto DataSet. El siguiente ejemplo muestra
su utilización:
Dim strConn As String ="data source=localhost; initial catalog=Universidad;integrated security=true"
Dim Da As New SqlClient.SqlDataAdapter("Select *From Estudiantes", strConn)
Dim ds as New DataSet()
Dim Str As String
Dim X,Y As Integer
'Se rellena el DataSet ds y se especifica el DataTable Estudiantes.
Da.Fill(ds, "Estudiantes")
'Se obtienen el número de filas y columnas del objeto DataTable.
X = ds.Tables("Estudiantes").Rows.Count
Y = ds.Tables("Estudiantes").Columns.Count
'Se declara una variable de tipo DataRow para recorrer cada fila del DataTable Estudiantes.
Dim r As DataRow
For Each r In Ds.Tables("Estudiantes").Rows
Str &= r("Carnet")
Str &= r("Nombre")
Next
Se puede observar en el código anterior como se llena el DataSet (ds) por parte del DataAdapter (da)
mediante el método Fill, creando un DataTable denominado "Estudiantes" Posteriormente se lee este
DataTable y se almacena su contenido en una variable de tipo String denominada Str.
Para mostrar datos de un DataSet podemos utilizar un DataGrid o un objeto DataView. En el caso de
un DataGrid podemos utilizar el siguiente código:
DataGrid1.DataSource = ds.Tables("Estudiantes").DefaultView
DataGrid1.DataBind()
Un DataGrid es un objeto que se compone de filas y columnas que se parecen a una matríz de datos.
Un DataView es una vista personalizada y enlazable de un único objeto DataTable, en el cual el
usuario puede clasificar, filtrar, buscar, editar y navegar por los datos. El objeto DataGrid también
puede ser configurado para realice la misma función.
Cada objeto DataTable posee una propiedad DefaultView que devuelve la vista predeterminada de la
tabla. El siguiente ejemplo muestra lo anterior:
'Se declara una variable de tipo DataView y se carga con el DataTable Estudiantes
Dim dv As DataView = ds.Tables("Estudiantes").DefaultView
'Se crea un filtro de la vista del DataView. En este caso es por el campo provincia Guanacaste
dv.RowFilter = "Provincia = 'Guanacaste'"
'Una vez filtrado el DataView se procede a ordenar el mismo por el campo Nombre
dv.Sort = "Nombre"
Hemos trabajado hasta aquí la conectividad de datos SQL a través de DataSet y DataTables. A
continuación desarrollaremos el tema de conectividad a través de un DataReader.
Utilización de DataReader
Ya determinamos como utilizar un objeto DataSet para la conectividad de datos con ADO .NET y
como este objeto proporciona una copia desconectada de la base de datos. También determinamos
que la mejor opción para gestionar datos de larga duración en una aplicación Web era mediante
DataSet. Sin embargo, muchos veces solo requerimos realizar pequeñas operaciones de datos como
por ejemplo autenticarse en un sitio Web donde solo utilizamos los datos de usuario y la contraseña.
En este caso, es mejor utilizar un DataReader.
Existen casos en que necesitamos acceder una gran cantidad de registros de una base de datos.
Supongamos que requerimos leer unos 5000 registros de una base de datos y los almacenamos en
un objeto DataTable. Se requerirá memoria para que el DataTable almacene esa cantidad de
registros. Si se conectan 100 usuarios y realizan la misma consulta se requerirá la cantidad de
memoria requerida por los 5000 registros para los 100 usuarios conectados ¡Esto es un factor crítico
de uso de memoria! En este tipo de situaciones el objeto DataReader, el cual está diseñado para
generar un flujo de solo lectura (Read Only) y solo hacia delante (Forward Only) Por tanto, solo se
almacena 1 registro en memoria cada vez en el servidor.
ADO .NET incluye dos tipos de objetos DataReader: sqlDataReader y OleDbDataReader. El primero
es proveedor de datos exclusivamente para la gestión de datos en SQL Server y el segundo para
cualquier otro proveedor de datos. Los objetos SqlCommand y OleDbCommand, conjuntamente con
el método ExecuteReader sirven para transferir datos a un objeto DataReader.
1. Crear una conexión a la fuente de datos con el objeto requerido. Para una base de datos
SQL Server sería un objeto SQLConnection y para otras OleDbConnection.
2. Abrir la conexión a la fuente de datos.
3. Crear un objeto Command en lugar del DataAdapter.
4. Crear un objeto DataReader desde el objeto Command.
5. Invocar al objeto ExecuteReader
6. Utilizar el objeto DataReader
7. Cerrar el objeto DataReader
8. Cerrar la conexión a la fuente de datos
Se puede utilizar el controlador de excepciones Try … Catch … Finally como aglutinador de los pasos
anteriores.
A continuación se presenta un trozo de código como ejemplo de manejo del objeto DataReader:
En el ejemplo anterior tenemos un DataReader que mediante un objeto Command se ejecuta y carga
los datos programáticamente en controles TextBox. A continuación te presento el código ejemplo
para vincular un objeto DataReader a un objeto lista.
En el código anterior se vinculan los datos de un DataReader a un objeto ListBox y le almacena los
valores contenidos en uno de sus atributos (el nombre del estudiante)
Para conectarse a un servidor SQL Server, utilizando el modo mixto, se puede utilizar la siguiente
cadena de conexión:
La autenticación en modo Windows utiliza una sola cuenta denominada ASPNET para todos los
accesos a SQL Server desde la aplicación WEB y elimina el problema de transmitir los nombres y
contraseñas de usuario no encriptados. Asimismo, se dispensa de la necesidad de mantener cuentas
de usuario tanto en los servidores Windows como en el servidor de SQL Server. En resumen, cuando
los usuarios acceden a un formulario Web lo hacen como usuarios anónimos ASPNET.
Para conectarse a un servidor SQL Server, utilizando el modo Windows, se puede utilizar la siguiente
cadena de conexión:
Alternativa 1:
1. Pulse sobre el botón de Inicio de Windows y pulse sobre la opción Administrar de Mi PC.
2. En la consola Administración de equipos expanda la carpeta Servicios y Aplicaciones y la
carpeta Servidores Microsoft SQL Server.
3. Pulse con el botón derecho del mouse en el servidor SQL Server (local) y pulse sobre
Propiedades.
4. En el cuadro de propiedades que aparece Propiedades de SQL Server, en la ficha Seguridad,
haga click sobre el botón de opción SQL Server y Windows o la opción solo Windows de la
sección autenticación. Pulse el botón Aceptar.
Alternativa 2:
1. Pulse sobre el botón de Inicio de Windows y pulse sobre la opción Todos los programas,
Microsoft SQL Server 2005, SQL Server Management Studio.
2. Autentíquese mediante el usuario de Windows.
3. Una vez en el motor de la base de datos pulse con el botón derecho del mouse sobre el
nombre del servidor y seleccione Propiedades.
4. En la opción Seguridad escoja el tipo de autenticación que va a utilizar.
1. Pulse sobre el botón de Inicio de Windows y pulse sobre la opción Todos los programas,
Microsoft SQL Server 2005, SQL Server Management Studio.
2. Autentíquese mediante el usuario de Windows y Pulse Conectar. Observe la ilustración 43.
Ilustración 43
3. Una vez en el motor de la base de datos pulse con el botón derecho del mouse sobre el
nombre del servidor y seleccione Bases de Datos y seleccione Nueva base de datos...
4. Nombre la base de datos como dbUniversidad y cree el esquema de bases de datos (tablas y
relaciones) La ilustración 44 muestra dicho esquema, con los campos, tipos y longitudes, así
como las relaciones entre tablas. Cuando hayas terminado de crear el diagrama de la base
de datos nómbrala como dgUniversidad.
Ilustración 44
5. Cierra el diseñador de diagrama y ubicando la tabla tbEstudiantes pulsa con el botón derecho
del mouse y selecciona Abrir tabla … e incluye el registro Carnet = 123, Nombre = Enrique
Apellido1 = Gómez Apellido2 = Jiménez, Direccion= La Cruz, Guanacaste, Telefono=
8885083, Clave=123.
6. Puedes cerrar el servidor de bases de SQL Server o minimizarlo por cuanto la próxima tarea a
realizar es crear el Website que utilizará esa base de datos.
¿Qué es Web.Config?
¿Qué es System.ConfigurationManager?
Ahora vamos a crear nuestro sitio webUniversidad. Para ello sigue el siguiente procedimiento:
1. Pulse sobre el botón de Inicio de Windows y pulse sobre la opción Todos los programas,
Microsoft Visual Studio 2008, Microsoft Visual Studio 2008.
2. Cree un nuevo sitio Web denominado webUniversidad. Recuerde que debe ser de tipo HTTP.
3. Una vez creado debemos pulsar sobre el archivo web.config que crea automáticamente el
sitio Web. Si no lo hace debemos agregarlo al proyecto. Para ello pulse con el botón derecho
del mouse sobre el nombre del proyecto (http://localhost/webUniversidad) y Agregar nuevo
elemento… y seleccione web.config en la lista de objetos que se presentan.
4. Pulse sobre el archivo web.config y observe el código que aparece ¡XML! En este archivo
vamos a configurar la sección de connectionString, para establecer una cadena de conexión
que posteriormente vamos a obtener mediante ConfigurationManager. Mejor ciérralo ¡lo
configuraremos utilizando un atajo!
5. Bueno, vamos a incluir la sección connectionString en el web.config. Para ello, estando en el
formulario Web arrastra de la barra de controles el objeto sqlDataSource
al formulario Web
6. Una vez arrastrado el control observa que en la esquina superior derecha se ubica una
pequeña punta de flecha. Si pulsa con el puntero del mouse sobre esta punta de flecha
aparecerá la opción configurar origen de datos.
7. En la ventana que aparece (Elegir la conexión de datos) pulse la opción Nueva Conexión… y
luego en la ventana Elegir origen de datos pulse la opción Microsoft SQL Server y el botón
Continuar.
8. En la ventana Agregar conexión seleccione el nombre del servidor. Póngale (local) Habilite la
opción Utilizar Autenticación Windows y en Seleccionar o escribir nombre de bases de datos
seleccione la base de datos dbUniversidad. Pulse el botón Siguiente.
9. En la pantalla siguiente Guardar la cadena de conexión en el archivo de configuración de la
aplicación habilite la caja de verificación que aparece sobre el nombre por defecto, pero
cámbiele este nombre por connUniversidad.
10. En la siguiente ventana Configurar la instrucción select escoja la tabla tbEstudiantes y pulse
sobre el asterisco que aparece de primero en la descripción de las columnas de la tabla.
Pulse a continuación el botón Siguiente.
11. En la siguiente ventana pulse el botón Finalizar.
12. Elimine el objeto SqlDataSource (paso 5) porque ya no lo necesitará.
13. Pulse sobre el archivo web.config y observe la nueva sección que agrego en el archivo. Es
como sigue:
<connectionStrings>
<add name="connUniversidad" connectionString="Data Source=(local);Initial _
Catalog=dbUniversidad;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
14. Con ello ya configuramos el web.config de la aplicación Web que vamos a construir.
15. Ya ha creado el sitio Web webUniversidad. Ha configurado el web.config del sitio y por
defecto se ha creado el primer formulario Web del mismo. Se le ha denominado, por
defecto, default.aspx. Pulse con el botón derecho del mouse sobre este formulario Web y
seleccione la opción Cambiar nombre y póngale webLogin.
16. Antes de programar el formulario Web webLogin vamos a crear otro formulario Web. La idea
es que el primer formulario validará al usuario que desea ingresar a la aplicación Web. Si
está registrado en la base de datos podrá ingresar al sitio, de lo contrario se le desplegará un
mensaje de error. Para crearlo pulse con el botón derecho del mouse sobre el nombre del
proyecto y seleccione Agregar nuevo elemento… y escoja un nuevo Web Form. El nombre
que le debe dar a este formulario es webMenu.
17. Una vez creado el formulario Web webMenu ubíquese en el formulario webLogin y arrastre
hasta el formulario un componente Login. Puede seleccionarlo pulsar la opción Diseño y
Posición y ubicarlo en el centro del formulario Web. Asimismo, pulse sobre la punta de
flecha del control Login y seleccione la opción formato automático. De las opciones que
ofrece escoja elegante.
18. Una vez configurado el control, nuestro primer formulario Web será similar al mostrado en la
ilustración 45.
Ilustración 45
19. Una vez que establecimos este control en nuestro sitio Web procedamos a programarlo.
Para ello pulsa sobre el control Login y escribe el siguiente código:
20. Ejecutemos el sitio Web y cuando se habilite el formulario Web webLogin escribamos en el
usuario un nombre y contraseña cualquiera. Veamos que pasa. Probablemente te muestre
el error de “Usuario o contraseña inválida” Ahora prueba con usuario=123 y
contraseña=123. Ahora podrás notar que se accedió a la página WebMenu.
21. En el formulario webMenu, agregue el siguiente código:
22. En el formulario Web webMenu proceda a colocar los objetos que se le indican en la
siguiente tabla:
24. Pudimos utilizar un control menú para crear las opciones en lugar de los botones de imagen,
pero se consideró un poco menos modesto el crearlo con estos botones.
25. Una vez creado el formulario principal (webMenu) vamos a crear tres formularios más para
terminar nuestro sitio: webEstudiantes, webCursos, webEvaluaciones y webConsultas. Para el
caso del formulario webConsultas elaboraremos dos formularios más denominados
webConsultaPorMateria y webConsultaGeneral.
26. En cada imageButton debe colocar la instrucción para que ejecute cada formulario. La
instrucción es: response.redirect(“nombreformulario.aspx”) Por ejemplo, en el caso del
imageButton de Mantenimiento de estudiante debe colocarse la instrucción
response.redirect(“webEstudiantes.aspx”) En el caso de los Hyperlink debe pulsar con el
botón derecho del mouse sobre cada uno de ellos y configurar la propiedad NavigateURL
pulsar sobre el botón que aparece a un lado de la descripción y seleccionar el formulario
respectivo. En el caso del hyperlink debajo del imageButton Mantenimiento de Estudiantes
debe seleccionarse el formulario Web webEstudiantes en este hipervínculo.
27. Una vez creados los formularios Web anteriormente indicados, procederemos a programar
cada formulario por separado. Estos son los procedimientos para cada uno de ellos:
Ilustración 47
Observa que los botones Agregar, Modificar y Eliminar tienen la propiedad Enabled en False.
Es decir, están inicialmente inhabilitados. Lo mismo debes hacer con el imageButton
imgBtnCancelar.
3. Una vez que has terminado de diseñar el formulario para el mantenimiento de estudiantes,
programa en el botón imgBtnBuscar el siguiente código:
4. En el imgBtnCancelar el código:
btnAgregar.Enabled = False
btnModificar.Enabled = False
btnEliminar.Enabled = False
TextBox1.Enabled = True
LimpiarCajas()
imgBtnCancelar.Enabled = False
Sub LimpiarCajas()
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
TextBox1.Focus()
End Sub
8. Pruebe el formulario Web con toda su funcionalidad. Tendremos que realizarle algunas
correcciones de estilo, o quizás de programación, pero eso se lo dejo de tarea.
Ilustración 48
CargarEstudiantes()
Sub CargarEstudiantes()
Try
Dim strConn = ConfigurationManager.ConnectionStrings("connUniversidad").ConnectionString
Dim objConn As New Data.SqlClient.SqlConnection(strConn)
Dim SQL = "Select CarnetID As Carnet, Nombre, Apellido1, Apellido2, Direccion, Telefono _
From tbEstudiantes"
Dim da As New Data.SqlClient.SqlDataAdapter(SQL, objConn)
Dim ds As New Data.DataSet()
da.Fill(ds, "Estudiantes")
Dim X = ds.Tables("Estudiantes").Rows.Count
DataGrid1.DataSource = ds.Tables("Estudiantes").DefaultView
DataGrid1.DataBind()
Label1.Text = "Numero de Estudiantes Registrados " & X
Catch ex As Exception
Response.Write(ex.Message)
End Try
End Sub
Response.Redirect("webMenu.aspx")
Hasta aquí hemos programado dos páginas Web de datos utilizando el DataReader y el DataSet. El
tema siguiente trata la misma situación pero utilizando servicios Web.
Autoevaluación
1. Cite y explique los dos tipos de objetos de ADO .NET que permiten la gestión de datos en
ASP .NET.
2. Cite y explique tres casos de cada uno en que se puede utilizar un DataSet para la gestión de
datos en una aplicación ASP .NET.
3. Explique la funcionalidad de un objeto DataSet.
4. Explique la funcionalidad de un objeto DataReader.
5. Defina la funcionalidad de un DataAdapter y las propiedades que le permiten la gestión de
datos en sitios Web ASP .NET.
6. Cite y explique las propiedades de un DataReader en una aplicación ASP .NET.
7. Enumere los pasos requeridos para la utilización de un objeto DataReader.
8. Cite y explique los dos modos de autenticación en SQL Server. ¿Cómo funciona cada modo?
9. Defina que es Web.Config y para que se utiliza en una aplicación Web ASP .NET.
10. Defina y explique la funcionalidad del System.ConfigurationManager en una aplicación Web
ASP .NET.
Casos de Aplicación
1. Considere continuar el desarrollo del sitio Web de la Clínica Dental, agregando la
funcionalidad de una base de datos.
2. Considere el diseño y desarrollo de un sitio Web denominado Oficina Virtual de un banco
determinado. Entre las condiciones básicas se tienen:
a. Una pantalla de logín para la autenticación del usuario. Debe validarse a nivel de
cliente que la longitud de la contraseña sea mayor o igual a 8 caracteres e inferior a
12. Además debe iniciar y terminar con una letra mayúscula y entre ellas debe
haber al menos 4 dígitos.
b. Debe crearse un perfil para administradores del sitio, quienes incluirán los datos de
cuenta del cliente, recibos pendientes de pago (agua, luz, teléfono, etc), los ingresos
(cheques y depósitos, notas de crédito o débito) y préstamos.
c. Un formulario Web para la cancelación de pagos por servicios como agua,
electricidad, teléfono, televisión por cable, etc.
d. Un formulario Web para la cancelación de préstamos (sean del cliente o de otro
cliente) El monto a cancelar (sea la cuota o el préstamo total) debe ser menor o
igual al contenido económico de la cuenta a devengar.
e. Un formulario Web para transferencia de fondos entre cuentas (no de una misma
cuenta) Se permite la transferencia de debe ser de una cuenta del cliente a cualquier
otra cuenta del banco. NO podrá superarse el monto de la cuenta origen.
f. Un formulario para cambio de contraseñas.
g. Un formulario para atención de consultas.
TEMA 9: Procedimientos almacenados SQL
Los procedimientos almacenados constituyen una forma de escribir código en una base de datos con
el fin de que realice una determinada operación. Generalmente se escriben en un lenguaje de bases
de datos propietarios como PL/SQL para Oracle o PL/PgSQL para PostgreSQL. La ventaja de un
procedimiento almacenado es que al ejecutarse, ante una solicitud de usuario, lo hace directamente
en el motor de la base de datos, por lo que su rendimiento es mayor. El procedimiento almacenado
se encuentra precompilado en la base de datos.
"programa (o procedimiento) que se almacena físicamente en una base de datos que realiza
alguna operación sobre ella”
Un procedimiento almacenado contiene código SQL que puede, entre otras cosas, seleccionar una
colección de registros, insertarlos, actualizarlos o eliminarlos. También pueden alterar la estructura
de una base de datos, cambiando sus columnas, insertándolas, eliminándolas o actualizándolas.
Los procedimientos almacenados son ventajosos en el sentido que se puede incluir la lógica de una
aplicación directamente en la base de datos.
Creación de Procedimientos Almacenados.
Según la necesidad podemos crear procedimientos almacenados para seleccionar, agregar, actualizar
o eliminar registros en una base de datos. Nos interesan estas operaciones aunque existen otras que
se pueden realizar sobre la base de datos.
En el caso anterior el nombre del procedimiento es obligatorio necesitamos saber como se llama el
procedimiento! Asimismo, los parámetros son opcionales pero la sentencia SQL es obligatoria.
A continuación crearemos unos ejemplos que servirán también para utilizarlos en nuestro sitio Web.
1. Pulse sobre el botón de Inicio de Windows y pulse sobre la opción Todos los programas,
Microsoft SQL Server 2005, SQL Server Management Studio.
2. Autentíquese mediante el usuario de Windows y Pulse Conectar. Observe la ilustración 43.
3. Expanda la carpeta nombrada Bases de Datos y ubique la base de datos dbUniversidad.
Expándala y busque las carpetas Programación y Procedimientos almacenados.
4. Pulse con el botón derecho del mouse sobre la carpeta Procedimientos almacenados y seleccione
la opción Nuevo procedimiento almacenado. En el editor borre lo que aparece y escriba el
siguiente código:
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Enrique Gomez Jimenez
-- Create date: Abril 22, 2008
-- Description: Permite buscar un estudiante
-- =============================================
CREATE PROCEDURE ValidarUsuario @prmCarnetID char(10),
@prmClave char(10)
AS SELECT *FROM tbEstudiantes
Where tbEstudiantes.CarnetID = @prmCarnetId
AND tbEstudiantes.Clave = @prmClave
GO
5. Ubique el botón Ejecutar, el cual aparece ligeramente arriba del editor de procedimientos y
púlselo. Cierre el editor de código.
6. Ahora crearemos cuatro procedimientos almacenados más, a saber:
Un procedimiento para insertar los datos de estudiantes: IncluirEstudiante.
Un procedimiento para modificar datos de un estudiante: EditarEstudiante.
Un procedimiento para eliminar los datos de un estudiante: BorrarEstudiante.
Un procedimiento para listar las notas de un determinado estudiante: MostrarNotas.
7. El código para el procedimiento IncluirEstudiante es:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: Enrique Gomez Jimenez
-- Create date: Abril 22, 2008
-- Description: Permite agregar un estudiante
-- =============================================
Create PROCEDURE IncluirEstudiante(@pCarnetID char(10),
@pNombre varchar(100), @pApellido1 varchar(50), @pApellido2 varchar(50),
@pDireccion varchar(200), @pTelefono char(15))
AS
Insert Into tbEstudiantes(CarnetId,Nombre,Apellido1,Apellido2,Direccion,Telefono)
Values(@pCarnetID,@pNombre,@pApellido1,@pApellido2,@pDireccion, @pTelefono)
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: Enrique Gomez Jimenez
-- Create date: Abril 22, 2008
-- Description: Permite modificar un estudiante
-- =============================================
Create PROCEDURE EditarEstudiante(@pCarnetID char(10),
@pNombre varchar(100), @pApellido1 varchar(50), @pApellido2 varchar(50),
@pDireccion varchar(200), @pTelefono char(15))
AS
Update tbEstudiantes set nombre=@pNombre, Apellido1=@pApellido1,
Apellido2 = @pApellido2, Direccion = @pDireccion, Telefono = @pTelefono
Where CarnetId = @pCarnetID
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: Enrique Gomez Jimenez
-- Create date: Abril 22, 2008
-- Description: Permite Eliminar un estudiante
-- =============================================
Create PROCEDURE BorrarEstudiante(@pCarnetID char(10))
AS
Delete From tbEstudiantes Where CarnetId = @pCarnetID
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: Enrique Gomez Jimenez
-- Create date: Abril 22, 2008
-- Description: Permite modificar un estudiante
-- =============================================
11. Con esto ya hemos programado los procedimientos básicos de nuestro sitio Web.
Existen también funciones definidas por el usuario, la cual es una rutina que encapsula lógica útil
para utilizar en otras consultas. Las vistas, por ejemplo, las cuales están limitadas a una sola
instrucción SELECT pueden ser sustituidas por funciones, las cuales si pueden tener varias
instrucciones SELECT. Estas funciones de usuario devuelven un determinado valor, pudiendo ser
también un conjunto de datos.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =====================================================
-- Author: Enrique Gómez Jiménez
-- Create date: 14/04/08
-- Description: Crear una función que devuelva una tabla
-- de notas segun carnet del estudiante.
-- =====================================================
CREATE FUNCTION fn_Notas
( @Carnet char(10) )
RETURNS table
AS
RETURN (
SELECT tbCursosEstudiante.CarnetId, tbEstudiantes.Nombre, tbEstudiantes.Apellido1,
tbEstudiantes.Apellido2,
tbCursosEstudiante.CursoID, tbCursos.Nombre AS [Nombre Curso], tbCursos.Creditos,
tbCursosEstudiante.Nota_Obtenida As Promedio
FROM tbCursos INNER JOIN
tbCursosEstudiante ON tbCursos.CursoID = tbCursosEstudiante.CursoID INNER JOIN
tbEstudiantes ON tbCursosEstudiante.CarnetId = tbEstudiantes.CarnetId AND
tbCursosEstudiante.CarnetId = tbEstudiantes.CarnetId
WHERE tbCursosEstudiante.CarnetId = @Carnet
)
Autoevaluación
1. Defina que es un Procedimiento Almacenado.
2. Enumere y explique los tres tipos de procedimientos almacenados existentes.
3. Explique cuáles usos se les puede dar a un procedimiento almacenado.
4. ¿Cuál es la ventaja de utilizar procedimientos almacenados en la lógica de datos de una
aplicación (puede ser a través de Web Services) Web ASP .NET?
5. Explique para qué son útiles las funciones en SQL.
Casos de Aplicación
1. Cree un procedimiento almacenado que obtenga las notas, con su nombre de curso
respectivo, de un estudiante determinado.
2. Cree un procedimiento almacenado que obtenga los cursos matriculados y los respectivos
nombres de estudiantes.
3. Cree una función que resuelva la misma solicitud del punto anterior.
TEMA 10: Procedimientos almacenados y
Web Services
En el tema anterior incluimos algunos procedimientos en la base de datos. En este tema vamos a
utilizar esos procedimientos almacenados, invocándolos desde Servicios Web.
1. Pulse sobre el botón de Inicio de Windows y pulse sobre la opción Todos los programas,
Microsoft Visual Studio 2008, Microsoft Visual Studio 2008.
2. Pulse Archivo y Nuevo sitio Web. Cuando se muestre la pantalla de los diferentes proyectos
que se pueden crear en Visual Studio .NET seleccione Servicio Web ASP .NET Nómbrelo
como wsGestionDatos.
3. Proceda a configurar el web.config de este servicio Web, agregando el siguiente código
(recuerde la lección de configurar el web.config) y sálvelo.
<connectionStrings>
<add name="connUniversidad" connectionString="Data Source=(local);Initial _
Catalog=dbUniversidad;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Data.SqlClient
<WebService(Namespace:="http://miUniversidad.ac.cr/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class Service
Inherits System.Web.Services.WebService
Dim strConn = ConfigurationManager.ConnectionStrings("connUniversidad").ConnectionString
Public objConn As New Data.SqlClient.SqlConnection(strConn)
End Try
End Sub
cmdParametrizado.ExecuteNonQuery()
AbrirCerrarConexion()
Return True
Catch ex As Exception
Return False
End Try
End Function
cmdParametrizado.ExecuteNonQuery()
AbrirCerrarConexion()
Return True
Catch ex As Exception
Return False
End Try
End Function
5. El código anterior nos servirá como clase genérica con la funcionalidad para utilizar los
procedimientos almacenados en la base de datos que creamos y otros métodos que reciben
una cadena SQL y devuelven o no un conjunto de registros.
6. Podemos probar nuestro servicio Web pulsando las teclas CTRL+F5. La pantalla mostrada es
similar a la ilustración 49.
Ilustración 49
7. En el caso de querer realizar la prueba de alguno de los métodos basta con pulsar sobre
cualquiera de ellos. Por ejemplo, podemos probar el método ActualizarEstudiante.
Inmediatamente se desplegará una pantalla donde podemos incluir los datos de Inserción o
de Modificación, los cuales utilizan un mismo método. La pantalla que se muestra es similar
a la ilustración 50.
Ilustración 50
8. Observe que el campo TipoActualiza no es parte de la tabla tbEstudiantes, sino más bien una
variable que me permite indicar si la operación es una actualización (se coloca un 1) o una
inserción (se coloca un 2) En este caso, cuando pulsamos sobre el botón Invocar
ejecutamos el método del servicio Web. Una vez ejecutado (y con resultados positivos) nos
muestra un mensaje como el siguiente:
9. Observe que nos devuelve un valor true lo que indica que la función se realizó exitosamente,
de lo contrario nos devolvería false.
10. Ya probado el servicio Web y convencidos de que funciona, vamos a generarlo como un
archivo DLL que se pondrá a disposición de los desarrolladores para que lo utilicen. En este
caso ubiquemos en el menú la opción Generar y seleccionamos Generar sitio web.
11. Ya hemos generado nuestro Servicio Web.
1. Proceda a crear la referencia Web al servicio Web creado. Recuerde lo visto en el tema 4 al
respecto (como crear una referencia a un servicio Web)
2. En el nombre del Servicio Web escriba wsGestionDatos.
3. Vamos a ubicar el formulario Web webConsultaEstudiantesGeneral.aspx y vamos a colocar
un nuevo botón de comando llamado btnPruebaWS que pueda invocar al servicio Web. El
titulo del botón será Probar WebService. En ese botón debemos escribir el siguiente código:
4. En este formulario en el evento Load estaba el llamado a un método local para cargar los
datos de estudiante. Debes inhabilitarlo anteponiendo una comilla simple (como comentario)
para que se utilice solo el código del botón btnPruebaWS.
5. Ejecuta este formulario Web y observa como el resultado es el mismo que utilizando el
código en la misma página a diferencia que ahora lo hace invocando el servicio Web.
6. Ubíquese en el formulario webCursos. Para ello debe colocar los objetos que se le indican en
la siguiente tabla:
8. El código que contendría este formulario Web en la parte de declaraciones generales sería el
siguiente:
9. En el método LimpiarCajas:
Sub LimpiarCajas()
TextBox2.Text = ""
TextBox3.Text = ""
btnAgregar.Enabled = False
btnModificar.Enabled = False
btnEliminar.Enabled = False
imgBtnCancelar.Enabled = False
TextBox1.Enabled = True
TextBox1.Text = ""
TextBox1.Focus()
End Sub
Sub Procesar()
Try
aux.AbrirCerrarConexion()
aux.ActualizarDatos(SQL)
aux.AbrirCerrarConexion()
Catch ex As Exception
Response.Write(ex.Message)
End Try
LimpiarCajas()
End Sub
15. Vamos a crear un nuevo formulario Web denominado webConsultaCursos. La tabla siguiente
muestra los objetos que debes incluir en éste:
Ilustración 52
Dim r As Data.DataRow
Dim dst2 As New Data.DataSet
Dim dt As New Data.DataTable
dt.Columns.Add(New Data.DataColumn("Carnet", GetType(String)))
dt.Columns.Add(New Data.DataColumn("Nombre del Curso", GetType(String)))
dt.Columns.Add(New Data.DataColumn("Creditos", GetType(String)))
dt.Columns.Add(New Data.DataColumn("Promedio", GetType(Integer)))
For Each r In dst.Tables("Estudiantes").Rows
Dim dr As Data.DataRow
dr = dt.NewRow
dr("Carnet") = r.Item("CursoID")
dr("Nombre del Curso") = r.Item("NombreCurso")
dr("Creditos") = r.Item("Creditos")
dr("Promedio") = r.Item("Promedio")
dt.Rows.Add(dr)
Next
dst2.Tables.Add(dt)
DataGrid1.DataSource = dst2.Tables(0)
DataGrid1.DataBind()
If objConn.State = Data.ConnectionState.Open Then objConn.Close()
Catch ex As Exception
Response.Write(ex.Message)
End Try
End Sub
18. Ahora probemos nuestro formulario Web. Pulsa CTRL F5 y lo que debe mostrarse, tras digitar
un carnet válido y pulsar el botón de consultar, es similar a la ilustración 53.
Ilustración 53
Con este formulario Web cumplimos con diseñar una consulta de notas por estudiante. Como te
darás cuenta dichas notas fueron incluidas directamente en la tabla tbCursosEstudiante, por lo que a
continuación diseñaremos el formulario de inclusión de notas. Lo llamaremos webEvaluaciones.
Iniciemos su diseño:
If Opcion = 1 Then
dt.Columns.Add(New Data.DataColumn("Codigo Curso", GetType(String)))
dt.Columns.Add(New Data.DataColumn("Nombre del Curso", GetType(String)))
dt.Columns.Add(New Data.DataColumn("Creditos", GetType(String)))
Else
dt.Columns.Add(New Data.DataColumn("Carnet", GetType(String)))
dt.Columns.Add(New Data.DataColumn("Nombre del Estudiante", GetType(String)))
End If
En el botón imgVerEstudiantes:
dgCursos.Visible = False
dgEstudiantes.Visible = True
En el botón imgVerCursos:
dgCursos.Visible = True
dgEstudiantes.Visible = False
En el DataGrid1 (dgEstudiantes)
Dim x% = dgEstudiantes.SelectedIndex
TextBox1.Text = dgEstudiantes.Items(x).Cells(1).Text
lblNombreEstudiante.Text = dgEstudiantes.Items(x).Cells(2).Text
En el DataGrid (dgCursos)
Dim x% = dgCursos.SelectedIndex
lblCodigoCurso.Text = dgCursos.Items(x).Cells(1).Text
lblNombreCurso.Text = dgCursos.Items(x).Cells(2).Text
Dim SQL$
SQL = "Insert into tbCursosEstudiante(CarnetId,CursoID,Nota_Obtenida) Values('"
SQL = SQL & TextBox1.Text & "','" & lblCodigoCurso.Text & "'," & Val(txtNota.Text) & ")"
Try
aux.AbrirCerrarConexion()
aux.ActualizarDatos(SQL)
aux.AbrirCerrarConexion()
Catch ex As Exception
Response.Write(ex.Message)
End Try
4. Ahora prueba este formulario Web y observa la funcionalidad de la misma. Solo puedes
agregar notas de cursos por estudiante. Como tarea te dejo que implementes el modificar la
nota de un estudiante por curso y también como eliminar una nota de un curso de un
estudiante.
Finalmente, vamos a crear un formulario Web que agrupe todos los formularios Web de consulta. Lo
denominaremos webConsultas
Ilustración 55
Con este formulario Web damos por concluido nuestro sitio Web básico. Estamos conscientes
que falta mucho por hacer, muchas cosas que validar y mejorar. Con la ayuda de tu profesor o
tutor podrás hacerle cambios al sitio, modificar código, mejorar la apariencia, etc. Asimismo, con
las referencias Web y otras ayudas podrás personalmente darle valor agregado a lo que hayas
aprendido en este tema.
TEMA 11: Seguridad en aplicaciones Web
ASP .NET
El tema de la seguridad de las aplicaciones Web es bastante crítico, dado que requiere una cuidadosa
preparación y planificación del esquema que tendrá. Con ASP .NET tenemos de aliados el propio
framework de Visual Studio y IIS (Internet Information Server) Asi las cosas podemos asegurar
nuestras aplicaciones Web aplicando varias a estrategias que conoceremos a continuación.
La autenticación es el proceso mediante el cual un sitio Web acepta las credenciales de un usuario y
las verifica.
Una autorización actúa en función de las credenciales del usuario. Esto es, de acuerdo a su perfil
(que se obtiene mediante la autenticación) se conoce cuales son sus derechos de accesos a los
recursos del sitio Web.
Ventajas:
Desventajas:
La inconveniencia de este tipo de autenticación es que se basa en usuarios Windows registrados por
lo que su acceso se restringe a que si un usuario desea ingresar al sitio Web debe registrarse primero
en Windows.
1. Configurar IIS.
2. Configurar la autenticación en el web.config
3. Configurar la autorización en web.config.
4. IIS solicita información de inicio de sesión a los usuarios.
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings/>
<location path="webPrincipal.aspx">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
<system.web>
<compilation debug="true"/>
<authentication mode="Windows"/>
</system.web>
</configuration>
Si el usuario y la contraseña están registrados en Windows, entonces podrá accederse el sitio Web.
Ventajas:
Desventajas:
Se basa en cookies.
Desventajas:
Se basa en cookies.
Hay que pagar una cuota de suscripción.
La autenticación Microsoft® Passport® permite a los usuarios utilizar el mismo nombre de usuario
para varios sitios Web, facilitando que el usuario no olvide su nombre de usuario ni su contraseña
para cada uno de los sitios, dado que es uno para todos. No se requiere una base de datos para
mantener los datos del usuario, dado que es Microsoft® quien se encarga de esa labor.
Ilustración 57