Está en la página 1de 705

ndice

Soporte de versiones de software............................................................................2


Requerimientos del aula..........................................................................................2
1. Instalar y configurar bases de datos SQL Server.................................................3
2. Configurar la solucin final .................................................................................3

Desarrollo de aplicaciones Web
con Microsoft ASP.NET
utilizando Visual Studio .NET

Gua de instalacin de
las bases de datos
Soporte de las versiones de software
Las guas de instalacin manual y automatizada del aula se han desarrollado y
probado en las versiones completas del sistema operativo y de las aplicaciones
que vayan a instalarse en los equipos del aula. El soporte tcnico para la
instalacin del aula requiere que utilicemos las versiones completas del sistema
operativo y de las aplicaciones que se instalen en los equipos del aula.
Requerimientos del aula
Este curso requiere un aula con un equipo para el instructor y un equipo para
cada estudiante. Antes de iniciar la clase, instalar y configurar todos los equipos
utilizando la informacin e instrucciones de esta gua de instalacin. Todo el
hardware que se utilice debe estar incluido en la Lista de Compatibilidad de
Hardware (HCL) de Microsoft Windows XP Professional. Los niveles de
hardware actuales se encuentran en el apndice de esta gua de instalacin.
Cuando finalicemos la configuracin del aula, los equipos del instructor y de
los estudiantes deberan estar conectados a la red del aula.
Software
La siguiente tabla muestra todo el software necesario para instalar el aula para
este curso, incluyendo la versin que se ha probado con el curso y dnde puede
encontrarse el software.
Software Versin probada y notas

Microsoft Windows XP con Service Pack 1 o
superior
Professional Edition
Microsoft SQL Server

2000 Developer Edition


Visual Studio .NET CDs
Microsoft SQL Server 2000 Service Pack 2 o
superior
No aplicable
Microsoft Visual Studio .NET 2003 Enterprise Developer Edition
Macromedia Flash Player Versin 5.0
Trainer Compact Disk o
http://www.macromedia.com



1. Instalar y configurar las bases de datos SQL Server
En los laboratorios de este curso, se utilizan tres bases de datos. Las tres bases
de datos pueden restaurarse ejecutando un script SQL.
1. En el men Inicio, hacer clic en Todos los programas, clic en Microsoft
SQL Server, y clic en Enterprise Manager.
2. En la barra de herramientas, hacer clic en Herramientas, y clic en SQL
Query Analyzer.
3. En el cuadro de dilogo Conectar a SQL Server, escribir (local) en el
cuadro SQL Server, hacer clic en Iniciar SQL Server si est detenido,
hacer clic en Autenticacin Windows, y clic en Aceptar.
4. En la barra de herramientas, hacer clic en Archivo, y clic en Abrir.
5. En el cuadro de dilogo Abrir archivo de consulta, en el cuadro Nombre
de archivo, apuntar al archivo restoreDB.sql y hacer clic en Abrir. Este
archivo y los archivos de backup asociados, se pueden encontrar dentro de
la carpeta RestoreDB dentro del fichero LabSetup.zip.
6. En la barra de herramientas, hacer clic en la opcin de consulta y hacer clic
en Ejecutar.
7. Cerrar SQL Query Analyzer.
8. Cerrar SQL Server Enterprise Manager.


2. Configurar la solucin final
Crear la solucin de laboratorio de Visual Studio .NET
1. Utilizando Visual Studio .NET, crear una nueva solucin en blanco
denominada LabApplication:
a. En el men Archivo, hacer clic en Nuevo y clic en Solucin en blanco.
b. En el cuadro de dilogo Nuevo proyecto, introducir LabApplication en
el cuadro de texto Nombre y hacer clic en Aceptar.

Resumen de la tarea
Instalar las bases de datos
del laboratorio ejecutando el
script SQL restoreDB.sql.
Crear la aplicacin Web Benefits de Visual Basic .NET
1. Crear un nuevo proyecto de Aplicacin Web ASP.NET con el nombre
BenefitsVB, en la solucin LabApplication:
a. En el men Archivo, hacer clic en Nuevo y clic en Proyecto.
b. En la lista Tipos de proyecto, hacer clic en Proyectos de Visual Basic.
En la lista Plantillas, hacer clic en Aplicacin Web ASP.NET.
Establecer la ubicacin en http://localhost/BenefitsVB, hacer clic en
Agregar a solucin, y clic en Aceptar.

Verificar que se han escrito correctamente las maysculas del
proyecto BenefitsList.


Actualizar el proyecto BenefitsVB
1. En el Explorador de soluciones, hacer clic en BenefitsVB, seleccionar
Agregar, y hacer clic en Agregar elemento existente.
2. Ir a la carpeta LabApplicationVB\BenefitsVB. Esta carpeta se puede
encontrar dentro del fichero labSetup.zip
3. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsVB, seleccionar Todos los archivos (*.*).
4. Seleccionar todos los archivos de esta carpeta, y hacer clic en Abrir.
5. Hacer clic en S para sustituir los archivos existentes y crear los nuevos
archivos.

Crear la biblioteca de clases Visual Basic .NET BenefitsListVB
1. Crear un nuevo proyecto de biblioteca de clases Microsoft Visual Basic
.NET con el nombre BenefitsListVB, y agregarlo a la solucin
LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En la lista Tipos de proyecto, hacer clic en Proyectos de Visual Basic.
En la lista Plantillas, hacer clic en Biblioteca de clases. Establecer el
Nombre de BenefitsListVB, hacer clic en Agregar a solucin, y clic en
Aceptar.

Verificar que se han escrito correctamente las maysculas del
proyecto BenefitsList.


Actualizar el proyecto BenefitsListVB
1. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB, seleccionar Agregar, y hacer clic en Agregar elemento
existente.
2. Ir a la carpeta LabApplicationVB\BenefitsListVB. Esta carpeta se puede
encontrar dentro del fichero labSetup.zip
3. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsListVB, hacer clic en Todos los archivos (*.*).
4. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
Precaucin
Precaucin

5. Hacer clic en S para reemplazar los archivos existentes y crear nuevos
archivos, y hacer clic en S a la pregunta de si cargar de nuevo el archivo
Class1.vb.
Crear una referencia al componente BenefitsListVB en el proyecto
BenefitsVB
1. En el proyecto BenefitsVB de la solucin LabApplication, completar los
siguientes pasos para agregar una referencia al componente BenefitsListVB
que acabamos de crear:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB en el
Explorador de soluciones y hacer clic en Agregar referencia.
b. En el cuadro de dilogo Agregar referencia, en la pestaa Proyectos,
hacer doble clic en el proyecto BenefitsListVB.
c. En la lista Componentes seleccionados, seleccionar el componente
BenefitsListVB, y hacer clic en Aceptar.
El componente se agrega a la carpeta Referencias en el Explorador de
soluciones.

Crear el Servicio Web XML Dental de Visual Basic .NET
1. Crear un nuevo proyecto de servicio Web ASP.NET de Visual Basic .NET,
con el nombre DentalServiceVB, y agregarlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En la lista Tipos de proyecto, hacer clic en Proyectos de Visual Basic.
En la lista Plantillas, hacer clic en Servicio Web ASP.NET. establecer
la ubicacin en http://localhost/DentalServiceVB, hacer clic en
Agregar a Solucin, y clic en Aceptar.

Verificar que se han utilizado correctamente las maysculas en
el proyecto DentalServiceVB.


Actualizar el proyecto DentalServiceVB
1. En el Explorador de soluciones, hacer clic con el botn derecho en
DentalServiceVB, seleccionar Agregar, y hacer clic en Agregar elemento
existente.
2. Ir a la carpeta LabApplicationVB\DentalServiceVB. Esta carpeta se puede
encontrar dentro del fichero labSetup.zip
3. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente DentalServiceVB, hacer clic en Todos los archivos (*.*).
4. Seleccionar todos los archivos de esta carpeta y hacer clic en Abrir.
5. Hacer clic en S para reemplazar los archivos existentes y crear nuevos
archivos, y hacer clic en S para cargar de nuevo los archivos abiertos.
6. Generar el servicio Web XML DentalService haciendo clic con el botn
derecho en el proyecto DentalServiceVB en el Explorador de soluciones y
haciendo clic en Generar.

Precaucin
Agregar una referencia Web en el proyecto BenefitsVB al servicio Web
DentalServiceVB
1. En el proyecto BenefitsVB de la solucin LabApplication, realizar los
siguientes pasos para agregar una referencia Web al servicio Web XML
DentalServiceVB:
a. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsVB y clic en Agregar referencia Web.
b. En el cuadro de texto Direccin, escribir http://localhost/
DentalServiceVB/DentalService1.asmx y pulsar ENTER.
Se mostrar la referencia Web DentalService1.
c. Hacer clic en Agregar referencia.
La referencia Web se agrega al proyecto en la carpeta Referencias Web.
2. En el Explorador de soluciones, expandir Referencias Web, hacer clic con
el botn derecho en localhost, y seleccionar Cambiar nombre.
3. Escribir DentalWebRef y pulsar ENTER.
4. Generar la solucin haciendo clic en Generar solucin en el men
Generar.

Crear la aplicacin Web C# Benefits
1. Crear un nuevo proyecto de aplicacin Web ASP.NET, con el nombre
BenefitsCS, en la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En la lista Tipos de proyecto, hacer clic en Proyectos de Visual C#. En
la lista Plantillas, hacer clic en Aplicacin Web ASP.NET. Establecer
la ubicacin en http://localhost/BenefitsCS, hacer clic en Agregar a
Solucin, y hacer clic en Aceptar.

Verificar que se han escrito correctamente las maysculas del
proyecto BenefitsCS.


Actualizar el proyecto BenefitsCS
1. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsCS, seleccionar Agregar, y hacer clic en Agregar elemento
existente.
2. Ir a la carpeta LabApplicationCS\BenefitsCS. Esta carpeta se puede
encontrar dentro del fichero labSetup.zip
3. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsCS, hacer clic en Todos los archivos (*.*).
4. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
5. Hacer clic en S para reemplazar los archivos existentes y crear nuevos
archivos.

Precaucin

Crear la biblioteca de clases BenefitsListCS de Visual C# .NET
1. Crear un nuevo proyecto de biblioteca de clases C# con el nombre
BenefitsListCS, y agregarlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En la lista Tipos de proyecto, hacer clic en Proyectos de Visual C#. En
la lista Plantillas, hacer clic en Biblioteca de clases. Establecer el
Nombre de BenefitsListCS, hacer clic en Agregar a Solucin, y hacer
clic en Aceptar.

Verificar que se han escrito correctamente las maysculas del
proyecto BenefitsListCS.


Actualizar el proyecto BenefitsListCS
1. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListCS, seleccionar Agregar, y hacer clic en Agregar elemento
existente.
2. Ir a la carpeta LabApplicationCS\BenefitsListCS. Esta carpeta se puede
encontrar dentro del fichero labSetup.zip
3. En el cuadro Tipos de proyecto del cuadro de dilogo Agregar elemento
existente BenefitsListCS, hacer clic en Todos los archivos (*.*).
4. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
5. Hacer clic en S para reemplazar los archivos existentes y crear nuevos
archivos, y hacer clic en S a la pregunta de si se desea cargar de nuevo el
archivo Class1.cs.

Crear una referencia al componente BenefitsListCS en el proyecto
BenefitsCS
2. En el proyecto BenefitsCS de la solucin LabApplication, completar los
siguientes pasos para agregar una referencia al componente BenefitsListCS
que acabamos de crear:
a. Hacer clic con el botn derecho en el proyecto BenefitsCS en el
Explorador de soluciones y hacer clic en Agregar referencia.
b. En el cuadro de dilogo Agregar referencia, en la pestaa Proyectos,
hacer doble clic en el proyecto BenefitsListCS.
c. En la lista Componentes seleccionados, seleccionar el componente
BenefitsListCS y hacer clic en Aceptar.
El componente se agrega a la carpeta Referencias en el Explorador de
soluciones.

Crear el Servicio Web XML Dental de Visual C# .NET
1. Crear un nuevo proyecto de Servicio Web XML ASP.NET de Visual Basic
.NET, denominado DentalServiceCS, y agregarlo a la solucin
LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En la lista Tipos de proyecto, hacer clic en Proyectos de Visual C#. En
la lista Plantillas, hacer clic en Servicio Web ASP.NET. Establecer la
Precaucin
ubicacin en http://localhost/DentalServiceCS, hacer clic en Agregar
a solucin, y clic en Aceptar.

Verificar que se han utilizado correctamente las maysculas en
el proyecto DentalServiceCS.


Actualizar el proyecto DentalServiceCS
1. En el Explorador de soluciones, hacer clic con el botn derecho en
DentalServiceCS, seleccionar Agregar, y hacer clic en Agregar elemento
existente.
2. Ir a la carpeta LabApplicationCS\DentalServiceCS. Esta carpeta se puede
encontrar dentro del fichero labSetup.zip
3. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente DentalServiceCS, hacer clic en Todos los archivos (*.*).
4. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
5. Si se solicita, hacer clic en S para reemplazar los archivos existentes y crear
nuevos archivos, y hacer clic en S para cargar de nuevo los archivos
abiertos.
6. Generar el servicio Web XML DentalService haciendo clic con el botn
derecho en el proyecto DentalServiceCS en el Explorador de soluciones y
haciendo clic en Generar.

Agregar una referencia Web en el proyecto BenefitsCS al servicio Web
DentalServiceCS
1. En el proyecto BenefitsCS de la solucin LabApplication, realizar los
siguientes pasos para agregar una referencia Web al servicio Web XML
DentalServiceCS:
a. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsCS y hacer clic en Agregar referencia Web.
b. En el cuadro de texto Direccin, escribir
http://localhost/DentalServiceCS/DentalService1.asmx y pulsar
ENTER.
Se mostrar la referencia Web DentalService1.
c. Hacer clic en Agregar referencia.
La referencia Web se agrega al proyecto en la carpeta Referencias Web.
2. En el Explorador de soluciones, expandir Referencias Web, hacer clic con
el botn derecho en localhost, y seleccionar Cambiar nombre.
3. Escribir DentalWebRef y pulsar ENTER.
4. Generar la solucin haciendo clic en Generar solucin en el men
Generar.
5. Cerrar Visual Studio .NET

Instalar y configurar las bases de datos del estado de sesin
1. En el men Inicio, seleccionar Todos los programas, seleccionar
Accesorios, y hacer clic en Lnea de comandos.
Precaucin

Se abrir una ventana de Comandos.
2. En la lnea de comandos, escribir el siguiente comando, siendo version la
ltima versin del .NET Framework instalada en nuestro equipo, y pulsar
ENTER:
cd c:\Windows\Microsoft.NET\Framework\version\

La lnea de comandos cambia con el nuevo directorio.
3. En la lnea de comandos, escribir el siguiente comando, y pulsar ENTER:
OSQL S localhost E <InstallSqlState.sql

En el comando anterior, es muy importante el uso de maysculas.
Asegurarse de que -S y -E son maysculas.

La ventana de comandos muestra una serie de nmeros y mensajes, y
regresa a la lnea de comandos. Se han restablecido las bases de datos
ASPState y tempdb.
4. Cerrar la lnea de comandos y abrir Windows Explorer.
5. Ir al directorio LabSetup que se puede encontrar dentro del fichero
labSetup.zip
6. Hacer doble clic en Lab16.bat.
Este archivo por lotes ejecuta una consulta SQL que configura la seguridad
para las bases de datos ASPState y tempdb.
7. Cerrar Windows Explorer.



Nota



Introduccin a la plataforma
Microsoft .NET
ndice
Descripcin 1
Qu es la plataforma Microsoft .NET? 2
Qu es el .NET Framework? 5
Cules son los componentes del .NET Framework? 12
Cules son las mejoras de Visual Basic .NET? 21
Descripcin de los espacios de nombres 23


Introduccin a la plataforma Microsoft .NET 1



Descripcin
Ques laplataformaMicrosoft .NET?
Ques el .NET Framework?
Cules son los componentes del .NET Framework?
Cules son las mejoras deVisual Basic .NET?

Objetivo
Describir los temas y
objetivos del mdulo.
Presentacin
En este mdulo,
presentamos la plataforma
.NET. Hablaremos sobre el
.NET Framework y sobre el
soporte de lenguajes que
proporciona el .NET
Framework a la plataforma.

Microsoft Visual Basic .NET constituye una importante mejora a la lnea de
productos de Visual Basic. Como desarrollador de Visual Basic, le ser til
entender la razn lgica y las caractersticas que forman la base de la
Plataforma Microsoft .NET antes de estudiar en profundidad Visual Basic
.NET.
Sugerencia
Este modulo proporciona
una descripcin de los
sistemas .NET para los
desarrolladores de
Visual Basic.

Asegrese de destacar las
ventajas de .NET respecto
de versiones anteriores de
las arquitecturas de
desarrollo Windows y
Visual Basic siempre que
sea posible.
En este mdulo, aprender a:
Enumerar los principales elementos de la plataforma .NET.
Describir el .NET Framework y sus componentes.
Enumerar las principales mejoras de Visual Basic .NET.

2 Introduccin a la plataforma Microsoft .NET

Qu es la plataforma Microsoft .NET?
.NET .NET
Framework Framework
Internet Internet
COM+ COM+
Orquestaci Orquestaci n n
Windows
.NET
Enterprise
Servers
Servicios Servicios
Building Building
Block Block
Visual Studio .NET
Con Con mejoras mejoras
.NET .NET
Nuevas Nuevas
capacidades capacidades
Disponible Disponible
en la en la
actualidad actualidad
Internet Internet
Ques la plataforma Microsoft .NET?

Objetivo
Presentar los principales
servicios y caractersticas
que proporciona la
plataforma .NET.
Presentacin
La plataforma .NET est
formada por varios servicios
y caractersticas bsicos,
como se muestra en esta
diapositiva. Uno de los
objetivos de esta nueva
plataforma es simplificar el
desarrollo Web. Esta
seccin describe la
arquitectura de la
plataforma .NET.

Esta seccin describe los componentes de la plataforma .NET, incluyendo el
.NET Framework, los servicios .NET Building Blocks, los servidores .NET
Enterprise Servers y Microsoft Visual Studio .NET. El objetivo de la
plataforma .NET es simplificar el desarrollo Web proporcionando todas las
herramientas y tecnologas necesarias para desarrollar aplicaciones Web
distribuidas.
La plataforma .NET proporciona:
Un modelo de programacin coherente e independiente del lenguaje para
todas las capas o niveles de una aplicacin.
Una interoperabilidad transparente entre tecnologas.
Una fcil migracin desde tecnologas existentes.
Un completo soporte de tecnologas de Internet independientes de la
plataforma y basadas en estndares, incluyendo Hypertext Transfer Protocol
(HTTP), Extensible Markup Language (XML) y Simple Object Access
Protocol (SOAP).

La plataforma .NET
La plataforma .NET es un conjunto de tecnologas diseadas para transformar
Internet en una plataforma informtica distribuida a escala completa.
Proporciona nuevas formas de desarrollar aplicaciones a partir de colecciones
de Servicios Web. La plataforma .NET soporta totalmente la infraestructura
existente de Internet, incluyendo HTTP, XML y SOAP.
Introduccin a la plataforma Microsoft .NET 3

Tecnologas intrnsecas de la Plataforma .NET
Las tecnologas intrnsecas que integran la plataforma .NET incluyen:
.NET Framework
El .NET Framework se basa en un nuevo entorno de ejecucin de lenguaje
comn (CLR - Common Language Runtime). Este motor de ejecucin
proporciona un conjunto de servicios comunes para los proyectos generados
en Visual Studio .NET, con independencia del lenguaje. Estos servicios
proporcionan bloques de desarrollo fundamentales para aplicaciones de
cualquier tipo, para todas las capas y niveles de la arquitectura de
aplicaciones.
Sugerencia
Debido al CLR, todos los
lenguajes compatibles con
.NET utilizarn los mismos
archivos del entorno de
ejecucin. Esto constituye
una gran ayuda para los
desarrolladores de
Visual Basic, puesto que ya
no necesitarn libreras de
entorno de ejecucin
especficas para
Visual Basic. Estos archivos
se instalarn
automticamente en futuras
versiones de Windows.
Microsoft Visual Basic, Microsoft Visual C++, y otros lenguajes de
programacin Microsoft se han mejorado para beneficiarse de estos
servicios. Otros lenguajes de terceros escritos para la plataforma .NET
tambin tienen acceso a los mismos servicios.

Gracias al CLR, todos los lenguajes .NET utilizarn los mismos
archivos del entorno de ejecucin. Esto significa que no es necesario
distribuir libreras de entorno de ejecucin especficas para Visual Basic ya
que los archivos del entorno de ejecucin de .NET se instalarn
automticamente en las futuras versiones de Microsoft Windows.
Nota

Servicios .NET Building Blocks
Los servicios .NET Building Block son servicios programables distribuidos
que estn disponibles tanto en modo conectado como desconectado. Un
servicio puede invocarse desde un ordenador aislado no conectado a
Internet, ofrecido por un servidor local dentro de una empresa, o puede ser
accedido a travs de Internet. Los servicios .NET Building Blocks pueden
utilizarse desde cualquier plataforma que soporte el protocolo SOAP. Los
servicios pueden incluir identidad, notificacin y mensajera,
personalizacin, almacenamiento esquematizado, calendario, directorio,
bsqueda y distribucin de software.
Visual Studio .NET
Visual Studio .NET ofrece un entorno de desarrollo de alto nivel para
desarrollar aplicaciones que se ejecutan sobre el .NET Framework.
Proporciona las tecnologas fundamentales para simplificar la creacin,
implantacin y evolucin constante de aplicaciones y Servicios Web
seguros, escalables y de alta disponibilidad. Tambin permite crear una
nueva generacin de aplicaciones basadas en Windows con numerosas y
nuevas caractersticas disponibles gracias al .NET Framework.
4 Introduccin a la plataforma Microsoft .NET

Servidores .NET Enterprise Servers
Los servidores .NET Enterprise Servers proporcionan escalabilidad,
fiabilidad, gestin e integracin dentro de la empresa y entre
organizaciones, y muchas otras caractersticas descritas en la siguiente tabla.
Servidor Descripcin

Microsoft
SQL Server

2000
Incorpora funcionalidad basada en XML, soporte de
estndares Worldwide Web Consortium (W3C), la
capacidad de manipular datos XML utilizando Transact
SQL (T-SQL), un anlisis flexible y potente basado en
Web y un acceso seguro a los datos a travs de la Web
utilizando HTTP.
Microsoft
BizTalk

Server 2000
Proporciona servicios de integracin de aplicaciones
empresariales (EAI - enterprise aplicacin integration),
integracin negocio a negocio (business-to-business) y
tecnologa avanzada de orquestacin BizTalk
Orchestration para crear procesos de negocio
dinmicos que abarcan aplicaciones, plataformas y
organizaciones a travs de Internet.
Microsoft Host
Integration Server 2000
Proporciona la mejor forma de integrar Internet,
intranet y las tecnologas cliente/servidor, manteniendo
al mismo tiempo las inversiones realizadas en los
sistemas existentes. Microsoft Host Integration Server
2000 sustituye a Microsoft SNA Server.
Microsoft Exchange
2000 Enterprise Server
Est basado en la potente tecnologa de mensajera y
colaboracin de Exchange e incorpora nuevas
funcionalidades importantes, adems de mejorar la
fiabilidad, la escalabilidad y el rendimiento de su
arquitectura bsica. Otras caractersticas mejoran la
integracin de Exchange 2000 con Microsoft Windows
2000, Microsoft Office 2000 e Internet.
Microsoft Application
Center 2000
Ofrece una herramienta para implantar y administrar
aplicaciones Web de alta disponibilidad.
Microsoft Internet
Security and
Acceleration Server 2000
Proporciona conectividad a Internet segura, rpida y
manejable. Internet Security and Acceleration Server
integra un cortafuegos empresarial extensible y
multicapa, y un cach Web escalable de gran
rendimiento. Se apoya en la seguridad y en el directorio
de Windows 2000 para obtener seguridad basada en
polticas, aceleracin y gestin en redes distribuidas.
Microsoft
Commerce Server 2000
Proporciona un marco de trabajo de aplicacin,
sofisticados mecanismos de realimentacin y
capacidades de anlisis.

Introduccin a la plataforma Microsoft .NET 5

Qu es el .NET Framework?
Descripcin del .NET Framework
Beneficios del .NET Framework
Lenguajes en el .NET Framework

Objetivo
Describir los temas que se
tratan en esta seccin.
Presentacin
El .NET Framework
proporciona todos los
servicios comunes
necesarios para la ejecucin
de aplicaciones.

En esta seccin, veremos cmo el .NET Framework proporciona todos los
servicios comunes que sus aplicaciones necesitan para ejecutarse. Estudiaremos
la disponibilidad de los servicios para cualquier lenguaje compatible con .NET
a travs de la especificacin Common Language Specification (CLS). Tambin
estudiaremos qu lenguajes estn soportados en el .NET Framework.
6 Introduccin a la plataforma Microsoft .NET

Descripcin del .NET Framework
V
i
s
u
a
l

S
t
u
d
i
o

.
N
E
T
V
i
s
u
a
l

S
t
u
d
i
o

.
N
E
T
Common LanguageSpecification Common LanguageSpecification
Visual Visual
Basic Basic
C++ C++ C# C# J# J#
.NETFramework .NETFramework

Objetivo
Explicar cmo encajan los
diversos componentes del
.NET Framework.
Presentacin
El .NET Framework
proporciona todos los
servicios comunes
necesarios para ejecutar las
aplicaciones Visual Basic
.NET. Estos servicios estn
disponibles en cualquier
lenguaje compatible con
.NET gracias a la
espeficicacin Common
Language Specification.

El .NET Framework proporciona todos los servicios comunes necesarios para
ejecutar las aplicaciones Visual Basic .NET.
Crear componentes en el .NET Framework
Antes del modelo COM, las aplicaciones estaban formadas por entidades
totalmente separadas con poca o ninguna integracin. Al utilizar COM, es
posible integrar componentes dentro de una aplicacin y entre aplicaciones
exponiendo una serie de interfaces comunes. Sin embargo, todava es necesario
que los desarrolladores escriban el cdigo para envolver, gestionar e integrar
componentes y objetos.
En el .NET Framework, los componentes se construyen sobre una base comn.
Ya no es necesario escribir cdigo para permitir que los objetos interacten
directamente entre s. En el entorno .NET, ya no es necesario escribir
envoltorios de componentes, puesto que los componentes no los utilizan. El
.NET Framework puede interpretar las construcciones a los que los
desarrolladores estn acostumbrados utilizando lenguajes orientados a objetos.
El .NET Framework soporta totalmente clases, herencia, mtodos, propiedades,
eventos, polimorfismo, constructores y otras construcciones orientadas a
objetos.
Common Language Specification
La especificacin Common Language Specification (CLS) define los mnimos
estndares que deben satisfacer los lenguajes y desarrolladores si desean que
sus componentes y aplicaciones sean ampliamente utilizados por otros
lenguajes compatibles con .NET. La especificacin CLS permite a los
desarrolladores de Visual Basic .NET crear aplicaciones como parte de un
Introduccin a la plataforma Microsoft .NET 7

equipo que utiliza mltiples lenguajes con la seguridad de que no habr
problemas con la integracin de los diferentes lenguajes. La especificacin CLS
tambin permite a los desarrolladores de Visual Basic .NET heredar de clases
desarrolladas en lenguajes diferentes.
Visual Studio .NET
En el .NET Framework, Visual Studio .NET ofrece las herramientas que
permiten el desarrollo rpido de aplicaciones.
8 Introduccin a la plataforma Microsoft .NET

Beneficios del .NET Framework
Basado en estndares y prcticas Web
Extensible
Fcil deutilizar por los desarrolladores
Diseado utilizando modelos deaplicaciones unificados
API deWindows API deWindows
Formularios FormulariosVB VB MFC/ATL MFC/ATL ASP ASP
.NETFramework .NETFramework

Objetivo
Explicar cmo los objetivos
de diseo del marco de
trabajo facilitan el desarrollo
de aplicaciones.
Presentacin
Antes de estudiar los
diversos componentes del
.NET Framework, resulta til
entender los objetivos de
diseo del .NET Framework.
Ello nos ayudar a ver cmo
el .NET Framework
simplifica el desarrollo de
software.

En esta seccin, veremos algunos de los beneficios del .NET Framework.
Objetivos del .NET Framework
El .NET Framework fue diseado para satisfacer los siguientes objetivos:
Basado en estndares y prcticas Web
El .NET Framework soporta totalmente las tecnologas existentes de
Internet, incluyendo Hypertext Markup Language (HTML), XML, SOAP,
Extensible Stylesheet Language for Transformations (XSLT), Xpath y otros
estndares Web. El .NET Framework promueve la creacin de servicios
Web dbilmente conectados y sin estado.
Extensible
La jerarqua del .NET Framework no queda oculta al desarrollador.
Podemos acceder y extender clases .NET (a menos que estn selladas)
utilizando herencia. Tambin podemos implementar herencia multi-
lenguaje.
Sugerencia
Comente que las clases de
.NET Framework que estn
selladas no pueden ser
extendidas.
Fcil de usar por los desarrolladores
En el .NET Framework, el cdigo est organizado en espacios de nombres
jerrquicos y clases. El Framework proporciona un sistema de tipos comn,
denominado sistema de tipos unificado, que utiliza cualquier lenguaje
compatible con .NET. En el sistema de tipos unificado, todo es un objeto.
No existen tipos variant, slo hay un tipo de cadena (string), y todos los
datos de la cadena son Unicode.
Diseado utilizando modelos de aplicaciones unificados
Introduccin a la plataforma Microsoft .NET 9

La funcionalidad de una clase .NET est disponible desde cualquier modelo
de programacin o lenguaje compatible con .NET.

10 Introduccin a la plataforma Microsoft .NET

Lenguajes del .NET Framework
Visual Basic .NET
Nueva versin de Visual Basic, con importantes innovaciones del
lenguaje
C#diseado para laplataforma.NET
Nuevo lenguaje orientado a componentes
Extensiones gestionadas deVisual C++
Proporciona una mayor potencia y control
J#.NET
Aprovecha totalmente el .NET Framework
Lenguajes de terceros

Objetivo
Presentar los lenguajes
soportados en el .NET
Framework.
Presentacin
En esta seccin,
estudiaremos los lenguajes
que Microsoft proporciona
para el .NET Framework
con Visual Studio .NET.
Tambin estudiaremos
algunos de los lenguajes
para .NET creados por
terceros desarrolladores.

La plataforma .NET es independiente del lenguaje (el .NET Framework
proporciona todos los servicios comunes necesarios para permitir la ejecucin
de los programas). El .NET Framework ofrece soporte para numerosos
lenguajes de programacin, incluyendo lenguajes de Microsoft y de terceros.
Lenguaje Descripcin

Microsoft
Visual Basic .NET
Visual Basic .NET ofrece importantes innovaciones del lenguaje respecto a versiones
anteriores de Visual Basic. Visual Basic .NET soporta herencia, constructores,
polimorfismo, sobrecarga, excepciones estructuradas, estricta verificacin de tipos, free
threading, y muchas otras caractersticas. En esta versin, Visual Basic Scripting
Edition proporciona funcionalidad completa Visual Basic.
Microsoft Visual C#

C#ha sido diseado especficamente para la plataforma .NET y es el primer lenguaje


moderno orientado a componentes de la familia de C y C++. Puede incrustarse en
pginas ASP.NET. Algunas de las principales caractersticas de este lenguaje incluyen
clases, interfaces, delegados, boxing y unboxing, espacios de nombres, propiedades,
indexadores, eventos, sobrecarga de operadores, versionado, atributos, cdigo inseguro,
y la creacin de documentacin en formato XML. No son necesarios archivos de
cabecera ni archivos IDL (Interface Definition Language).
Extensiones gestionadas
C++
La actualizacin de Visual C++es una mnima extensin gestionada del lenguaje C++.
Esta extensin proporciona acceso al .NET Framework incluyendo el recolector de
basura, herencia de implementacin simple y herencia de interfaz mltiple. Esta
actualizacin tambin elimina la necesidad de escribir cdigo de fontanera para los
componentes. Ofrece acceso a bajo nivel donde sea necesario.
Microsoft
Visual J #

.NET
J #.NET es un lenguaje para los desarrolladores que utilicen el lenguaje J ava que
quieran generar las aplicaciones y servicios para el .NET Framework. J #.NET est
totalmente integrado con el IDE de Visual Studio .NET y est diseado para aprovechar
Introduccin a la plataforma Microsoft .NET 11

al mximo el .NET Framework.
Lenguajes de terceros Varios lenguajes de terceros soportan la plataforma .NET. Estos lenguajes incluyen
APL, COBOL, Pascal, Eiffel, Haskell, ML, Oberon, Perl, Python, Scheme y SmallTalk.

12 Introduccin a la plataforma Microsoft .NET

Cules son los componentes del .NET Framework?
Los componentes del .NET Framework
CommonLanguageRuntime-CLR
Bibliotecadeclases del .NET Framework
ADO.NET: Datos y XML
ASP.NET: Formularios Web y Servicios Web
Interfaz deusuario

Objetivo
Describir los temas que se
tratan en esta seccin.
Presentacin
En esta seccin,
estudiaremos los diferentes
componentes que integran
el .NET Framework.

En esta seccin, estudiaremos los componentes que integran el Microsoft .NET
Framework. El .NET Framework est formado por un conjunto de tecnologas
que constituyen una parte fundamental de la plataforma .NET. El .NET
Framework proporciona los bloques de construccin bsicos para desarrollar
aplicaciones y Servicios Web utilizando ASP.NET.
Introduccin a la plataforma Microsoft .NET 13

Componentes del .NET Framework
Biblioteca Bibliotecade declases clasesdel .NETFramework del .NETFramework
ADO.NET: ADO.NET: Datos Datosy XML y XML
Interfaz Interfaz
de deusuario usuario
Common LanguageRuntime Common LanguageRuntime
ASP .NET ASP .NET
Formularios Formularios
y y Servicios ServiciosWeb Web

Objetivo
Ofrecer una descripcin de
los componentes del .NET
Framework.
Presentacin
Visual Basic .NET utiliza los
componentes que
proporciona el .NET
Framework.

Los componentes principales del .NET Framework son los siguientes:
Common Language Runtime - CLR
Biblioteca de clases del .NET Framework
ADO.NET: datos y XML
ASP.NET: Formularios Web y Servicios Web
Interfaz de usuario

14 Introduccin a la plataforma Microsoft .NET

Common Language Runtime
Soporte Soportedela delabiblioteca bibliotecade declases clasesbase base
Soporte Soportede dehilos hilos COM COMmarshaler marshaler
Verificador Verificadorde detipos tipos Gestor Gestorde deexcepciones excepciones
MSIL a MSIL a
compiladores compiladores
nativos nativos
Gestor Gestor
de dec c digo digo
Recolector Recolector
de debasura basura
Motor de Motor deseguridad seguridad Motor de Motor dedepuraci depuraci n n
Cargador Cargadorde declases clases

Objetivo
Destacar algunos de los
principales componentes del
Common Language
Runtime.
Presentacin
Esta seccin ofrece una
visin general de los
diversos componentes del
Common Language
Runtime y proporciona una
breve descripcin de cada
uno. Como desarrollador de
Visual Basic, nunca ver
estas piezas fsicamente,
pero hablar sobre ellas le
ayudar a comprender
mejor la riqueza del entorno
de ejecucin.

El CLR (Common Language Runtime) simplifica el desarrollo de aplicaciones,
proporciona un entorno de ejecucin robusto y seguro, soporta mltiples
lenguajes, simplifica la implantacin y administracin de aplicaciones y
proporciona un entorno gestionado.
Sugerencia
Muchos de estos temas son
interesantes para los
desarrolladores de
Visual Basic .NET y se
tratan en diversas partes del
curso.
Qu es un entorno gestionado?
Un entorno gestionado es aquel que proporciona servicios comunes de forma
automtica. Algunos ejemplos de los tipos de servicios que proporciona un
entorno gestionado son el recolector de basura y la seguridad.
Introduccin a la plataforma Microsoft .NET 15

Componentes del Common Language Runtime
La siguiente tabla describe las caractersticas del Common Language Runtime.
Componente Descripcin

Cargador de clases Carga la implementacin de un tipo en memoria y lo prepara
para su ejecucin.
Microsoft Intermediate
Language (MSIL) a
compilador nativo
Convierte lenguaje intermedio MSIL a cdigo nativo (just-in-
time).
Gestor de cdigo Gestiona la ejecucin de cdigo.
Recolector de basura Gestiona automticamente la vida de todos sus objetos. Es un
recolector de basura multiprocesador y escalable.
Motor de seguridad Proporciona seguridad basada en evidencias en funcin del
origen del cdigo y del usuario.
Motor de depuracin Le permite depurar su aplicacin y trazar la ejecucin de
cdigo.
Verificador de tipos No permitir casts inseguros ni variables no inicializadas. Es
posible verificar IL para garantizar la seguridad de tipos.
Gestor de excepciones Proporciona una gestin de excepciones estructurada e
integrada con Windows Structured Exception Handling
(SEH). Se han mejorado los informes de errores.
Soporte de hilos
(threads)
Proporciona clases e interfaces que permiten programacin
multi-hilo.
COM marshaler Proporciona marshaling hacia y desde COM.
Soporte de la biblioteca
de clases del .NET
Framework
Integra el cdigo con el entorno de ejecucin que soporta la
biblioteca de clases del .NET Framework. La siguiente
seccin trata sobre la biblioteca de clases del .NET
Framework.

16 Introduccin a la plataforma Microsoft .NET

Biblioteca de clases del .NET Framework
System.Globalization System.Globalization
System.Diagnostics System.Diagnostics
System.Configuration System.Configuration
System.Collections System.Collections
System.IO System.IO
System.Reflection System.Reflection
System.Net System.Net
System System
System.Threading System.Threading
System.Text System.Text
System.Security System.Security System.Runtime. System.Runtime.
InteropServices InteropServices

Objetivo
Describir la biblioteca de
clases del .NET Framework
y el espacio de nombres
principal: System.
Presentacin
En esta seccin,
aprenderemos cmo la
biblioteca de clases del
.NET Framework expone
caractersticas del entorno
de ejecucin y proporciona
otros servicios de alto nivel.

La biblioteca de clases del .NET Framework expone caractersticas del entorno
de ejecucin y proporciona en una jerarqua de objetos otros servicios de alto
nivel que todo programador necesita. Esta jerarqua de objetos se denomina
espacio de nombres.
Sugerencia
La biblioteca de clases del
.NET Framework
proporciona numerosas y
potentes caractersticas
nuevas para los
desarrolladores de
Visual Basic .NET.

Por ejemplo, el espacio de
nombres Collections aade
numerosas posibilidades
nuevas, como clasificacin,
colas, pilas y matrices de
tamao automtico.

La clase de sistema
Threadingtambin ofrece
nuevas posibilidades a los
desarrolladores de
Visual Basic .NET para
crear verdaderas
aplicaciones multi-hilo.

En este punto, una
descripcin general de los
espacios de nombres puede
ser til.
Espacios de nombres System
El espacio de nombres System contiene clases fundamentales y clases base que
definen tipos de datos valor y referencia comnmente utilizados, eventos y
descriptores de eventos, interfaces, atributos y procesamiento de excepciones.
Otras clases proporcionan servicios como la conversin de tipos de datos o la
manipulacin de parmetros de mtodos, operaciones matemticas, invocacin
local y remota de programas, administracin de los entornos de aplicaciones y
la supervisin de aplicaciones gestionadas y no gestionadas.
El espacio de nombre System.Collections proporciona listas clasificadas, tablas
hash y otras formas de agrupar datos. El espacio de nombres System.IO
proporciona E/S de archivos, flujos, etc. El espacio de nombres System.NET
proporciona soporte de Transmission Control Protocol/Internet Protocol
(TCP/IP) y sockets.
Si desea ms informacin sobre los espacios de nombres, realice una bsqueda
de espacio de nombres en la documentacin del .NET Framework SDK.
Introduccin a la plataforma Microsoft .NET 17

ADO.NET: Datos y XML
DataSet DataSet DataRow DataRow
DataTable DataTable DataView DataView
System.Data System.Data
System.Xml System.Xml
System.Xml.Schema System.Xml.Schema
System.Xml.Serialization System.Xml.Serialization

Objetivo
Explicar el soporte para la
gestin de datos y XML en
el entorno de ejecucin.
Presentacin
El .NET Framework
proporciona un nuevo
conjunto de clases
ADO.NET para el manejo
de datos.

ADO.NET es la siguiente generacin de la tecnologa ActiveX Data Objects
(ADO). ADO.NET proporciona un soporte mejorado para el modelo de
programacin desconectado. Tambin ofrece un completo soporte de XML.
Sugerencia
ADO.NET ha sido creado
especialmente para ser
utilizado en Internet, y utiliza
XML como tecnologa
principal. Esto significa que
los desarrolladores ya no
necesitan pasar objetos
Recordseta travs del
sistema, limitando
potencialmente qu clientes
pueden atender. Tambin
mejora el modelo de
programacin desconectado
de versiones anteriores de
ADO.

Comente que el
conocimiento de ADO de los
desarrolladores de
Visual Basic les ser de
gran ayuda cuando cambien
a ADO.NET.

Compruebe los
conocimientos de los
estudiantes sobre los
conceptos bsicos de
XML.
Espacio de nombres System.Data
El espacio de nombres System.Data est compuesto por clases que constituyen
el modelo de objetos ADO.NET. A alto nivel, el modelo de objetos ADO.NET
se divide en dos capas: la capa conectada y la capa desconectada.
El espacio de nombres System.Data incluye la clase DataSet, que representa
mltiples tablas y sus relaciones. Estos conjuntos de datos son estructuras de
datos completamente autocontenidas que pueden poblarse desde diversas
fuentes de datos. Una posible fuente de datos podra ser XML, otra podra ser
OLE DB, y una tercera fuente de datos podra ser el adaptador directo para SQL
Server.
Espacio de nombres System.Xml
El espacio de nombres System.Xml proporciona soporte para XML. Incluye un
parseador y un escritor XML, siendo compatibles con el W3C. Las
transformaciones las proporciona el espacio de nombres System.Xml.Xsl y la
implementacin de XPath que permite navegacin de grafos de datos en XML.
El espacio de nombres System.XML.Serialization proporciona toda la
infraestructura bsica para los Servicios Web, incluyendo caractersticas como
el movimiento atrs y adelante entre objetos y una representacin XML.
18 Introduccin a la plataforma Microsoft .NET

ASP.NET: Formularios Web y Servicios Web
ASP.NET ASP.NET
System.Web System.Web
Configuraci Configuraci n n Estado deSesi Estado deSesi n n
Cach Cach
Seguridad Seguridad
Servicios Servicios
Descripcin Descripcin
Descubrimiento Descubrimiento
Protocolos Protocolos
IU IU
HtmlControls HtmlControls
WebControls WebControls

Objetivo
Presentar los Formularios y
Servicios Web.
Presentacin
Internet evoluciona
rpidamente desde los
actuales sitios Web que
nicamente sirven pginas
de interfaz de usuario a
navegadores, hasta una
prxima generacin de
sitios Web programables
que integran directamente
organizaciones,
aplicaciones, servicios y
dispositivos. Estos sitios
Web programables son
mucho ms que sitios a los
que se accede de modo
pasivo; son Servicios Web
reutilizables e inteligentes.

ASP.NET es un marco de trabajo de programacin basado en el Common
Language Runtime y que puede ser utilizado en un servidor para crear potentes
aplicaciones Web. Los Formularios Web de ASP.NET proporcionan una forma
fcil y potente de generar interfaces de usuario (IUs) Web dinmicos. Los
Servicios Web de ASP.NET proporcionan las piezas para construir aplicaciones
distribuidas basadas en la Web. Los Servicios Web estn basados en estndares
abiertos de Internet, como HTTP y XML. Podemos pensar en un Servicio Web
como un componente reutilizable accesible a travs de Internet, en lugar de
estar limitado a clientes Windows en una red de rea local.
El Common Language Runtime proporciona un soporte nativo para crear y
exponer Servicios Web utilizando una abstraccin de programacin coherente y
familiar para desarrolladores tanto de Active Server Pages (ASP) como de
Visual Basic. El modelo resultante es escalable y extensible. Este modelo se
basa en estndares abiertos de Internet (HTTP, XML, SOAP y SDL) y, por
tanto, puede ser accedido e interpretado desde cualquier cliente o dispositivo
habilitado para Internet. Algunas de las clases ASP.NET ms habituales se
describen en los siguientes prrafos.
Sugerencia
Con Visual Basic .NET, el
desarrollo Web es casi tan
sencillo como el desarrollo
de aplicaciones basadas en
Windows.

La creacin de aplicaciones
Web puede llevarse a cabo
en un mismo IDE, tanto si
son aplicaciones basadas
en pginas Web o en
Servicios Web.
Espacio de nombres System.Web
En el espacio de nombres System.Web, existen servicios como la gestin de
cach, seguridad, configuracin y otros que son compartidos por los Servicios
Web y por el interfaz de usuario (IU) Web.
Introduccin a la plataforma Microsoft .NET 19

Espacio de nombres System.Web.Services
El espacio de nombres System.Web.Services gestiona los requerimientos de
los Servicios Web como los protocolos de transporte y el descubrimiento de
servicios.
Espacio de nombres System.Web.UI
El espacio de nombres System.Web.UI proporciona dos clases de controles: los
controles HTML y los controles Web. Los controles HTMLControl
proporcionan un mapeado directo de las etiquetas HTML, como <INPUT>.
Existen tambin otros controles WebControl ms ricos que permiten
estructurar controles mediante plantillas (por ejemplo, un control de rejilla).
20 Introduccin a la plataforma Microsoft .NET

Interfaz de usuario
System.Drawing System.Drawing
System.Windows.Forms System.Windows.Forms

Objetivo
Explicar cmo el .NET
Framework gestiona el
interfaz de usuario para las
aplicaciones Windows
tradicionales.
Presentacin
En esta seccin,
estudiaremos cmo .NET
gestiona el interfaz de
usuario. La clase
System.Windows.Forms
proporciona el IU de lado
cliente y System.Drawing
proporciona la siguiente
generacin de servicios
GDI.

Las aplicaciones Windows pueden ahora proporcionar interfaces de usuario
ms potentes que nunca utilizando los espacios de nombres
System.Windows.Forms y System.Drawing del .NET Framework. El aspecto
de los nuevos formularios Windows Forms de .NET resultar muy familiar para
los desarrolladores de Visual Basic.
Espacio de nombres System.Windows.Forms
Podemos utilizar las clases del espacio de nombres System.Windows.Forms
para crear el IU cliente. Esta clase nos permite implementar el IU de Windows
estndar en nuestras aplicaciones .NET. Muchas funciones a las que
anteriormente slo podan accederse mediante llamadas a la API (Application
Programming Interface) estn ahora disponibles como parte de los propios
formularios, lo cual hace el desarrollo mucho ms fcil y potente.
Espacio de nombres System.Drawing
El espacio de nombres System.Drawing proporciona acceso a la funcionalidad
de grficos bsica de GDI+. Los espacios de nombres
System.Drawing.Drawing2D, System.Drawing.Imaging y
System.Drawing.Text ofrecen funcionalidades ms avanzadas.
Introduccin a la plataforma Microsoft .NET 21

Cules son las mejoras de Visual Basic .NET?
Cules son las mejoras de Visual Basic .NET?
Principales mejoras del lenguaje
Soporte mejorado orientado a objetos
Gestin de excepciones estructurada
Acceso total al .NET Framework
Nuevas opciones de manejo de hilos
Recolector de basura
Desarrollo Web mejorado
Creacin de Formularios Web tan fcilmente como
formularios Windows
Crear servicios Web rpidamente

Objetivo
Presentar algunas de las
principales mejoras de
Visual Basic .NET.
Presentacin
Visual Basic .NET
proporciona importantes
mejoras del lenguaje, un
acceso total al .NET
Framework, y un desarrollo
Web mejorado.

Visual Basic .NET proporciona importantes mejoras del lenguaje, un acceso
total al .NET Framework y un desarrollo Web mejorado.
Importantes mejoras de lenguaje
Sugerencia
Explique cada uno de los
puntos de la diapositiva y
sus ventajas para los
desarrolladores.
En Visual Basic .NET, Visual Basic ha experimentado algunos cambios
importantes para permitir a los desarrolladores de Visual Basic crear
aplicaciones empresariales potentes, robustas y escalables.
Soporte orientado a objetos mejorado
Permite a los desarrolladores de Visual Basic .NET utilizar herencia de
clases, constructores, destructores, sobrecarga, interfaces y polimorfismo.
Esto otorga a Visual Basic .NET tanto poder orientado a objetos como
cualquier otro lenguaje .NET, como C#o Visual C++con extensiones
gestionadas.
Gestin de excepciones estructurada
Simplifica el control de excepciones y permite utilizar potentes
caractersticas como las excepciones anidadas. Esto mejora enormemente el
anterior gestor de errores de Visual Basic.

22 Introduccin a la plataforma Microsoft .NET

Acceso total al .NET Framework
Los desarrolladores de Visual Basic .NET tienen acceso total al .NET
Framework, incluyendo toda la biblioteca de clases de .NET Framework.
Nuevas opciones de manejo de hilos
Permite crear aplicaciones que utilizan capacidades con mltiples hilos de
ejecucin. Por primera vez, los desarrolladores de Visual Basic podrn crear
aplicaciones capaces de competir con aplicaciones basadas en Visual C++
en esta rea.
Recolector de basura
Garantiza que las aplicaciones creadas en Visual Basic .NET no acceden a
posiciones de memoria sin referencia. Este proceso en segundo plano aborda
aspectos relacionados con la gestin de memoria, como posiciones de
memoria vacas y referencias circulares que existan en versiones anteriores
de Visual Basic y en otros lenguajes.

Desarrollo Web mejorado
Visual Basic .NET permite a los desarrolladores crear rpidamente potentes
aplicaciones Web.
Crear Formularios Web fcilmente
Es tan fcil como crear formularios Windows utilizando la tcnica de
escribir cdigo tras el evento de un control. Los desarrolladores ya no
necesitan utilizar un entorno de desarrollo integrado (IDE, Integrated
Development Environment) para el desarrollo de pginas Web (como
Microsoft Visual InterDev) y otro entorno para el desarrollo de
componentes. Ahora, todos los aspectos de una aplicacin Web se crean
simplemente en un nico entorno para los desarrolladores de Visual Basic y
de un modo fcil de entender.
Crear Servicios Web rpidamente
Es posible crear Servicios Web rpidamente de modo similar a cmo se
creaban componentes en las versiones anteriores de Visual Basic. Los
Servicios Web son una potente tecnologa que le permite acceder a sus
componentes (o a los componentes de otras personas) a travs de Internet
mediante HTTP. Cualquier desarrollador de Visual Basic que haya creado
componentes podr realizar fcilmente la transicin a los Servicios Web.
Introduccin a la plataforma Microsoft .NET 23

Descripcin de los espacios de nombres
Descripcin de los espacios de nombres
Espacios de nombres
Espacios de nombres utilizados en mdulos
obligatorios
Espacios de nombres utilizados en mdulos
opcionales

Objetivo
Describir los espacios de
nombres en el .NET
Framework.
Presentacin
En esta seccin,
estudiaremos los espacios
de nombres del .NET
Framework.

En esta seccin, estudiaremos los espacios de nombres del .NET Framework.
Tambin veremos qu espacios de nombres se ensean en este curso.
Esta seccin incluye los siguientes temas:
Espacios de nombres
Espacios de nombres utilizados en mdulos obligatorios
Espacios de nombres utilizados en mdulos opcionales

24 Introduccin a la plataforma Microsoft .NET

Espacios de nombres
Espacios de nombres
System System
Globalization Globalization
Diagnostics Diagnostics
Configuration Configuration
Collections Collections
Resources Resources
Reflection Reflection
Net Net
IO IO
Threading Threading
Text Text
Security Security Runtime Runtime
ServiceProcess ServiceProcess
.Serialization .Serialization
.Remoting .Remoting
.InteropServices .InteropServices

Objetivo
Entender el modo en que
los espacios de nombres
proporcionan una jerarqua
de tipos y funcionalidades
fciles de utilizar.
Presentacin
El .NET Framework incluye
un gran conjunto de
ensamblados de bibliotecas
de clases, que contienen
cientos de tipos. Estos
ensamblados proporcionan
acceso a funcionalidades
del sistema en nuestro
proceso de desarrollo.

El .NET Framework incluye un gran conjunto de ensamblados que forman las
bibliotecas de clases, que conjuntamente contienen cientos de tipos. Estos
ensamblados proporcionan acceso a funcionalidades del sistema en nuestro
proceso de desarrollo.
Objetivo de los espacios de nombres
Debido a que la biblioteca de clases del .NET Framework incluye definiciones
para nomerosos tipos, la biblioteca se organiza en un espacio de nombres de
estructura jerrquica.
Los espacios de nombres utilizan un esquema nombres con una sintaxis basada
en un punto para agrupar lgicamente clases relacionadas de modo que puedan
buscarse y referenciarse fcilmente. Por ejemplo, el espacio de nombres
System.Data contiene clases que constituyen la arquitectura de ADO.NET. El
espacio de nombres System.Xml es el espacio de nombres global para todas las
clases XML que proporcionan soporte basado en estndares para procesar
XML.
El espacio de nombres System
El espacio de nombres System es el espacio de nombres raz para los tipos en el
.NET Framework. El espacio de nombres System contiene el tipo base Object,
desde el que se derivan otros tipos.
El espacio de nombres System tambin contiene tipos para la gestin de
excepciones, recolector de basura, E/S de consola, varios tipos de herramientas,
tipos de datos de formato, generadores de nmeros aleatorios y funciones
matemticas.
Introduccin a la plataforma Microsoft .NET 25

Espacios de nombres utilizados en mdulos obligatorios
Espacios de nombres utilizados en mdulos
obligatorios
Mdulo 2
System.Console
Mdulo 3
System.Windows.Forms
System.Drawing
Mdulo 4
System.Reflection
Mdulo 7
System.Text
System.Collections
Mdulo10
System.IO
Mdulo11
System.Net
System.Net.Sockets
Mdulo12
System.Runtime.Serialization
Mdulo13
System.Runtime.Remoting.Channels
System.Web.Services

Objetivo
Explicar qu espacios de
nombres se ensean en
este curso, y qu espacios
de nombres no.
Presentacin
Este curso cubre muchos de
los espacios de nombres
System. Dos espacios de
nombres que no se cubren
son los espacios de
nombres System.Datay
System.Security.

Este curso cubre muchos de los espacios de nombres del Microsoft .NET
Framework.
El Mdulo 2 explica el espacio de nombres System.Console para enviar salida
de impresin a la consola. El Mdulo 3 explica los espacios de nombres
System.Windows.Forms y System.Drawing para generar un formulario que
contenga botones para interactuar con el usuario.
El Mdulo 4 explica el espacio de nombres System.Reflection para almacenar
informacin relativa a versiones y archivos de claves en un ensamblado. El
Mdulo 7 explica el espacio de nombres System.Text para la gestin avanzada
de cadenas y el System.Collections para mantener colecciones de datos.
El Mdulo 10 explica el espacio de nombres System.IO para leer y escribir
archivos. El Mdulo 11 explica los espacios de nombres System.Net y
System.Net.Sockets para la transmisin de datos a travs de la red.
El Mdulo 12 explica el espacio de nombres System.Runtime.Serialization
para la persistencia de objetos en el almacenamiento. El Mdulo 13 explica los
espacios de nombres System.Runtime.Remoting.Channels y
System.Web.Services para la invocacin de objetos remotos, y para la creacin
de servicios Web XML.
26 Introduccin a la plataforma Microsoft .NET

Espacios de nombres utilizados en mdulos opcionales
Espacios de nombres utilizados en mdulos
opcionales
Mdulo 14
System.Threading
Mdulo 16
System.Data
Mdulo 17
System.Reflection

Objetivo
Completar la informacin
sobre los espacios de
nombres presentados en la
seccin anterior.
Presentacin
Estos son algunos espacios
de nombres que se cubren
en mdulos opcionales de
este curso.

Los Mdulos 14 a 17 son opcionales.
El Mdulo 14 explica el espacio de nombres System.Threading para permitir
la programacin multi-hilo. El Mdulo 16 explica el espacio de nombres
System.Data, que proporciona los objetos y tipos bsicos para el modelo de
programacin ADO.NET. ADO.NET tambin proporciona soporte de XML en
el espacio de nombres System.Xml. Finalmente, el Mdulo 17 explica el
espacio de nombres System.Reflection, que contiene clases que pueden
utilizarse para examinar metadatos.
Espacios de nombres no cubiertos
Este curso no cubre el espacio de nombres System.Security.
ndice
Descripcin 1
Leccin: introduccin al .NET Framework 2
Leccin: descripcin de ASP.NET 14
Leccin: descripcin de la aplicacin del laboratorio 20
Leccin: Recursos 26

Descripcin del Microsoft .NET
Framework

Descripcin del Microsoft .NET Framework 1

Descripcin
Introduccin al .NET Framework
Descripcin de ASP.NET
Descripcin de la aplicacin del laboratorio
Recursos

*****************************use******************************
El Microsoft.NET Framework representa un cambio importante en el modo de
generar y ejecutar las aplicaciones Web. Microsoft ASP.NET es una de las
mltiples tecnologas que forman parte del .NET Framework. En este mdulo,
estudiaremos el .NET Framework y ASP.NET. Tendremos la oportunidad de
examinar la aplicacin Web que generaremos en los laboratorios.
En este mdulo, aprenderemos a:
Explicar las ventajas de utilizar el .NET Framework.
Entender las principales funcionalidades y la utilidad de ASP.NET en el
desarrollo de aplicaciones Web.
Entender las funcionalidades bsicas del sitio Web que generaremos en los
laboratorios.

Introduccin
Objetivos
2 Descripcin del Microsoft .NET Framework

Leccin: Introduccin al .NET Framework
Ques el .NET Framework?
Quproblemas soluciona .NET?
Componentes del .NET Framework
Beneficios de usar el .NET Framework
Visual Studio .NET: la herramienta parael desarrollo .NET

*****************************use******************************
En esta leccin, estudiaremos el .NET Framework. Veremos algunos de los
problemas a los que se enfrentan los desarrolladores cuando generan
aplicaciones Web y cmo el .NET Framework soluciona estos problemas.
Tambin incluye una introduccin a Microsoft Visual Studio .NET, la
herramienta de desarrollo que utilizaremos para desarrollar aplicaciones Web
con el .NET Framework.
En esta leccin, aprenderemos a:
Diferenciar entre Microsoft .NET y el .NET Framework.
Enumerar las ventajas de utilizar .NET, desde la perspectiva de los
problemas que .NET soluciona.
Identificar las caractersticas de Visual Studio .NET.

Introduccin
Objetivos de la leccin
Descripcin del Microsoft .NET Framework 3

Qu es el .NET Framework?
Herramientas del
desarrollador
Clientes
Experiencias
del usuario
Aplicaciones
WebASP.NET
Servicios
WebXML
Bases de
datos
.NET
Framework

*****************************use******************************
.NET es el modelo de desarrollo de Microsoft que hace que el software sea
independiente de la plataforma y de los dispositivos, y hace que los datos estn
disponibles a travs de Internet. El .NET Framework es la infraestructura bsica
subyacente de .NET.
.NET ha sido implementado desde el principio pensando en una arquitectura
abierta. .NET es una plataforma que puede utilizarse para generar y ejecutar la
siguiente generacin de aplicaciones Windows y aplicaciones Web. El
objetivo de la plataforma .NET de Microsoft es simplificar el desarrollo Web.
Est formada por las siguientes tecnologas principales:
.NET Framework
Windows Server System
Servicios building block fundamentales
Visual Studio .NET

La plataforma .NET abarca a clientes, servidores y servicios; est formada por:
Un modelo de programacin que permite a los desarrolladores generar
aplicaciones y servicios Web XML (Extensible Markup Language).
Un conjunto de servicios building block fundamentales, que son un conjunto
de servicios Web XML centrados en el usuario que trasladan el control de
datos de usuario desde las aplicaciones hasta los usuarios. Por ejemplo,
Microsoft Passport es un componente principal de la iniciativa .NET que
facilita la integracin de diversas aplicaciones.
Introduccin
Qu es la plataforma
.NET?
4 Descripcin del Microsoft .NET Framework

Un conjunto de servidores empresariales .NET, Windows Server System,
incluyendo Windows Server 2003, Microsoft SQL Server

y Microsoft
BizTalk Server, que integran, ejecutan, operan y gestionan aplicaciones y
servicios Web XML.
Software cliente, como Windows XP y Windows CE, que permiten a los
desarrolladores ofrecer una completa experiencia de usuario a travs de una
familia de dispositivos.
Herramientas, como Visual Studio .NET, que pueden utilizarse para
desarrollar servicios Web XML, aplicaciones Windows y aplicaciones Web
para obtener una rica experiencia de usuario.

El .NET Framework proporciona la base sobre la que se desarrollan y ejecutan
las aplicaciones y los servicios Web XML. La naturaleza unificada del .NET
Framework significa que todas las aplicaciones, tanto si son aplicaciones
Windows, aplicaciones Web o servicios Web XML, se desarrollan utilizando un
conjunto de herramientas y cdigo comunes, y se integran fcilmente entre s.
El .NET Framework est formado por:
El Common Language Runtime (de ahora en adelante, CLR). El CLR
gestiona los servicios en tiempo de ejecucin, incluyendo la integracin de
lenguajes, la seguridad y la gestin de memoria. Durante el desarrollo, el
CLR proporciona funcionalidades necesarias para simplificar el desarrollo.
Biblioteca de clases. Las bibliotecas de clases proporcionan cdigo
reutilizable para las tareas ms habituales, incluyendo el acceso a datos, el
desarrollo de servicios Web XML, Web Forms y Windows Forms.

Qu es el .NET
Framework?
Descripcin del Microsoft .NET Framework 5

Qu problemas soluciona .NET?
Incluso con Internet, la mayora deaplicaciones
y dispositivos tienen problemas
comunicndose entre s
Los programadores terminan por escribir
infraestructura en lugar de aplicaciones
Los programadores han tenido quelimitar su
alcance o aprender continuamentenuevos
lenguajes

*****************************use******************************
El .NET Framework fue desarrollado para superar varias limitaciones con las
que los desarrolladores se encontraban al generar aplicaciones Web, y utiliza la
Internet como medio para solventar estas limitaciones.
Incluso con la llegada de una red global y fcilmente accesible para compartir
informacin (Internet), algunas aplicaciones funcionan en ms de un tipo de
cliente o tienen la capacidad de interactuar transparentemente con otras
aplicaciones. Esta limitacin lleva a dos importantes problemas con los que los
desarrolladores deben enfrentarse:
Generalmente, los desarrolladores deben limitar su mbito.
Los desarrolladores emplean la mayor parte de su tiempo en escribir de
nuevo las aplicaciones para que funcionen en cada tipo de plataforma y
cliente, en lugar de emplear su tiempo en disear nuevas aplicaciones.

El .NET Framework soluciona los dos problemas anteriores mediante el CLR,
que es independiente del lenguaje y de la plataforma, y con el uso del estndar
de mercado XML. La independencia del lenguaje de .NET permite a los
desarrolladores generar una aplicacin en cualquier lenguaje basado en .NET y
saber que la aplicacin Web funcionar en cualquier cliente que soporte .NET.
El CLR tambin controla gran parte de la infraestructura de la aplicacin, de
modo que los desarrolladores pueden concentrarse en la lgica especfica de la
aplicacin.
Los Servicios Web XML utilizan XML para enviar datos, garantizando as que
cualquier cliente con capacidad XML puede recibir esos datos. Como XML es
un estndar abierto, la mayora de clientes modernos, como los sistemas
Introduccin
Aspectos previos a .NET
6 Descripcin del Microsoft .NET Framework

operativos de PCs, telfonos mviles, asistentes digitales personales (PDAs) y
consolas de juegos, pueden aceptar datos XML.
Descripcin del Microsoft .NET Framework 7

Componentes del .NET Framework
Win32 Win32
Message Message
Queuing Queuing
COM+ COM+
( (Transacciones, Particiones, Transacciones, Particiones,
Agrupaci Agrupaci ndeobjetos ndeobjetos) )
IIS IIS WMI WMI
CommonLanguageRuntime CommonLanguageRuntime
Biblioteca Bibliotecade declases clasesde.NET Framework de.NET Framework
ADO.NET y XML ADO.NET y XML
Servicios ServiciosWebXML WebXML Interfaz Interfazde deusuario usuario
Visual
Basic
C++ C#
ASP.NET ASP.NET
Perl Python

*****************************use******************************
El .NET Framework proporciona el marco en tiempo de compilacin y en
tiempo de ejecucin necesario para generar y ejecutar aplicaciones basadas en
.NET.
El .NET Framework est formado por distintos componentes que ayudan a
generar y ejecutar aplicaciones basadas en .NET:
Substrato de la plataforma
El .NET Framework debe ejecutarse sobre un sistema operativo.
Actualmente, puede ejecutarse en sistemas operativos Microsoft Win32,
como Windows 2000, Windows 2003, Windows XP y Windows 98.
Adems, el .NET Framework se extiende para su ejecucin en otras
plataformas, como Windows CE, a travs del .NET Compact Framework.
Servicios de aplicaciones
Cuando se ejecuta en Windows 2000 o Windows 2003, el desarrollador
tiene disponibles servicios de aplicaciones como los Servicios de
Componentes, Colas de Mensajes, Internet Information Services (IIS) y
Windows Management Instrumentation (WMI). El .NET Framework
expone los servicios de aplicaciones a travs de clases en la biblioteca de
clases del .NET Framework.
Biblioteca de clases del .NET Framework
La biblioteca de clases del .NET Framework expone caractersticas del CLR
y simplifica el desarrollo de aplicaciones basadas en .NET. Adems, los
desarrolladores pueden extender las clases creando sus propias bibliotecas
de clases.
Introduccin
El .NET Framework
8 Descripcin del Microsoft .NET Framework

La biblioteca de clases del .NET Framework implementa el .NET
Framework. Todas las aplicaciones (Web, Windows y Servicios Web XML)
acceden a las mismas bibliotecas de clases del .NET Framework, que se
almacenan en espacios de nombres. Todos los lenguajes basados en .NET
tambin acceden a las mismas bibliotecas.
Common Language Runtime
El CLR simplifica el desarrollo de aplicaciones, proporciona un entorno de
ejecucin robusto y seguro, soporta mltiples lenguajes y simplifica la
implantacin y administracin de las aplicaciones.
El entorno del CLR tambin se denomina entorno gestionado, en el que se
ofrecen automticamente servicios comunes, como la recoleccin de basura
y la seguridad.
Microsoft ADO.NET
ADO.NET es la siguiente generacin de la tecnologa ActiveX Data
Objects (ADO) de Microsoft. ADO.NET ofrece un soporte mejorado del
modelo de programacin desconectado. ADO.NET tambin proporciona un
amplio soporte de XML.

Para aprender ms sobre ADO.NET, leer los Mdulos 9, 10 y 11.

ASP.NET
ASP.NET es un marco de programacin creado sobre el CLR. Puede
utilizarse en un servidor para crear potentes aplicaciones Web. ASP.NET
Web Forms proporcionan una forma fcil y potente de generar interfaces de
usuario (IUs) Web dinmicos.
Servicios Web XML
Los Servicios Web XML son componentes Web programables que pueden
compartirse entre aplicaciones en Internet o en intranets. El .NET
Framework proporciona herramientas y clases para crear, probar y distribuir
servicios Web XML.

Para saber ms sobre los servicios Web XML, ver el Mdulo 13.

Interfaces de usuario
El .NET Framework soporta tres tipos de IUs:
Web Forms, que funcionan a travs de ASP.NET y HTTP (Hypertext
Transfer Protocol)
Windows Forms, que se ejecutan en equipos cliente Win32
La consola de la lnea de comandos
Lenguajes
Cualquier lenguaje que cumpla con la Especificacin de Lenguaje Comn
(Common Language Specification - CLS) puede ejecutarse en el CLR. En el
.NET Framework, Microsoft proporciona soporte para Microsoft Visual
Basic .NET, Microsoft Visual C++ .NET, C#, y Microsoft J Script .NET.
Terceras partes pueden proporcionar lenguajes adicionales.

Para ms informacin sobre los lenguajes basados en .NET, consultar
Nota
Nota
Nota
Descripcin del Microsoft .NET Framework 9

el Mdulo Uso de lenguajes basados en Microsoft .NET.

10 Descripcin del Microsoft .NET Framework

Ventajas de usar el .NET Framework
Basado en estndares y prcticas Web
La funcionalidadde las clases .NET estdisponiblede
forma universal
El cdigo estorganizado en clases y espacios de
nombres jerrquicos
Independiente del lenguaje
Windows Windows
API API
ASP ASP
.NET .NET
Framework Framework
1980s 1990s 2000s
Visual Basic Visual Basic
MFC/ATL MFC/ATL

*****************************use******************************
En los primeros aos del desarrollo de aplicaciones Windows, todas las
aplicaciones estaban escritas sobre la API (Interfaz de Programacin de
Aplicaciones) de Windows en C o C++.
Con la llegada de Visual Basic, y posteriormente de Internet, los
desarrolladores deban especializarse en el desarrollo de aplicaciones C y C++
(MFC/ATL), aplicaciones Visual Basic, o aplicaciones Active Server Pages
(ASP). Con el .NET Framework, podemos utilizar nuestros conocimientos para
desarrollar cualquier tipo de aplicacin.
Las ventajas de utilizar el .NET Framework para desarrollar aplicaciones
incluyen:
Basado en estndares y prcticas Web
El .NET Framework soporta completamente las tecnologas existentes de
Internet, incluyendo HTML (Hypertext Markup Language), HTTP, XML,
SOAP (Simple Object Access Protocol), XSLT (Extensible Stylesheet
Language Transformation), XPath (XML Path Language) y otros estndares
Web.
Diseado utilizando modelos de aplicacin unificados
La funcionalidad de una clase .NET est disponible desde cualquier
lenguaje compatible con .NET o modelo de programacin. Por tanto, la
misma pieza de cdigo puede ser utilizada por aplicaciones Windows,
aplicaciones Web y Servicios Web XML.
Introduccin
Ventajas
Descripcin del Microsoft .NET Framework 11

Fcil de utilizar para los desarrolladores
En el .NET Framework, el cdigo est organizado en espacios de nombres
jerrquicos y en clases. El .NET Framework proporciona un sistema de tipos
comunes, conocido tambin como sistema de tipos unificados, que puede
ser utilizado por cualquier leguaje compatible con .NET. En el sistema de
tipos unificados, todos los elementos del lenguaje son objetos. Estos objetos
pueden ser utilizados por cualquier aplicacin .NET escrita en cualquier
lenguaje basado en .NET.
Clases extensibles
La jerarqua del .NET Framework no queda oculta al desarrollador.
Podemos acceder y extender las clases .NET (a menos que estn protegidas)
mediante la herencia. Tambin podemos implementar la herencia entre
mltiples lenguajes.

12 Descripcin del Microsoft .NET Framework

Visual Studio .NET: la herramienta para el desarrollo .NET
Visual Studio .NET
Herramientas
Windows Forms
Herramientas
WebForms
Proceso
deerrores
Acceso
adatos
Mltiples
Lenguajes
Herramientas
Servicios Web
Desarrollar Depurar Implantar Disear

*****************************use******************************
Visual Studio .NET constituye el ncleo del desarrollo .NET. Es un completo
entorno de desarrollo en el que podemos disear, desarrollar, depurar e
implementar nuestras aplicaciones .NET y nuestros Servicios Web XML.
Visual Studio .NET, como herramienta de desarrollo, proporciona las
caractersticas siguientes:
Soporta varios lenguajes de desarrollo.

Para ms informacin sobre los lenguajes disponibles basados en
.NET, leer el Mdulo Uso de lenguajes basados en Microsoft .NET.

Herramientas para generar aplicaciones Web, aplicaciones Windows y
servicios Web XML.
Herramientas de acceso a datos.
Procesamiento completo de errores, incluyendo depuracin local,
depuracin remota y uso de trazas.

Introduccin
Caractersticas de
Visual Studio .NET
Nota
Descripcin del Microsoft .NET Framework 13

En este curso, utilizaremos Visual Studio .NET. En esta prctica, Visual Studio
.NET se mostrar en la parte superior del men Inicio, para poder acceder a l
fcilmente, y se abrir Visual Studio .NET.
Mostrar un programa en la parte superior del men Inicio
En el men Inicio, hacer clic en Todos los programas, seleccionar
Microsoft Visual Studio .NET 2003, hacer clic con el botn derecho en
Microsoft Visual Studio .NET 2003 y, a continuacin, clic en Fijar al
men Inicio.
El icono y el nombre de Visual Studio .NET aparecen cerca del lado
izquierdo superior del men Inicio.

Iniciar y cerrar Visual Studio .NET
1. Hacer clic en el botn Inicio, en la lista del lado superior izquierdo del
men Inicio, hacer clic en Microsoft Visual Studio .NET 2003.
Visual Studio .NET se abre y muestra la pgina de inicio.

Estudiaremos ms detalles del IDE de Visual Studio .NET en el
Mdulo Uso de Microsoft Visual Studio .NET.

2. En el men Archivo, hacer clic en Salir para cerrar Visual Studio .NET.

Prctica opcional
Nota
14 Descripcin del Microsoft .NET Framework

Leccin: descripcin de ASP.NET
Ques ASP.NET?
Aplicacin Web ASP.NET
Multimedia: modelo de ejecucin ASP.NET

*****************************use******************************
ASP.NET es un marco de programacin basado en el .NET Framework que se
utiliza para generar aplicaciones Web. Los formularios Web Forms ASP.NET,
que forman parte de una aplicacin Web ASP.NET, proporcionan un modo
fcil de generar sitios Web dinmicos. ASP.NET tambin incluye la tecnologa
necesaria para generar servicios Web XML, que proporcionan los bloques
bsicos para construir aplicaciones distribuidas basadas en la Web.
En esta leccin, aprenderemos a:
Explicar la diferencia entre Web Forms y aplicaciones Web ASP.NET.
Describir las partes de una aplicacin Web ASP.NET.

Introduccin
Objetivos de la leccin
Descripcin del Microsoft .NET Framework 15

Qu es ASP.NET?
El sucesor y evolucin deActive Server Pages, ms
flexible
Pginas Webdinmicas que pueden acceder a
recursos del servidor
Procesamiento de formularios WebFormsen el lado
servidor
Los Servicios WebXML permiten crear aplicaciones
Webdistribuidas
Independiente del navegador
Independiente del lenguaje

*****************************use***********
Durante muchos aos, los desarrolladores han estado utilizando la tecnologa
ASP para generar pginas Web dinmicas. De modo similar a ASP, ASP.NET
se ejecuta en el servidor Web y proporciona una forma de desarrollar sitios
Web dinmicos, personalizados y de rico contenido. Adems, ASP.NET ofrece
numerosas mejoras respecto a ASP.
Desarrollar aplicaciones Web ASP.NET sobre el .NET Framework es similar a
desarrollar aplicaciones Windows. El componente fundamental de ASP.NET es
el formulario Web Form. Un formulario Web Form es la pgina Web que los
usuarios visualizan en un navegador. Una aplicacin Web ASP.NET consta de
uno o ms formularios Web Form. Un Web Form es una pgina dinmica que
puede acceder a recursos del servidor.
Por ejemplo, una pgina Web tradicional puede ejecutar scripts en el cliente
para realizar tareas bsicas. En cambio, un formulario Web Form ASP.NET
tambin puede ejecutar cdigo en el lado servidor para acceder a una base de
datos, generar formularios Web Forms adicionales, o aprovechar la seguridad
incorporada en el servidor.
Adems, como un formulario Web Form ASP.NET no depende de utilizar
scripts en el cliente, no depende del tipo de navegador del cliente o del sistema
operativo. Esta independencia permite desarrollar un nico formulario Web
Form que puede ser visualizado prcticamente en todos los dispositivos que
dispongan de acceso a Internet y de un navegador Web.
Debido a que ASP.NET forma parte del .NET Framework, podemos desarrollar
aplicaciones Web ASP.NET en cualquier lenguaje basado en .NET.
Introduccin
Qu es ASP.NET?
Servicios Web XML
16 Descripcin del Microsoft .NET Framework

La tecnologa ASP.NET tambin permite la creacin de servicios Web XML.
Los servicios Web XML son aplicaciones distribuidas que utilizan XML para
transferir informacin entre clientes, aplicaciones y otros servicios Web XML.

Aprenderemos cmo consumir y crear servicios Web XML en el
Mdulo Consumir y crear Servicios Web XML.

Nota
Descripcin del Microsoft .NET Framework 17

Aplicacin Web ASP.NET
Datos
XML
Basede
datos
Internet
Internet
Page1.
aspx
Page2.
aspx
Servicios
Web
Servicios
Web
Componentes
Componentes
Web
Forms
Pginas
cdigo
trasero
global.
asax
Web.
config
machine.
config
ServidorWebASP.NET
C
a
c
h

d
e

S
a
l
i
d
a
Clientes

*****************************
Una aplicacin Web ASP.NET contiene distintas partes y componentes. Crear
aplicaciones Web ASP.NET implica utilizar y trabajar con todos ellos.
En este tema, estudiaremos qu constituye una aplicacin ASP.NET.
Las partes de una aplicacin Web ASP.NET incluyen:
Formularios Web Forms o pginas .aspx
Los formularios Web Forms y las pginas .aspx proporcionan la interfaz de
usuario para la aplicacin Web.
Pginas con cdigo trasero
Las pginas con cdigo trasero estn asociadas a los formularios Web
Forms y contienen el cdigo del servidor para el formulario Web Form.
Archivos de configuracin
Los archivos de configuracin son archivos XML que definen la
configuracin predeterminada para la aplicacin Web y para el servidor
Web. Cada aplicacin Web tiene un archivo de configuracin Web.config.
Adems, cada servidor Web tiene un archivo machine.config.
Archivo Global.asax
Los archivos Global.asax contienen el cdigo necesario para responder a los
eventos a nivel de aplicacin provocados por ASP.NET.
Introduccin
Partes de una aplicacin
Web ASP.NET
18 Descripcin del Microsoft .NET Framework

Enlaces a servicios Web XML
Los enlaces a servicios Web XML permiten a la aplicacin Web enviar y
recibir datos de un servicio Web XML.
Conectividad a bases de datos
La conectividad a bases de datos permite a la aplicacin Web transferir
datos desde y hacia fuentes de base de datos.
Cach
El uso de cach permite a la aplicacin Web devolver ms rpidamente
formularios Web Forms y datos tras la primera peticin.

Descripcin del Microsoft .NET Framework 19

Multimedia: modelo de ejecucin de ASP.NET

***************************** use******************************
En esta animacin, observaremos el funcionamiento de ASP.NET para enviar
informacin a un cliente que ha realizado una peticin. Para empezar la
animacin abra el fichero media01.swf.
Cuando el cliente solicita una pgina Web por primera vez, se genera el
siguiente conjunto de eventos:
1. El navegador cliente enva una solicitud GET HTTP al servidor.
2. El parseador ASP.NET interpreta el cdigo fuente.
3. Si el cdigo no se ha compilado todava en una biblioteca de enlace
dinmico (DLL), ASP.NET invoca el compilador.
4. El CLR carga y ejecuta el cdigo Microsoft intermediate language (MSIL).

Cuando el usuario invoca la misma pgina Web por segunda vez, se genera el
siguiente conjunto de eventos:
1. El navegador cliente enva una solicitud GET HTTP al servidor.
2. El CLR carga y ejecuta inmediatamente el cdigo MSIL que ya se ha
compilado durante el primer intento de acceso del usuario.

Introduccin
Primera solicitud
Segunda solicitud
20 Descripcin del Microsoft .NET Framework

Leccin: descripcin de la aplicacin del laboratorio
Instalacin de la aplicacin del laboratorio
Demostracin: la solucin del laboratorio

*****************************use******************************
Esta leccin presenta una introduccin a la aplicacin de laboratorio que
generaremos durante el resto del curso. Tambin tendremos la oportunidad de
explorar una versin completa de la aplicacin de laboratorio y entender parte
de su funcionalidad.
En esta leccin, aprenderemos a:
Conocer la funcionalidad bsica y las caractersticas de la aplicacin de
laboratorio que generaremos en el resto de laboratorios de este curso.
Enumerar el software requerido para ejecutar los laboratorios de este curso.

Introduccin
Objetivo de la leccin
Descripcin del Microsoft .NET Framework 21

Instalacin de la aplicacin de laboratorio
3proyectos
Aplicacin Web
Biblioteca de Clases
Servicio Web XML
12formularios WebForms
3bases de datos
Doctors
Dentists
Coho

*****************************use******************************
En los laboratorios de este curso, generaremos una aplicacin Web ASP.NET
completa que simula un sitio Web interno para la compaa ficticia Coho
Winery. El sitio Web ficticio, que crearemos en nuestro equipo, proporciona
informacin a empleados sobre sus opciones de beneficios.
La aplicacin Web Benefits que desarrollaremos incluye lo siguiente:
Tres proyectos, incluyendo una aplicacin Web, una biblioteca de clases y
un servicio Web XML.
12 formularios Web Forms utilizados para mostrar la informacin de
beneficios de los empleados.
Tres bases de datos SQL Server.

En este curso, podremos escoger entre desarrollar soluciones de
laboratorio utilizando Visual Basic .NET o C#.


Introduccin
Detalles
Nota
22 Descripcin del Microsoft .NET Framework

Los componentes en Visual Basic .NET y C#de la aplicacin Web Benefits se
enumeran en la siguiente tabla.
Pgina Visual
Basic .NET Pgina C# Descripcin Laboratorios

default.aspx
default.aspx.vb
default.aspx
default.aspx.cs
La pgina de inicio. Invoca el componente
BenefitsList y lista las opciones de beneficios en un
control CheckBoxList.
4, 5, 14
dental.aspx
dental.aspx.vb
dental.aspx
dental.aspx.cs
Invoca el servicio Web XML para obtener un listado
de dentistas.
13
doctors.aspx
doctors.aspx.vb
doctors.aspx
doctors.aspx.cs
Lista los principales mdicos de la base de datos
doctors de SQL Server
9, 10, 11, 15
dsDoctors.vb
dsDoctors.xsd
dsDoctors.cs
dsDoctors.xsd
Contiene el esquema del DataSet utilizado en el
formulario Web Form doctors.aspx.
9
growth.xml
lgcap.xml
midcap.xml
smcap.xml
growth.xml
lgcap.xml
midcap.xml
smcap.xml
Archivos XML con la informacin de prospectos. 12
header.ascx header.ascx Control de usuario que es la cabecera de cada pgina. 4, 5, 15
life.aspx
life.aspx.vb
life.aspx
life.aspx.cs
Formulario de entrada de datos sobre seguros de vida.
Utiliza controles de validacin.
4, 7, 14
login.aspx
login.aspx.vb
login.aspx
login.aspx.cs
Pgina de inicio de sesin para el sitio Web. 17
medical.aspx
medical.aspx.vb
medical.aspx
medical.aspx.cs
Formulario de entrada de datos mdicos. La pgina
utilizada para seleccionar un mdico de asistencia
primaria de la pgina doctors.aspx.
8, 15
mutual_funds.xml mutual_funds.xml Archivo XML que contiene la lista de los fondos
habituales de inversin.
12
namedate.ascx
namedate.ascx.vb
namedate.ascx
namedate.ascx.cs
Control de usuario utilizado para recoger la
informacin del nombre y fecha de nacimiento. Se
utiliza en la pgina medical.aspx.
8, 14
nestedData.aspx
nestedData.aspx.vb
nestedData.aspx
nestedData.aspx.cs
Permite crear un archivo XML anidado desde varias
tablas que componen la base de datos doctors.
12
prospectus.aspx
prospectus.aspx.vb
prospectus.apsx
prospectus.aspx.cs
Muestra un prospecto de los planes de pensiones de un
determinado archivo XML utilizando un archivo de
hojas de estilo.
12
prospectus_style.xsl prospectus_style.xsl Archivo de hojas de estilo para mostrar los prospectos. 12
register.aspx
register.aspx.vb
register.aspx
register.aspx.cs
Agrega nuevos usuarios a la base de datos de Coho
Winery.
16
retirement.aspx
retirement.aspx.vb
retirement.aspx
retirement.aspx.cs
Muestra los datos XML del archivomutual_funds.xml
en formato HTML.
12, 14
securitytest.aspx
securitytest.aspx.vb
securitytest.aspx
securitytest.aspx.cs
Muestra la identidad y el mtodo de autenticacin
utilizado para validar al usuario actual, y verificar el
sistema de seguridad.
16

Descripcin del Microsoft .NET Framework 23

(continuacin)
Pgina Visual
Basic .NET Pgina C# Descripcin Laboratorios

signout.aspx
signout.aspx.vb
signout.aspx
signout.aspx.cs
Permite al usuario cerrar sesin y salir del sistema. 16
Web.config Web.config Archivo de configuracin. 14, 15, 16
Proyecto
componente
BenefitsListVB
Proyecto
componente
BenefitsListCS
Este proyecto contiene un componente Visual Basic
.NET o C#denominado Class1.vb o Class1.cs que
devuelve un listado de las opciones de beneficios.
3
Proyecto servicio
Web DentalService
Proyecto servicio
Web DentalService
Este proyecto contiene un servicio Web XML
denominado DentalService.asmx
(DentalService.asmx.vb y DentalService.asmx.cs).
Este servicio Web XML lee informacin de la base de
datos dentists de SQL Server y devuelve la
informacin en un DataSet.
13

24 Descripcin del Microsoft .NET Framework

Demostracin: solucin del laboratorio
Medical
Medical.aspx
Medical
Medical.aspx
Pginainicio
Benefits
Default.aspx
Pginainicio
Benefits
Default.aspx
LifeInsurance
Life.aspx
LifeInsurance
Life.aspx
Retirement
Retirement.aspx
Retirement
Retirement.aspx
Dentists
Dental.aspx
Dentists
Dental.aspx
Dentists
Doctors
Doctors.aspx
Doctors
Doctors.aspx
Doctors
Pginainicio
Login.aspx
Pginainicio
Login.aspx
Registro
Register.aspx
Registro
Register.aspx
Coho
Winery
Prospectus
Prospectus.aspx
Prospectus
Prospectus.aspx
Servicio
WebXML
dentalService1.asmx
Servicio
WebXML
dentalService1.asmx
Encabezado
pgina
Header.ascx
Encabezado
pgina
Header.ascx
ASPState
tempdb
AplicacinWeb
Laboratorio
Control usuario
namedate.ascx
Control usuario
namedate.ascx
Componente
Men
Class1.vbor Class1.cs
Componente
Men
Class1.vbor Class1.cs
Arch.
XML
Web.
config

*****************************use******************************
En esta demostracin, veremos las caractersticas y funcionalidades de la
aplicacin Web Benefits. Para seguir esta demostracin es necesario instalar la
aplicacin Web Benefits, siguiendo los pasos de la Gua de instalacin.
Default.aspx es la pgina de inicio de la aplicacin Web Benefits. Desde esta
pgina, los usuarios pueden navegar a otros formularios Web, incluyendo las
pginas para introducir informacin sobre beneficios especficos, como
coberturas de seguros de vida, planes de pensiones, seguros mdicos y
coberturas dentales.
Ejecutar la aplicacin
1. Abrir el proyecto LabApplication en Visual Studio .NET 2003
Seleccionar los tres proyectos utilizando el Explorador de soluciones. Cada
proyecto se proporciona en sus versiones de Visual Basic .NET y C#.
Seleccionar las bases de datos utilizando el Explorador de soluciones.
2. Generar LabApplication.
3. Abrir Microsoft Internet Explorer y navegar a
http://localhost/BenefitsVB/default.aspx para mostrar la solucin en
Visual Basic .NET y navegar a http://localhost/BenefitsCS/default.aspx para
mostrar la solucin en C#.
La aplicacin Web tiene proteccin; por tanto, se redirecciona a la pgina
login.aspx para iniciar sesin. Esto se establece en el archivo Web.config.
La pgina login.aspx compara los datos de usuario con los nombres y
contraseas de usuario almacenadas en la base de datos coho de SQL
Server.
Introduccin
Descripcin del Microsoft .NET Framework 25

4. Hacer clic en Click here!
Como actuamos como un nuevo usuario, la pgina register.aspx se utiliza
para agregarnos a la lista de usuarios registrados de la aplicacin Web
Benefits.
5. Introducir la informacin de usuario y hacer clic en Save.
Cuando la pgina register.aspx nos agregue a la base de datos e iniciemos
sesin, se mostrar la pgina default.aspx, ya que es la pgina que
solicitamos originalmente.
La pgina default.aspx tiene un control de usuario que es un anuncio de
pgina con enlaces en la parte superior. Este control de usuario lee del
mismo componente que la lista de casillas de verificacin de la pgina.
6. Seleccionar algunas casillas de verificacin y hacer clic en Submit.
Cuando se hace clic en Submit, la pgina lee qu casillas de verificacin
estn seleccionadas y muestra una lista de salida.
7. Hacer clic en Life Insurance.
La pgina Life Insurance utiliza controles de servidor, controles de
validacin y un control de validacin de resumen. Un control calendario
muestra la fecha actual.
8. Introducir informacin incorrecta y hacer clic en Save.
Se muestran mensajes de Error en un control de resumen de validacin.
9. Introducir informacin correcta y hacer clic en Save.
10. Hacer clic en Medical.
Esta pgina utiliza un control de usuario y variables de sesin para mostrar
el mismo nombre y la fecha de nacimiento introducidos en la pgina Life
Insurance.
11. Hacer clic en Select a doctor.
Este enlace redirecciona a la pgina doctors.aspx. La pgina doctors.aspx
utiliza conexin a base de datos y un control DataGrid. La pgina
doctors.aspx invoca procedimientos almacenados y clasifica y pagina los
datos.
12. Hacer clic en Select para seleccionar un mdico y clic en Submit.
La informacin del mdico seleccionado se retorna a la pgina medical.aspx
de la URL (Uniform Resource Locator).
13. Hacer clic en Retirement Account.
Esta pgina obtiene su informacin de varios documentos de datos en
formato XML. Un contador de pginas muestra el nmero de visitas que se
han realizado a la pgina.
14. Hacer clic en Dental.
La pgina dental.aspx conecta con el servicio Web XML DentalService, que
lee una lista de dentistas de la base de datos SQL Server dentists.

26 Descripcin del Microsoft .NET Framework

Leccin: Recursos .NET
Recursos.NET

*****************************use******************************
En esta leccin, estudiaremos algunos de los recursos disponibles para el
desarrollo de aplicaciones Web en Visual Studio .NET.
En esta leccin, aprenderemos a encontrar la informacin necesaria para
desarrollar aplicaciones Web ASP.NET.
Introduccin
Objetivo de la leccin
Descripcin del Microsoft .NET Framework 27

Recursos .NET
Documentacin del .NET Framework
Cdigo de ejemplo
Tutorialesde Inicio rpido
Comunidades online
Sitios Web
www.gotdotnet.com
www.asp.net
msdn.microsoft.com
www.google.com

*****************************use******************************
En el aprendizaje del desarrollo con .NET, es posible que necesite buscar
soluciones para algunos problemas. La siguiente lista de recursos pretende ser
un punto de partida para encontrar ms informacin sobre .NET, adems de
respuestas a preguntas especficas:
Documentacin del .NET Framework. La documentacin del .NET
Framework se encuentra en dos sitios distintos.
En un equipo con Visual Studio .NET instalado, podemos acceder a la
documentacin desde Visual Studio .NET (en el men de Ayuda, o
pulsando F1).
Otra forma de acceder a la documentacin es seleccionar Todos los
programas en el men Inicio, seleccionar Microsoft .NET
Framework SDK, y hacer clic en Documentacin.
La documentacin del .NET Framework contiene cdigo de ejemplo en
varios idiomas, adems de tutoriales de inicio rpido.
Comunidades online. Las comunidades online son grupos de noticias
especficos de .NET.
Sitios Web externos. Existen varios sitios Web externos que ofrecen
conocimientos en profundidad sobre el desarrollo de .NET:
El primer sitio, http://www.gotdotnet.com, ofrece informacin detallada
para desarrolladores, ejemplos de cdigo, comunidades .NET y ms.
El segundo sitio, http://www.asp.net, es un sitio Web completamente
dedicado a los desarrolladores de ASP.NET.
Recursos
28 Descripcin del Microsoft .NET Framework

Tambin podemos acceder a los recursos disponibles en MSDN en
http://www.msdn.microsoft.com.
El sitio Web http://www.google.com es otra fuente para buscar
informacin sobre el desarrollo con .NET.



ndice
Descripcin 1
Leccin: Descripcin de Visual Studio .NET 2
Leccin: Crear un proyecto de aplicacin Web ASP.NET 26

Uso de Microsoft Visual Studio .NET
1 Uso de Microsoft Visual Studio .NET


Descripcin
Descripcin
Descripcin de Visual Studio .NET
Crear un proyecto de aplicacin Web ASP.NET

*****************************use******************************
En este mdulo, estudiaremos cmo utilizar las principales caractersticas de
Visual Studio .NET para crear aplicaciones Web con ASP.NET.
Visual Studio .NET es el entorno de desarrollo global que se utiliza para crear
potentes y fiables soluciones Web empresariales. Ofreciendo capacidades de
desarrollo Web extremo a extremo y componentes de servidor escalables y
reutilizables, Visual Studio .NET permite incrementar la productividad y
ayudar a crear aplicaciones y sitios Web ASP.NET ms eficazmente.
En este mdulo, aprenderemos a:
Navegar por el entorno de desarrollo integrado (Integrated Development
Environment, IDE) de Visual Studio .NET.
Crear, generar y visualizar un proyecto de aplicacin Web ASP.NET.

Introduccin
Objetivos
Uso de Microsoft Visual Studio .NET 2


Leccin: Descripcin de Visual Studio .NET
Leccin: Descripcin de Visual Studio .NET
Por quVisual Studio .NET?
Pgina de inicio
Plantillas de proyecto disponibles
Prctica: Seleccionar la plantilla del proyecto
IntegratedDevelopmentEnvironment(IDE)
Demostracin: Uso del IDE de Visual Studio .NET
Prctica: Uso del IDE de Visual Studio .NET

*****************************use******************************
Esta leccin presenta una introduccin al IDE de Visual Studio .NET. El IDE es
la interfaz de usuario (IU) comn y el conjunto de herramientas que se utilizan
para los distintos tipos de proyectos y lenguajes de programacin soportados
por Visual Studio .NET.
En esta leccin, aprenderemos a:
Entender la utilidad de Visual Studio .NET.
Explicar los enlaces de la pantalla de bienvenida del IDE.
Identificar los tipos de proyectos y plantillas disponibles.
Identificar las ventanas disponibles en el IDE.

Introduccin
Objetivos de la leccin
3 Uso de Microsoft Visual Studio .NET


Por qu Visual Studio .NET?
Por quVisual Studio .NET?
Un IDE para mltiples lenguajes y mltiples tipos de
proyectos
Mltiples lenguajes en un proyecto
Mltiples tipos de proyectos en una solucin
Navegador integrado
Soporte de depuracin
Interfaz personalizable

*****************************use******************************
Visual Studio .NET simplifica el desarrollo de soluciones Web empresariales
potentes y fiables e incrementa la eficacia del desarrollador al proporcionar un
entorno de desarrollo compartido y familiar. Los componentes ya desarrollados,
los asistentes de programacin y la posibilidad de reutilizar componentes
escritos en cualquier lenguaje pueden reducir significativamente el tiempo de
desarrollo. La opcin de completar el cdigo basada en Microsoft IntelliSense
permite producir cdigo preciso ms rpidamente. El potente soporte de
depuracin multilenguaje extremo a extremo ayuda a que las aplicaciones estn
operativas ms rpidamente.
Visual Studio .NET tiene un nico IDE que proporciona un aspecto coherente,
con independencia del lenguaje de programacin que se utilice o el tipo de
aplicacin que se desarrolle. Las caractersticas que antes estaban disponibles
para un nico lenguaje, ahora estn disponibles para todos los lenguajes.
Visual Studio .NET soporta el desarrollo en varios de los lenguajes basados en
Microsoft .NET. Este soporte de diversos y distintos lenguajes permite a los
desarrolladores trabajar con el lenguaje que prefieran, puesto que ya no
necesitan aprender un nuevo lenguaje para cada nuevo proyecto.
Los lenguajes que se incluyen en Visual Studio .NET son:
Microsoft Visual Basic .NET
C#
J #
Microsoft Visual C++

Introduccin
Un IDE
Mltiples lenguajes
Uso de Microsoft Visual Studio .NET 4



Para ms informacin sobre los lenguajes disponibles basados en .NET,
consultar el Mdulo Uso de lenguajes basados en Microsoft .NET.

Nota
5 Uso de Microsoft Visual Studio .NET


Visual Studio .NET soporta el desarrollo de mltiples tipos de proyectos, que
abarcan desde aplicaciones basadas en Microsoft Windows hasta aplicaciones
Web ASP.NET y servicios Web XML.
Este soporte para mltiples tipos de proyectos permite trabajar de forma
simultnea en varios proyectos sin necesidad de cambiar el entorno de
desarrollo o aprender nuevas interfaces de herramientas o lenguajes.
Visual Studio .NET contiene un navegador integrado basado en Microsoft
Internet Explorer. El navegador est integrado en el IDE y puede accederse a l
desde mltiples ventanas y mens.
Esta accesibilidad al navegador permite visualizar el sitio Web durante el ciclo
de desarrollo sin tener que transferir a otro programa y volver a escribir las
cadenas de la URL (Uniform Resource Locator).
Visual Studio .NET est diseado para soportar depuracin desde el cdigo
inicial hasta el despliegue de la aplicacin. El soporte de depuracin incluye
puntos de interrupcin, expresiones break, expresiones watch y la posibilidad
de recorrer el cdigo de instrucciones o procedimientos paso a paso.

Para ms informacin sobre la depuracin, consultar el Mdulo
Seguimiento en las aplicaciones Web Microsoft ASP.NET.

El IDE de Visual Studio .NET puede personalizarse a nivel de ventanas y
herramientas. Por tanto, podemos mostrar nicamente las herramientas o
ventanas que utilicemos en un momento determinado y ocultar el resto.
Mltiples tipos de
proyectos
Navegador integrado
Soporte de depuracin
Nota
Interfaz personalizable
Uso de Microsoft Visual Studio .NET 6


Pgina de inicio
Pgina de inicio
Acceso de soporte en lnea
Proyectos recientes

*****************************use******************************
Cada vez que iniciamos Visual Studio .NET, se muestra la pgina de inicio.
Esta pgina proporciona una ubicacin centralizada para establecer
preferencias, leer noticias sobre productos, acceder a discusiones con otros
desarrolladores y obtener otra informacin que puede utilizarse para iniciarse en
el entorno de Visual Studio .NET.
Podemos visualizar la pgina de inicio en cualquier momento mientras
trabajamos en el entorno de desarrollo.
Visualizar la pgina de inicio
En el men de Ayuda, hacer clic en Mostrar pgina de inicio.

Si hacemos clic en Introduccin, la ayuda dinmica muestra temas sobre el
inicio de nuevos proyectos, y se muestran las dos carpetas siguientes:
Proyectos
La carpeta Proyectos muestra enlaces a los ltimos proyectos en los que se
ha trabajado. Esta carpeta permite abrir rpidamente Visual Studio .NET y
cargar todos los archivos relacionados con los proyectos actuales.
Encontrar ejemplos
La carpeta Encontrar ejemplos presenta un motor de bsqueda que busca
cdigo de ejemplo por lenguaje y palabra clave en lnea desde ms-
help://MS.VSCC.

Introduccin
Introduccin
Novedades
7 Uso de Microsoft Visual Studio .NET


Si hacemos clic en Novedades se nos proporciona acceso a las actualizaciones
en las secciones Recursos de Visual Studio, Recursos para Partners e
Informacin de Producto.
Hacer clic en Comunidad en lnea proporciona acceso a los sitios de Microsoft
Visual Studio .NET Web y los grupos de noticias relacionados.
Hacer clic en Titulares proporciona acceso a las caractersticas de Visual
Studio .NET, artculos tcnicos y a la base de conocimiento de Microsoft Visual
Studio .NET.
Hacer clic en Bsqueda en lnea proporciona un motor de bsqueda que
accede a la biblioteca en lnea de Microsoft MSDN.
Hacer clic en Descargas proporciona acceso a descargas relacionadas con
Visual Studio .NET, cdigo de ejemplo y material de referencia.
Hacer clic en Servicios Web XML proporciona herramientas para encontrar un
servicio Web XML ejecutando una consulta en un directorio de servicios Web
XML denominado UDDI (Universal Description, Discovery, and Integration).
Adems, podemos utilizar la seleccin Servicios Web XML para registrar un
servicio Web XML en el directorio UDDI.
Hacer clic en Alojamiento Web proporciona una lista de enlaces a proveedores
de alojamiento.
Hacer clic en Mi perfil permite establecer un perfil de usuario que ajusta el
cuadro de herramientas, el nuevo proyecto predeterminado y la ayuda dinmica
para adaptarlos a nuestras preferencias de programacin. Podemos cambiar
nuestro perfil en cualquier momento para modificar estas opciones de
configuracin personalizadas.
Tenemos la opcin de escoger un perfil ya existente, como Desarrollador
Visual Basic, o modificar manualmente cada uno de los elementos del perfil.
Comunidad en lnea
Titulares
Bsqueda en lnea
Descargas
Servicios Web XML
Alojamiento Web
Mi perfil
Uso de Microsoft Visual Studio .NET 8


Plantillas de proyectos disponibles
Plantillas de proyectos disponibles
La lista de plantillas de proyectos disponibles se basa
en las selecciones del Perfil y Tipos de proyectos

*****************************use******************************
Visual Studio .NET proporciona plantillas que soportan la creacin de los tipos
de proyectos ms habituales. Estas plantillas contienen todos los archivos
necesarios y trabajan con nuestro perfil para ajustar el IDE a la configuracin
correcta del proyecto seleccionado.
Estas plantillas nos ayudan a aprovechar mejor el tiempo al permitir que nos
concentremos en agregar funciones al proyecto y no tener que establecer la
infraestructura cada vez que cambiamos de tipo de proyecto.
Cuando creamos un proyecto en Visual Studio .NET, tambin creamos un
contenedor de mayor tamao denominado Solucin. Esta Solucin puede
contener mltiples proyectos, del mismo modo que un contenedor de proyectos
puede contener mltiples pginas.
Las soluciones permiten que nos concentremos en el proyecto o conjunto de
proyectos necesarios para desarrollar e implementar nuestra aplicacin, en lugar
de tener que centrarnos en los detalles de administracin de los objetos y de los
archivos que los definen. Al utilizar el concepto de Solucin como contenedor,
sta nos permite:
Trabajar con mltiples proyectos en una misma instancia del IDE.
Trabajar con elementos, configuraciones y opciones aplicables a un grupo
de proyectos.
Administrar archivos miscelneos que se abren fuera del contexto de una
Solucin o de un Proyecto.
Utilizar el Explorador de soluciones, que es una visualizacin grfica de
nuestra solucin, para organizar y administrar todos los proyectos y archivos
necesarios para disear, desarrollar e implementar una aplicacin.
Introduccin
Soluciones y proyectos
9 Uso de Microsoft Visual Studio .NET



Uso de Microsoft Visual Studio .NET 10


Visual Studio .NET incluye mltiples plantillas de proyectos clasificadas por
lenguaje y tipo. Para seleccionar la plantilla correcta, es necesario especificar
antes el lenguaje en el que trabajaremos.
Las plantillas de proyectos disponibles en Visual Basic y Microsoft Visual C#


incluyen:
Plantillas de proyecto Descripcin

Aplicacin para
Windows
La plantilla de proyecto Aplicacin para Windows se utiliza
para crear aplicaciones Windows estndar. Esta plantilla
agrega automticamente las referencias y archivos de
proyecto esenciales que la aplicacin necesita como punto de
inicio.
Biblioteca de clases La plantilla Biblioteca de clases se utiliza para crear clases y
componentes reutilizables que pueden compartirse con otros
proyectos.
Biblioteca de
controles de Windows
La plantilla Biblioteca de controles de Windows se utiliza
para crear controles personalizados para usarlos en
formularios Windows Forms.
Aplicacin Web
ASP.NET
La plantilla de proyecto Aplicacin Web ASP.NET se utiliza
para crear una aplicacin Web ASP.NET en un equipo en el
que se haya instalado Internet Information Services (IIS)
versin 5.0 o posterior. La plantilla crea los archivos bsicos
que se necesitan en el servidor como ayuda para iniciar el
diseo de la aplicacin.
Servicio Web
ASP.NET
La plantilla de proyecto Servicio Web ASP.NET se utiliza
para escribir un servicio Web XML que pueda ser consumido
por otros servicios o aplicaciones Web en una red.
Los servicios Web XML son componentes disponibles en
Internet y estn diseados para interactuar nicamente con
otras aplicaciones Web.
Biblioteca de
controles Web
La plantilla Biblioteca de controles Web se utiliza para crear
controles de servidor Web personalizados. La plantilla agrega
los elementos de proyecto necesarios para iniciar la creacin
de un control que pueda agregarse posteriormente a cualquier
proyecto Web.
Aplicacin de consola La plantilla de proyecto Aplicacin de consola se utiliza para
crear aplicaciones de consola. Normalmente, las aplicaciones
de consola se disean sin una IU grfica y se compilan en un
archivo ejecutable autnomo. Una aplicacin de consola se
ejecuta desde la lnea de comandos intercambiando la
informacin de entrada y de salida entre el smbolo de
sistema y la aplicacin que se est ejecutando.
Servicio de Windows La plantilla Servicio de Windows se utiliza para crear
aplicaciones de servicios de Windows, aplicaciones
ejecutables de ejecucin de larga duracin que se ejecutan en
su propia sesin de Windows.
Proyecto vaco La plantilla Proyecto vaco se utiliza para crear un tipo de
proyecto propio. La plantilla crea la estructura de archivos
necesaria para almacenar la informacin sobre la aplicacin.
Las referencias, archivos o componentes deben agregarse a la
plantilla manualmente.
Plantillas de proyectos
11 Uso de Microsoft Visual Studio .NET


(continuacin)
Plantillas de proyecto Descripcin

Proyecto Web vaco La plantilla Proyecto Web vaco es para usuarios avanzados
que deseen empezar con un proyecto vaco. La plantilla crea
la estructurade archivos necesaria para un proyecto basado en
servidor en un servidor IIS. Las referencias y componentes
(como pginas de formularios Web Forms) deben agregarse
manualmente.
Nuevo proyecto en
carpeta existente
La plantilla de proyecto Nuevo proyecto en carpeta
existente se utiliza para crear un proyecto en blanco en un
directorio de aplicacin existente. Podemos decidir agregar
los archivos desde el directorio de la aplicacin existente en
el nuevo proyecto haciendo clic con el botn derecho en cada
uno de los elementos del Explorador de soluciones y
seleccionando Incluir en el proyecto del men contextual.

La siguiente tabla muestra una lista de plantillas de proyectos adicionales
disponibles en Visual Studio .NET.
Grupo de plantillas Descripcin

Proyectos Visual C++ Las plantillas incluyen:
Proyectos ATL (Active Template Library)
Aplicaciones administradas
Biblioteca de clases administradas
Servicios Web administrados
Proyectos de
instalacin e
implementacin
La plantilla Proyectos de instalacin e implementacin
permite crear instaladores para distribuir una aplicacin. El
archivo Windows Installer (.msi) resultante contiene la
aplicacin, los archivos dependientes, informacin sobre la
aplicacin (como entradas de registro) e instrucciones para la
instalacin.
Otros proyectos Las plantillas incluyen:
Proyectos de bases de datos
Proyectos empresariales
Proyectos de extensibilidad
Proyectos de aplicacin Application Center Test


Las plantillas Biblioteca de clases, Proyecto vaco, Nuevo proyecto en
carpeta existente, Biblioteca de controles Web, Servicio Windows, Biblioteca
de controles Windows y Proyecto Web vaco no estn disponibles en la Edicin
Estndar de Visual Studio .NET.

Nota
Uso de Microsoft Visual Studio .NET 12


Prctica: seleccin de la plantilla de proyecto
Prctica: seleccin de la plantilla de proyecto
Los estudiantes
Seleccionarn la platilla de proyecto correcta
para un determinado escenario
Tiempo: 5 minutos

*****************************use******************************
Escoger la plantilla de proyecto adecuada para cada uno de los
siguientes escenarios:
Se desea crear un control con una IU que pueda reutilizarse en cualquier
aplicacin Windows.
_____________________________________________________________
_____________________________________________________________
Se desea generar una aplicacin que se ejecute en un nico equipo que
utiliza Windows.
_____________________________________________________________
_____________________________________________________________
Se desea crear una aplicacin Web dinmica que incluya pginas Web y que
pueda utilizar servicios Web XML.
_____________________________________________________________
_____________________________________________________________
Se desea crear un componente reutilizable que sea accesible para varias
aplicaciones Windows o Web.
_____________________________________________________________
_____________________________________________________________
13 Uso de Microsoft Visual Studio .NET


Se desea crear un control Web definido por el usuario que pueda ser
utilizado en varias pginas Web.
____________________________________________________________
____________________________________________________________
Se desea crear una aplicacin que se ejecute desde una lnea de comandos.
____________________________________________________________
____________________________________________________________
Se desea crear una clase a cuyos mtodos pueda acceder cualquier
aplicacin Web a travs de Internet.
____________________________________________________________
____________________________________________________________
Se desea crear un servicio Windows que se ejecute de modo continuado, con
independencia de si un usuario ha iniciado sesin o no.
____________________________________________________________
____________________________________________________________

Uso de Microsoft Visual Studio .NET 14


Entorno de desarrollo integrado (IDE)
Entorno integrado de desarrollo (IDE)
Cuadro de
herramientas
Lista de tareas
Explorador
de
soluciones
Ayuda dinmica
Editor/Navegador
Propiedades Explorador
de servidores
Examinador de objetos

*****************************use******************************
El IDE de Visual Studio .NET contiene mltiples ventanas que proporcionan
diversas herramientas y servicios. Muchas de las caractersticas de Visual
Studio .NET estn disponibles desde varias de las ventanas, mens y barras de
herramientas del IDE.
No podemos mover ni ocultar las ventanas del IDE dependiendo de nuestras
preferencias personales. El men Ver se utiliza para seleccionar las ventanas a
mostrar. Podemos hacer clic en el botn del alfiler Ocultar automticamente
para convertir ventanas estticas en ventanas emergentes.
El editor/navegador es la ventana de interfaz principal de Visual Studio .NET.
En modo editor, el editor/navegador muestra el cdigo para editar y
proporciona una interfaz grfica WYSIWYG (What You See Is What You Get)
para la ubicacin de los controles. Podemos arrastrar y soltar para crear el
diseo visual de nuestra aplicacin. A continuacin, podemos gestionar el
diseo lgico de la aplicacin modificando el cdigo del control Web
predeterminado.
Introduccin
Editor/navegador
15 Uso de Microsoft Visual Studio .NET



Hay dos opciones para pantalla del editor: modo Diseo y modo HTML:
Modo Diseo
En modo Diseo, el editor permite mover los controles y los elementos
grficos por la ventana mediante una sencilla operacin de arrastrar y soltar.
Visual Studio .NET proporciona dos esquemas de posicionamiento de
controles para disear pginas Web: FlowLayout y GridLayout. En
FlowLayout, los controles se ubican en la pgina uno a continuacin del
otro, mientras que GridLayout permite posicionar con exactitud cada
control, agregando automticamente etiquetas DHTML (Dynamic Hypertext
Markup Language) a los controles.
Cuando agregamos un control a una pgina Web en modo Diseo, Visual
Studio .NET agrega al formulario Web Form cdigo de soporte y
predetermina las propiedades. A continuacin, podemos cambiar a modo
HTML para mostrar el cdigo y editarlo.
Modo HTML
En modo HTML, Visual Studio .NET destaca nuestro cdigo para que los
distintos elementos, como los nombres de variables y las palabras clave,
sean identificables al instante. La caracterstica de IntelliSense proporciona
sugerencias para la finalizacin automtica y permite generar funciones
simplemente seleccionando desde listas de sintaxis disponibles.
Cuando utilizamos la ventana del editor en modo HTML, aparecen dos
listas desplegables en la parte superior de la ventana: la lista Nombre de
Clase, a la izquierda, y la lista Nombre de Mtodo, a la derecha. La lista
Nombre de Clase muestra todos los controles del formulario asociado. Si
hacemos clic en el nombre de un control de la lista, la lista Nombre de
Mtodo mostrar todos los eventos de ese control. Los eventos son acciones
que puede realizar el control y que pueden ser interpretadas por nuestra
aplicacin. Utilizando conjuntamente las listas Nombre de Clase y
Uso de Microsoft Visual Studio .NET 16


Nombre de Mtodo, podemos localizar y editar rpidamente el cdigo de
nuestra aplicacin.
El Examinador de objetos es una herramienta que proporciona informacin
sobre los objetos y sus mtodos, propiedades, eventos y constantes.

El Explorador de soluciones muestra la jerarqua de los archivos del proyecto.
Desde esta ventana, podemos mover y modificar archivos, por ejemplo:
Utilizar una operacin de arrastrar y soltar para reorganizar elementos.
Seleccionar un elemento del Explorador de soluciones y la ventana
Propiedades mostrar las propiedades de ese elemento. Esto permite
cambiar las propiedades a nivel de proyecto o de pgina.
Hacer clic con el botn derecho en el archivo, proyecto o solucin para ver
las opciones disponibles, incluyendo agregar, generar y editar pginas.

Los tipos de archivos que muestra el Explorador de soluciones incluyen:
Referencias de proyectos que listan las clases que utiliza la pgina y los
controles Web.
Todos los formularios Web Forms del proyecto.
Todas las pginas de cdigo subyacente que contienen la lgica que soporta
los formularios Web Forms.
Carpetas relacionadas con proyectos y sub-elementos.
Examinador de objetos
Explorador de
soluciones
17 Uso de Microsoft Visual Studio .NET



La ayuda dinmica proporciona acceso a temas de la ayuda local y en lnea, en
funcin de la configuracin de Mi perfil, el Tipo de proyecto y la ubicacin
actual del cursor. A medida que nos movemos por el IDE o editamos cdigo,
las opciones disponibles en la ayuda dinmica se ajustan para corresponderse
con nuestra actividad.

Visual Studio .NET permite ajustar las propiedades de documentos, clases y
controles utilizando una ventana comn de Propiedades. Cuando creamos o
seleccionamos un elemento, la ventana Propiedades muestra automticamente
las propiedades relacionadas. Como muestra la siguiente ilustracin, las
propiedades disponibles se listan en la columna izquierda, mientras que las
opciones de configuracin se listan a la derecha.
Ayuda dinmica
Propiedades
Uso de Microsoft Visual Studio .NET 18



La Lista de Tareas permite hacer un seguimiento del estado de las tareas
mientras se desarrollan las aplicaciones. Visual Studio .NET tambin utiliza la
Lista de tareas para sealar errores cuando se genera una aplicacin.
Existen varias formas de agregar una tarea a la Lista de tareas, por ejemplo:
Agregar tareas manualmente, haciendo clic en la Lista de tareas e
introduciendo elementos.
La tarea superior de la Lista de tareas en la siguiente imagen de pantalla es
una tarea aadida manualmente.
Visual Studio .NET agrega automticamente una tarea con smbolos, como
el comentario 'TODO en el cdigo.
La segunda tarea de la siguiente imagen de pantalla ha sido aadida
automticamente por Visual Studio .NET debido a un comentario 'TODO
del cdigo. Para acceder a esta seccin del cdigo, hacemos clic en el
elemento de la Lista de tareas y Visual Studio .NET abrir la pgina referida
en esa lnea de comentario.
Existen varios smbolos (tokens) preestablecidos que pueden utilizarse en el
cdigo y que aadirn automticamente una tarea a la Lista de tareas.
Ver y agregar a la lista de smbolos:
a. En el men Herramientas, hacer clic en Opciones.
b. En el cuadro de dilogo Opciones, en la carpeta Entorno, hacer clic en
Lista de tareas.
Visual Studio .NET agrega automticamente los errores producidos en la
generacin a la Lista de tareas.
La tarea inferior de la siguiente imagen de pantalla se aadi
automticamente cuando se gener la pgina. Para acceder a esta seccin
del cdigo, hacer clic en el elemento de la lista de tareas y Visual Studio
.NET abrir la pgina referida en la lnea que contiene el error.
Lista de tareas
19 Uso de Microsoft Visual Studio .NET




El Explorador de servidores permite examinar conexiones a datos locales,
servidores y servicios de Windows. El Explorador de servidores soporta la
integracin de servicios externos en nuestro sitio Web.

El Cuadro de herramientas permite arrastrar y soltar los controles que formarn
nuestra aplicacin.
Las herramientas disponibles se agrupan por categoras en los siguientes mens:
Datos
Esta categora contiene objetos que permiten a la aplicacin conectarse y
acceder a datos de una base de datos Microsoft SQL Server

y otras bases
de datos.
Web Forms
Esta categora contiene un conjunto de controles de servidor que pueden
agregarse a pginas Web.
Componentes
Esta categora contiene componentes que soportan la infraestructura de
nuestra aplicacin.
HTML
Esta categora contiene un conjunto de controles HTML que pueden
agregarse a la pgina Web. Estos controles pueden ejecutarse tanto en el
lado servidor como en el lado cliente.
Explorador de
servidores
Cuadro de herramientas
Uso de Microsoft Visual Studio .NET 20




21 Uso de Microsoft Visual Studio .NET


Demostracin: Uso del IDE de Visual Studio .NET
Demostracin: Uso de Visual Studio .NET IDE
Abrir Visual Studio .NET
Crear una nueva aplicacin Web ASP.NET
Cambiar el nombre de la aplicacin Web
Agregar tareas a la Lista de tareas
Utilizar la ayuda dinmica

*****************************use******************************
En esta demostracin, aprenderemos a utilizar el IDE de Visual Studio .NET
para crear un proyecto de aplicacin Web ASP.NET, agregar tareas a la Lista
de tareas, utilizar la ayuda dinmica y utilizar el Explorador de servidores.
Ejecutar esta demostracin
1. Abrir Visual Studio .NET.
2. Mostrar las caractersticas de la Pgina de inicio, como Novedades,
Bsqueda en lnea y Mi perfil.
3. Utilizando Visual Studio .NET, crear una nueva solucin en blanco
denominada MyFirstSolution:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Solucin en
blanco.
b. En el cuadro de dilogo Nuevo proyecto, escribir MyFirstSolution en
el cuadro de texto Nombre y hacer clic en Aceptar.
La solucin MyFirstSolution contendr varios proyectos. La solucin sirve
como contenedor para agrupar estos proyectos relacionados.
4. Crear un nuevo proyecto de Aplicacin Web ASP.NET denominado
MyFirstWebApplication en la solucin MyFirstSolution:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto:
En la listaTipos de proyecto, hacer clic en Proyectos Visual Basic. En
la lista dePlantillas, hacer clic en Aplicacin Web ASP.NET,
establecer la Ubicacin en http://localhost/
Crear una solucin
Visual Studio .NET
Crear un proyecto de
aplicacin Web
ASP.NET como parte de
la solucin
Visual Basic .NET
Uso de Microsoft Visual Studio .NET 22


MyFirstWebApplicationVB, hacer clic en Agregar a solucin, y clic
en Aceptar.

En la listaTipos de proyecto, hacer clic en Proyectos Visual C#. En la
lista dePlantillas, hacer clic en Aplicacin Web ASP.NET, establecer
la Ubicacin en http://localhost/MyFirstWebApplicationCS, hacer
clic en Agregar a solucin, y clic en Aceptar.
5. Utilizando el Explorador de soluciones, mostrar los archivos generados al
crear la aplicacin Web.
6. Utilizando el Explorador de Windows, mostrar la ubicacin de los archivos
en el sistema de archivos.
Los archivos de solucin se encuentran en la carpeta
\Mis documentos\Visual Studio Projects\MyFirstSolution.
Los archivos del proyecto Visual Basic .NET se encuentran en la carpeta
\Inetpub\wwwroot\MyFirstWebApplicationVB y los archivos del
proyecto C#se encuentran en la carpeta
\Inetpub\wwwroot\MyFirstWebApplicationCS.
7. En el Explorador de soluciones de Visual Studio .NET, seleccionar
WebForm1.aspx y mostrar las propiedades listadas en la ventana
Propiedades.
8. Utilizando el Cuadro de herramientas, agregar un control Label y un control
Button al formulario Web Form.
Observar que la ventana Propiedades muestra ahora las propiedades del
control Button.
9. En el men Ayuda, hacer clic en Ayuda dinmica.
La ventana de ayuda dinmica se abre con temas relacionados con el control
Button.
10. Hacer clic en el control Label.
La ventana de ayuda dinmica muestra temas relacionados con el control
Label.
11. Hacer clic en el tema Members (System.Web.UI.WebControls) de Label.
El tema se muestra en la ventana principal de Visual Studio .NET.
Mostrar las propiedades Text y Visible.
12. En el Explorador de servidores, expandir Servidores, expandir
nombre_equipo, expandir Servidores SQL Server, y expandir
nombre_equipo.
Se mostrar la lista de bases de datos instaladas en el equipo local que
ejecutan SQL Server.
13. Por ejemplo, abrir la tabla dentists de la base de datos dentists.
14. Si la Lista de tareas no est visible, en el men Ver, hacer clic en Mostrar
tareas y clic en Todos para mostrar la ventana Lista de tareas.
15. Insertar las siguientes tareas:
Agregar un nuevo formulario Web Form de ASP.NET
Agregar un nuevo proyecto a la solucin
16. En el men Archivo, hacer clic en Guardar todo.
C#
Examinar la ubicacin
de los nuevos archivos
Visualizar las
propiedades del
formulario Web Form
Ayuda dinmica
Explorador de
servidores
Lista de tareas
23 Uso de Microsoft Visual Studio .NET



Uso de Microsoft Visual Studio .NET 24


Prctica: uso del IDE de Visual Studio .NET
Prctica: Uso del IDE de Visual Studio .NET
Los estudiantes
Realizarn tareas con el IDE de Visual
Studio .NET
Tiempo
5 minutos

*****************************use******************************
Completar las siguientes tareas y enumerar qu ventana(s) se han
utilizado:
Crear un nuevo proyecto de aplicacin Web.
_____________________________________________________________
_____________________________________________________________
Agregar un control Button al formulario Web Form predeterminado.
_____________________________________________________________
_____________________________________________________________
Agregar una tarea al proyecto.
_____________________________________________________________
_____________________________________________________________
25 Uso de Microsoft Visual Studio .NET


Visualizar las propiedades del proyecto de aplicacin Web.
____________________________________________________________
____________________________________________________________
Determinar qu bases de datos SQL Server estn instaladas en nuestro
equipo.
____________________________________________________________
____________________________________________________________

Uso de Microsoft Visual Studio .NET 26


Leccin: Crear un proyecto de aplicacin Web ASP.NET
Leccin: Crear un proyecto de aplicacin Web ASP.NET
El proceso de desarrollo
Archivos de la aplicacin Web
Estructura de los archivos de la aplicacin Web
Demostracin: Crear un proyecto de aplicacin Web

*****************************use******************************
En esta leccin, estudiaremos cmo crear, generar y visualizar una aplicacin
Web con ASP.NET.
Tras esta leccin, seremos capaces de:
Explicar cmo se desarrollan las pginas de las aplicaciones Web
ASP.NET.
Identificar la funcin de los archivos utilizados por las soluciones Visual
Studio .NET.
Explicar el proceso de generacin de una aplicacin Web ASP.NET.
Crear, generar y visualizar una aplicacin Web ASP.NET.

Introduccin
Objetivos de la leccin
27 Uso de Microsoft Visual Studio .NET


El proceso de desarrollo
El proceso de desarrollo
Crear una especificacin
de diseo
Crear una especificacin
de diseo
Generar
Generar
Probar y
depurar
Probar y
depurar
Crear la interfaz
y escribir cdigo
Crear la interfaz
y escribir cdigo
Crear un
nuevo proyecto
Crear un
nuevo proyecto
Visual Studio .NET
Implementar
Implementar

*****************************use******************************
Visual Studio .NET contiene todo lo necesario para generar una aplicacin Web
ASP.NET de principio a fin.
Crear una aplicacin Web ASP.NET con Visual Studio .NET implica los
siguientes pasos bsicos:
1. Crear una especificacin de diseo
La especificacin de diseo es la gua que utilizaremos cuando creemos una
aplicacin Web. Debemos tomarnos tiempo antes de escribir cdigo para
disear la aplicacin que crearemos. Aunque Visual Studio .NET
proporciona herramientas que nos ayudan a desarrollar rpidamente una
solucin, tener una idea clara de las necesidades del usuario y del conjunto
inicial de caractersticas nos ayudar a ser ms eficaces en nuestro trabajo
de desarrollo. Empezar con una especificacin de diseo tambin nos
ayudar a ahorrar tiempo minimizando el potencial de reescritura de cdigo
debido a una pobre o inexistente especificacin de diseo.
2. Crear un nuevo proyecto
Cuando seleccionamos una nueva plantilla de proyecto, Visual Studio .NET
crea automticamente los archivos y el cdigo predeterminado necesarios
para soportar el proyecto.
Como parte de esta creacin inicial del proyecto, deberamos transferir las
principales tareas de codificacin desde nuestra especificacin de diseo a
la Lista de tareas de Visual Studio .NET. Esta transferencia permite hacer
un seguimiento de nuestro desarrollo contra la especificacin.
3. Crear la interfaz
Introduccin
Uso de Microsoft Visual Studio .NET 28


Para crear la interfaz de nuestra aplicacin Web, en primer lugar
necesitaremos ubicar controles y objetos en las pginas Web utilizando la
ventana Editor/Navegador en modo Diseo.
A medida que agregamos objetos a un formulario, podemos establecer sus
propiedades desde la tabla en la ventana Propiedades o como cdigo en la
ventana de Edicin.

Para ms informacin sobre agregar controles a un formulario Web
Form ASP.NET, consultar el Mdulo Crear un formulario Web Form con
Microsoft ASP.NET.

4. Escribir cdigo
Tras establecer las propiedades iniciales del formulario Web Form
ASP.NET y sus objetos, podremos escribir los procedimientos de eventos
que se ejecutarn al realizar diferentes acciones sobre un control u objeto.
Es posible que tambin necesitemos escribir cdigo para agregar lgica de
negocio y para acceder a datos.

Para ms informacin sobre escribir cdigo en formularios Web
Forms con ASP.NET, ver el Mdulo Agregar cdigo a un formulario Web
Form con Microsoft ASP.NET.

5. Generar
Cuando generamos un proyecto, compilamos todo el cdigo de las pginas
Web y dems archivos de clases en una librera de enlace dinmico
(dynamic-link library, DLL) denominada ensamblado.
Visual Studio .NET tiene dos opciones de generacin: debug y release.
Cuando desarrollamos un proyecto por primera vez, generamos versiones de
depuracin. Cuando estamos preparados para liberar el proyecto, crearemos
una versin release del proyecto.
6. Probar y depurar
Probar y depurar no es un paso a realizar una nica vez, sino algo que se
realiza repetidamente durante el proceso de desarrollo. Cada vez que
realizamos un cambio importante, es necesario generar una versin de
depuracin de la aplicacin para asegurarnos de que funciona segn lo
previsto.
Visual Studio .NET ofrece numerosas herramientas de depuracin que
podemos utilizar para encontrar y solucionar errores de nuestra aplicacin.
7. Implementar
Cuando un proyecto est totalmente depurado y se ha generado una versin
release, podemos implantar los archivos generados en un servidor Web en
produccin.

Para ms informacin sobre implementar una aplicacin Web
ASP.NET, consultar el Mdulo Configuracin, optimizacin y distribucin
de aplicaciones Web ASP.NET.


Nota
Nota
Nota
29 Uso de Microsoft Visual Studio .NET


Archivos en aplicaciones Web
Archivos en aplicaciones Web
Archivos de solucin (.sln, .suo)
Archivos de proyecto (.vbproj, .csproj)
Archivos de aplicacin Web
Formularios Web FormsASP.NET(.aspx)
Servicios Web ASP.NET (.asmx)
Clases, pginas de cdigo subyacente (.vbo .cs)
Clases de aplicaciones globales (.asax)
Archivo Web.config
Ensamblado del proyecto (.dll)

*****************************use******************************
Cuando creamos un nuevo proyecto o trabajamos con proyectos existentes,
Visual Studio .NET crea un determinado conjunto de archivos que soportan
nuestro desarrollo.
Al crear un nuevo proyecto, tambin se crea una solucin, aunque la solucin
nicamente tenga un proyecto. Se crea una carpeta para cada solucin en la
carpeta \Mis documentos\Visual Studio Projects que contiene los archivos
.sln y .suo.
Archivos de solucin (.sln)
La extensin de archivo NombreSolucin.sln se utiliza para archivos de
solucin que enlazan uno o ms proyectos, y almacena informacin global.
Los archivos .sln son similares a los archivos de grupo Visual Basic (.vbg),
que aparecen en versiones anteriores de Visual Basic.
Solution User Options (.suo)
La extensin de archivo NombreSolucin.suo se utiliza para archivos que
acompaan los registros de solucin y las personalizaciones que
agreguemos a nuestra solucin. Este archivo guarda nuestra configuracin,
como puntos de interrupcin y elementos de tareas, para que sean
recuperados cada vez que abramos la solucin.

Cada proyecto es una nica aplicacin Web almacenada en su propia carpeta.
Dentro de la carpeta de proyecto se encuentra el archivo de configuracin del
proyecto y los archivos reales que constituyen el proyecto. El archivo de
configuracin del proyecto es un documento XML que contiene referencias a
todos los elementos del proyecto, como formularios y clases, adems de
referencias de proyecto y opciones de compilacin.
Introduccin
Archivos de solucin
Archivos de proyecto
Uso de Microsoft Visual Studio .NET 30


Los archivos de proyecto Visual Basic .NET utilizan una extensin .vbproj,
mientras que C#utiliza .csproj. Estas extensiones permiten diferenciar entre
archivos escritos en otros lenguajes compatibles con .NET y facilitan la
inclusin de mltiples proyectos basados en diferentes lenguajes en la misma
solucin.
Los proyectos de aplicaciones Web se crean en una nueva carpeta
\Inetpub\wwwroot. Adems, en IIS, se crea un directorio virtual que apunta a
la carpeta del proyecto.
Visual Studio .NET soporta varios tipos de archivos de aplicaciones y
extensiones:
Formularios Web Forms ASP.NET (.aspx)
Los formularios Web Forms ASP.NET se utilizan cuando es necesario
generar sitios Web dinmicos a los que los usuarios accedern directamente.
Los formularios Web Forms ASP.NET pueden estar soportados por una
pgina de cdigo subyacente diseada por la extensin WebForm.aspx.vb o
WebForm.aspx.cs.
Servicios Web ASP.NET (.asmx)
Los servicios Web se utilizan cuando deseamos crear sitios Web dinmicos
a los que nicamente accedern otros programas.
Los servicios Web ASP.NET pueden estar soportados por una pgina de
cdigo subyacente designada por la extensin WebService.asmx.vb o
WebService.asmx.vb.
Clases y pginas de cdigo subyacente (.vb o .cs)
Las versiones anteriores de Visual Basic utilizaban diferentes extensiones de
archivo para distinguir entre clases (.cls), formularios (.frm), mdulos (.bas),
y controles de usuario (.ctl). Visual Basic .NET permite mezclar mltiples
tipos en un nico archivo .vb.
Las pginas de cdigo subyacente utilizan dos extensiones: el tipo de pgina
(.aspx o .asmx) y la extensin de Visual Basic (.vb) o la extensin de C#
(.cs). Por ejemplo, el nombre de archivo completo para la pgina de cdigo
subyacente de un formulario Web Form ASP.NET predeterminado es
WebForm1.aspx.vb para un proyecto Visual Basic .NET y para un proyecto
C#es WebForm1.aspx.cs.

Estudiaremos ms sobre pginas de cdigo subyacente en el Mdulo
Agregar cdigo a un formulario ASP.NET.

Archivos de descubrimiento (.disco y .vsdisco)
Los archivos de descubrimiento son archivos basados en XML que
contienen enlaces (URLs) a recursos que proporcionan informacin para el
descubrimiento programtico de un servicio Web XML.
Clases de aplicacin global (global.asax)
El archivo Global.asax, tambin conocido como el archivo de la aplicacin
ASP.NET, es un archivo opcional que contiene cdigo para responder a
eventos a nivel de aplicacin provocados por ASP.NET o por HttpModules.
En tiempo de ejecucin, se parsea Global.asax y se compila en una clase
.NET Framework generada dinmicamente y derivada de la clase base
HttpApplication.
Archivos de
aplicaciones Web
Nota
31 Uso de Microsoft Visual Studio .NET


Archivos de recursos (.resx)
Un recurso es cualquier dato no ejecutable implantado lgicamente con una
aplicacin. Un recurso puede mostrarse en una aplicacin como un mensaje
de error o como parte de la IU. Los recursos pueden contener datos de
diversos tipos, incluyendo cadenas, imgenes y objetos persistentes.
Almacenar los datos en un archivo de recursos permite modificarlos sin
necesidad de recompilar toda la aplicacin.
Styles.css
Styles.css es el archivo de hojas de estilo predeterminado para la aplicacin
Web.
Archivo Web.config
Este archivo Web.config contiene opciones de configuracin que el CLR
lee, como polticas de enlace de ensamblados, objetos remoting, etc., y otras
configuraciones que la aplicacin puede leer. Los archivos Web.config
tambin contienen las clases de aplicacin global soportadas por un
proyecto.

Los archivos que no estn basados en un lenguaje de programacin tendrn sus
propias extensiones. Por ejemplo, un archivo Crystal Reports utiliza la
extensin .rpt y un archivo de texto utiliza .txt.
Cuando se compila un proyecto Web, se crean dos tipos adicionales de
archivos:
Archivos ensamblados del proyecto (.dll)
Todas las pginas de cdigo subyacente (.aspx.vb y .aspx.cs) de un proyecto
estn compiladas en un nico archivo ensamblado que se almacena como
ProjectName.dll. Este archivo ensamblado del proyecto se ubica en el
directorio /bin del sitio Web.
AssemblyInfo.vb o AssemblyInfo.cs
El archivo AssemblyInfo se utiliza para describir la informacin general del
ensamblado, como la versin y los atributos del mismo.

Para ms informacin sobre archivos que soportan aplicaciones Web
ASP.NET, consultar la documentacin de Visual Studio .NET.

Otros archivos
Ensamblado de
proyecto
Nota
Uso de Microsoft Visual Studio .NET 32


Estructura de los archivos de una aplicacin Web
Estructura de los archivos de una aplicacin Web
wwwroot wwwroot
Bin Bin
Inetpub Inetpub
ProjectA ProjectA
MisDocumentos MisDocumentos
Archivos de desarrollo Archivos de desarrollo
Archivos de
ensamblado
Archivos de
ensamblado
WebForm1.aspx
WebForm1.aspx.vb
(pgina de cdigo subyacente)
Visual Studio
projects
Visual Studio
projects
Solution Solution
Solution.sln ProjectA.vbproj
ProjectA.dll
Generar

*****************************use******************************
Cuando creamos una aplicacin Web ASP.NET, Visual Studio .NET crea dos
carpetas para almacenar los archivos que soportan esa aplicacin. Cuando
compilamos un proyecto, se crea una tercera carpeta para almacenar el archivo
.dll resultante.
Visual Studio .NET crea una carpeta para la solucin, ProjectA, que contiene el
archivo ProjectA.sln. Este archivo es un mapa de los diversos archivos que
soportan el proyecto.
Tambin podemos crear una solucin en blanco y agregarle proyectos. Si
creamos una solucin en blanco, tendremos una solucin con un nombre
distinto al del proyecto.
Visual Studio .NET tambin crea una carpeta denominada ProjectA, en la
carpeta Inetpub\wwwroot, que contiene los archivos que requiere la aplicacin
Web. Estos archivos incluyen:
El archivo de proyecto, ProjectA.vbproj o ProjectA.csproj, que es un
documento XML que contiene referencias a todos los elementos del
proyecto, como formularios y clases, adems de referencias de proyecto y
opciones de compilacin.
Formularios ASP.NET Web Forms, WebForm1.aspx, o servicios Web
XML, WebService.asmx.
Pginas de cdigo subyacente, WebForm1.aspx.vb, WebService1.asmx.vb,
WebForm1.aspx.cs o WebService1.asmx.cs.
Un archivo Web.config, que contiene las opciones de configuracin de la
aplicacin Web.
Introduccin
Mis documentos
Inetpub
33 Uso de Microsoft Visual Studio .NET


Un archivo Global.asax que gestiona los eventos que son invocados
mientras la aplicacin Web se est ejecutando.

Cuando generamos un proyecto de aplicacin Web, Visual Studio .NET crea un
ensamblado en la carpeta Inetpub\wwwroot\ProjectA\bin. Un ensamblado es un
archivo .dll que se crea desde todas las pginas de cdigo subyacente que
constituyen una aplicacin Web.
El Ensamblado
Uso de Microsoft Visual Studio .NET 34


Demostracin: creacin de un proyecto de aplicacin Web
aplicacin Web
Poblar el formulario WebFormASP.NET
Agregar un nuevo formulario WebForm
ASP.NET
Agregar un nuevo proyecto
Escribir cdigo para el botn
Generar y depurar la solucin

*****************************use******************************
En esta demostracin, aprenderemos a agregar formularios Web Forms a un
proyecto de aplicacin Web, agregar un nuevo proyecto a una solucin y
generar y ejecutar un proyecto de aplicacin Web.
Ejecutar esta demostracin
1. Abrir el archivo de solucin MyFirstSolution.
2. Abrir el archivo WebForm1.aspx en vista de Diseo.
3. Existen ya dos controles, un control Button y un control Label, incluidos en
la demostracin anterior.
4. Seleccionar la etiqueta y cambiar la propiedad ID a lblMessage en la
ventana Propiedades.
5. Hacer doble clic en el control Button para abrir la pgina de cdigo
subyacente del formulario Web Form, y agregar el siguiente comentario al
procedimiento del evento:
'TODO: Write Hello World

//TODO: Write Hello World

Se agrega automticamente una nueva tarea a la Lista de tareas debido al
smbolo TODO.
6. En el men Proyecto, hacer clic en Agregar Web Forms.
7. En el cuadro de dilogo Agregar nuevo elemento, cambiar el nombre
predeterminado por login.aspx, y hacer clic en Abrir.
Poblar un formulario
Web FormASP.NET
Visual Basic .NET
C#
Agregar un nuevo
formulario Web Form
ASP.NET
35 Uso de Microsoft Visual Studio .NET



Tambin podemos agregar un formulario Web Form ASP.NET a un
proyecto haciendo clic con el botn derecho en el proyecto en el Explorador
de soluciones, clic en Agregar y clic en Agregar Web Forms.

8. En la Lista de tareas, seleccionar la casilla de la tarea Agregar un nuevo
formulario Web Form ASP.NET.
9. En el Explorador de soluciones, hacer clic con el botn derecho en la
solucin, clic en Agregar y clic en Nuevo proyecto.
10. En el cuadro de dilogo Agregar nuevo proyecto:
Hacer clic en Visual Basic, clic en Servicio Web ASP.NET, establecer la
ubicacin en http://localhost/MyFirstWebServiceVB, y hacer clic en
Aceptar.
Hacer clic en Visual C#, clic en Servicio Web ASP.NET, establecer la
ubicacin en http://localhost/MyFirstWebServiceCS, y hacer clic en
Aceptar.
El nuevo proyecto tambin contiene un servicio Web XML.
11. En la Lista de tareas, seleccionar la tarea Agregar nuevo proyecto a la
solucin.
12. En la Lista de tareas, hacer doble clic en la tarea TODO: Write Hello
World.
Se abre el archivo correcto y el cursor se sita en la ubicacin apropiada del
cdigo.
13. Escribir el siguiente cdigo:
lblMessage.Txt = "Hello World!"

lblMessage.Txt = "Hello World!";

ste es un error de sintaxis debido a que el cdigo establece la
propiedad Txt en lugar de la propiedad Text. Este error mostrar qu ocurre
cuando falle la generacin.

14. Eliminar TODO del comentario TODO: Write Hello World.
La tarea TODO desaparece automticamente de la Lista de tareas.
15. Verificar que MyFirstWebApplicationVB o MyFirstWebApplicationCS es
el proyecto de inicio. En el Explorador de soluciones,
MyFirstWebApplicationVB o MyFirstWebApplicationCS deberan aparecer
en negrita.

Para establecer MyFirstWebApplicationVB o
MyFirstWebApplicationCS como proyecto de inicio, hacer clic con el
botn derecho en el proyecto MyFirstWebApplicationVB o
MyFirstWebApplicationCS en el Explorador de soluciones y clic en
Establecer como proyecto de inicio.

16. En el men Generar, hacer clic en Generar solucin para generar la
solucin.
Nota
Agregar un nuevo
proyecto
Visual Basic .NET
C#
Escribir cdigo para un
control button
Visual Basic .NET
C#
Nota
Generar y ejecutar la
solucin
Nota
Uso de Microsoft Visual Studio .NET 36


Tanto MyFirstWebApplicationVB o MyFirstWebApplicationCS como
MyFirstWebServiceVB o MyFirstWebServiceCS se han generado, pero
la ventana de Resultados muestra la siguiente condicin de error:
Generar: 1 correctos, 1 incorrectos, 0 omitidos

Y se aade un mensaje de error a la Lista de tareas debido a que Txt no es
un miembro de System.Web.UI.WebControls.Label.
17. Para ver todas las tareas de ambos proyectos, en el men Ver, hacer clic en
Mostrar tareas y clic en Todas.
18. Hacer doble clic en el mensaje de error de la Lista de tareas. El cursor salta
a la ubicacin correcta del cdigo.
19. Corregir el error de sintaxis.
El cdigo correcto debera ser como el siguiente:
lblMessage.Text = "Hello World!"

lblMessage.Text = "Hello World!";

En Visual Basic .NET, cuando retiramos el cursor de la lnea de cdigo
corregida, el error se elimina de la Lista de tareas.
20. En el men Generar, hacer clic en Volver a generar solucin para volver a
generar la solucin.
Verificar que en la ventana Resultados figura el siguiente mensaje:
Volver a generar todo: 2 correctos, 0 incorrectos, 0
omitidos

21. Visualizar la pgina Web en un navegador, hacer clic en WebForm1.aspx
en el proyecto MyFirstWebApplicationVB o MyFirstWebApplicationCS
en el Explorador de soluciones, y hacer clic en Visualizar en navegador.

Podemos generar y examinar un formulario Web Form en un mismo
paso, haciendo clic con el botn derecho en la pgina del Explorador de
soluciones y clic en Generar y examinar.

22. En el navegador, hacer clic en el botn del formulario Web Form, y
comprobar que aparece el mensaje Hello World.
Visual Basic .NET
C#
Ver el resultado
Nota




ndice
Descripcin 1
Leccin: Crear formularios Web Forms 2
Leccin: Uso de controles de servidor 12

Crear formularios Web Forms con
Microsoft ASP.NET
Crear formularios Web Forms con Microsoft ASP.NET 1

Descripcin
Crear formularios Web Forms
Uso de controles de servidor

***************************** use******************************
En este mdulo, estudiaremos cmo crear y poblar formularios Web Forms.
Los formularios Web Forms son pginas Web programables que sirven como
interfaz de usuario (IU) para un proyecto de aplicacin Web utilizando
ASP.NET. Un formulario Web Form presenta informacin al usuario
visualizable en cualquier tipo de navegador, e implementa lgica de aplicacin
utilizando cdigo ejecutable en el servidor.
En este mdulo, aprenderemos a:
Agregar un formulario Web Form a un proyecto de aplicacin Web
ASP.NET.
Utilizar el Cuadro de herramientas de Microsoft Visual Studio .NET para
agregar controles de servidor a un formulario Web Form.

Introduccin
Objetivos
2 Crear formularios Web Forms con Microsoft ASP.NET

Leccin: crear formularios Web Forms
Ques un formulario Web Form?
Crear un formulario WebFormcon Visual Studio .NET
Demostracin: convertir una pgina HTML en un
formulario Web Form

***************************** use******************************
En esta leccin, estudiaremos cmo crear un formulario Web Form. Tambin
aprenderemos cmo identificar las principales caractersticas de los formularios
Web Forms.
En esta leccin, aprenderemos a:
Identificar y explicar el cdigo HTML (Hypertext Markup Language) que
compone un formulario Web Form.
Crear un formulario Web Form utilizando Visual Studio .NET.

Introduccin
Objetivos de la leccin
Crear formularios Web Forms con Microsoft ASP.NET 3

Qu es un formulario Web Form?
<%@ Page Language="vb" Codebehind="WebForm1.aspx.vb"
SmartNavigation="true"%>
<html>
<body ms_positioning="GridLayout">
<form id="Form1" method="post" runat="server">
</form>
</body>
</html>
<%@ Page Language="vb" Codebehind="WebForm1.aspx.vb"
SmartNavigation="true"%>
<html>
<body ms_positioning="GridLayout">
<form id="Form1" method="post" runat="server">
</form>
</body>
</html>
Extensin .aspx
Atributos de pgina
Directiva @ Page
Atributos de cuerpo
Atributos de formulario

***************************** use******************************
Los formularios Web Forms estn formados por una combinacin de HTML,
cdigo y controles que se ejecutan en un servidor Web ejecutando Microsoft
Internet Information Services (IIS). Los formularios Web Forms muestran una
interfaz de usuario que genera HTML y que se enva al navegador, mientras que
el cdigo de soporte y los controles que la componen permanecen en el servidor
Web. Esta divisin entre el interfaz en el cliente y el cdigo en el servidor es
una importante diferencia entre los formularios Web Forms y las pginas Web
tradicionales. Mientras una pgina Web tradicional requiere que todo el cdigo
se enve y se procese en el navegador, los formularios Web Forms nicamente
necesitan enviar al navegador los controles de la interfaz, y el proceso de las
pginas se mantiene en el servidor. Esta divisin entre IU y cdigo aumenta el
nmero de navegadores soportados e incrementa la seguridad y funcionalidad
de la pgina Web.
Los formularios Web Forms se denominan habitualmente pginas ASP.NET o
pginas ASPX. Los formularios Web Forms tienen una extensin .aspx y
funcionan como contenedores para el texto y los controles que deseamos
mostrar en el navegador.
Las pginas ASP.NET (.aspx) y Active Server Pages (ASP) (.asp) pueden
coexistir en el mismo servidor. La extensin del archivo determina si la pgina
la procesa ASP o ASP.NET.
Los formularios Web Forms estn frecuentemente formados por dos archivos
distintos: el archivo .aspx contiene la IU para el formulario Web Form, mientras
que el archivo .aspx.vb o .aspx.cs, denominado pgina de cdigo subyacente,
contiene el cdigo de soporte.
Introduccin
Extensin .aspx
4 Crear formularios Web Forms con Microsoft ASP.NET

Las funciones de un formulario Web Form estn definidas por tres niveles de
atributos. Los atributos de pgina definen las funciones globales, los atributos
de cuerpo definen cmo se mostrar una pgina y los atributos de formulario
definen cmo se procesarn los grupos de controles.
La etiqueta <@Page> define atributos especficos de la pgina que utiliza el
parseador de pginas ASP.NET y el compilador. nicamente podemos incluir
una etiqueta <@ Page>por archivo .aspx. Los siguientes ejemplos son
etiquetas <@ Page>tpicas para Microsoft Visual Basic .NET y para
Microsoft Visual C#

.NET:
<%@ Page Language="vb" Codebehind="WebForm1.aspx.vb"
SmartNavigation="true" %>

<%@ Page Language="c#" Codebehind="WebForm1.aspx.cs"
SmartNavigation="true" %>

Los atributos de una etiqueta <@ Page>incluyen:
Language
El atributo Language define el lenguaje en el que est escrito el script de la
pgina Web. Algunos de los valores de este atributo son: vb, c# y JScript.
Pgina Codebehind
El atributo de pgina Codebehind identifica la pgina de cdigo subyacente
que tiene la lgica que soporta el formulario Web Form. Cuando Visual
Studio .NET crea un formulario Web Form, como WebForm1.aspx, tambin
crea una pgina de cdigo subyacente, WebForm1.aspx.vb o
WebForm1.aspx.cs.

Para ms informacin sobre las pginas de cdigo subyacente,
consultar el Mdulo Agregar cdigo a un formulario Web Form con
Microsoft ASP.NET.

SmartNavigation
El atributo SmartNavigation de ASP.NET permite al navegador actualizar
nicamente las secciones del formulario que han cambiado. Las ventajas de
SmartNavigation son que la pantalla no parpadea mientras se actualiza; en
lugar de ello, se mantiene la posicin de desplazamiento y se mantiene la
"ltima pgina" en el historial. Smartnavigation nicamente est
disponible para los usuarios con Microsoft Internet Explorer 5 o superior.

Atributos de la pgina
Visual Basic .NET
C#
Nota
Crear formularios Web Forms con Microsoft ASP.NET 5

Los atributos de la etiqueta <Body> definen el aspecto de los objetos que se
muestran en el navegador del cliente. La siguiente es una etiqueta <Body>
tpica:
<body ms_positioning="GridLayout">

Los atributos de una etiqueta <Body>incluyen:
PageLayout
El atributo pageLayout (etiquetado como ms_positioning) determina cmo
se posicionan los controles y el texto en la pgina. Existen dos opciones
parapageLayout:
FlowLayout
En FlowLayout, el texto, las imgenes y los controles fluyen por la
pantalla, dependiendo del ancho de la ventana del navegador.
GridLayout
En GridLayout, los campos de texto, las imgenes y los controles de
una pgina estn fijados por coordinadas absolutas. GridLayout es el
valor de pageLayout predeterminado para Visual Studio .NET.
El siguiente cdigo de ejemplo muestra cmo implementar GridLayout
y situar un cuadro de texto:
<body ms_positioning="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:textbox id="txtField1" style="Z-INDEX: 101;
LEFT: 65px; POSITION: absolute; TOP: 98px"
runat="server" Height="26px" Width="194px">
</asp:textbox>
</form>
</body>


La etiqueta <Form> define cmo se procesarn los grupos de controles. La
etiqueta <Form> es diferente del trmino Web Form utilizado para definir la
pgina Web completa. Los atributos de la etiqueta <Form> definen cmo se
procesarn los controles. Aunque podemos tener muchos formularios HTML en
una pgina, nicamente podemos tener un formulario del lado del servidor en
una pgina .aspx.
El siguiente ejemplo es de una etiqueta <Form>tpica:
<form id="Form1" method="post" runat="server">
...
</form>

Atributos del cuerpo
Atributos del formulario
6 Crear formularios Web Forms con Microsoft ASP.NET

Los atributos de una etiqueta <Form> incluyen:
Method
El atributo Method identifica el mtodo para enviar valores de control de
retorno al servidor. Las opciones de este atributo son:
Post
Los datos se pasan en pares nombre/valor dentro del cuerpo de la
peticin HTTP (Hypertext Transfer Protocol).
Get
Los datos se pasan en una cadena de consulta.
Runat
Una de las principales caractersticas de un formulario Web Form es que los
controles se ejecutan en el servidor. El atributo runat="server" hace que el
formulario publique informacin de control de retorno a la pgina ASP.NET
en el servidor donde se ejecuta el cdigo de soporte. Si el atributo runat no
est establecido en "server", el formulario funciona como un formulario
HTML normal.

El siguiente cdigo procede del formulario Web Form predeterminado de
Visual Studio .NET al crear un nuevo proyecto de aplicacin Web ASP.NET
con Visual Basic .NET:
<%@Page Language="vb" AutoEventWireup="false"
Codebehind="WebForm1.aspx.vb"
Inherits="WebApplication1.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>WebForm1</title>
<meta name="GENERATOR" content="Microsoft Visual
Studio.NET 7.1">
<meta name="CODE_LANGUAGE" content="Visual Basic 7.1">
<meta name="vs_defaultClientScript"
content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</head>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
'HTML y controles aqu
</form>
</body>
</html>

Ejemplo con Visual
Basic .NET
Crear formularios Web Forms con Microsoft ASP.NET 7

El siguiente cdigo procede del formulario Web Form predeterminado de
Visual Studio .NET al crear un nuevo proyecto de aplicacin Web ASP.NET
con Visual C#:
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs"
AutoEventWireup="false" Inherits="WebApplication1.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual
Studio 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript"
content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</head>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
'HTML y controles aqu
</form>
</body>
</html>

Ejemplo de C#
8 Crear formularios Web Forms con Microsoft ASP.NET

Crear un formulario Web Formcon Visual Studio .NET
Las nuevas aplicaciones Web ASP.NET crean un
formulario Web predeterminado: WebForm1.aspx
Crear formularios Web Formsadicionales desde el
Explorador de soluciones
Actualizar pginas HTML existentes en formularios
Web Forms

***************************** use******************************
Dependiendo del punto en que nos encontremos en el proceso de desarrollo,
existen varios modos de crear un formulario Web Form.
Cuando creamos un nuevo proyecto en Visual Studio .NET, se incluye
automticamente en el proyecto un formulario Web Form predeterminado
denominado WebForm1.aspx.
Crear un nuevo proyecto de aplicacin Web ASP.NET y un formulario
Web Form predeterminado
1. En Visual Studio .NET, en la Pgina de inicio, hacer clic en Nuevo
proyecto.
2. En el cuadro de dilogo Nuevo proyecto, hacer clic en Aplicacin Web
ASP.NET, escribir el nombre del proyecto en el campo Ubicacin y
hacer clic en Aceptar.
Visual Studio .NET crea una nueva aplicacin Web y un formulario Web
Form predeterminado denominado WebForm1.aspx.

Si estamos expandiendo un proyecto existente, podemos utilizar el Explorador
de soluciones para agregar rpidamente formularios Web Forms adicionales.
Agregar formularios Web Forms adicionales a un proyecto de
aplicacin Web
1. En la ventana del Explorador de soluciones, hacer clic con el botn
derecho en el nombre del proyecto, seleccionar Agregar, y hacer clic en
Agregar formulario Web Form. Se abrir el cuadro de dilogo Agregar
nuevo elemento - NombreProyecto.
2. En el cuadro de dilogo Agregar nuevo elemento - NombreProyecto,
cambiar el nombre del formulario Web Form, y hacer clic en Abrir.
Se crear un nuevo formulario Web Form y se agregar al proyecto.

Introduccin
Aplicaciones Web
nuevas
Crear formularios Web
Forms adicionales
Crear formularios Web Forms con Microsoft ASP.NET 9

Si estamos revisando un sitio Web existente, podemos importar pginas HTML
a Visual Studio .NET y actualizar esas pginas a formularios Web Forms.
Actualizar pginas HTML existentes
1. En el Explorador de soluciones, hacer clic con el botn derecho en el
nombre del proyecto, seleccionar Agregar y hacer clic en Agregar
elemento existente.
2. En el cuadro de dilogo Agregar elemento existente, navegar hasta la
ubicacin del archivo HTML, hacer clic en el nombre del archivo y
posteriormente en Abrir.
3. Cambiar el nombre del archivo nombreArchivo.htm por
nombreArchivo.aspx, y hacer clic en S a la pregunta de si estamos
seguros de desear cambiar la extensin del archivo.
4. Cuando se nos pregunte si deseamos crear un nuevo archivo de clase,
hacer clic en S.

Actualizar pginas
HTML
10 Crear formularios Web Forms con Microsoft ASP.NET

Demostracin: convertir una pgina HTML en un formulario Web
Form
Cambiar la extensin .htmpor la
extensin .aspx

***************************** use******************************
Un modo rpido de crear pginas Web ASP.NET es convertir las pginas
HTML existentes.
Ejecutar esta demostracin
1. Iniciar Visual Studio .NET.
2. Crear un nuevo Proyecto de aplicacin Web ASP.NET y establecer la
ubicacin en http://localhost/Demos03.
3. Hacer clic en Agregar elemento existente en el men Archivo.
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente, hacer clic en Todos los archivos (*.*).
5. Seleccionar la pgina HTMLPage.htm y hacer clic en Abrir. Este
archivo se puede encontrar dentro del fichero demos03.zip.
6. Abrir la pgina HTMLPage.htm y cambiar a la vista HTML.
7. Agregar una cuarta opcin al cuadro de lista que contenga Lead
Program Manager para mostrar que la ayuda de contexto IntelliSense
est funcionando en el archivo HTML.
El cdigo debera ser parecido el siguiente:
<option>Lead Program Manager</option>

8. Guardar los cambios de la pgina.
9. En el Explorador de soluciones, hacer clic con el botn derecho en
HTMLPage.htm y hacer clic en Cambiar nombre. Cambiar la
extensin .htm de la pgina por .aspx, hacer clic en S cuando se nos
pregunte si se estamos seguros, y hacer clic en S de nuevo cuando se nos
pregunte si deseamos crear un nuevo archivo de clase.
10. En la pgina HTMLPage.aspx, observamos que se ha aadido una
directiva@Page a la pgina.
Crear formularios Web Forms con Microsoft ASP.NET 11

11. Hacer clic en Mostrar todos los archivos en el Explorador de soluciones
para mostrar la pgina de cdigo subyacente que se ha creado.
12. Hacer clic en Guardar para guardar el proyecto.
13. Hacer clic con el botn derecho sobre HTMLPage.aspx en el Explorador
de soluciones, clic en Generar y examinar para generar el proyecto y
visualizar la pgina en el navegador de Visual Studio .NET.
Debemos generar el proyecto puesto que Visual Studio .NET necesita
compilar la nueva pgina de cdigo subyacente.
14. Escribir un nombre en el cuadro de texto Nombre, hacer clic en una
profesin en la lista Profession y hacer clic en Guardar.
Cuando se muestre la pgina de nuevo, la informacin en los controles se
habr perdido. Es el comportamiento predeterminado de los formularios
HTML.
15. Hacer clic con el botn derecho en la pgina y clic en Ver fuente para
mostrar el HTML fuente en el cliente.
El HTML enviado al cliente es el mismo que el HTML creado en el
servidor.
16. Cerrar la vista del cdigo fuente HTML en el navegador.

12 Crear formularios Web Forms con Microsoft ASP.NET

Leccin: uso de controles de servidor
Ques un control de servidor?
Tipos de controles de servidor
Guardar ViewState
Demostracin: convertir controles HTML en controles de
servidor
Controles de servidor HTML
Controles de servidor Web
Prctica: identificar el cdigo HTML generado por los
controles de servidor Web
Seleccionar el control adecuado
Demostracin: agregar controles de servidor a un
formulario Web

***************************** use******************************
En esta leccin, estudiaremos cmo utilizar controles de servidor ASP.NET,
como botones, cuadros de texto y listas desplegables. Estos controles de
servidor son diferentes de los controles HTML en los que la lgica de soporte
se ejecuta en el servidor y no en el navegador del usuario.
En esta leccin, aprenderemos a:
Describir las caractersticas de los controles de servidor.
Describir los tipos de controles de servidor disponibles.
Explicar cmo los formularios Web Forms guardan el control de servidor
Web ViewState.
Agregar controles de servidor HTML a formularios Web Forms.
Agregar controles de servidor Web a formularios Web Forms.
Seleccionar el control adecuado para una determinada situacin.

Introduccin
Objetivos de la leccin
Crear formularios Web Forms con Microsoft ASP.NET 13

Qu es un control de servidor?
Runat="server"
Los eventos ocurren en el servidor
Viewstatesaved
Havebuilt-in functionality
Commonobjectmodel
Todos tiene atributos Idy Text
Crear browser-specificHTML
<asp:Button id="Button1" runat="server"
Text="Submit"/>
<asp:Button id="Button1" runat="server"
Text="Submit"/>

***************************** use******************************
Los controles de servidor ASP.NET son componentes que se ejecutan en el
servidor y encapsulan la IU y dems funcionalidades relacionadas. Los
controles de servidor se utilizan en pginas ASP.NET y en las clases de cdigo
subyacente. Los controles de servidor incluyen botones, cuadros de texto y
listas desplegables.
El siguiente ejemplo es el de un control de servidor Button:
<asp:Button id="Button1" runat="server" Text="Submit" />

Los controles de servidor tienen un atributo runat="server", el mismo atributo
que los formularios Web Forms. Esto significa que la lgica del control se
ejecuta en el servidor y no en el navegador del usuario. Los controles de
servidor se diferencian de los controles HTML en que stos ltimos nicamente
se ejecutan en el navegador del cliente y no realizan ninguna accin en el
servidor.
Otra caracterstica de los controles de servidor es que el estado de la vista, las
opciones de configuracin y la entrada de datos de usuario en el control se
guardan automticamente cuando la pgina viaja entre el cliente y el servidor.
Los controles HTML tradicionales no tienen estado y vuelven a su
configuracin predeterminada cuando la pgina retorna del servidor al cliente.
La funcionalidad de un control es lo que se produce cuando el usuario hace clic
en un botn o en un cuadro de lista. A estos procesos se denominan
procedimientos de eventos. Como programadores del formulario Web Form,
debemos determinar los procedimientos de eventos asociados a cada control de
servidor.

Para ms informacin sobre la funcionalidad del control de servidor,
consultar el Mdulo Agregar cdigo a un formulario Web Form con Microsoft
ASP.NET.

Introduccin
Runat=server
Funcionalidad incluida
Nota
14 Crear formularios Web Forms con Microsoft ASP.NET

En ASP.NET, los controles de servidor se basan en un modelo de objetos
comn, y por tanto, comparten varios atributos entre s.
Por ejemplo, cuando deseamos establecer el color de fondo de un control,
siempre utilizamos el mismo atributo BackColor, independientemente del
control. El cdigo HTML siguiente del botn de un control de servidor Web
muestra algunos de los atributos tpicos de un control de servidor:
<asp:Button id="Button1" runat="server" BackColor="red"
Width="238px" Height="25px" Text="Web control"></asp:Button>

Cuando un navegador interpreta una pgina, los controles de servidor Web
determinan el tipo de navegador que solicita la pgina, y enva el cdigo HTML
adecuado.
Por ejemplo, si el navegador soporta scripting de cliente, como Internet
Explorer versin 4.0 o posterior, los controles generan scripts de cliente para
implementar su funcionalidad. Sin embargo, si el navegador no soporta
scripting de cliente, los controles crean cdigo del lado del servidor y requieren
ms viajes de ida y vuelta al servidor para obtener el mismo comportamiento.
El siguiente ejemplo es el cdigo HTML de ASP.NET en un formulario Web
Form que deberamos escribir para crear un cuadro de texto con el texto
predeterminado: "Introduzca su nombre de usuario"
<asp:TextBox id="TextBox1" runat="server" Width="238px"
Height="25px">Introduzca su nombre de usuario</asp:TextBox>

Cuando un usuario con Internet Explorer 6 accede a esta pgina, el CLR crea el
siguiente cdigo HTML personalizado para Internet Explorer 6:
<input name="TextBox1" type="text" value="Introduzca su nombre
de usuario" id="TextBox1" style="height:25px;width:238px" />

Como el control de servidor crea cdigo HTML personalizado en funcin de las
caractersticas disponibles en el navegador del cliente, podemos escribir cdigo
para las ltimas versiones de navegadores sin tener que preocuparnos de que los
usuarios que no estn actualizados puedan ser bloqueados por errores del
navegador.
Modelo de objetos
comn
Crear cdigo HTML
especfico del
navegador
Crear formularios Web Forms con Microsoft ASP.NET 15

Tipos de controles de servidor
Controles de servidor HTML
Controles de servidor Web
Controles intrnsecos
Controles de validacin
Controles ricos
Controles List-bound
Controles Web de Internet Explorer

***************************** use******************************
Existen numerosos tipos de controles de servidor disponibles en ASP.NET.
Algunos controles de servidor se parecen mucho a los controles HTML
tradicionales, mientras que otros son nuevos en ASP.NET. Esta amplia variedad
de controles nos permite personalizar nuestro formulario Web Form para que se
adapte a la aplicacin que estamos creando.
Por defecto, el servidor no tiene disponibles los elementos HTML de una
pgina de un formulario Web Form; los elementos HTML son tratados como
texto opaco que pasa a travs del navegador. Sin embargo, al agregar el atributo
runat="server" se convierten los elementos HTML en controles de servidor
HTML, exponindolos por tanto como elementos que podemos programar con
cdigo del lado del servidor.
Los controles de servidor Web no slo incluyen controles de tipo formulario,
como botones y cuadros de texto, sino tambin controles con funcionalidad
especial, como el control calendario. Los controles de servidor Web son ms
abstractos que los controles de servidor HTML, porque su modelo de objetos no
refleja necesariamente la sintaxis HTML.
Los controles de servidor Web se clasifican como:
Controles intrnsecos
Los controles intrnsecos concuerdan con los sencillos elementos HTML,
como botones o cajas de listas. Utilizamos estos controles del mismo modo
que utilizamos los controles de servidor HTML.
Controles de validacin
Los controles de validacin incorporan lgica que permite verificar la
entrada de datos de un usuario. Para probar la entrada de un usuario,
adjuntamos un control de validacin al control de entrada y especificamos
las condiciones de entrada de datos de usuario correctas.

Para ms informacin sobre los controles de validacin, consultar el
Introduccin
Controles de servidor
HTML
Controles de servidor
Web
Nota
16 Crear formularios Web Forms con Microsoft ASP.NET

Mdulo Validar la entrada de datos de usuario.
Controles ricos estndar
Los controles estndar son controles complejos que incluyen mltiples
funciones. Ejemplos de controles estndar incluyen el control AdRotator,
que se utiliza para mostrar una secuencia de anuncios o el control Calendar,
que proporciona un calendario de citas.
Controles enlazados a listas
Los controles enlazados a listas pueden mostrar listas de datos en una
pgina ASP.NET. Estos controles nos permiten mostrar, reformatear,
clasificar y editar datos.

Para ms informacin sobre los controles enlazados a listas y el
acceso a datos, consultar el Mdulo Acceso a datos relacionales utilizando
Microsoft Visual Studio .NET, y el Mdulo Acceso a datos con Microsoft
ADO.NET.

Controles Web de Internet Explorer
Los controles Web de Internet Explorer son un conjunto de controles
complejos, como MultiPage, TabStrip, Toolbar y TreeView, que pueden
descargarse desde Internet e integrarse en el entorno de Visual Studio .NET
para ser reutilizados en cualquier aplicacin Web con ASP.NET. Estos
controles pueden ser interpretados en todos los navegadores utilizados
habitualmente, y al mismo tiempo aprovechan las potentes caractersticas
soportadas por las versiones de Internet Explorer 5.5 o superior. Podemos
descargar estos controles desde:
http://msdn.microsoft.com/library/default.asp?url=/workshop/webcontrols/o
verview/overview.asp.

Este ejemplo muestra el cdigo HTML de tres controles de tipo botn: un
botn HTML, un botn de control de servidor HTML y un botn de control
de servidor Web. Todos los controles botn parecen idnticos en el navegador
del usuario. El botn HTML nicamente puede invocar eventos del lado del
cliente, mientras que el botn de control de servidor HTML y el botn de
control de servidor Web producen eventos del lado del servidor.
El siguiente es el cdigo de un control de botn HTML:
<INPUT type="button" value="HTML Button">

Si agregamos el atributo runat="server" el control de botn HTML
anterior se convierte en un control de servidor HTML que se ejecutar en el
servidor. Adems del atributo runat="server", tambin debemos agregar
un atributo id para que el control funcione como un control de servidor.
El botn de control de servidor HTML se muestra en el siguiente
ejemplo:
<INPUT type="button" value="HTML Server Control"
id="button1" runat="server">

El botn de control de servidor Web utiliza cdigo HTML de ASP.NET:
<asp:Button id="Button1" runat="server" Text="Web
control"/>


Nota
Ejemplo de controles
equivalentes
Crear formularios Web Forms con Microsoft ASP.NET 17

Guardar el estado de la vista
Control oculto ViewStatede pares de nombre y valor
almacenados en el formulario Web Form
De forma predeterminada, ajustable a nivel de
formulario Web Formy control
<%@ Page EnableViewState="False" %>
<asp:ListBox id="ListName"
EnableViewState="true" runat="server">
</asp:ListBox>
<%@ Page EnableViewState="False" %>
<asp:ListBox id="ListName"
EnableViewState="true" runat="server">
</asp:ListBox>
<input type="hidden" name="__VIEWSTATE"
value="dDwtMTA4MzE0MjEwNTs7Pg==" />
<input type="hidden" name="__VIEWSTATE"
value="dDwtMTA4MzE0MjEwNTs7Pg==" />

***************************** use******************************
Uno de los retos de los sitios Web es resolver el almacenamiento del estado de
los controles (configuracin o entrada de datos del usuario) en una pgina Web
mientras el cdigo HTML viaja entre el cliente y el servidor. Como con
cualquier tecnologa basada en HTTP, los formularios Web Forms no tienen
estado, lo que significa que el servidor no conserva ninguna informacin sobre
las peticiones anteriores del cliente.
Los formularios Web Forms ASP.NET gestionan este problema de
almacenamiento del estado del control de servidor Web agregando un control
oculto denominado _VIEWSTATE que registra el estado de los controles en el
formulario Web Form. Concretamente, _VIEWSTATE se aade al formulario
del lado del servidor indicado por la etiqueta <Form runat="server">, y
nicamente registra el estado de los controles en esta seccin. Mientras la
pgina viaja desde el cliente al servidor, el estado del control de servidor Web
se almacena con la pgina y puede actualizarse en cualquier extremo de la
transaccin (en el cliente o el servidor).
Como el estado de la pgina Web se guarda dentro del formulario del servidor,
la pgina Web puede ser aleatoriamente enrutada en una granja de servidores
Web y no necesita volver al mismo servidor. La ventaja del proceso
_VIEWSTATE es que el programador puede concentrarse en el diseo de la
pgina y no necesita generar la infraestructura necesaria para realizar el
seguimiento del estado de la misma.
Introduccin
18 Crear formularios Web Forms con Microsoft ASP.NET

El control _VIEWSTATE es un control oculto que contiene el valor de una
cadena de pares nombre-valor que lista el nombre de cada control y el ltimo
valor de ese control.
Con cada peticin, el control _VIEWSTATE se actualiza y se enva al
servidor. La respuesta del servidor puede a su vez actualizar el control
_VIEWSTATE, que se devuelve con la respuesta. El resultado es que la
configuracin de la pgina permanece coherente de una solicitud a la siguiente.
El siguiente ejemplo incluye el cdigo HTML generado por un formulario Web
Form y enviado al cliente:
<form name="Form1" method="post" action="WebForm1.aspx"
id="Form1">
<input type="hidden" name="__VIEWSTATE"
value="dDw3NzE0MTExODQ7Oz4=" />
'HTML aqu
</form>

De forma predeterminada, un formulario Web Form guarda el estado de la vista
de los controles en el formulario Web Form. Para formularios Web Forms con
mltiples controles, el tamao del campo valor de las propiedades
_VIEWSTATE puede ralentizar el rendimiento. Para maximizar el
rendimiento de la pgina, podemos deshabilitar el atributo ViewState a nivel de
pgina y habilitar ViewState nicamente para determinados controles.
Para deshabilitar el almacenamiento del estado de la vista a nivel de pgina
Web, estableceremos el atributo EnableViewState de la directiva@Page,
como se muestra en el siguiente cdigo:
<%@ Page EnableViewState="False" %>

Para habilitar el almacenamiento del estado de la vista de un control especfico,
estableceremos el atributo EnableViewState del control, como se muestra en el
siguiente cdigo:
<asp:ListBox id="ListName" EnableViewState="true"
runat="server"></asp:ListBox>

Para ms informacin sobre guardar el estado, consultar el Mdulo
Gestionar el estado.

Control oculto
Deshabilitar y habilitar
ViewState
Nota
Crear formularios Web Forms con Microsoft ASP.NET 19

Demostracin: convertir controles HTML en controles de servidor
Actualizar controles HTML a controles de
servidor HTML
Agregar un control de servidor Web
Utilizar SmartNavigation

***************************** use******************************
Visual Studio .NET facilita la conversin de controles HTML en controles de
servidor.
Ejecutar esta demostracin
1. Visualizar la pgina HTMLPage.aspx que convertimos de una pgina
HTML en la demostracin anterior, en la vista HTML, y agregar un
atributo runat="server" a los controles de cuadro de texto, seleccin y el
de envo.
2. Hacer clic en Guardar para guardar el proyecto.
3. Visualizar la pgina HTMLPage.aspx en el navegador haciendo clic con
el botn derecho en la pgina en el Explorador de soluciones y haciendo
clic en Visualizar en el navegador. No es necesario volver a generar el
proyecto, ya que no se ha cambiado el cdigo.
4. Visualizar el cdigo fuente de la pgina para mostrar los cambios
realizados. Se ha agregado un atributo name a cada control de servidor.
5. Cerrar la vista del cdigo fuente HTML en el navegador.
6. En el navegador, introducir informacin en los controles, y hacer clic en
Guardar. Los controles todava pierden sus valores.
7. Editar la pgina y agregar un atributo runat="server" al formulario.
8. Guardar los cambios y visualizar la pgina de nuevo en el navegador. No
es necesario volver a generar el proyecto ya que no se ha agregado ningn
cdigo.
9. Visualizar el cdigo fuente de la pgina para mostrar los cambios
realizados. Entre otros cambios, se han agregado los atributos action y
method a la etiqueta del formulario y se ha creado un control oculto
denominado __VIEWSTATE.
10. Cerrar la vista del cdigo fuente HTML en el navegador.
11. Introducir informacin en los controles y hacer clic en Guardar. Ahora,
los controles guardan sus valores.
20 Crear formularios Web Forms con Microsoft ASP.NET

12. Editar la pgina y agregar un control de servidor Web Label al
formulario Web Form, debajo del botn Guardar:
<asp:label id="lblMessage" runat="server">Label</asp:label>

13. Guardar los cambios y visualizar la pgina en el navegador.
14. Visualizar el cdigo fuente de la pgina. El control de servidor Web
Label genera un elemento <span>.
15. Cerrar la vista del cdigo fuente HTML en el navegador.
16. Visualizar la pgina http://localhost/Demos03/HTMLPage.aspx en
Internet Explorer y modificar el tamao del navegador para que muestre
verticalmente menos que la pgina completa. La barra de desplazamiento
vertical debera estar visible.
17. Desplazarse hacia abajo y hacer clic en Guardar. Seremos redirigidos a
la parte superior de la pgina debido al postback.
18. Cerrar el navegador.
19. Editar la pgina en la vista HTML y agregar SmartNavigation= "true"
a la directiva@ Page.
El cdigo HTML debera ser parecido al siguiente:
<%@ Page SmartNavigation="true" Language="vb"
CodeBehind="HTMLPage.aspx.vb" AutoEventWireup="false"
Inherits="Mod04.HTMLPage" %>

<%@ Page SmartNavigation="true" Language="c#"
CodeBehind="HTMLPage.aspx.cs" AutoEventWireup="false"
Inherits="Mod04.HTMLPage" %>

20. Guardar los cambios y visualizar la pgina en otro navegador cuyo
tamao se haya modificado.
21. Desplazarse hacia abajo y hacer clic en Guardar. Esta vez, no somos
redireccionados a la parte superior de la pgina durante el postback, la
pgina mantiene su posicin actual.
22. Visualizar el cdigo fuente de la pgina en el navegador. En Internet
Explorer 4.0 y posterior, el atributo SmartNavigation crea IFrames para
actualizar nicamente la parte modificada de la pgina.
23. Cerrar la vista del cdigo fuente HTML en el navegador.

Agregar una etiqueta al
formulario Web Form
Uso de SmartNavigation
Visual Basic .NET
C#
Crear formularios Web Forms con Microsoft ASP.NET 21

Controles de servidor HTML
Basados en elementos HTML
Existen en el espacio de nombres
System.Web.UI.HtmlControls
<input type="text" id="txtName"
runat="server" />
<input type="text" id="txtName"
runat="server" />

***************************** use******************************
Los controles HTML de un formulario Web Form no estn disponibles en el
servidor. Si convertimos los controles HTML en controles de servidor HTML,
podemos exponerlos como elementos a nuestro cdigo del lado del servidor.
Esta conversin nos permite utilizar los controles para disparar eventos que son
gestionados en el servidor.
Los controles de servidor HTML incluyen el atributo runat="server", y deben
residir en una etiqueta contenedora <form runat="server"></form>.
La ventaja de los controles de servidor HTML es que nos permiten actualizar
rpidamente pginas existentes a formularios Web Forms. Adems, podemos
optimizar el rendimiento de una pgina ajustando qu controles deben funcionar
localmente en el navegador y qu controles se procesan en el servidor.
El siguiente cdigo de ejemplo muestra un sencillo cuadro de texto HTML que
el navegador procesa en el lado del cliente:
<input type="text" id="txtName" >

Si agregamos el atributo runat="server", el control se convierte en un control
de servidor HTML que ASP.NET procesa en el lado del servidor:
<input type="text" id="txtName" runat="server" />

Introduccin
Ejemplo
22 Crear formularios Web Forms con Microsoft ASP.NET

Controles de servidor Web
Controles de servidor Web
Existen en el espacio de nombres
System.Web.UI.WebControls
Sintaxis del control
HTML generado por el control
<asp:TextBox id="TextBox1"
runat="server">Text_to_Display
</asp:TextBox>
<asp:TextBox id="TextBox1"
runat="server">Text_to_Display
</asp:TextBox>
<input name="TextBox1" type="text"
value="Text_to_Display"
Id="TextBox1"/>
<input name="TextBox1" type="text"
value="Text_to_Display"
Id="TextBox1"/>

***************************** use******************************
Los controles de servidor Web son controles de servidor creados
especficamente para ASP.NET. A diferencia de los controles de servidor
HTML, los controles de servidor Web no funcionarn si falta el atributo
runat="server".
Los controles de servidor Web se basan en un modelo de objetos comn; por
ello, todos los controles comparten varios atributos, incluyendo la etiqueta
<asp:TipoControl...>, y un atributo id. Los controles de servidor Web existen
en el espacio de nombres System.Web.UI.WebControls y pueden utilizarse en
cualquier formulario Web Form.
Los controles de servidor Web intrnsecos corresponden a elementos HTML
simples. La siguiente tabla muestra algunos de los controles de servidor Web
intrnsecos utilizados ms habitualmente.
Control de
servidor Web
Control HTML
equivalente
Funcin del control de
servidor Web

<asp:button> <input type=submit> Crea un botn que enva una
peticin al servidor.
<asp:checkbox> <input type=checkbox> Crea una casilla de verificacin
que puede seleccionarse
haciendo clic.
<asp:hyperlink> <a href=""> </a> Crea un hiperenlace a una
etiqueta anchor HTML.
<asp:image> <img src=""> Crea un rea que se utiliza para
mostrar una imagen.
<asp:imagebutton> <input type=image> Crea un botn que incorpora la
visualizacin de una imagen en
lugar de texto.
<asp linkButton> Ninguno Crea un botn que tiene el
aspecto de un hiperenlace.
Introduccin
Controles de servidor
Web intrnsecos
Crear formularios Web Forms con Microsoft ASP.NET 23

(continuacin)
Control de
servidor Web
Control HTML
equivalente
Funcin del control de servidor
Web

<asp:label> <span> </span> Crea texto que los usuarios no
pueden modificar.
<asp:listbox> <select size="5">
</select>
Crea una lista de opciones. Permite
mltiples selecciones.
<asp:panel> <div> </div> Crea una divisin sin bordes en el
formulario que se utiliza como
contenedor para otros controles.
<asp:radiobutton> <input type=radiobutton> Crea un nico control de botn de
opcin.
<asp:table> <table> </table> Crea una tabla.
<asp:textbox> <input type=text> Crea un control de cuadro de texto.

Los controles de validacin son controles ocultos que validan la entrada de
datos del usuario comparndolos con patrones predeterminados. La siguiente
tabla muestra algunos de los controles de validacin que se utilizan ms
habitualmente.
Control Funcin

CompareValidator Requiere que la entrada concuerde con una segunda
entrada o campo existente.
CustomValidator Requiere que la entrada concuerde con una condicin
como que sean nmeros primos o impares.
RangeValidator Requiere que la entrada concuerde con un intervalo
especificado.
RegularExpressionValidator Requiere que la entrada concuerde con un formato
especificado como un nmero de telfono de un
determinado pas o una contrasea que tenganmeros y
letras.
RequiredFieldValidator Requiere que el usuario introduzca algn valor antes de
que el control sea procesado.
ValidationSummary Recopila todos los mensajes de error de los controles de
validacin para una visualizacin centralizada.


Para ms informacin sobre los controles de validacin, consultar el
Mdulo Validar la entrada de datos del usuario.

Los controles estndares proporcionan una rica funcionalidad a nuestro
formulario Web Form insertando funciones complejas. La siguiente tabla
muestra los controles ricos disponibles actualmente.
Control Funcin

AdRotator Muestra una secuencia (predefinida o aleatoria) de
imgenes.
Calendar Muestra un calendario grfico en el que los usuarios
pueden seleccionar fechas.

Controles de validacin
Nota
Controles ricos
estndares
24 Crear formularios Web Forms con Microsoft ASP.NET

Los controles enlazados a listas pueden mostrar datos desde una fuente de
datos. La siguiente tabla muestra algunos de los controles de lista que se
utilizan habitualmente.
Control Funcin

CheckBoxList Muestra datos como una columna de casillas de verificacin.
Repeater Muestra informacin desde un conjunto de datos utilizando el
conjunto de elementos y controles HTML que especifiquemos. El
control Repeater repite el elemento una vez por cada registro del
DataSet.
DataList Similar al control Repeater, pero con ms opciones de formato y
presentacin, incluyendo la posibilidad de mostrar informacin
en una tabla. El control DataList tambin nos permite especificar
el comportamiento de edicin.
DataGrid Muestra informacin, normalmente enlazada a datos en forma
tabular, con columnas. Tambin proporciona mecanismos para
permitir editar y clasificar.
DropDownList Muestra datos en un men desplegable.
Listbox Muestra datos en una ventana.
RadioButtonList Muestra datos en una columna de botones de opcin.


Para ms informacin sobre los controles enlazados a listas y el acceso a
datos, consultar el Mdulo Acceso a datos con Microsoft ADO.NET.

Controles enlazados a
listas
Nota
Crear formularios Web Forms con Microsoft ASP.NET 25

Prctica: identificar el cdigo HTML generado por los controles de
servidor Web
Los estudiantes:
Agregarn controles de servidor Web a un
formulario Web e identificarn el cdigo
HTML que se enva al cliente
Tiempo: 5minutos

***************************** use******************************
En esta prctica, agregaremos controles de servidor Web a un formulario Web
Form y visualizaremos el cdigo fuente en un navegador para determinar qu
cdigo HTML se ha enviado al cliente.
Cumplimentar la tabla inferior siguiendo los pasos
1. Iniciar Visual Studio .NET.
2. Crear un proyecto de aplicacin Web y establecer la ubicacin en
http://localhost/Practices03.
3. Abrir la pgina WebForm1.aspx.
4. Agregar los controles TextBox, Button, Label, ListBox, Image,
Hyperlink y Calendar al formulario Web Form.
5. Hacer clic con el botn derecho en WebForm1.aspx en el Explorador de
soluciones y clic en Generar y examinar.
6. Hacer clic con el botn derecho en el navegador y clic en Ver fuente
para ver el cdigo HTML enviado al cliente.
7. Cumplimentar la siguiente tabla con las etiquetas HTML del control.
Control de servidor Web HTML enviado al cliente

asp:textbox
asp:button
asp:label
26 Crear formularios Web Forms con Microsoft ASP.NET

asp:listbox
asp:image
asp:hyperlink
asp:calendar

Seleccionar el control adecuado
Senecesitanfuncionalidades
especficas como uncalendario
o rotacindepublicidad
El control interactuarcon
scriptsclientey servidor
Seestescribiendo unapgina
quepuedeser utilizadapor
varios navegadores
Seesttrabajando conpginas
HTML existentes y sedesea
agregar funcionalidades de
pginaASP.NET Web
Seprefiereunmodelo de
programacinVisual Basic
Seprefiereunmodelo de
objetos como HTML
Utilizar controles de Utilizar controles de
servidor Websi: servidor Websi:
Utilizar controles deservidor Utilizar controles deservidor
HTML si: HTML si:
El ancho debandano es un
problema
El ancho debandaes limitado

***************************** use******************************
Cuando creamos pginas ASP.NET, tenemos la opcin de utilizar controles de
servidor HTML o controles de servidor Web. Podemos mezclar estos tipos de
controles en la misma pgina para actualizar rpidamente una pgina HTML.
Como ejemplo de mezcla de tipos de controles, nuestra pgina ASP.NET podra
incluir un elemento HTML que listase la hora local, un botn basado en un
control de servidor HTML convertido a partir de un elemento HTML, y un
control de servidor basado en una caja de texto Web que acceda a datos desde
el servidor.
Lo mejor es evitar los controles de servidor HTML. Los controles de servidor
Web tienen mayor capacidad y un modelo de objetos ms rico que los controles
de servidor HTML.
Los controles de servidor HTML son elementos HTML modificados que se
ejecutan en el servidor en lugar de en el navegador cliente.
Utilizar controles de servidor HTML si:
Se prefiere un modelo de objetos como HTML. Los controles de servidor
HTML tienen prcticamente el mismo cdigo HTML que los controles
HTML bsicos. Los controles de servidor HTML tambin tienen
funcionalidad del lado del servidor como los controles de servidor Web.
Introduccin
Controles de servidor
HTML
Crear formularios Web Forms con Microsoft ASP.NET 27

Se est trabajando con pginas HTML existentes y se desea agregar
rpidamente funcionalidad incorporada en un formulario Web Form. Debido
a que los controles de servidor HTML se mapean exactamente a elementos
HTML, no es necesario reemplazar los controles y arriesgarse a tener
errores de sustitucin o problemas de formato de pgina.
El control necesita ejecutarse tanto utilizando scripting del lado del cliente
como del lado del servidor. Podemos escribir un script del lado del cliente y
trabajar con un control HTML normal ya que los controles estn visibles en
el cliente. Al mismo tiempo, podemos tener cdigo del lado del servidor, ya
que tambin es un control de servidor.
El ancho de banda es limitado y se necesita realizar una gran cantidad de
procesamiento en el cliente para reducir el uso del ancho de banda.
Los controles de servidor Web de ASP.NET no slo son equivalentes a los
controles HTML, sino que tambin incluyen varios controles nuevos que no
existen en HTML.
Utilizar controles de servidor Web si:
Se prefiere un modelo de programacin como Visual Basic. Se podr
utilizar programacin orientada a objetos, identificar controles por su
atributo ID y separar fcilmente la lgica de pgina de la lgica del interfaz
de usuario. Con los controles de servidor Web, tambin pueden crearse
aplicaciones con controles anidados y capturar eventos a nivel de
contenedor.
Se est creando una pgina Web que puede ser visualizada en diversos
navegadores. Como la lgica de los controles de servidor Web puede crear
cdigo HTML adaptado a las caractersticas disponibles en el navegador del
cliente, podemos escribir para los navegadores ms recientes sin necesidad
de preocuparse de que los errores de navegador no permitan a los usuarios
menos actualizados acceder a todas las funciones de la pgina Web.
Se necesitan funcionalidades especficas, como calendario o anuncios, o
rotacin de publicidad, disponibles nicamente como controles de servidor
Web.
El ancho de banda no est limitado y los ciclos de peticin-respuesta de los
controles de servidor Web no causan problemas de ancho de banda.

Controles de servidor
Web
28 Crear formularios Web Forms con Microsoft ASP.NET

Demostracin: agregar controles de servidor a un formulario Web
Form
Crear un formulario Web
Agregar controles TextBox, Buttony
Label
Agregar un control Calendar

***************************** use******************************
En esta demostracin, veremos cmo agregar controles de servidor Web a un
formulario Web Form.
Ejecutar esta demostracin
1. Abrir la pgina WebForm1.aspx del proyecto de aplicacin Web Mod04.
2. Agregar un control de servidor TextBox, Button y Label a la pgina
WebForm1.aspx.
3. Utilizando la ventana Propiedades, establecer las propiedades ID y Text
de los controles a los valores en la siguiente tabla:
Control ID Text

TextBox txtName Name
Button cmdSubmit Submit
Label lblMessage Message

4. Visualizar la pgina en vista HTML.
El formulario Web Form ha sido creado con el atributo runat="server", y
los atributos style se han agregado a los controles para ubicarlos en el
formulario Web Form en modo GridLayout.
Observar cmo se han implementado las propiedades ID y Text en HTML
para los distintos controles.
5. Generar y examinar WebForm1.aspx.
Agregar sencillos
controles de servidor
Web
Crear formularios Web Forms con Microsoft ASP.NET 29

6. Introducir texto en el cuadro de texto y hacer clic en Submit para mostrar
que el valor se conserva.
7. Visualizar la fuente de la pgina. Observar que el posicionamiento de los
controles se realiza utilizando DHTML.
8. Cerrar la vista de la fuente de la pgina.

1. Hacer clic con el botn derecho sobre el formulario en la vista Diseo y
hacer clic en Propiedades.
2. Cambiar Target Schema a Internet Explorer 3.02 / Navigator 3.0, y
hacer clic en Aceptar.
3. Guardar los cambios y visualizar la pgina de nuevo en el navegador.
4. Visualizar el cdigo fuente de la pgina.
Ahora, el posicionamiento de los controles se realiza utilizando tablas
HTML.
5. Cerrar la vista de fuente de la pgina.
6. Hacer clic con el botn derecho sobre el formulario en vista Diseo y
hacer clic en Propiedades.
7. En el cuadro de dilogo Pginas de propiedades, volver a establecer
Target Schema como Internet Explorer 5.0.

1. En el cuadro de dilogo Pginas de propiedades, seleccionar
FlowLayout (en lugar de GridLayout) en el campo Page Layout, y
hacer clic en Aceptar.
La cuadrcula desaparece.
2. Agregar un control Button al formulario Web, y visualizar la pgina en
vista HTML.
El nuevo botn no tiene un atributo style.

1. En la vista Diseo, agregar un control de servidor Web Calendar en el
formulario Web Form, y visualizar la pgina en vista HTML.
Localizar el cdigo HTML para el control Calendar:
<asp:Calendar id="Calendar1" runat="server"></asp:calendar>

2. Guardar los cambios y visualizar la pgina en el navegador y, a
continuacin, visualizar el cdigo fuente de la pgina.
Observar el HTML generado por el control Calendar.
3. Cerrar la vista de fuente de la pgina.
4. Editar la pgina WebForm1 y ver las propiedades del control Calendar
en la ventana Propiedades.
5. Hacer clic con el botn derecho en el control Calendar en el formulario
Web Form en la vista Diseo y seleccionar Formato automtico para
mostrar los diferentes estilos del cuadro de dilogo Formato automtico
de Calendar. Hacer clic en Colorful 1, y clic en Aceptar.
6. Guardar los cambios y visualizar la pgina de nuevo en el navegador para
ver el nuevo aspecto del control Calendar.
Cambiar el navegador
de destino
Cambiar la presentacin
de la pgina
Agregar un control
Calendar
1
Prctica A: Crear un formulario Web Formcon Microsoft
ASP.NET
Medical
Medical.aspx
Medical
Medical.aspx
Benefits
Home Page
Default.aspx
Benefits
Home Page
Default.aspx
Life Insurance
Life.aspx
Life Insurance
Life.aspx
Retirement
Retirement.aspx
Retirement
Retirement.aspx
Dental
Dental.aspx
Dental
Dental.aspx
Dentists
Doctors
Doctors.aspx
Doctors
Doctors.aspx
Doctors
Logon Page
Login.aspx
Logon Page
Login.aspx
Registration
Register.aspx
Registration
Register.aspx
Coho
Winery
Prospectus
Prospectus.aspx
Prospectus
Prospectus.aspx
XML Web
Service
dentalService1.asmx
XML Web
Service
dentalService1.asmx
Page Header
Header.ascx
Page Header
Header.ascx
ASPState
tempdb
LabWeb
Application
User Control
namedate.ascx
User Control
namedate.ascx
Menu
Component
Class1.vb or Class1.cs
Menu
Component
Class1.vb or Class1.cs
XML
Files
Web.
config

******************************
En este laboratorio, aprenderemos a:
Crear un formulario Web Form con MicrosoftASP.NET y poblarlo con
controles Web.
Establecer propiedades de los controles Web en un formulario Web Form
ASP.NET.

Este laboratorio se centra en los conceptos de este mdulo y, por ello,
podra no cumplir las recomendaciones de seguridad de Microsoft.

Para poder trabajar en este laboratorio, es necesario tener conocimientos sobre
el entorno de desarrollo integrado (IDE) de Microsoft Visual Studio .NET.
Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios del
curso, crearemos un sitio Web que permita a los empleados seleccionar y
establecer los beneficios que elijan.
En el Laboratorio 2, Uso de Microsoft Visual Studio .NET, creamos una
solucin Visual Studio .NET y un proyecto de aplicacin Web para al
aplicacin Web Benefits.
En este laboratorio, crearemos la interfaz de usuario (IU) de las pginas de
formularios Web Form default.aspx y life.aspx en la aplicacin Web Benefits.
El formulario Web Form default.aspx es la pgina de inicio del sitio Web
Benefits. La pgina default.aspx muestra la lista de beneficios que ofrece la
compaa. La pgina life.aspx permite al usuario introducir informacin relativa
a su seguro de vida, como su nombre, fecha de nacimiento e importe de la
cobertura.
Objetivos
Nota
Requisitos previos
Escenario
Tiempo estimado para
realizar este laboratorio:
30 minutos
2
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de
aplicacin Web denominado Benefits y un proyecto de biblioteca de clases
BenefitsList. Estos proyecto pueden crearse utilizando Visual Basic .NET o
Visual C#.NET.
Si no se han creado estos proyectos, seguir los siguientes pasos:
Crear la solucin LabApplication

Realizar este procedimiento nicamente si no se ha creado un
archivo de solucin LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solucin en blanco
denominada LabApplication:
En el men Archivo, seleccionar Nuevo, y hacer clic en Solucin en
blanco.
En el cuadro de dilogo Nuevo proyecto, escribir LabApplication en el
cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto Benefits, o si se ha eliminado.

1. Crear un nuevo proyecto de aplicacin Web ASP.NET, denominado
BenefitsVB o BenefitsCS, en la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic o Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Aplicacin Web ASP.NET,
establecer la Ubicacin en http://localhost/BenefitsVB para un
proyecto Visual Basic .NET o en http://localhost/BenefitsCS para un
proyecto Visual C#.
d. Hacer clic en Agregar a Solucin, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solucin, es importante el
uso de maysculas en el nombre del proyecto. Probablemente, utilizaremos
algunos formularios Web Forms ya generados en ste y en otros
laboratorios, por ello, debemos verificar que hemos escrito en maysculas el
nombre del proyecto Benefits.


Importante
Importante
Precaucin
3
Actualizar el proyecto Benefits
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsVB o BenefitsCS, seleccionar Agregar, y hacer clic en Agregar
elemento existente.
3. Buscar los archivos de proyecto
Ir a la carpeta VB\Starter\BenefitsVB.

Ir a la carpeta CS\Starter\BenefitsCS.
Estas carpetas se pueden encontrar dentro del fichero labs03.zip.
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente Benefits, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de sobrescribir o cargar de nuevo los archivos.

Crear la biblioteca de clases BenefitsList

Realizar estos pasos nicamente si no se ha creado anteriormente
un proyecto BenefitsList, o si se ha eliminado.

Crear un proyecto de biblioteca de clases
Crear un nuevo proyecto de biblioteca de clases Microsoft
Visual Basic .NET con el nombre BenefitsListVB, y aadirlo a la solucin
LabApplication:
En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual Basic. En la lista Plantillas, hacer
clic en Biblioteca de clases, establecer el Nombre de BenefitsListVB,
hacer clic en Agregar a solucin, y clic en Aceptar.
Crear un nuevo proyecto de biblioteca de clases Microsoft Visual C#
.NET con el nombre BenefitsListCS, y aadirlo a la solucin
LabApplication:
a. En el men Archivo, hacer clic en Nuevo, y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual C#. En la lista Plantillas, hacer clic
en Biblioteca de clases, establecer el Nombre de BenefitsListCS, hacer
clic en Agregar a solucin, y clic en Aceptar.

Verificar que se han escrito correctamente las maysculas del
proyecto BenefitsList.


Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Importante
Para un proyecto Visual
Basic .NET
Para un proyecto Visual
C#
Precaucin
4
Actualizar el proyecto BenefitsList
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente.
3. Buscar los archivos de proyecto:
Ir a la carpeta VB\Starter\BenefitsListVB.

Ir a la carpeta CS\Starter\BenefitsListCS.
Estas carpetas se pueden encontrar dentro del fichero labs03.zip.
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de esta carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de sobrescribir o cargar de nuevo los archivos.

Crear una referencia al componente BenefitsList en el proyecto Benefits
1. En el proyecto Benefits de la solucin LabApplication, completar los
siguientes pasos para agregar una referencia al componente BenefitsList
que acabamos de crear:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB o
BenefitsCS en el Explorador de soluciones y hacer clic en Agregar
referencia.
b. En el cuadro de dilogo Agregar referencia, en la pestaa Proyectos,
hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.
c. En la lista Componentes seleccionados, seleccionar el componente
BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar.
El componente se agrega a la carpeta Referencias del Explorador de
soluciones.

Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
5
Ejercicio 1
Crear el formulario Web FormDefault.aspx
En este ejercicio, crearemos un nuevo formulario Web Form denominado
default.aspx. A continuacin, agregaremos un control de usuario, un control
enlazado a lista, un control Button, y un control Label a la pgina default.aspx.
Finalmente, estableceremos atributos del control enlazado a lista para mostrar
una lista esttica de informacin.
Colocar controles en un formulario Web Form
1. Crear un nuevo Web Form denominado default.aspx. Este formulario Web
Form ser la pgina de entrada principal de nuestra aplicacin Web. Para
crear el formulario Web Form:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB o
BenefitsCS, seleccionar Agregar y hacer clic en Agregar Web Form.
b. En el cuadro de dilogo Agregar nuevo elemento, escribir default.aspx
en el campo Nombre y hacer clic en Abrir.
2. Desde el Explorador de soluciones, utilizar una operacin de arrastrar y
soltar para ubicar el archivo header.ascx desde el Explorador de soluciones
a la parte superior del formulario Web Form.

Estudiaremos con mayor profundidad los controles de usuario en el
Mdulo Crear controles de usuario.

3. Desde el Cuadro de herramientas, arrastrar un control CheckBoxList, un
control Button, y un control Label al formulario Web Form. El formulario
Web Form debera tener un aspecto similar a la siguiente ilustracin.

4. Establecer las propiedades ID y Text para los controles CheckBoxList,
Button y Label como se muestra en la siguiente tabla.
Control ID Text

CheckBoxList chkListBenefits Ninguno
Button cmdSubmit Submit
Label lblSelections Selected items:

5. Visualizar la pgina en la vista Hypertext Markup Language (HTML)
haciendo clic en la ficha HTML situada en la parte inferior derecha de la
ventana del editor.
Nota
6
Visual Studio .NET ha aadido el HTML dinmico (DHTML) a los
controles CheckBoxList, Button, y Label. El atributo style que contiene
los parmetros Z-INDEX, LEFT, POSITION y TOP posiciona los
controles en la pgina.
6. Hacer clic con el botn derecho en la pgina default.aspx del Explorador de
soluciones y hacer clic en Ver en el explorador.

El proyecto debe generarse aunque no hayamos escrito cdigo. Esto
se debe a que cuando agregamos componentes de interfaz de usuario a la
pgina, Visual Studio .NET genera cdigo para soportar estos elementos.

La pgina debera tener un aspecto similar al de la ilustracin, sin ningn
contenido en el control CheckBoxList.


Agregar elementos al control CheckBoxList
1. Visualizar la pgina default.aspx en la vista Diseo.
2. Hacer clic en el control CheckBoxList chkListBenefits del formulario
Web Form default.aspx.
3. En la ventana Propiedades, hacer clic en la propiedad Items y hacer clic en
el botn para abrir el cuadro de dilogo ListItem Collection Editor.
4. En el cuadro de dilogo ListItem Collection Editor, agregar los elementos
que se muestran en la siguiente tabla (con la propiedad Selected establecida
en False).
Texto Valor

First Item First Item
Second Item Second Item
Third Item Third Item

5. Hacer clic en Aceptar para cerrar el cuadro de dilogo ListItem Collection
Editor.
6. Guardar los cambios a default.aspx y visualizar la pgina en el navegador.
Ahora que hemos agregado elementos al control CheckBoxList, la lista de
elementos sobrescribe el botn Submit.
7. Visualizar de nuevo la pgina default.aspx en la vista Diseo.
8. Hacer clic en el fondo de la pgina default.aspx, y en la ventana
Propiedades, establecer la propiedad pageLayout en FlowLayout (en lugar
de GridLayout).
Nota
7
Aunque FlowLayout hace que el diseo de la pgina sea un poco ms
difcil, permite que los elementos de interfaz de usuario se muevan
automticamente cuando otros elementos de la pgina cambian de tamao.
Por ejemplo, cuando el control chkListBenefits tena ms elementos
agregados a la lista, se sobrescribi el botn Submit. Utilizando
FlowLayout, el botn se mover automticamente para dejar espacio para
una lista ms larga.
9. Mover los controles en la pgina, utilizando retornos de carro, para que la
pgina tenga un aspecto similar al de la siguiente ilustracin.

10. Visualizar de nuevo la pgina en el explorador.
Ahora la lista de casillas de verificacin no sobrescribe el botn Submit.
11. Cerrar la ventana del explorador.

8
Ejercicio 2
Crear el formulario Web FormLife.aspx
En este ejercicio, crearemos la interfaz de usuario de la pgina life.aspx. Esta
pgina implementa el beneficio de seguro de vida de la compaa.
Agregar controles a la pgina life.aspx
1. Crear un nuevo formulario Web Form denominado life.aspx. Para crear el
formulario Web Form:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB o
BenefitsCS, seleccionar Agregar y hacer clic en Agregar Web Form.
b. En el cuadro de dilogo Agregar nuevo elemento, escribir life.aspx en
el campo Nombre y hacer clic en Abrir.
2. Ubicar un control Calendar en el formulario Web Form.
3. Hacer clic con el botn derecho en el control Calendar en la vista Diseo y
seleccionar Formato automtico para abrir el cuadro de dilogo Formato
automtico de Calendar.
4. Hacer clic en Colorful 1 en la lista Seleccionar un esquema, y hacer clic
en Aceptar.
5. Situar el control de usuario header.ascx, tres controles TextBox, dos
controles CheckBox, un control Button, y cinco controles Label en la
pgina.

9
6. Establecer las propiedades ID y Text de cada control como se muestra en la
siguiente tabla.
Control ID Texto

Cuadro de texto Name txtName ninguno
Cuadro de texto Birth
date
txtBirth ninguno
Cuadro de texto
Coverage
txtCoverage ninguno
Casilla de verificacin
Short-term disability
chkShortTerm Short-term disability
Casilla de verificacin
Long-term disability
chkLongTerm Long-term disability
Botn Save cmdSave Save
Label1 default Life Insurance
Application
Label2 default Proof of good health
appointment
Label3 default Name:
Label4 default Birth Date:
Label5 default Coverage:


Cambiar el tamao de la fuente de Label1, en la ventana Propiedades de
la etiqueta, expandir Fuente, seleccionar Tamao, y elegir Grande.

7. Hacer clic con el botn derecho en la pgina life.aspx del Explorador de
soluciones y hacer clic en Ver en el explorador.
8. Escribir el nombre y fecha de nacimiento en los campos y hacer clic en
Guardar. Los valores introducidos deberan permanecer en la pgina.



Nota

ndice
Descripcin 1
Leccin: uso de las pginas de cdigo
subyacente 2
Leccin: agregar procedimientos de evento a
controles de servidor Web 9
Leccin: uso de eventos de pgina 22

Agregar cdigo a un formulario Web
Form con Microsoft ASP.NET
Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET 1



Descripcin
Uso de las pginas decdigo subyacente
Agregar procedimientos de evento a controles de
servidor Web
Uso de eventos de pgina

***************************** use******************************
En este mdulo, estudiaremos los distintos mtodos que pueden utilizarse para
agregar cdigo a nuestra aplicacin Web con MicrosoftASP.NET. Tambin
estudiaremos los procedimientos de evento para los controles de servidor Web,
cmo utilizarlos y el orden en que funcionan. Estudiaremos el uso de las pginas
de cdigo subyacente, que son el mtodo preferido de Microsoft Visual Studio
.NET para agregar cdigo a pginas Web. Finamente, estudiaremos cmo se
utilizan los eventos de pgina, en particular al evento Page_Load.
En este mdulo, aprenderemos a:
Utilizar pginas de cdigo subyacente en una aplicacin Web.
Crear procedimientos de evento para controles de servidor Web.
Utilizar eventos de pgina en una aplicacin Web.

Introduccin
Objetivos
2 Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET


Leccin: uso de las pginas de cdigo subyacente
Cmo implementar cdigo
Escribir cdigo en lnea
Quson las pginas de cdigo subyacente?
Entender cmo funcionan las pginas de cdigo
subyacente

***************************** use******************************
En esta leccin, estudiaremos cmo implementar cdigo con Visual Studio .NET.
Tambin estudiaremos cmo se utilizan las pginas de cdigo subyacente y en
qu se diferencian del cdigo en lnea.
En esta leccin, aprenderemos a:
Identificar tres formas de implementar cdigo en un formulario Web Form
ASP.NET.
Utilizar las pginas de cdigo subyacente.

Introduccin
Objetivos de la leccin
Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET 3



Cmo implementar cdigo
Tres mtodos para agregar cdigo:
Ubicar el cdigo en el mismo archivo que el contenido
(mezclado)
Ubicar el cdigo en una seccin distinta del archivo de
contenido (cdigo en lnea )
Ubicar el cdigo en un archivo distinto (pginas de
cdigo subyacente)
Las pginas de cdigo subyacente son el mtodo
predeterminado de Visual Studio .NET

***************************** use******************************
Podemos agregar cdigo a nuestro formulario Web Form de los siguientes
modos:
Cdigo mezclado. El cdigo se encuentra en el mismo archivo que el
contenido Web, entremezclado con el contenido Hypertext Markup Language
(HTML). Este mtodo es el menos elegido, ya que es difcil leer y trabajar
con un archivo de este tipo. Sin embargo, es un mtodo utilizado con
frecuencia en pginas Active Server Pages (ASP).
Cdigo en lnea. El cdigo se encuentra en el mismo archivo en una seccin
SCRIPT distinta, al igual que el contenido HTML.
Cdigo subyacente. El cdigo se encuentra en un archivo distinto del
contenido HTML. El archivo de cdigo se denomina pgina de cdigo
subyacente. Cuando se utiliza Visual Studio .NET, el mtodo predeterminado
es ubicar todo el cdigo en una pgina de cdigo subyacente.

Implementar cdigo
4 Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET


Escribir cdigo en lnea
Cdigo y contenido en el mismo archivo
Distintas secciones en el archivo para el cdigo y HTML
<HTML>
<asp:Button id="btn" runat="server"/>
</HTML>
<SCRIPT Language="vb" runat="server">
Sub btn_Click(s As Object, e As EventArgs) Handles btn.Click
...
End Sub
</SCRIPT>
<HTML>
<asp:Button id="btn" runat="server"/>
</HTML>
<SCRIPT Language="vb" runat="server">
Sub btn_Click(s As Object, e As EventArgs) Handles btn.Click
...
End Sub
</SCRIPT>
<HTML>
<asp:Button id="btn" runat="server"/>
</HTML>
<SCRIPT Language="c#" runat="server">
private void btn_Click(object sender, System.EventArgs e)
{
. . .
}
</SCRIPT>
<HTML>
<asp:Button id="btn" runat="server"/>
</HTML>
<SCRIPT Language="c#" runat="server">
private void btn_Click(object sender, System.EventArgs e)
{
. . .
}
</SCRIPT>

***************************** use******************************
Aunque el mtodo predeterminado para implementar cdigo en el lado del
servidor en Visual Studio .NET es utilizar una pgina de cdigo subyacente,
podemos encontrar pginas que utilizan cdigo en lnea, concretamente pginas
ASP.
Cuando se utiliza cdigo en lnea en una pgina Web, el HTML y el cdigo se
encuentran en secciones distintas de un nico archivo .aspx. Esta separacin se
produce para ofrecer claridad en la lectura de la pgina; la funcionalidad, el
cdigo y HTML pueden coexistir en cualquier lugar de la pgina.
El siguiente cdigo es un ejemplo de cdigo en lnea:
<HTML>
<asp:Button id="btn" runat="server"/>
...
</HTML>

<SCRIPT Language="vb" runat="server">
Sub btn_Click(s As Object, e As EventArgs) _
Handles btn.Click
...
End Sub
</SCRIPT>

Introduccin
Cdigo en lnea
Visual Basic .NET
C#
Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET 5



<HTML>
<asp:Button id="btn" runat="server" />
...
</HTML>

<SCRIPT Language="c#" runat="server">
private void btn_Click(object sender, System.EventArgs e)
{
. . .
}
</SCRIPT>

6 Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET


Qu son las pginas de cdigo subyacente?
Separacin de cdigo y contenido
Los desarrolladores y los diseadores de la interfaz de
usuario pueden trabajar independientemente
Form1.aspx Form1.aspx Form1.aspx Form1.aspx Form1.aspx.vb Form1.aspx.vb
o Form1.aspx.cs o Form1.aspx.cs
<tags>
<tags> c c digo digo
c c digo digo
Archivos distintos Un archivo

***************************** use******************************
El mtodo predeterminado para implementar cdigo en el lado del servidor en
Visual Studio .NET es utilizar pginas de cdigo subyacente. Cuando utilizamos
pginas de cdigo subyacente, la lgica de programacin se encuentra en un
archivo distinto de los elementos visuales de la pgina. Separar la lgica del
diseo permite a los desarrolladores trabajar en la pgina de cdigo subyacente
mientras los diseadores de la interfaz de usuario (IU) trabajan en la pgina
ASP.NET.
Las pginas de cdigo subyacente contienen toda la lgica de programacin para
una sola pgina Web. Cada pgina de una aplicacin Web tiene su propia pgina
de cdigo subyacente. De forma predeterminada, una pgina de cdigo
subyacente tiene el mismo nombre que la pgina Web a la que est asociada; sin
embargo, la pgina de cdigo subyacente tambin tiene una extensin .aspx.vb o
.aspx.cs, dependiendo del lenguaje utilizado en la pgina de cdigo subyacente.
Por ejemplo la pgina Web Form1.aspx tendr una pgina de cdigo subyacente
Microsoft Visual Basic .NET denominada Form1.aspx.vb o una pgina de
cdigo subyacente C#denominada Form1.aspx.cs.

Una pgina de cdigo subyacente nicamente puede contener cdigo en un
slo lenguaje. No podemos mezclar Visual Basic .NET y C#en una misma
pgina de cdigo subyacente.

Introduccin
Poner nombre a las
pginas de cdigo
subyacente
Nota
Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET 7



Cmo funcionan las pginas de cdigo subyacente
Crean archivos distintos para la interfaz de usuario y la
lgica de la interfaz
Utilizan la directiva @ Page para enlazar los dos archivos
Pre-compilacin o compilacin JIT
Page1.aspx
<% @ Page Language="c#"
Inherits="Project.WebForm1"
Codebehind="Page1.aspx.cs"
Src = "Page1.aspx.cs" %>
Page1.aspx.cs
public class WebForm1
{
private void cmd1_Click()
{

}
}

***************************** use******************************
Para que las pginas de cdigo subyacente funcionen, cada pgina .aspx debe
estar asociada a una pgina de cdigo subyacente, y esa pgina de cdigo
subyacente debe estar compilada antes de que la informacin se enve de vuelta a
un navegador cliente que la solicite.
Aunque cada pgina Web Form est formada por dos archivos distintos (la
pgina .aspx y la pgina de cdigo subyacente), ambos archivos forman una
nica unidad cuando se ejecuta la aplicacin Web. La pgina de cdigo
subyacente puede ser precompilada por Visual Studio .NET cuando generamos el
proyecto de aplicacin Web, o puede ser compilada just-in-time (J IT) la primera
vez que un usuario accede a la pgina.
La pgina .aspx debe estar asociada a la pgina de cdigo subyacente.
Visual Studio .NET agrega los tres atributos siguientes a la directiva @ Page de
la pgina .aspx para conseguir esta asociacin:
Codebehind. Es el atributo que Visual Studio .NET utiliza internamente para
asociar los archivos.
Src. Este atributo es el nombre de la pgina de cdigo subyacente, y se utiliza
si la aplicacin Web no est precompilada.
Inherits. Este atributo permite a la pgina .aspx heredar clases y objetos de la
pgina de cdigo subyacente.

El atributo Inherits es sensible a maysculas.


Introduccin
Enlazar los dos archivos
Nota
8 Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET


El siguiente cdigo muestra un ejemplo de directiva @ Page para un archivo
denominado Page1.aspx:
<%@ Page Language="vb" Inherits="Project.WebForm1"
Codebehind="Page1.aspx.vb" Src="Page1.aspx.vb" %>

<%@ Page Language="c#" Inherits="Project.WebForm1"
Codebehind="Page1.aspx.cs" Src="Page1.aspx.cs" %>

Cuando una pgina est compilada J IT, las pginas de cdigo subyacente se
compilan la primera vez que un cliente solicita la pgina .aspx. Tras la primera
peticin, las siguientes utilizan el archivo compilado existente. Por tanto, la
primera peticin de una pgina dura ms, pero las siguientes peticiones son ms
rpidas.
Si se desea utilizar la compilacin J IT para una pgina, debera utilizarse el
atributo Src de la directiva@ Page.

La compilacin J IT mantendr el tamao del proyecto pequeo y permitir
actualizaciones de cdigo sin recompilar todo el sitio.

Cuando un usuario solicita la pgina .aspx, el archivo DLL procesa la peticin
entrante y responde creando el cdigo HTML y el scripting adecuados y
devolvindolos al navegador solicitante.
Si omitimos el atributo Src de la directiva @ Page en un archivo .aspx, la pgina
se precompila cuando generamos la aplicacin en Visual Studio .NET. De modo
predeterminado, Visual Studio .NET no agrega el atributo Src; por ello, todas las
pginas de cdigo subyacente en los formularios Web Forms de un proyecto se
compilan cuando se genera el proyecto. Este proceso ahorra un tiempo
considerable de proceso en el servidor Web.
Precompilar pginas de cdigo subyacente tambin simplifica la implantacin del
sitio Web ya que no es necesario implantar las pginas de cdigo subyacente
junto con las pginas .aspx.

Para ms informacin sobre la implementacin de sitios Web, consultar el
Mdulo Configurar, optimizar e implementar una aplicacin Web con Microsoft
ASP.NET.

Visual Basic .NET
C#
Compilacin JIT
Nota
Ejecucin
Precompilacin
Nota
Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET 9



Leccin: agregar procedimientos de evento a controles de
servidor Web
Quson los procedimientos de evento?
Demostracin: uso de eventos
Procedimientos de evento en el lado del cliente
Procedimientos de evento en el lado del servidor
Multimedia: eventos en el lado del cliente y en el lado
del servidor
Crear procedimientos de evento
Prctica dirigida por el profesor: crear un
procedimiento de evento
Interactuar con controles en procedimientos de evento

***************************** use******************************
En esta leccin, estudiaremos los procedimientos de evento y cmo agregarlos a
los controles de servidor Web. Aprenderemos a distinguir entre los dos tipos de
eventos (en el lado del servidor y en el lado del cliente) y a saber cundo resulta
apropiado utilizar cada uno.
En esta leccin, aprenderemos a:
Identificar procedimientos de evento.
Distinguir entre eventos en el lado del servidor y en el lado del cliente.
Crear un procedimiento de evento en el lado del servidor.
Interactuar con controles en procedimientos de evento.

Introduccin
Objetivos de la leccin
10 Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET


Qu son los procedimientos de evento?
Acciones en respuesta a la interaccin de un usuario
con los controles de la pgina

***************************** use******************************
Los formularios Web Forms dinmicos e interactivos normalmente reaccionan a
la entrada de datos del usuario. Los procedimientos de evento se utilizan para
gestionar las interacciones de los usuarios en un formulario Web Form.
Cuando un usuario interacta con un formulario Web Form, se genera un evento.
Diseamos nuestra aplicacin Web para realizar una determinada tarea cuando se
genera el evento. Un procedimiento de evento es la accin que ocurre en
respuesta al evento generado.
Muchos formularios Web Forms permiten al usuario introducir informacin y
hacer clic en un botn Enviar. Se genera un evento cuando el usuario hace clic
en el botn Enviar. Por ejemplo, un procedimiento de evento podra ser enviar la
informacin del usuario a una base de datos Microsoft SQL Server

.
Introduccin
Definicin
Ejemplo de un
procedimiento de
evento
Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET 11



Demostracin: uso de eventos
Abrir una pgina ASP.NET con controles
y procedimientos de evento en el lado del
cliente y en el lado del servidor
Hacer clic en los controles para visualizar
la ejecucin de los eventos en el lado del
cliente y en el lado del servidor
En el explorador, visualizar el cdigo
fuente de la pgina
En el editor, visualizar el cdigo del
procedimiento de evento

***************************** use******************************
Esta demostracin puede realizarse utilizando un proyecto Visual Basic .NET o
Microsoft Visual C#

. En esta demostracin, veremos cmo se ejecutan los


procedimientos de evento en el lado del cliente y en el lado del servidor en un
sitio Web.
Ejecutar la demostracin
1. En Visual Studio .NET, abrir la pgina eventorderstart.aspx en el proyecto
Demo04VB o Demo04CS que se pueden encontrar dentro del fichero
demos04.zip.
2. Visualizar la pgina en el navegador. No es necesario generar antes el
proyecto.
3. Hacer clic en los controles de la pgina. Cada control tiene un procedimiento
de evento en el lado del cliente que enva una cadena cuando se ejecuta.
4. Hacer clic en Save. Esto enva el formulario y har que se ejecuten todos los
procedimientos de evento en el lado del servidor.
5. En el navegador, visualizar el cdigo fuente de la pgina. Slo est visible el
cdigo para los procedimientos de evento en el lado del cliente.
6. Cerrar la vista de cdigo fuente de la pgina.
7. En Visual Studio .NET, abrir la pgina en la vista HTML. Hay cdigo tanto
para procedimientos de evento en el lado del cliente como en el lado del
servidor.

Introduccin
12 Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET


Procedimientos de evento en el lado del cliente
Internet
Pginas
.HTM
Normalmente, se utilizan nicamente con
controles HTML
Interpretado por el navegador y se ejecuta en el
cliente
No tiene acceso a los recursos del servidor
Utiliza <SCRIPT language="lenguaje">

***************************** use******************************
Existen dos tipos de procedimientos de evento: en el lado del cliente y en el lado
del servidor. Ambos tienen ventajas e inconvenientes.
Los procedimientos de evento en el lado del cliente son eventos gestionados en el
equipo que solicita el formulario Web Form (el cliente). Cuando se genera un
evento, no se enva ninguna informacin al servidor. En lugar de ello, el
navegador del cliente interpreta el cdigo y tambin realiza la accin.
Los procedimientos de evento en el lado del cliente nicamente pueden utilizarse
con controles HTML. Adems, los procedimientos de evento en el lado del
cliente nunca tienen acceso a los recursos del servidor. Por ejemplo, no podemos
utilizar scripts en el lado del cliente para acceder a una base de datos SQL Server.
Los procedimientos de evento en el lado del cliente resultan tiles para eventos
que deseamos que ocurran inmediatamente porque no requieren un viaje de ida y
vuelta al servidor Web (envo de informacin al servidor Web y espera de una
respuesta). Por ejemplo, es posible validar informacin en un cuadro de texto
antes de enviarla al servidor. Podemos utilizar scripts en el lado del cliente para
validar la informacin rpida y eficazmente antes de enviar la informacin del
usuario al servidor Web para continuar su proceso.
Especificamos un procedimiento de evento en el lado del cliente creando un
bloque <SCRIPT>en la pgina Web, como muestra el siguiente cdigo:
<SCRIPT language="javascript">

Introduccin
Procedimientos de
evento en el lado del
cliente
Usos de los
procedimientos de
evento en el lado del
cliente
Especificar
procedimientos de
evento en el lado del
cliente
Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET 13



Procedimientos de evento en el lado del servidor
Utilizados tanto con controles de servidor Web como
HTML
El cdigo se compila y ejecuta en el servidor
Tienen acceso a recursos del servidor
Utilizan <SCRIPT language="vb" runat="server">o
<SCRIPT language=cs" runat="server">
Internet
.Pginas
.ASPX

***************************** use******************************
A diferencia de los procedimientos de evento en el lado del cliente, los
procedimientos de evento en el lado del servidor requieren el envo de
informacin al servidor Web para su proceso. Aunque el uso de procedimientos
de evento en el lado del servidor supone un coste en tiempo, son mucho ms
potentes que los procedimientos de evento en el lado del cliente.
Los procedimientos de evento en el lado del servidor estn formados por cdigo
compilado que reside en el servidor Web. Los procedimientos de evento en el
lado del servidor pueden utilizarse para gestionar eventos que son generados
desde los controles de servidor Web y HTML. Los procedimientos de evento en
el lado del servidor tienen acceso a recursos del servidor que normalmente no
estn disponibles para los procedimientos de evento en el lado del cliente.
Para especificar un procedimiento de evento en el lado del servidor, se utiliza el
atributo runat="server" en la etiqueta script, como muestra el siguiente cdigo:
<SCRIPT language="vb" runat="server">

<SCRIPT language="c#" runat="server">

Debido a que los procedimientos de evento en el lado del servidor requieren un
viaje de ida y vuelta al servidor Web, existen un nmero limitado de tipos de
eventos de control soportados. Con los procedimientos de evento en el lado del
cliente, podemos incluir cdigo para procesar eventos asociados a botones de
ratn y eventos onChange. Mientras los procedimientos de evento en el lado del
servidor soportan eventos click y una versin especial del evento onChange, no
pueden soportar eventos que ocurren frecuentemente, como eventos asociados a
botones del ratn.
Introduccin
Procedimientos de
evento en el lado del
servidor
Visual Basic .NET
C#
Soporte de eventos
14 Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET


Multimedia: eventos en el lado del cliente y en el lado del servidor
del servidor

***************************** use******************************
En esta animacin, veremos cmo los procedimientos de evento en el lado del
cliente y en el lado del servidor se procesan. Para iniciar la animacin abrir el
fichero media041.swf.
1. El cliente solicita una pgina ASP.NET del servidor Web.
2. El servidor devuelve al cliente una pgina que contiene HTML y scripts. La
pgina incluye un control de cuadro de texto y un botn Submit. La pgina
tambin contiene scripting en el lado del cliente que valida el contenido del
cuadro de texto.
3. El usuario introduce informacin no vlida en el cuadro de texto, y el script
en el lado del cliente genera un cuadro de mensaje.
4. Como no se ha enviado ninguna informacin al servidor, el proceso en el lado
del cliente reduce el trfico de red y el tiempo de respuesta.
5. El usuario corrige la informacin del cuadro de texto y hace clic en el botn
Submit.
6. La informacin se valida en el lado del cliente y se enva al servidor, donde
puede iniciarse el proceso en el lado del servidor.
7. El servidor repite la validacin y almacena la informacin del cuadro de texto
en una base de datos.
8. Debido a que el script en el lado del cliente no puede acceder a recursos del
servidor, el proceso en el lado del servidor ofrece una mayor flexibilidad al
trabajar con datos.

Introduccin
Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET 15



Crear procedimientos de evento
Visual Studio .NET declara variables y crea una plantilla
de procedimiento de evento
El uso de la palabra clave Handlesagrega a un evento
varios procedimientos de evento
protected System.Web.UI.WebControls.Button cmd1;
private void InitializeComponent()
{
this.cmd1.Click += new System.EventHandler(this.cmd1_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
private void cmd1_Click(object s, System.EventArgs e)
protected System.Web.UI.WebControls.Button cmd1;
private void InitializeComponent()
{
this.cmd1.Click += new System.EventHandler(this.cmd1_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
private void cmd1_Click(object s, System.EventArgs e)
Protected WithEvents cmd1 As System.Web.UI.WebControls.Button
Private Sub cmd1_Click(ByVal s As System.Object, _
ByVal e As System.EventArgs) Handles cmd1.Click
Protected WithEvents cmd1 As System.Web.UI.WebControls.Button
Private Sub cmd1_Click(ByVal s As System.Object, _
ByVal e As System.EventArgs) Handles cmd1.Click

***************************** use******************************
Crear un procedimiento de evento en el lado del servidor en Visual Studio .NET
implica dos pasos. En el primer paso, creamos el control que genera el evento en
el formulario Web Form. En el segundo, proporcionamos el cdigo necesario en
la pgina de cdigo subyacente para procesar el evento.
Cuando hacemos doble clic en un control en Visual Studio .NET, Visual Studio
.NET declara una variable (con el mismo nombre que el atributo id del control) y
crea una plantilla para el procedimiento de evento. Cuando utilizamos
Visual Basic .NET, Visual Studio .NET tambin agrega la palabra clave
Handles, que adjunta el procedimiento de evento al control. La palabra clave
Handles permite crear mltiples procedimientos de evento a un nico evento.

De modo predeterminado, Visual Studio .NET utiliza la palabra clave
Handles debido a que el atributo AutoEventWireup de la directiva @ Page est
establecido a false. Si este atributo est establecido a true, los controles se
enlazan a procedimientos de evento utilizando nombres especficos, que es el
modo en que se gestionan los procedimientos de evento en Visual Basic 6.0.

El siguiente cdigo HTML muestra un formulario Web Form que tiene un nico
botn con un atributo id igual a cmd1; el evento click del botn se gestionar en
el servidor:
<form id="form1" method="post" runat="server">
<asp:Button id="cmd1" runat="server"/>
</form>

Introduccin
Crear un procedimiento
de evento en el lado del
servidor
Nota
16 Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET


El siguiente cdigo Visual Basic .NET muestra la declaracin de variables
necesaria en la pgina de cdigo subyacente.
Protected WithEvents cmd1 As _
System.Web.UI.WebControls.Button

En el cdigo anterior, el nombre de la variable debe coincidir con el id del
control Web, y debemos utilizar la palabra clave WithEvents para indicar que
este control hace que se ejecuten los procedimientos de evento.
En el siguiente cdigo Visual Basic .NET, que muestra el procedimiento de
evento para el evento Click, la palabra clave Handles indica que el
procedimiento de evento se ejecuta en respuesta al evento Click del control
cmd1:
Private Sub cmd1_Click(ByVal s As System.Object, _
ByVal e As System.EventArgs) _
Handles cmd1.Click
...
End Sub

Todos los eventos pasan dos argumentos al procedimiento de evento: el remitente
del evento y una instancia de la clase que guarda los datos del evento.
Normalmente, este ltimo es del tipo EventArgs, y a menudo no contiene
ninguna informacin adicional; sin embargo, para algunos controles, es de un
tipo que es especfico para ese control.
Por ejemplo, para un control Web ImageButton, el segundo argumento es de
tipo ImageClickEventArgs, que incluye informacin sobre las coordenadas
donde el usuario ha hecho clic. El siguiente procedimiento de evento enva las
coordenadas de la ubicacin donde ocurre un clic en un control Label:
Sub img_OnClick(ByVal s As System.Object, _
ByVal e As System.Web.UI.ImageClickEventArgs) _
Handles ImageButton1.Click
Label1.Text = e.X & ", " & e.Y
End Sub

La forma de crear un procedimiento de evento ASP.NET en C#es ligeramente
distinta de la de Visual Basic .NET. C#no soporta la palabra clave Handles. En
lugar de ello, en C#, agregamos el procedimiento de evento a la propiedad de
evento del control.
Por ejemplo, el siguiente es el mismo formulario HTML del cdigo anterior:
<FORM ID="Form1" runat="server">
<asp:Button id="cmd1" runat="server" />
</FORM>

Argumentos del evento
Crear un procedimiento
de evento en el lado del
servidor in C#
Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET 17



En la pgina de cdigo subyacente, se crea una variable con el mismo nombre
que el control. En el mtodo InitializeComponent, agregamos el procedimiento
de evento a la propiedad del evento del control. La propiedad Click de la variable
cmd1 se gestiona como sigue:
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button cmd1;

private void InitializeComponent()
{
this.cmd1.Click += new
System.EventHandler(this.cmd1_Click);
this.Load += new System.EventHandler(this.Page_Load);
}

private void cmd1_Click(object sender, System.EventArgs e)
{
...
}
}

18 Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET


Prctica dirigida por el profesor: crear un procedimiento de evento
Crear un formulario Web Formutilizando
Visual Studio .NET
Agregar controles al formulario Web
Form
Hacer doble clic en uno o ms controles
para agregar procedimientos de evento
Generar y examinar

***************************** use******************************
Esta prctica dirigida por el instructor puede realizarse utilizando archivos de
Visual Basic .NET o archivos de Visual C#.
En esta prctica, veremos cmo agregar un procedimiento de evento a un control
Web utilizando Visual Studio .NET.
Ejecutar la prctica
1. En Visual Studio .NET, agregar un nuevo formulario Web Form denominado
events.aspx al proyecto Mod05VB o Mod05CS, en la solucin 2310Demos.
2. Abrir la pgina events.aspx.
3. Ubicar un control Web Form Button y uno Label en el formulario.
Se asigna a los controles un ID predeterminado que podemos ver y modificar
en la ventana Propiedades.
4. En la vista Diseo, hacer doble clic en el control Button para abrir la pgina
de cdigo subyacente y crear un procedimiento de evento Click.
En la pgina de cdigo subyacente, ver la variable declarada y la plantilla de
procedimiento creada por Visual Studio .NET.
5. Introducir el siguiente cdigo en el procedimiento de evento Click:
Label1.Text = "You clicked the button"

Label1.Text = "You clicked the button";

6. Observar la palabra clave Handles en el procedimiento de evento
Button1_Click.
C#no soporta la palabra clave Handles, en lugar de ello C#enlaza un
procedimiento a un evento en el procedimiento InitializeComponent. Para
ver el enlace de Button1_Click, expandir la seccin Web Form Designer
generated code en la ventana de cdigo. Encontrar el procedimiento
InitializeComponent y observar el enlace del controlador de eventos.
Introduccin
Visual Basic .NET
C#
Visual Basic .NET
C#
Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET 19



7. En el Explorador de soluciones, hacer clic con el botn derecho en la pgina
events.aspx y clic en Ver en el explorador.
8. En el navegador, hacer clic en el formulario.
El texto de la etiqueta cambia.
9. En el navegador, visualizar el cdigo fuente de la pgina para mostrar que no
hay cdigo en el lado del cliente. Slo hay cdigo en el lado del servidor.
10. Cerrar la vista de cdigo fuente de la pgina.
11. En la vista Diseo, cambiar la propiedad ID del control Button por
cmdSubmit.
12. En la pgina de cdigo subyacente, observar que la palabra clave Handles se
ha eliminado del procedimiento de evento Button1_Click.
En la pgina de cdigo subyacente, observar que el enlace de evento en
InitializeComponent ha cambiado al nombre del nuevo botn.
13. Agregar la palabra clave Handles al procedimiento de evento Button1_Click
para ejecutar el procedimiento del evento cmdSubmit.Button, como muestra
en el siguiente cdigo:
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles cmdSubmit.Click

La palabra clave Handles no est soportada en C#. En lugar de ello, el
procedimiento est enlazado al evento en el procedimiento
InitializeComponent. Visual Studio agrega el enlace correcto, como se
muestra en el paso 12.
14. Generar y examinar la pgina.
El procedimiento de evento Click se sigue activando con el nuevo nombre del
control.

Visual Basic .NET
C#
Visual Basic .NET
C#
20 Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET


Interactuar con controles en procedimientos de evento
Leer las propiedades de los controles de servidor Web
Respuestas de salida a otros controles de servidor Web
lblGreeting.Text = "new text"
lblGreeting.Text = "new text"
strGreeting = "Hello " & txtName.Text
strGreeting = "Hello " & txtName.Text
strGreeting = "Hello " + txtName.Text;
strGreeting = "Hello " + txtName.Text;
lblGreeting.Text = "new text";
lblGreeting.Text = "new text";

***************************** use******************************
En muchas aplicaciones Web, necesitamos leer y escribir a controles de un
formulario. Podemos hacerlo dentro de los procedimientos de evento en el lado
del servidor.
En un procedimiento de evento en el lado del servidor, podemos leer informacin
de un control de servidor. Por ejemplo, si tenemos el siguiente formulario con un
control Textbox y un control Button:
<FORM id="Form1" runat="server">
<asp:TextBox id="txtName" runat="server" />
<asp:Button id="cmd1" runat="server" />
</FORM>

Cuando el usuario hace clic en el botn, podemos leer el texto que el usuario ha
escrito en el cuadro de texto. El siguiente cdigo asigna la variable de cadena
strGreeting a una concatenacin del texto Hello y el texto del cuadro de texto
txtName:
Dim strGreeting As String = "Hello " & txtName.Text

string strGreeting = "Hello " + txtName.Text;

Por ejemplo, si un usuario ha escrito "Shannon" en el cuadro de texto txtName,
la variable strGreeting contendr la cadena de texto "Hello Shannon".
Introduccin
Leer las propiedades de
un control de servidor
Visual Basic .NET
C#
Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET 21



Podemos enviar informacin directamente a un control de servidor Web
utilizando las propiedades del control. Por ejemplo, supongamos que tenemos un
control de servidor Web denominado Label en la pgina ASP.NET, como sigue:
<asp:Label id="lblGreeting"
runat="server">Greeting</asp:Label>

El siguiente cdigo en el lado del servidor asigna la propiedad Text del control
de servidor Web lblGreeting a una cadena de texto:
lblGreeting.Text = "new text"

lblGreeting.Text = "new text";

En ASP, utilizamos la coleccin Request.Forms para leer las
propiedades de controles en un formulario, y utilizamos Response.Write para
enviar texto. Aunque estos mtodos funcionan con ASP.NET, no son la mejor
eleccin. En lugar de ello, podemos utilizar etiquetas de control de servidor y
spans.

Envo de informacin de
un control de servidor
Web
Visual Basic .NET
C#
Sugerencia
22 Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET


Leccin: uso de los eventos de pgina
Ciclo de vida de un evento de pgina
Multimedia: el proceso PostBack
Demostracin: gestionar eventos
Prctica: ordenar los eventos
Gestin de los eventos Page.IsPostback
Vnculo de dos controles
Demostracin: vincular controles

***************************** use******************************
En esta leccin, estudiaremos cmo utilizar los eventos de pgina. En primer
lugar, estudiaremos el ciclo de vida de los eventos de pgina. A continuacin,
veremos cmo funciona el proceso de postback, y estudiaremos el orden de los
eventos. Tambin veremos cmo trabajar con el evento Page_Load. La leccin
finaliza con el vnculo de controles.
En esta leccin, aprenderemos a:
Describir el ciclo de vida de los eventos de pgina.
Utilizar formularios postback.
Enlazar un control con otro control.

Introduccin
Objetivos de la leccin
Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET 23



Ciclo de vida de los eventos de pgina
Page_Load
Page_Load
Page_Unload
Page_Unload
Textbox1_Changed
Textbox1_Changed
Button1_Click
Button1_Click
La pgina se gestiona
Page_Init
Page_Init
Eventos Eventos control control
Eventos Eventosde de cambio cambio
Eventos Eventosde de acci acci n n

***************************** use******************************
Cuando se solicita una pgina ASP.NET, se producen una serie de eventos de
pgina. Estos eventos siempre ocurren en el mismo orden, denominado ciclo de
vida de los eventos de pgina.
El ciclo de vida de los eventos de pgina consta de los siguientes eventos de
pgina, que ocurren en el siguiente orden:
1. Page_Init. Este evento de pgina inicializa la pgina creando e inicializando
los controles de servidor Web de la pgina.
2. Page_Load. Este evento de pgina se ejecuta cada vez que se solicita la
pgina.
3. Eventos Control. Este evento de pgina incluye eventos de cambio (por
ejemplo, Textbox1_Changed) y eventos de accin (por ejemplo,
Button1_Click).
4. Page_Unload. Este evento de pgina ocurre cuando la pgina se cierra o
cuando el control pasa a otra pgina.

El final del ciclo de vida de los eventos de pgina incluye el borrado de la pgina
en memoria.
La mayora de eventos de control no ocurren hasta que el formulario Web Form
se enve de nuevo al servidor. Por ejemplo, los eventos Change se gestionan en
orden aleatorio en el servidor despus de que el formulario haya sido enviado. En
cambio, los eventos Click pueden hacer que el formulario sea enviado al servidor
inmediatamente.
Por ejemplo, si un usuario introduce texto en varios controles de un formulario y
hace clic en un botn Submit, los eventos Change de los controles de texto no se
procesarn hasta que el evento Click enve el formulario al servidor.

Para ms informacin sobre los eventos de pgina, ver Pgina (miembros
Introduccin
Ciclo de vida de los
eventos de pgina
Nota
24 Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET


de) y Ciclo de vida de ejecucin de un control en la documentacin en lnea
de Visual Studio .NET.
En ASP.NET, los formularios estn diseados para enviar informacin de retorno
a la pgina ASP.NET remitente para su procesamiento. Este proceso se denomina
postback. Los postbacks pueden producirse por determinadas acciones del
usuario. De modo predeterminado, nicamente los eventos click Button hacen
que el formulario sea enviado de nuevo al servidor. Sin embargo, si establecemos
la propiedad AutoPostBack de un control a true, forzamos un postback para los
eventos de ese control.
Por ejemplo, el siguiente cdigo HTML es un ejemplo del uso de AutoPostBack
en un cuadro de lista. Cada vez que el usuario modifica el valor del cuadro de
lista, el evento SelectedIndexChanged se invoca en el servidor y actualiza el
cuadro de texto:
<asp:DropDownList id="ListBox1" runat="server"
AutoPostBack="True">
<asp:ListItem>First Choice</asp:ListItem>
<asp:ListItem>Second Choice</asp:ListItem>
</asp:DropDownList>

El cdigo de la pgina de cdigo subyacente es como sigue:
Private Sub ListBox1_SelectedIndexChanged _
(ByVal s As System.Object, ByVal e As System.EventArgs) _
Handles ListBox1.SelectedIndexChanged
TextBox1.Text=ListBox1.SelectedItem.Value
End Sub

private void ListBox1_SelectedIndexChanged
(object sender, System.EventArgs e)
{
TextBox1.Text = ListBox1.SelectedItem.Value;
}

Postbacks
Visual Basic .NET
C#
Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET 25



Multimedia: el proceso de postback

***************************** use******************************
En esta animacin, veremos cmo funcionan los formularios en ASP.NET y
cmo puede codificarse el evento Page_Load para que nicamente se ejecute la
primera vez que se muestra una pgina, y cmo pueden utilizarse los controles
para que enven informacin inmediatamente al servidor. Para iniciar la
animacin abrir el fichero media042.swf
La primera vez que un usuario solicita una pgina del servidor, la verificacin
de Page.IsPostBack del evento Page_Load se realiza satisfactoriamente y se
ejecuta el cdigo del bloque. En este ejemplo, el cdigo rellena un cuadro de
lista.
El servidor devuelve la pgina al usuario. En este ejemplo, la pgina tiene un
control ListBox, un control Label en blanco, y un botn Submit.
Cuando el usuario cambia la seleccin en el cuadro de lista y hace clic en el
botn Submit, la informacin se enva de retorno al servidor.
El servidor puede determinar que sta es una pgina que ha sido enviada de
retorno por s misma, y por ello, la verificacin de Page.IsPostBack del
evento Page_Load falla y el cdigo del bloque no se ejecuta.
En lugar de ello, se ejecutan los procedimientos de evento de los controles del
formulario (el cuadro de lista y el botn) y, en este escenario, el
procedimiento de evento del cuadro de lista cambia la etiqueta para reflejar la
nueva seleccin del cuadro de lista.
A continuacin, el servidor devuelve la informacin actualizada al cliente. El
usuario ve la misma pgina, pero la etiqueta ha cambiado para reflejar la
seleccin del cuadro de lista.
Si deseamos que el nuevo valor del cuadro de lista se enve al servidor
inmediatamente, y no esperar a que el usuario haga clic en el botn Submit,
podemos establecer la propiedad AutoPostBack del control de cuadro de lista
a True.
Con la propiedad AutoPostBack establecida a True, la informacin se enva
al servidor en cuanto el usuario cambia la seleccin en el cuadro de lista.
El servidor actualiza la etiqueta para reflejar el cambio, y enva la
informacin actualizada de retorno al cliente.
Introduccin
26 Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET


Demostracin: Gestionar eventos

***************************** use******************************
Esta demostracin puede realizarse utilizando un proyecto Visual Basic .NET o
un proyecto Visual C#.
En esta demostracin, veremos cmo los controles HTML y los controles de
servidor Web pueden soportar eventos tanto en el lado del cliente como en el lado
del servidor.
El cdigo completo para esta demostracin se encuentra en la pgina:
Demo04VB\eventorderFinal.aspx.
Demo04CS\eventorderFinal.aspx.
Estas pginas y sus correspondientes proyectos se pueden encontrar dentro del
fichero demos04.zip.
Introduccin
Visual Basic .NET
C#
Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET 27


Ejecutar la demostracin
1. En Visual Studio .NET, visualizar la pgina eventorderstart.aspx del proyecto
Demo04VB o Demo04CS en el navegador.
Escribir un nombre en el campo Name, hacer clic en un valor en el cuadro de
lista Profession, seleccionar la casilla de verificacin y hacer clic en Save.
La pgina tiene procedimientos de evento en el lado del cliente y en el lado
del servidor para el cuadro de texto, el cuadro de lista, la casilla de
verificacin, el botn y la pgina.
2. En Visual Studio .NET, editar la pgina en la vista HTML y cambiar la casilla
de verificacin a un control de servidor Web, agregando un atributo Text,
como muestra el siguiente cdigo:
<asp:checkbox onclick="checkClick()"
onserverclick="checkServerClick"
onserverchange="checkServerChange"
runat="server"
id="Checkbox1"
Text="Certified Professional"/>

Aunque el verificador de sintaxis no reconoce los atributos onclick,
onserverclick y onserverchange, podemos mantenerlos en el cdigo.

3. Visualizar de nuevo la pgina en el navegador.
Escribir un nombre en el campo Name, hacer clic en el cuadro de lista
Profession, seleccionar la casilla de verificacin y hacer clic en Save.
Ahora, la casilla de verificacin nicamente lanza eventos en el lado del
cliente.
Mientras el evento del cliente todava se ejecuta debido a que
<asp:checkbox>genera <input type=checkbox>, el evento del servidor no se
ejecuta porque el nombre del evento del servidor es oncheckedchange, no
onserverchange.
4. Modificar la pgina en la vista HTML y cambiar el nombre del atributo del
procedimiento de evento en el lado del servidor onserverchange por
oncheckedchange, como muestra el siguiente cdigo:
<asp:checkbox onclick="checkClick()"
onserverclick="checkServerClick"
oncheckedchanged="checkServerChange"
runat="server"
id="Checkbox1"
Text="Certified Professional"/>

5. Visualizar de nuevo la pgina en el navegador.
Introducir un nombre en el campo Name, hacer clic en un valor en el cuadro
de lista Profession, seleccionar la casilla de verificacin y hacer clic en Save.
Se ejecutan de nuevo los procedimientos de eventos cliente y servidor.
6. Modificar la pgina y establecer el atributo AutoPostBack a true para la
casilla de verificacin.
7. Visualizar de nuevo la pgina en el navegador.
Nota
28 Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET


Cuando seleccionamos la casilla de verificacin, obtenemos el evento en el
lado del cliente y, a continuacin, el evento en el lado del servidor.
8. En el navegador, visualizar el cdigo fuente de la pgina para ver cmo se
implementa AutoPostBack.
9. Cerrar la vista de cdigo fuente de la pgina.
10. Modificar la pgina y agregar una verificacin Page.IsPostBack para el
procedimiento de evento del evento Page_Load, como muestra el siguiente
cdigo:
Sub Page_Load(s As Object, e As EventArgs)
If Not Page.IsPostback Then
Label1.Text &= "<P>Page_Load first time, "
Else
Label1.Text &= "<P>Page_Load postback, "
End If
End Sub

void Page_Load(object s, System.EventArgs e)
{
if (!Page.IsPostBack)
{
Label1.Text += "<P>Page_Load first time, ";
}
else
{
Label1.Text += "<P>Page_Load postback, ";
}
}

11. Visualizar de nuevo la pgina en el navegador.
Mientras el formulario se carga la primera vez, y se enva de retorno a
continuacin, veremos los distintos mensajes que se muestran.

Visual Basic .NET
C#
Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET 29



Prctica: ordenar los eventos
Los estudiantes:
En determinados escenarios, enumerarn
los eventos que ocurrirn y el orden en
que se producirn
Tiempo: 5 minutos

***************************** use******************************
En esta prctica, predeciremos qu eventos se producirn en determinados
escenarios. Los eventos a incluir son: carga de una pgina, cambio en un control
y clic en un control.
Listar el orden de los eventos para los siguientes escenarios
Introducir el nombre (Name), edad (Age), hacer clic en Female y en Submit.

____________________________________________________________
____________________________________________________________
Introduccin
30 Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET


Seleccionar el estado y hacer clic en Submit.

_____________________________________________________________
_____________________________________________________________
Seleccionar la fecha de inicio, la fecha de finalizacin y hacer clic en Submit.

_____________________________________________________________
_____________________________________________________________

Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET 31



Gestin de los eventos Page.IsPostback
Page_Loadse invoca en cada solicitud
Utilizar Page.IsPostBackpara ejecutar lgica condicional
Page.IsPostBackevita la recarga en cada postback
Private Sub Page_Load(ByVal s As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
If Not Page.IsPostBack Then
'executes only on initial page load
End If
'this code executes on every request
End Sub
Private Sub Page_Load(ByVal s As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
If Not Page.IsPostBack Then
'executes only on initial page load
End If
'this code executes on every request
End Sub
private void Page_Load(object sender, System.EventArgs e)
{ if (!Page.IsPostBack)
{
// executes only on initial page load
}
//this code executes on every request
}
private void Page_Load(object sender, System.EventArgs e)
{ if (!Page.IsPostBack)
{
// executes only on initial page load
}
//this code executes on every request
}

***************************** use******************************
El evento Page_Load se ejecuta en cada peticin de una pgina, tanto si es la
primera peticin de la pgina o un postback.
Debido a que el evento Page_Load se ejecuta con cada peticin de una pgina,
todo el cdigo del evento Page_Load se ejecutar cada vez que la pgina sea
solicitada. Sin embargo, cuando utilizamos eventos postback, es posible que no
deseemos que se ejecute nuevamente todo el cdigo. Si ste es el caso, podemos
utilizar la propiedad Page.IsPostBack para controlar qu cdigo se ejecuta
nicamente cuando la pgina se solicita por primera vez, como muestra el
siguiente cdigo:
Private Sub Page_Load(ByVal s As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
If Not Page.IsPostBack Then
'ejecucin slo en la carga de pgina inicial
End If
'este cdigo se ejecuta en cada peticin
End Sub

private void Page_Load(object sender,
System.EventArgs e)
{
if (!Page.IsPostBack)
{
// ejecucin slo en la carga de pgina inicial
}
// este cdigo se ejecuta en cada peticin
}

Introduccin
Uso de Page.IsPostBack
Visual Basic .NET
C#
32 Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET


Vnculo entre dos controles
Vincular un control con otro resulta til para obtener
valores de cuadros de lista o listas desplegables
Enlace de datos
<asp:DropDownList id="lstOccupation"
autoPostBack="True" runat="server" >
You selected: <asp:Label id="lblSelectedValue"
Text="<%# lstOccupation.SelectedItem.Text %>"
runat="server" />
<asp:DropDownList id="lstOccupation"
autoPostBack="True" runat="server" >
You selected: <asp:Label id="lblSelectedValue"
Text="<%# lstOccupation.SelectedItem.Text %>"
runat="server" />
private void Page_Load(object sender, System.EventArgs e)
{
lblSelectedValue.DataBind();
}
private void Page_Load(object sender, System.EventArgs e)
{
lblSelectedValue.DataBind();
}
Sub Page_Load(s As Object, e As EventArgs) Handles MyBase.Load
lblSelectedValue.DataBind()
End Sub
Sub Page_Load(s As Object, e As EventArgs) Handles MyBase.Load
lblSelectedValue.DataBind()
End Sub

***************************** use******************************
Podemos vincular un control con el contenido de otro. Vincular es especialmente
til para mostrar valores de cuadros de lista o listas desplegables.
El siguiente cdigo de ejemplo muestra cmo vincular un control Label al
contenido de una lista desplegable. Utilizando las etiquetas de enlace <%# y %>,
establecemos el atributo Text del control Label para el elemento seleccionado
(SelectedItem) del cuadro de lista:
<asp:Label id="lblSelectedValue" runat="server"
Text="<%# lstOccupation.SelectedItem.Text %>" />

El siguiente ejemplo muestra el cdigo de un formulario Web Form que se utiliza
para vincular el control Label al cuadro de lista:
<form runat="server">
<asp:DropDownList id="lstOccupation"
autoPostBack="true" runat="server" >
<asp:ListItem>Program Manager</asp:ListItem>
<asp:ListItem>Tester</asp:ListItem>
<asp:ListItem>User Assistance</asp:ListItem>
</asp:DropDownList>
<p>You selected: <asp:Label id="lblSelectedValue"
Text="<%# lstOccupation.SelectedItem.Text %>"
runat="server" />
</p>
</form>

En el cdigo anterior, la propiedad AutoPostBack de la lista desplegable est
establecida a True, que provoca el postback automtico cuando cambia el valor
del cuadro de lista.
Introduccin
Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET 33



En el procedimiento de evento Page_Load, invocamos el mtodo DataBind de
toda la pgina o del control Label, como muestra el siguiente cdigo:
Sub Page_Load (s As Object, e As EventArgs) _
Handles MyBase.Load
lblSelectedValue.DataBind()
End Sub

private void Page_Load(object sender, System.EventArgs e)
{
lblSelectedValue.DataBind();
}

Podemos utilizar Page.DataBind() si deseamos que la pgina enlace a datos en
todos los elementos de la pgina. El cdigo de ejemplo anterior enlaza a datos
nicamente el control Label, utilizando por tanto la sintaxis de
control.DataBind(), donde control es el atributo id del control Label.
Visual Basic .NET
C#
34 Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET


Demostracin: vincular controles
Vincular un control Label a un control ListBox

***************************** use******************************
Esta demostracin puede realizarse utilizando los archivos del proyecto Visual
Basic .NET o del proyecto Visual C#.
En esta demostracin, veremos cmo vincular controles.
El cdigo completo para esta demostracin se encuentra en la pgina:
Demo04VB\binding.aspx.
Demo04CS\binding.aspx.
Estas pginas y sus correspondientes proyectos se pueden encontrar dentro del
fichero demos04.zip.
Ejecutar la demostracin
1. En Visual Studio .NET, editar la pgina beforebinding.aspx del proyecto
Mod05. Contiene un control DropDownList y un control Label. Visualizar el
cdigo HTML de la pgina. Observar el atributo AutoPostBack de
DropDownList.
2. Vincular el control Label al control DropDownList estableciendo su atributo
Text, como muestra el siguiente cdigo de ejemplo:
<asp:label id="lblListValue"
Text="<%# lstTitle.SelectedItem.Text %>" runat="server"/>

Introduccin
Visual Basic .NET
C#
Agregar cdigo a un formulario Web Formcon Microsoft ASP.NET 35



3. Crear un procedimiento de evento Page_Load e invocar
lblListValue.DataBind(), como muestra el siguiente cdigo de ejemplo:
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
lblListValue.DataBind()
End Sub

private void Page_Load(object sender, System.EventArgs e)
{
lblListValue.DataBind();
}

4. Generar y examinar para visualizar la pgina en Microsoft Internet Explorer.
Cuando seleccionamos un elemento de DropDownList, el valor se refleja en
el control Label.

Visual Basic .NET
C#


Prctica A: agregar funcionalidades a una aplicacin Web
Medical
Medical.aspx
Medical
Medical.aspx
Benefits
Home Page
Default.aspx
Benefits
Home Page
Default.aspx
Life Insurance
Life.aspx
Life Insurance
Life.aspx
Retirement
Retirement.aspx
Retirement
Retirement.aspx
Dental
Dental.aspx
Dental
Dental.aspx
Dentists
Doctors
Doctors.aspx
Doctors
Doctors.aspx
Doctors
Logon Page
Login.aspx
Logon Page
Login.aspx
Registration
Register.aspx
Registration
Register.aspx
Coho
Winery
Prospectus
Prospectus.aspx
Prospectus
Prospectus.aspx
XML Web
Service
dentalService1.asmx
XML Web
Service
dentalService1.asmx
Page Header
Header.ascx
Page Header
Header.ascx
ASPState
tempdb
LabWeb
Application
User Control
namedate.ascx
User Control
namedate.ascx
Menu
Component
Class1.vb or Class1.cs
Menu
Component
Class1.vb or Class1.cs
XML
Files
Web.
config

***************************** ******************************
En este laboratorio, aprenderemos a:
Crear un procedimiento de evento Page_Load para una pgina Web
MicrosoftASP.NET.
Crear procedimientos de evento Click para controles Web en una pgina
Web ASP.NET.

Este laboratorio se centra en los conceptos de este mdulo. Por ello,
podra no cumplir las recomendaciones de seguridad de Microsoft.

Para trabajar en este laboratorio, es necesario tener:
Conocimientos sobre cmo invocar una funcin en Microsoft Visual Basic
.NET.
Conocimientos sobre cmo utilizar controles Web en un formulario Web
Form.

Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios del
curso, crearemos un sitio Web que permita a los empleados seleccionar y
establecer los beneficios que elijan.
En el Laboratorio 3, Generar un componente Microsoft Visual Studio .NET,
creamos un componente que devolva una lista de todos los beneficios que
ofreca la compaa. En este laboratorio, invocaremos ese componente desde la
pgina default.aspx del sitio Web de la compaa, mostraremos la informacin
en un control CheckBoxList, e implementaremos el botn Submit en el
formulario para mostrar los beneficios seleccionados.

Objetivos
Nota
Requisitos previos
Escenario
Tiempo estimado para
completar el laboratorio:
45 minutos
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de
aplicacin Web denominado Benefits y un proyecto de biblioteca de clases
BenefitsList. Estos proyecto pueden crearse utilizando Visual Basic .NET o
Visual C#.NET.
Si no se han creado estos proyectos, seguir los siguientes pasos:
Crear la solucin LabApplication

Realizar este procedimiento nicamente si no se ha creado un
archivo de solucin LabApplication .

1. Utilizando Visual Studio .NET, crear una nueva solucin en blanco
denominada LabApplication :
En el men Archivo, seleccionar Nuevo, y hacer clic en Solucin en
blanco.
En el cuadro de dilogo Nuevo proyecto, escribir LabApplication en
el cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto Benefits, o si se ha eliminado.

1. Crear un nuevo proyecto de aplicacin Web ASP.NET, denominado
BenefitsVB o BenefitsCS, en la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic o Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Aplicacin Web ASP.NET,
establecer la Ubicacin en http://localhost/BenefitsVB para un
proyecto Visual Basic .NET o en http://localhost/BenefitsCS para un
proyecto Visual C#.
d. Hacer clic en Agregar a Solucin, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solucin, es importante el
uso de maysculas en el nombre del proyecto. Probablemente, utilizaremos
algunos formularios Web Forms ya generados en ste y en otros
laboratorios, y por ello, debemos verificar que hemos escrito en maysculas
el nombre del proyecto Benefits.


Importante
Importante
Precaucin


Actualizar el proyecto Benefits
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication .
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsVB o BenefitsCS, seleccionar Agregar, y hacer clic en Agregar
elemento existente.
3. Buscar el proyecto Benefits.
VB\Starter\BenefitsVB para los archivos de Visual Basic .NET.

CS\Starter\BenefitsCS para los archivos de Visual C#.
Estas carpetas se pueden encontrar dentro del fichero labs04.zip.
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente Benefits, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o cargar de nuevo los
archivos.

Crear la biblioteca de clases BenefitsList

Realizar estos pasos nicamente si no se ha creado anteriormente
un proyecto BenefitsList, o si se ha eliminado el proyecto BenefitsList segn
los pasos del Apndice A, Recuperacin del laboratorio.

1. Crear un proyecto de biblioteca de clases.
Crear un nuevo proyecto de biblioteca de clases Microsoft
Visual Basic .NET con el nombre BenefitsListVB, y aadirlo a la solucin
LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual Basic.
c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListVB.
d. Hacer clic en Agregar a solucin, y clic en Aceptar.
Crear un nuevo proyecto de biblioteca de clases Visual C#.NET con el
nombre BenefitsListCS, y aadirlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListCS.
d. Hacer clic en Agregar a solucin, y clic en Aceptar.

Verificar que se han escrito correctamente las maysculas del
proyecto BenefitsList.


Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Importante
Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Precaucin
Actualizar el proyecto BenefitsList
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication .
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente.
3. Buscar el proyecto BenefitsList.
Ir a la carpeta VB\Starter\BenefitsListVB.

Ir a la carpeta CS\Starter\BenefitsListCS.
Estas carpetas se pueden encontrar dentro del fichero labs04.zip.
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de esta carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o cargar de nuevo los
archivos.

Crear una referencia al componente BenefitsList en el proyecto Benefits
1. En el proyecto Benefits de la solucin LabApplication, completar los
siguientes pasos para agregar una referencia al componente BenefitsList
que acabamos de crear:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB o
BenefitsCS en el Explorador de soluciones y hacer clic en Agregar
referencia.
b. En el cuadro de dilogo Agregar referencia, en la pestaa Proyectos,
hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.
c. En la lista Componentes seleccionados, seleccionar el componente
BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar.
El componente se agrega a la carpeta Referencias en el Explorador de
soluciones.

Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#


Ejercicio 1
Crear un procedimiento de evento Page_Load
En este ejercicio, crearemos el procedimiento de evento Page_Load para la
pgina default.aspx. En el procedimiento de evento Page_Load, agregaremos
cdigo para leer la lista de beneficios del componente BenefitsListVB o
BenefitsListCS. A continuacin, mostraremos los beneficios en un control
CheckBoxList.
Invocar el componente BenefitsListVB o BenefitsListCS
1. Utilizando Visual Studio .NET, abrir la solucin LabApplication.
2. Abrir la pgina default.aspx del proyecto BenefitsVB o BenefitsCS.
3. Hacer doble clic en el fondo de la pgina default.aspx en vista de Diseo
para crear un procedimiento de evento Page_Load.
La pgina de cdigo subyacente se abre y se agrega una plantilla para el
procedimiento de evento Page_Load, que contiene el siguiente cdigo:
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
End Sub

private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
}

4. Crear una nueva instancia de la clase BenefitsList.Benefits y guardarla en
una variable denominada clBenefits.
El cdigo debera ser similar al siguiente:
Dim clBenefits As New _
BenefitsListVB.Benefits()

BenefitsListCS.Benefits clBenefits = new
BenefitsListCS.Benefits();

5. Si se est realizando este laboratorio en Visual Basic .NET, declarar una
variable de tipo BenefitsListVB.Benefits.BenefitInfo y nombrarla bi.
El cdigo debera ser similar al siguiente:
Dim bi As BenefitsListVB.Benefits.BenefitInfo

Si se est realizando este laboratorio en Visual C#, la variable bi se declara
en el bucle foreach ms adelante en este laboratorio.
6. Invocar el mtodo GetBenefitsList de la clase, el cual devuelve una matriz
de las variables BenefitsListVB.Benefits.BenefitInfo o
BenefitsListCS.Benefits.BenefitInfo.
7. Repetir en la matriz devuelta con un bucle For Each.
Visual Basic .NET
C#
Visual Basic .NET
C#
Visual Basic .NET
C#
8. Para cada elemento de la matriz, generar una cadena del siguiente formato:
<a href=item.strPage> item.strName </a>

Agregar la cadena a la coleccin Items del control chkListBenefits
CheckBoxList utilizando el mtodo chkListBenefits.Items.Add.
El cdigo debera ser similar al siguiente:
For Each bi In clBenefits.GetBenefitsList()
chkListBenefits.Items.Add("<a href=" & bi.strPage & _
">" & bi.strName & "</a>")
Next

foreach (BenefitsListCS.Benefits.BenefitInfo bi
in clBenefits.GetBenefitsList())
{
chkListBenefits.Items.Add("<a href=" + bi.strPage +
">" + bi.strName + "</a>");
}

9. Hacer clic con el botn derecho en la pginadefault.aspx en el Explorador
de soluciones y clic en Generar y examinar.
Ahora, la lista chkListBenefits contiene hiperenlaces a otras pginas,
adems de la coleccin inicial de valores, como muestra la siguiente
ilustracin.

Visual Basic .NET
C#


10. Hacer clic en el hiperenlace Life Insurance.
Se muestra la pgina life.aspx.
11. Hacer clic en el hiperenlace Home para regresar a la pgina default.aspx.
12. Hacer clic en Submit dos veces. Qu ocurre? Por qu?
_____________________________________________________________
_____________________________________________________________
La vista del cuadro de lista chkBenefitsList debera mostrar nicamente la
lista de beneficios que proporciona el componente BenefitsList, no los tres
primeros elementos temporales. Adems, la lista de beneficios no debera
aadirse al cuadro de lista con cada actualizacin de la pgina. Para
solventar estos aspectos, seguir los siguientes procedimientos.

Eliminar la lista temporal de elementos
1. Abrir la pgina default.aspx.
2. Seleccionar el control de cuadro lista chkListBenefits.
3. En la ventana Propiedades, hacer clic en Elementos, y clic en junto a
(Collection).
4. En el ListItem Collection Editor, seleccionar un elemento de la lista
Miembros y hacer clic en Eliminar. Repetir este paso hasta que los tres
miembros hayan sido eliminados de la coleccin y hace clic en Aceptar.

Agregar una prueba Page.IsPostBack
1. En la pgina default.aspx, agregar una prueba Page.IsPostBack al
procedimiento de evento Page_Load.
Agregar nicamente elementos desde el componente al control
CheckBoxList si la pgina se muestra por primera vez.
Cuando finalice, el procedimiento de evento Page_Load completo debera
ser similar al siguiente (el nuevo cdigo est en negrita):
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
If Not Page.IsPostBack Then
Dim clBenefits As New BenefitsListVB.Benefits()
Dim bi As BenefitsListVB.Benefits.BenefitInfo

For Each bi In clBenefits.GetBenefitsList()
chkListBenefits.Items.Add("<a href=" & _
bi.strPage & ">" & bi.strName & "</a>")
Next
End If
End Sub

Visual Basic .NET
private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
BenefitsListCS.Benefits clBenefits = new
BenefitsListCS.Benefits();

foreach (BenefitsListCS.Benefits.BenefitInfo bi
in clBenefits.GetBenefitsList())
{
chkListBenefits.Items.Add("<a href=" +
bi.strPage + ">" + bi.strName + "</a>");
}
}
}

2. Generar y examinar la pgina default.aspx.
Ahora, la lista muestra los elementos del componente BenefitsList.
3. Hacer clic en Submit dos o ms veces. Qu ocurre? Por qu?
____________________________________________________________
____________________________________________________________

C#


Ejercicio 2
Crear un procedimiento de evento Click
En este ejercicio, crearemos un procedimiento de evento Click para el botn
Submit de la pgina default.aspx. Cuando el usuario hace clic en Submit, el
procedimiento de evento lee la lista de beneficios y enva los beneficios
seleccionados de la lista en una etiqueta en la pgina default.aspx.
Leer los beneficios seleccionados
1. Abrir la pgina default.aspx.
2. Hacer doble clic en el botn Submit en vista de Diseo para crear un
procedimiento de evento Click para el botn Submit.
Se abre la pgina default.aspx.vb o default.aspx.cs con el nuevo
procedimiento de evento cmdSubmit_Click ya creado.
3. En el procedimiento de evento Click, iterar por la lista de elementos del
control CheckBoxList. Para cada elemento, si la propiedad Selected es
True, aadir una cadena a la propiedad Text del control lblSelections
Label.
El cdigo debera ser similar al siguiente:
Dim li As ListItem
For Each li In chkListBenefits.Items
If li.Selected Then
lblSelections.Text &= ", " & li.Value
End If
Next

foreach (ListItem li in chkListBenefits.Items)
{
if (li.Selected)
{
lblSelections.Text += ", " + li.Value;
}
}

4. Generar y examinar la pgina default.aspx.
5. Seleccionar algunos beneficios de la lista y hacer clic en Submit.
La etiqueta muestra una lista de los elementos seleccionados como
hiperenlaces.

Visual Basic .NET
C#
Ejercicio 3 (si se dispone de tiempo)
Uso de un componente en un control de usuario
Cada pgina del sitio Web Benefits muestra una parte de la misma informacin.
Esta informacin se almacena en un control de usuario que se denomina
header.ascx. Este control cabecera no lee su lista de beneficios desde el
componente BenefitsList. La lista de beneficios est codificada internamente en
la pgina.
En este ejercicio, redisearemos la pgina header.ascx para leer la lista de
beneficios desde el componente BenefitsList y mostrarlos en controles
hiperenlace.
Invocar el componente BenefitsList
1. Abrir la pgina header.ascx.
2. Completar los siguientes pasos para cambiar cada uno de los cuatro
hiperenlaces a beneficios que se encuentran en la parte superior de la
pgina, excluyendo el hiperenlace Home, a controles de servidor Web:

No realizar los siguientes pasos para el hiperenlace Home. Este
hiperenlace permanecer codificado internamente en este laboratorio.

a. En vista Diseo, hacer clic con el botn derecho en cada hiperenlace y
hacer clic en Ejecutar como control de servidor.
b. Hacer clic en el botn HTML para ver el cdigo Hypertext Markup
Language (HTML) de la pgina.
Hacer una lista del id de cada uno de los cuatro controles de hiperenlace
utilizados para los beneficios:
__________________________________________________________
__________________________________________________________
3. Crear un procedimiento de evento Page_Load para la pgina header.ascx.
4. Crear una nueva instancia de la clase BenefitsList.Benefits y almacenarla en
una variable con el nombre clBenefits.
5. Declarar una matriz de variables BenefitsList.Benefits.BenefitInfo con el
nombre arBenefits.
6. Invocar el mtodo GetBenefitsList de la clase, que devuelve una matriz de
variables BenefitsList.Benefits.BenefitInfo.
Nota


7. Establecer las propiedades HRef y InnerText de cada hiperenlace en las
propiedades strPage y strName de un elemento en la matriz devuelta.
El cdigo debera ser similar al siguiente:
Dim clBenefits As New BenefitsListVB.Benefits()
Dim arBenefits As BenefitsListVB.Benefits.BenefitInfo()

arBenefits = clBenefits.GetBenefitsList()
A1.HRef = arBenefits(0).strPage
A1.InnerText = arBenefits(0).strName
A2.HRef = arBenefits(1).strPage
A2.InnerText = arBenefits(1).strName
A3.HRef = arBenefits(2).strPage
A3.InnerText = arBenefits(2).strName
A4.HRef = arBenefits(3).strPage
A4.InnerText = arBenefits(3).strName

BenefitsListCS.Benefits clBenefits = new
BenefitsListCS.Benefits();
BenefitsListCS.Benefits.BenefitInfo[] arBenefits;

arBenefits = clBenefits.GetBenefitsList();
A1.HRef = arBenefits[0].strPage;
A1.InnerText = arBenefits[0].strName;
A2.HRef = arBenefits[1].strPage;
A2.InnerText = arBenefits[1].strName;
A3.HRef = arBenefits[2].strPage;
A3.InnerText = arBenefits[2].strName;
A4.HRef = arBenefits[3].strPage;
A4.InnerText = arBenefits[3].strName;

8. Generar el proyecto Benefits.
Debido a que header.ascx es un control de usuario, no podemos visualizarlo
directamente en un explorador.
9. Visualizar la pgina default.aspx en un explorador.
La pgina tiene el mismo aspecto, pero si cambiamos los elementos
devueltos por el componente BenefitslistVB o BenefitsCS, tanto el control
chkListBenefits del formulario Web Form default.aspx como el conjunto
de hiperenlaces del control de usuario header.ascx reflejarn el cambio.


Visual Basic .NET
C#


Prctica A: seguimiento en aplicaciones Web Microsoft
ASP.NET
Medical
Medical.aspx
Medical
Medical.aspx
Benefits
Home Page
Default.aspx
Benefits
Home Page
Default.aspx
Life Insurance
Life.aspx
Life Insurance
Life.aspx
Retirement
Retirement.aspx
Retirement
Retirement.aspx
Dental
Dental.aspx
Dental
Dental.aspx
Dentists
Doctors
Doctors.aspx
Doctors
Doctors.aspx
Doctors
Logon Page
Login.aspx
Logon Page
Login.aspx
Registration
Register.aspx
Registration
Register.aspx
Coho
Winery
Prospectus
Prospectus.aspx
Prospectus
Prospectus.aspx
XML Web
Service
dentalService1.asmx
XML Web
Service
dentalService1.asmx
Page Header
Header.ascx
Page Header
Header.ascx
ASPState
tempdb
LabWeb
Application
User Control
namedate.ascx
User Control
namedate.ascx
Menu
Component
Class1.vb or Class1.cs
Menu
Component
Class1.vb or Class1.cs
XML
Files
Web.
config

***************************** use******************************
En este laboratorio, aprenderemos a:
Agregar instrucciones de seguimiento a un formulario Web Form
MicrosoftASP.NET.
Habilitar y deshabilitar el seguimiento (Trace) a nivel de pgina y de
aplicacin.
Utilizar el seguimiento en un componente.

Este laboratorio se centra en los conceptos de este mdulo. Por ello,
podra no cumplir las recomendaciones de seguridad de Microsoft.

Para trabajar en este laboratorio, es necesario tener:
Conocimientos sobre cmo generar una biblioteca de clases.
Conocimientos sobre cmo agregar una referencia a un proyecto.

Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios de
este curso, crearemos un sitio Web que permita a los empleados seleccionar y
configurar los beneficios que elijan.
En este laboratorio, utilizaremos el seguimiento a travs de la ejecucin de la
aplicacin Web Benefits.
Objetivos
Nota
Requisitos previos
Escenario
Tiempo estimado para
completar el laboratorio:
30 minutos
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList. Si
no se han creado estos proyectos, realizar los siguientes pasos:
Crear la solucin LabApplication

Realizar este procedimiento nicamente si no se ha creado un
archivo de solucin LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solucin en blanco
denominada LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Solucin en
blanco.
a. En el cuadro de dilogo Nuevo proyecto, escribir LabApplication en el
cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto Benefits t, o si se ha eliminado el proyecto Benefits
siguiendo los pasos del Apndice A, Recuperacin del laboratorio.

Crear un nuevo proyecto de aplicacin Web ASP.NET, denominado
BenefitsVB o BenefitsCS, en la solucin LabApplication:
En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic o Proyectos de Visual C#.
En la lista Plantillas, hacer clic en Aplicacin Web ASP.NET,
establecer la Ubicacin en http://localhost/BenefitsVB para un
proyecto Visual Basic .NET o en http://localhost/BenefitsCS para un
proyecto Visual C#.
Hacer clic en Agregar a Solucin, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solucin, es importante el uso de
maysculas en el nombre del proyecto. Probablemente, utilizaremos algunos
formularios Web Forms ya generados en ste y en otros laboratorios, y por ello,
debemos verificar que hemos escrito con mayscula el nombre del proyecto
Benefits. Pueden crearse dos versiones del proyecto: BenefitsVB sera una
solucin Visual Basic .NET y BenefitsCS sera una solucin Visual C#.


Importante
Importante
Precaucin


Actualizar el proyecto Benefits
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsVB o BenefitsCS, seleccionar Agregar, y hacer clic en Agregar
elemento existente.
Ir a la carpeta VB\Starter\BenefitsVB para los archivos de Visual Basic
.NET.
En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsVB, hacer clic en Todos los archivos.
Ir a la carpeta CS\Starter\BenefitsCS para los archivos de Visual C#.
En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsCS, hacer clic en Todos los archivos.
Estas carpetas se pueden encontrar dentro del fichero labs05.zip.
3. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
4. Hacer clic en S a la pregunta de si sobrescribir o cargar de nuevo los
archivos.

Crear la biblioteca de clases BenefitsList

Realizar estos pasos nicamente si no se ha creado anteriormente
un proyecto BenefitsList, o si se ha eliminado.

1. Crear un proyecto de biblioteca de clases con los nombres BenefitsListVB o
BenefitsListCS, y aadirlo a la solucin LabApplication.
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto:
En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual Basic.
En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListVB.
Hacer clic en Agregar a solucin, y clic en Aceptar.

En el cuadro de dilogo Nuevo proyecto, en la listaTipos de
proyecto, hacer clic en Proyectos de Visual C#.
En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListCS.
Hacer clic en Agregar a solucin, y clic en Aceptar.

Verificar que se han escrito correctamente las maysculas del
proyecto BenefitsListVB o BenefitsListCS.


En el proyecto Microsoft
Visual Basic .NET
En el proyecto Visual C#
Importante
En el proyecto Visual
Basic .NET
En el proyecto Visual C#
Precaucin
Actualizar el proyecto BenefitsList
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente.
3. Copiar los archivos de la carpeta Labfiles:
a. Ir a la carpeta VB\Starter\BenefitsListVB.
b. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsListVB, hacer clic en Todos los archivos (*.*).
a. Ir a la carpeta CS\Starter\BenefitsListCS.
b. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsListCS, hacer clic en Todos los archivos (*.*).
Estas carpetas se pueden encontrar dentro del fichero labs05.zip.
4. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
5. Hacer clic en S a la pregunta de si sobrescribir o cargar de nuevo los
archivos.

Crear una referencia al componente BenefitsList del proyecto Benefits
1. En el proyecto Benefits de la solucin LabApplication, completar los
siguientes pasos para agregar una referencia al componente BenefitsList que
acabamos de crear:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB o BenefitsCS
en el Explorador de soluciones y hacer clic en Agregar referencia.
b. En el cuadro de dilogo Agregar referencia, en la pestaa Proyectos,
hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.
c. En la lista Componentes seleccionados, seleccionar el componente
BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar.
El componente se agrega a la carpeta Referencias en el Explorador de
soluciones.

En el proyecto Visual
Basic .NET
En el proyecto Visual C#


Ejercicio 1
Utilizar instrucciones de seguimiento
En este ejercicio, habilitaremos y deshabilitaremos el seguimiento y
agregaremos mensajes personalizados al resultado del seguimiento.
Habilitar el seguimiento en una pgina
1. En Visual Studio .NET, abrir la solucin LabApplication.
2. En el proyecto BenefitsVB o BenefitsCS, abrir el archivo default.aspx.
3. En la pgina default.aspx, cambiar a la vista Hypertext Markup Language
(HTML).
4. Modificar la directiva @ Page existente agregando un atributo Trace y
estableciendo su valor en true.
La directiva @ Page debera ser similar al siguiente cdigo, con la parte
aadida en negrita:
<%@ Page Language="vb" AutoEventWireup="false"
Codebehind="default.aspx.vb"
Inherits="BenefitsVB._default" Trace="true" %>

<%@ Page Language="c#" AutoEventWireup="false"
Codebehind="default.aspx.cs"
Inherits="BenefitsCS._default" Trace="true" %>

5. Guardar default.aspx.
No es necesario generar la pgina, ya que no hemos cambiado nada del
cdigo. Los cambios a HTML nicamente requieren que se guarde la pgina.
6. Visualizar la pgina default.aspx en el navegador.
La informacin de seguimiento aparece en la parte inferior de la pgina.

Agregar mensajes de seguimiento personalizados
1. Ir al principio del procedimiento de evento Page_Load para la pgina
default.aspx, que se encuentra en la pgina de cdigo subyacente
default.aspx.vb o default.aspx.cs. Agregar un mensaje de seguimiento que
muestre el mensaje Beginning of Page_Load en una categora llamada
2310.
El cdigo debera ser similar al siguiente:
Trace.Warn("2310", "Beginning of Page_Load")

Trace.Warn("2310", "Beginning of Page_Load");

2. En el procedimiento de evento Page_Load, inmediatamente debajo del
primer mensaje de seguimiento, agregar otro mensaje de seguimiento que
muestre el valor de la propiedad Page.IsPostBack.
El cdigo debera ser similar al siguiente:
Trace.Warn("2310", "IsPostBack=" & Page.IsPostBack)

Trace.Warn("2310", "IsPostBack=" + Page.IsPostBack);

Visual Basic .NET
C#
Visual Basic .NET
C#
Visual Basic .NET
C#
3. Generar y examinar la pgina default.aspx.
Deberamos visualizar los mensajes personalizados en la seccin Trace
Information, como muestra la siguiente ilustracin.


Utilizar seguimiento a nivel de aplicacin
1. Abrir el archivo life.aspx.vb o life.aspx.cs de los proyectos BenefitsVB o
BenefitsCS respectivamente.
2. En el procedimiento de evento Page_Load, agregar una instruccin de
seguimiento que reconoceremos fcilmente en el resultado de seguimiento.
Utilizar 2310 para la categora nos ser de ayuda para encontrar la
instruccin de seguimiento.
3. Generar y examinar la pgina life.aspx.
Se muestra la informacin de seguimiento en la pgina? Explicar por qu o
por qu no.
____________________________________________________________
____________________________________________________________
4. Abrir el archivo Web.config del proyecto Benefits y localizar el elemento
trace.


5. Generar una lista y a continuacin definir los atributos establecidos para el
elemento trace. Utilizar la documentacin de Visual Studio .NET para
descubrir las funcionalidades de los atributos.
_____________________________________________________________
_____________________________________________________________
6. En el archivo Web.config, habilitar el seguimiento a nivel de aplicacin
estableciendo el atributo enabled del elemento trace a true.
7. Visualizar de nuevo la pgina life.aspx en el navegador.
Se muestra la informacin de seguimiento en la pgina? Explicar por qu o
por qu no.
_____________________________________________________________
_____________________________________________________________
8. En el archivo Web.config, establecer el atributo pageOutput del elemento
trace a true.
9. Visualizar de nuevo la pgina life.aspx en el navegador.
Se muestra la informacin de seguimiento en la pgina? Explicar por qu o
por qu no.
_____________________________________________________________
_____________________________________________________________
Por qu se muestra la informacin de ese modo?
_____________________________________________________________
_____________________________________________________________

Ejercicio 2
Utilizar seguimiento en un componente
En este ejercicio, agregaremos instrucciones Trace al componente BenefitsList
invocado desde la pgina default.aspx.
Habilitar el seguimiento en el componente BenefitsList
1. En el proyecto BenefitsList, agregar una referencia a System.Web.dll
realizando los siguientes pasos:
a. En el proyecto BenefitsListVB o BenefitsListCS, hacer clic con el botn
derecho en la carpeta Referencias y hacer clic en Agregar referencia.
b. En el cuadro de dilogo Agregar referencia, en la ficha .NET, en la
lista de componentes, hacer doble clic en System.Web.dll, y en
Aceptar.
2. Abrir el archivo Class1:
En el proyecto BenefitsListVB, abrir el archivo Class1.vb.

En el proyecto BenefitsListCS, abrir el archivo Class1.cs.
3. En el mtodo GetBenefitsList, habilitar el seguimiento estableciendo la
propiedad HttpContext.Current.Trace.IsEnabled a True.
El cdigo debera ser similar al siguiente:
System.Web.HttpContext.Current.Trace.IsEnabled = True

System.Web.HttpContext.Current.Trace.IsEnabled = true;

Tambin se puede insertar el comando Trace.IsEnabled en el constructor
de la clase si necesitamos realizar el seguimiento en todo el componente.


Agregar mensajes de seguimiento personalizados
1. Agregar un mensaje de seguimiento personalizado al mtodo
GetBenefitsList que muestra el mensaje Beginning of GetBenefitsList en
la categora denominada BenefitsList component.
El cdigo debera ser similar al siguiente:
System.Web.HttpContext.Current.Trace.Warn _
("BenefitsList component", _
"Beginning of GetBenefitsList")

System.Web.HttpContext.Current.Trace.Warn
("BenefitsList component",
"Beginning of GetBenefitsList");

En el proyecto Visual
Basic .NET
En el proyecto Visual C#
Visual Basic .NET
C#
Nota
Visual Basic .NET
C#


2. Agregar otro mensaje de seguimiento al final del procedimiento (pero antes
del comando Return) que muestra el mensaje End of GetBenefitsList.
El cdigo debera ser similar al siguiente:
System.Web.HttpContext.Current.Trace.Warn _
("BenefitsList component", _
"End of GetBenefitsList")

System.Web.HttpContext.Current.Trace.Warn
("BenefitsList component",
"End of GetBenefitsList");


Guardar y probar
1. Guardar los cambios del archivo Class1, y generar el proyecto.
2. Visualizar la pgina default.aspx en Microsoft Internet Explorer.
Deberamos visualizar nuestros mensajes personalizados desde la pgina y
desde el componente en la seccin Trace Information, como muestra la
siguiente ilustracin.

Por qu se invoca dos veces el mtodo GetBenefitsList?
_____________________________________________________________
_____________________________________________________________
Visual Basic .NET
C#
3. Abrir la pgina header.ascx.vb o header.ascx.cs.
4. En el procedimiento de evento Page_Load, agregar dos mensajes
Trace.Warn, ambos con un parmetro Category de Header:
a. Generar un mensaje al principio del procedimiento de evento, y
establecer Start Header como texto de mensaje.
b. Generar el segundo mensaje al final del procedimiento de evento
Page_Load, y establecer End Header como texto de mensaje.
El cdigo debera ser similar al siguiente:
System.Web.HttpContext.Current.Trace.Warn _
("Header", "Start Header")
System.Web.HttpContext.Current.Trace.Warn _
("Header", "End Header")

System.Web.HttpContext.Current.Trace.Warn
("Header", "Start Header");
System.Web.HttpContext.Current.Trace.Warn
("Header", "End Header");

5. Generar y examinar default.aspx.
La informacin de seguimiento ahora incluye mensajes de seguimiento
Header, uno antes y otro despus del segundo conjunto de mensajes de
seguimiento BenefitsList Component.

Deshabilitar el seguimiento
1. Deshabilitar el seguimiento a nivel de aplicacin en Web.config.
2. Deshabilitar el seguimiento a nivel de pgina en la pgina default.aspx.
3. Deshabilitar los mensajes Trace.Warn en el evento Page_Load de
header.aspx.
4. Visualizar de nuevo la pgina default.aspx en el navegador.
Se muestra la informacin de seguimiento en la pgina? Explicar por qu o
por qu no
____________________________________________________________
____________________________________________________________
Si la informacin de seguimiento se muestra en la pgina, qu mensajes de
seguimiento personalizados se muestran? Por qu?
____________________________________________________________
____________________________________________________________
Visual Basic .NET
C#


5. Eliminar o comentar los mensajes de seguimiento que hemos agregado en
este laboratorio, de acuerdo con la siguiente tabla.
Pgina Cdigo a eliminar

default.aspx.vb o default.aspx.cs Dos lneas en el procedimiento de evento
Page_Load.
life.aspx.vb o life.aspx.cs Una lnea en el procedimiento de evento
Page_Load.
header.ascx.vb o header.ascx.cs Una lnea al inicio del procedimiento de
evento Page_Load, y una lnea al final.
Class1.vb o Class1.cs Tres lneas en el mtodo GetBenefitsList.

Al eliminar estas lneas de cdigo, las pginas no tendrn un aspecto
demasiado sobrecargado para futuros laboratorios.
6. Regenerar el proyecto Benefits (BenefitsVB o BenefitsCS) y el proyecto
BenefitsList (BenefitsListVB o BenefitsListCS).
7. Ir a default.aspx para verificar que los mensajes de seguimiento ya no se
muestran en la pgina.




ndice
Introduccin 1
Leccin: descripcin del seguimiento 2
Leccin: depuracin remota 18

Seguimiento en aplicaciones Web con
Microsoft ASP.NET
Seguimiento en aplicaciones Web con Microsoft ASP.NET 1



Introduccin
Descripcin del seguimiento
Depuracin remota

***************************** use******************************
Es difcil, si no imposible, capturar todos los errores posibles de cdigo
cuando desarrollamos por primera vez una aplicacin Web. Podemos obtener
errores en tiempo de compilacin o en tiempo de ejecucin. El compilador
de MicrosoftVisual Studio .NET encuentra los errores en tiempo de
compilacin. Para encontrar errores en tiempo de ejecucin, podemos utilizar
el depurador de Visual Studio .NET, el objeto Trace o el objeto Debug.
En este mdulo, aprenderemos a:
Utilizar el objeto Trace para visualizar informacin en tiempo de
ejecucin sobre una aplicacin Web.
Utilizar el objeto Debug para visualizar informacin en tiempo de
ejecucin sobre una aplicacin Web.
Depurar aplicaciones remotamente.

Introduccin
Objetivos
2 Seguimiento en aplicaciones Web con Microsoft ASP.NET




Leccin: descripcin del seguimiento
Informacin en tiempo de ejecucin
Habilitar el seguimiento
Uso del objeto Trace
Visualizar los resultados de seguimiento
Uso delseguimiento a nivel de aplicacin
Demostracin: seguimiento en una aplicacin Web
Seguimiento en un componente

***************************** use******************************
El seguimiento implica la recepcin de mensajes informativos sobre la
ejecucin de una aplicacin Web en tiempo de ejecucin. Estos mensajes
informativos de la aplicacin Web que se est ejecutando pueden ayudar a
diagnosticar problemas o analizar el rendimiento. Visual Studio .NET ofrece
dos objetos que pueden utilizarse para recopilar dicha informacin durante el
tiempo de ejecucin: el objeto Debug el objeto Trace.
En esta leccin, aprenderemos a:
Identificar el tipo de informacin que puede recopilarse durante el tiempo
de ejecucin.
Utilizar el objeto Debug para mostrar informacin de tiempo de
ejecucin en el depurador de Visual Studio .NET.
Habilitar el seguimiento en un formulario Web Form.
Utilizar los mtodos Trace.Write y Trace.Warn.
Utilizar el seguimiento a nivel de aplicacin.
Interpretar los resultados del seguimiento.
Realizar seguimiento en un componente.

Introduccin
Objetivos de la leccin
Seguimiento en aplicaciones Web con Microsoft ASP.NET 3



Informacin en tiempo de ejecucin
Durante el tiempo de ejecucin, podemos:
Visualizar valores de variables
Afirmar si se cumple o no una condicin
Realizar seguimiento por la ruta de ejecucin de la
aplicacin
Podemos recopilar informacin en tiempo de
ejecucin utilizando
El objeto Trace
El objeto Debug

***************************** use******************************
Podemos recopilar informacin mientras nuestra aplicacin Web se est
ejecutando utilizando los objetos Debug y Trace.

Para actualizar los conocimientos sobre depuracin, consultar el
Apndice B, Depuracin con Microsoft Visual Studio .NET al final del
libro de ejercicios.

Podemos realizar los siguientes pasos durante el tiempo de ejecucin:
Visualizar valores de variables.
Determinar si se han cumplido determinadas condiciones. Por ejemplo,
existe un mtodo Trace.WriteIf que muestra un mensaje nicamente si
se satisface la condicin.
Seguir la ruta de ejecucin de la aplicacin. Podemos seguir la lgica de
programacin de un formulario Web Form mientras se est ejecutando
para garantizar de que el procesamiento se produce correctamente.

Existen dos objetos que podemos utilizar para mostrar informacin de
depuracin durante el tiempo de ejecucin. Son los siguientes:
El objeto Trace. El objeto Trace de Microsoft ASP.NET permite mostrar
informacin en una pgina Web o guardarla en memoria.
En las pginas ASP tradicionales, utilizamos instrucciones
Response.Write para realizar el seguimiento del progreso de una
aplicacin Web. La ventaja de utilizar el objeto Trace frente a utilizar
instrucciones Response.Write, o mostrar informacin de depuracin en
etiquetas en un formulario Web Form, radica en que todo el seguimiento
puede ser habilitado o deshabilitado cambiando la configuracin en el
archivo Web.config. Por tanto, no es necesario revisar todo el cdigo;
simplemente podemos eliminar las instrucciones de seguimiento en un
servidor en produccin.
Introduccin
Nota
Tipos de informacin
Objetos de tiempo de
ejecucin
4 Seguimiento en aplicaciones Web con Microsoft ASP.NET




El objeto Debug. Tambin podemos utilizar el objeto Debug para
mostrar informacin de depuracin. Las instrucciones que utiliza el
objeto Debug nicamente se ejecutarn cuando estn compiladas en
modo debug y cuando la aplicacin Web se ejecute en el depurador. Si
creamos una versin release, las instrucciones no se ejecutarn.
Con el objeto Debug, los mensajes se muestran en la ventana Resultados
del depurador.
Cuando utilizamos el objeto Debug para imprimir informacin de
depuracin y comprobar la lgica, podemos hacer que nuestro cdigo sea
ms estable sin afectar al rendimiento del producto final o al tamao del
cdigo.

Para utilizar el objeto Debug, necesitamos importar el espacio de
nombres System.Diagnostics.


Nota
Seguimiento en aplicaciones Web con Microsoft ASP.NET 5



Habilitar el seguimiento
El seguimiento a nivel de pgina muestra instrucciones de
seguimiento nicamente en la pgina configurada
Habilitar el seguimiento a nivel de pgina
El seguimiento a nivel de aplicacin muestra informacin de
seguimiento para todas las pginas de la aplicacin Web
Habilitar el seguimiento a nivel de aplicacin en el archivo
Web.config
Prctica: comprobar la configuracin predeterminada
<trace enabled="true" pageOutput="true"
localOnly="true"/>
<trace enabled="true" pageOutput="true"
localOnly="true"/>
<%@ Page Language="vb" Trace="true" %>
<%@ Page Language="vb" Trace="true" %>
<%@ Page Language="c#" Trace="true" %>
<%@ Page Language="c#" Trace="true" %>

***************************** use******************************
Cuando realizamos el seguimiento, podemos escribir instrucciones de
seguimiento directamente en la pgina o en un objeto de almacenamiento.
Cuando realizamos el seguimiento a nivel de pgina, todos los mensajes de
seguimiento se aaden al final de la pgina Web, lo que permite visualizar
rpidamente los mensajes de seguimiento al mismo tiempo que estamos
visualizando la pgina Web.
Para habilitar en una pgina el seguimiento a nivel de pgina, establecemos
el atributo Trace de la directiva @ Page a true, como muestra el siguiente
cdigo:
<%@ Page Language="vb" Trace="true" %>
-o-
<%@ Page Language="c#" Trace="true" %>

Una vez habilitado el seguimiento, todas las instrucciones Trace.Write de
nuestro cdigo aparecern en la pgina. Cuando acabemos de realizar el
seguimiento, podemos deshabilitarlo en lugar de eliminar todas las
instrucciones Trace.Write de nuestro cdigo.
Cuando habilitamos el seguimiento a nivel de aplicacin, lo hacemos para
todas las pginas de la aplicacin Web. El seguimiento a nivel de aplicacin
tambin permite una mayor flexibilidad al escribir instrucciones de
seguimiento. Por ejemplo, con el seguimiento a nivel de pgina, todos los
mensajes de seguimiento se aaden a la pgina, mientras que con el
seguimiento a nivel de aplicacin, podemos escribir mensajes de
seguimiento en la pgina o en memoria. El visor de seguimiento a nivel de
aplicacin, trace.axd, puede acceder a las instrucciones de seguimiento
almacenadas en memoria.
Introduccin
Seguimiento a nivel de
pgina
Seguimiento a nivel de
aplicacin
6 Seguimiento en aplicaciones Web con Microsoft ASP.NET




Para habilitar el seguimiento a nivel de aplicacin, es necesario configurar el
archivo Web.config de la aplicacin Web, como muestra el siguiente cdigo:
<configuration>
<system.web>
<trace enabled="true"/>
</system.web>
</configuration>

Para configurar que los mensajes de seguimiento se escriban en la pgina,
utilizamos el atributo pageOutput del elemento trace. La configuracin a
true escribe las instrucciones de seguimiento en cada pgina. La
configuracin a false escribe las instrucciones de seguimiento en memoria,
donde el visor de seguimiento a nivel de aplicacin, trace.axd, puede acceder
a ellas, como muestra el siguiente cdigo:
<trace enabled="true" pageOutput="true|false"/>

Tambin podemos establecer el atributo localOnly del elemento trace para
asegurarnos de que los mensajes de seguimiento estn visibles nicamente
en el equipo local, como muestra el siguiente cdigo:
<trace enabled="true" pageOutput="true" localOnly="true"/>

En Visual Studio .NET, abrir el proyecto Benefits. En el Explorador de
soluciones, hacer doble clic en el archivo Web.config. Cules son las
opciones de configuracin predeterminadas para el seguimiento a nivel de
aplicacin?
________________________________________________________________
________________________________________________________________

Prctica (opcional)
Seguimiento en aplicaciones Web con Microsoft ASP.NET 7



Uso del objeto Trace
Insertar mensajes de seguimiento
Ejecucin condicional con Trace.IsEnabled
Cambiar dinmicamente el estado del seguimiento
Trace.Write ("category", "message")
Trace.Warn ("category", "message")
Trace.Write ("category", "message")
Trace.Warn ("category", "message")
If Trace.IsEnabled Then
strMsg = "Tracing is enabled!"
Trace.Write("myTrace", strMsg)
End If
If Trace.IsEnabled Then
strMsg = "Tracing is enabled!"
Trace.Write("myTrace", strMsg)
End If
Trace.IsEnabled = False
Trace.IsEnabled = False
if (Trace.IsEnabled)
{
strMsg = "Tracing is enabled!";
Trace.Write("myTrace", strMsg);
}
if (Trace.IsEnabled)
{
strMsg = "Tracing is enabled!";
Trace.Write("myTrace", strMsg);
}

***************************** use******************************
Para escribir mensajes de seguimiento en una pgina (o en memoria),
utilizamos los mtodos Trace.Write y Trace.Warn. Podemos utilizar la
propiedad IsEnabled del objeto Trace para cambiar dinmicamente el
estado de seguimiento de una pgina.
Utilizamos los mtodos Write y Warn del objeto Trace para mostrar
mensajes de seguimiento. Trace.Write y Trace.Warn funcionan
exactamente igual, con la excepcin de que Warn escribe mensajes de
seguimiento en color rojo.
Cuando utilizamos los mtodos Write y Warn, proporcionamos el mensaje
que debe mostrarse, junto con una categora apropiada al mensaje, como
muestra el siguiente cdigo:
Trace.Write ("category", "message")
Trace.Warn ("category", "message")

Trace.Write ("category", "message");
Trace.Warn ("category", "message");

El parmetro de categora se utiliza para clasificar y agrupar mensajes
de seguimiento. Por ejemplo, podemos establecer el orden de clasificacin de
los mensajes de seguimiento para mostrar juntos los mensajes que
correspondan a la misma categora.

Introduccin
Trace.Write y
Trace.Warn
Visual Basic .NET
C#
Nota
8 Seguimiento en aplicaciones Web con Microsoft ASP.NET





El siguiente cdigo escribe dos mensajes de seguimiento en una pgina. El
segundo mensaje de seguimiento aparece en rojo al utilizar el mtodo Warn:
Trace.Write("Custom Trace", "Beginning User Code...")
Trace.Warn("Custom Trace", "Array count is null!")

Trace.Write("Custom Trace", "Beginning User Code...");
Trace.Warn("Custom Trace", "Array count is null!");

Los mensajes de seguimiento resultantes aparecen como muestra la siguiente
ilustracin:

Existen situaciones en las que es posible que deseemos generar mensajes de
seguimiento nicamente cuando el seguimiento est habilitado a nivel de
pgina Web o aplicacin Web. Para estas situaciones, el objeto Trace tiene
una propiedad Boolean denominada IsEnabled que permite invocar los
mtodos Write y Warn slo cuando el seguimiento est habilitado, como
muestra el siguiente cdigo:
If Trace.IsEnabled Then
strMsg = "Tracing is enabled!"
Trace.Write("myTrace", strMsg)
End If

if (Trace.IsEnabled)
{
strMsg = "Tracing is enabled!";
Trace.Write("myTrace", strMsg);
}

Tambin podemos utilizar la propiedad IsEnabled para cambiar
dinmicamente el estado del seguimiento de una pgina, como muestra el
siguiente cdigo:
Trace.IsEnabled = False

Trace.IsEnabled = false;

Ejemplo de uso de Write
y Warn
Visual Basic .NET
C#
Trace.IsEnabled
Visual Basic .NET
C#
Visual Basic .NET
C#
Seguimiento en aplicaciones Web con Microsoft ASP.NET 9



Visualizar los resultados de seguimiento

***************************** use******************************
Los resultados de seguimiento a nivel de pgina se aaden a la parte inferior
de la pgina .aspx para la que estn habilitados. Los resultados de
seguimiento muestran una gran cantidad de informacin, junto con los
mensajes personalizados creados por las instrucciones Trace.Write y
Trace.Warn.
Existen varias categoras de informacin visualizadas en los resultados de
seguimiento. La siguiente tabla muestra una lista de cada categora y la
descripcin del tipo de informacin que contiene.
Categora Descripcin

Detalles de la peticin Informacin sobre la peticin: identificacin de sesin (ID),
hora de la solicitud, tipo de peticin y estado de la peticin.
Informacin de
seguimiento
Resultado de las instrucciones de seguimiento estndares y
personalizadas. La columna FromFirst(s) contiene el
tiempo total desde la ejecucin hasta que se ejecuta el
seguimiento, y la columna From Last(s) muestra la
duracin del incremento.
rbol de control Lista todos los elementos que se encuentran en la pgina,
junto con el tamao de cada uno.
Coleccin Cookies Lista las cookies que se estn utilizando.
Coleccin Headers Lista los elementos en la cabecera Hypertext Transfer
Protocol (HTTP).
Coleccin Form Lista los controles, y sus valores, en el formulario que se est
transmitiendo.
Variables de servidor Lista todas las variables de servidor y sus valores.

Introduccin
Categoras de
seguimiento
10 Seguimiento en aplicaciones Web con Microsoft ASP.NET




Uso del seguimiento a nivel de aplicacin
Las instrucciones de seguimiento a nivel de aplicacin se
muestran en pginas individuales
Si pageOutput=falseen el archivo Web.config, el visor de
seguimiento puede visualizar los resultados de seguimiento
http://servidor/proyecto/trace.axd
http://servidor/proyecto/trace.axd
Pgina
Pgina Pgina
Trace=True
Trace=True
Trace=False
Trace=False
Trace not set
Trace not set
Aplicacin
Aplicacin Aplicacin
Trace=True o
Trace=False
Trace=True o
Trace=False
Trace=True o
Trace=False
Trace=True o
Trace=False
Trace=True
Trace=True
Resultado
Resultado Resultado
Los resultados de seguimiento
se muestran en la pgina
Los resultados de seguimiento
se muestran en la pgina
Los resultados de seguimiento
no se muestran
Los resultados de seguimiento
no se muestran
Los resultados de seguimiento
se muestran en la pgina
Los resultados de seguimiento
se muestran en la pgina

***************************** use******************************
Para una aplicacin Web, habilitamos el seguimiento a nivel de aplicacin en
el archivo Web.config. Tras habilitar el seguimiento a nivel de aplicacin,
podemos visualizar las instrucciones de seguimiento en pginas individuales
o en el visor de seguimiento.
Cuando habilitamos el seguimiento a nivel de aplicacin, la configuracin de
seguimiento a nivel de pgina sigue vigente. Por ejemplo, si deshabilitamos
el seguimiento a nivel de pgina para una pgina, y esa pgina forma parte
de una aplicacin Web en la que est habilitado el seguimiento a nivel de
aplicacin, el seguimiento se deshabilita para esa pgina especfica. La
siguiente tabla muestra las posibles combinaciones de habilitar y deshabilitar
el seguimiento, y el resultado correspondiente para esa pgina.
Configuracin de la
pgina
Configuracin de la
aplicacin
Resultado para la pgina

Trace=True Trace=True o
Trace=False
Los resultados de
seguimiento se muestran
en la pgina.
Trace=False Trace=True o
Trace=False
Los resultados de
seguimiento no se
muestran en la pgina.
Trace no establecido Trace=True Los resultados de
seguimiento se muestran
en la pgina.

Introduccin
Configuracin del
seguimiento
Seguimiento en aplicaciones Web con Microsoft ASP.NET 11



Podemos mostrar mensajes de seguimiento a nivel de aplicacin en dos
lugares: en la propia pgina, o en el visor de seguimiento. Para determinar
cmo se muestran los resultados de seguimiento, establecemos el atributo
pageOutput del elemento trace en el archivo Web.config. Mientras la
configuracin true muestra los resultados en la pgina, la configuracin
false mantiene los mensajes de seguimiento en memoria. El siguiente cdigo
muestra un ejemplo de deshabilitar la salida a la pgina:
<configuration>
<system.web>
<trace enabled="true" pageOutput="false"/>
</system.web>
</configuration>

Si se deshabilita la salida de la pgina para el seguimiento a nivel de
aplicacin, los mensajes de seguimiento se almacenan en memoria. Los
mensajes de seguimiento pueden visualizarse utilizando el visor de
seguimiento, que es una pgina Web que se incluye en todas las aplicaciones
Web. Utilizamos el visor de seguimiento visualizando la pgina trace.axd en
un navegador:
http://nombreservidor/nombreproyecto/trace.axd

Por motivos de seguridad, es posible que deseemos deshabilitar el visor de
seguimiento. Para deshabilitar el visor de seguimiento de un servidor Web
modificamos el archivo machine.config. El archivo machine.config se
encuentra en el siguiente directorio:
capeta_sistema\Microsoft.NET\Framework\nmero_versin\Config

La referencia a trace.axd (el visor de seguimiento) en el archivo
machine.config se encuentra en la seccin httpHandlers:
<httpHandlers>
<add verb="*" path="trace.axd"
type="System.Web.Handlers.TraceHandler"/>
</httpHandlers>

Para deshabilitar el visor de seguimiento, establecer el atributo path a una
cadena vaca (path="").

El atributo localOnly que se utiliza para el seguimiento en
pginas ASP.NET tambin se aplica a la pgina trace.axd. Si localOnly est
establecido a true, la pgina trace.axd slo puede visualizarse desde el
equipo local.

Mostrar mensajes de
seguimiento
Sugerencia
12 Seguimiento en aplicaciones Web con Microsoft ASP.NET




Demostracin: seguimiento en una aplicacin Web
Seguimiento a nivel de pgina
Seguimiento a nivel de aplicacin

***************************** use******************************
En esta demostracin, veremos cmo habilitar seguimiento a nivel de pgina
y a nivel de aplicacin y agregar instrucciones de seguimiento a un
formulario Web Form.
Ejecutar la demostracin utilizando Microsoft Visual Basic.NET
1. En Visual Studio .NET, abrir el proyecto CallClassVB. Este proyecto se
puede encontrar dentro del fichero demos05.zip.
2. En el proyecto CallClassVB, habilitar el seguimiento en la pgina
CallClassLibraries.aspx, incluyendo el atributo Trace en la directiva@
Page, como muestra el siguiente cdigo:
<%@ Page Language="vb" Trace="true"
Codebehind="CallClassLibraries.aspx.vb"
AutoEventWireup="false"
Inherits="CallClassVB.CallClassLibraries" %>

La informacin de seguimiento aparece mejor en pginas
generadas con flowLayout. Si una pgina est generada con gridLayout,
los mensajes de seguimiento aparecen detrs del contenido de la pgina.

3. Agregar dos mensajes de seguimiento personalizados al final del
procedimiento de evento cmdUseVb_Click en la pgina de cdigo
subyacente CallClassLibraries.aspx.vb, como muestra el siguiente
cdigo:
Trace.Write("UseVB", "price = " & CStr(TextBox1.Text))
Trace.Warn("UseVB", "shipping cost = " &
CStr(sngShipping))

4. Generar y examinar la pgina CallClassLibraries.aspx.
La informacin de seguimiento se muestra en la pgina.
Nota
Seguimiento en aplicaciones Web con Microsoft ASP.NET 13



5. Introducir un precio y hacer clic en VB.NET Shipping Cost.
Observar los mensajes de seguimiento personalizados.
6. Deshabilitar el seguimiento para la pgina, y visualizarla de nuevo.

No es necesario volver a generar el proyecto, puesto que no hemos
modificado el cdigo.

No se muestran mensajes de seguimiento en la pgina.
7. Habilitar el seguimiento a nivel de aplicacin editando la etiqueta de
seguimiento del archivo Web.config. Establecer el atributo pageOutput
a true, como muestra el siguiente cdigo:
<trace enabled="true" requestLimit="10" pageOutput="true"
traceMode="SortByTime" localOnly="true" />

Observar que el atributo localOnly est establecido a true. Esto permite
que nicamente los navegadores locales visualicen la informacin de
seguimiento.
8. Actualizar la vista de la pgina CallClassLibraries.aspx y observar que
los mensajes de seguimiento no se muestran debido a que el seguimiento
est deshabilitado explcitamente para esta pgina.
9. Generar y examinar la pgina VBForm.aspx. Estas pginas no tienen
habilitado el seguimiento, pero los resultados de seguimiento se muestran
igualmente debido a que el seguimiento a nivel de aplicacin est
habilitado.
10. Hacer que un estudiante examine la pgina VBForm.aspx en el equipo
del instructor. No debera ver el resultado de seguimiento porque el
atributo localOnly est establecido a true.
11. Agregar la siguiente instruccin de seguimiento a la pgina
CSharpForm.aspx en el procedimiento de evento button1_onclick:
Trace.Warn ("C#", "Value to double " + Textbox1.Text)

12. Generar y examinar la pgina CSharpForm.aspx. Esta pgina tampoco
tiene habilitado el seguimiento, pero los resultados de seguimiento,
incluyendo el mensaje personalizado que acabamos de aadir, se
muestran igualmente.
13. Cambiar la etiqueta de seguimiento de Web.config para deshabilitar
pageOutput:
<trace enabled="true" pageOutput="false"/>

14. Visualizar la pgina VBForm.aspx en el navegador. El resultado de
seguimiento no se muestra en la pgina; en lugar de ello, se escribe en
memoria.
15. Visualizar la pgina http://localhost/CallClassVB/trace.axd para
visualizar las instrucciones de seguimiento almacenadas en memoria.

Nota
14 Seguimiento en aplicaciones Web con Microsoft ASP.NET




Ejecutar la demostracin utilizando C#
1. En Visual Studio .NET, abrir el proyecto CallClassCS. Este proyecto se
puede encontrar dentro del fichero demos05.zip.
2. En el proyecto CallClassCS, habilitar el seguimiento en la pgina
CallClassLibraries.aspx, incluyendo el atributo Trace en la directiva@
Page, como muestra el siguiente cdigo:
<%@ Page Language="c#" Trace="true"
Codebehind="CallClassLibraries.aspx.cs"
AutoEventWireup="false"
Inherits="CallClassCS.CallClassLibraries" %>

La informacin de seguimiento aparece mejor en pginas
generadas con flowLayout. Si una pgina se ha generado con
gridLayout, los mensajes de seguimiento aparecen detrs del contenido
de la pgina.

3. Agregar dos mensajes de seguimiento personalizados al final del
procedimiento de evento cmdUseCSharp_Click en la pgina
CallClassLibraries.aspx, como muestra el siguiente cdigo:
Trace.Write("UseC#", "price = " +
Convert.ToString(TextBox1.Text));
Trace.Warn("UseC#", "shipping cost = " +
Convert.ToString(sngShipping));

4. Generar y examinar la pgina CallClassLibraries.aspx.
La informacin de seguimiento se muestra en la pgina.
5. Introducir un precio y hacer clic en C# Shipping Cost.
Ver los mensajes de seguimiento personalizados.
6. Deshabilitar el seguimiento para la pgina y visualizar de nuevo la
pgina.

No es necesario volver a generar el proyecto ya que no se ha
modificado el cdigo.

No se muestran mensajes de seguimiento en la pgina.
7. Habilitar el seguimiento a nivel de aplicacin modificando la etiqueta de
seguimiento en el archivo Web.config. Establecer el atributo
pageOutput a true, como muestra el siguiente cdigo:
<trace enabled="true" requestLimit="10" pageOutput="true"
traceMode="SortByTime" localOnly="true" />

Observar que el atributo localOnly est establecido a true. Esto permite
que slo los navegadores locales visualicen la informacin de
seguimiento.
8. Actualizar la vista de la pgina CallClassLibraries.aspx y observar que
los mensajes de seguimiento no se muestran porque el seguimiento est
deshabilitado explcitamente para esta pgina.
Nota
Nota
Seguimiento en aplicaciones Web con Microsoft ASP.NET 15



9. Generar y examinar la pgina VBForm.aspx. Estas pginas no tienen
habilitado el seguimiento, pero los resultados de seguimiento se muestran
porque el seguimiento a nivel de aplicacin est habilitado.
10. Hacer que un estudiante examine la pgina VBForm.aspx en el equipo
del instructor. No debera ver el resultado de seguimiento porque el
atributo localOnly est establecido a true.
11. Agregar la siguiente instruccin de seguimiento a la pgina
VBForm.aspx en el procedimiento de evento button1_onclick:
Trace.Warn ("VB", "Value to double " + Textbox1.Text);

12. Generar y examinar la pgina VBForm.aspx. Esta pgina tampoco tiene
habilitado el seguimiento, pero los resultados de seguimiento, incluyendo
el mensaje personalizado que acabamos de aadir, se muestran de todas
formas.
13. Cambiar la etiqueta de seguimiento de Web.config para deshabilitar
pageOutput:
<trace enabled="true" pageOutput="false"/>

14. Visualizar la pgina VBForm.aspx en el navegador. El resultado de
seguimiento no se muestra en la pgina; en lugar de ello, se escribe en
memoria.
15. Visualizar la pgina http://localhost/CallClassCS/trace.axd para ver las
instrucciones de seguimiento almacenadas en memoria.

16 Seguimiento en aplicaciones Web con Microsoft ASP.NET




Seguimiento en un componente
Importar la biblioteca System.Web
Habilitar el seguimiento
Invocar los mtodos Trace
HttpContext.Current.Trace.IsEnabled = True
HttpContext.Current.Trace.IsEnabled = True
Imports System.Web
Imports System.Web
HttpContext.Current.Trace.Write _
("component", "this is my trace statement")
HttpContext.Current.Trace.Write _
("component", "this is my trace statement")
using System.Web;
using System.Web;
HttpContext.Current.Trace.IsEnabled = true;
HttpContext.Current.Trace.IsEnabled = true;
HttpContext.Current.Trace.Write
("component", "this is my trace statement");
HttpContext.Current.Trace.Write
("component", "this is my trace statement");

***************************** use******************************
Si un componente es invocado desde un formulario Web Form, podemos
agregar instrucciones de seguimiento a ese componente, lo que permitir
generar mensajes de seguimiento tanto para el formulario Web Form como
para el componente.
Para utilizar el seguimiento en un componente, debemos importar el espacio
de nombres System.Web, habilitar el seguimiento en el componente y
agregar los mensajes de seguimiento utilizando los mtodos Write y Warn.
Agregar seguimiento a un componente
1. En la parte superior del componente, importar el espacio de nombres
System.Web:
Imports System.Web

using System.Web;

2. En el constructor de la clase a la que deseamos agregar instrucciones de
seguimiento, habilitar el seguimiento con la siguiente instruccin:
HttpContext.Current.Trace.IsEnabled = True

HttpContext.Current.Trace.IsEnabled = true;

Como el seguimiento est adjunto a una pgina, debemos determinar qu
pgina ejecuta el componente. En el cdigo anterior, esto se consigue
utilizando HttpContext.Current, que obtiene el objeto Context para la
peticin actual.
Introduccin
Seguimiento en un
componente
Visual Basic .NET
C#
Visual Basic .NET
C#
Seguimiento en aplicaciones Web con Microsoft ASP.NET 17



3. En el mtodo en el que se desea generar mensajes de seguimiento,
utilizar Trace.Write o Trace.Warn:
HttpContext.Current.Trace.Write _
("component", "this is my trace statement")

HttpContext.Current.Trace.Write
("component", "this is my trace statement");


Cuando el seguimiento est habilitado en un componente, los resultados de
seguimiento se escriben en las pginas que acceden al componente, aunque
el seguimiento est deshabilitado para esa pgina.
La siguiente tabla muestra una lista de los resultados al habilitar o
deshabilitar el seguimiento en una pgina o en un componente.
Configuracin del
componente
Configuracin de la
pgina
Resultado

El seguimiento est
habilitado en el constructor
Seguimiento
deshabilitado
El seguimiento est habilitado
cuando se invocan todos los
mtodos del componente.
El seguimiento est
habilitado en un mtodo
Seguimiento
deshabilitado
El seguimiento est habilitado
cuando slo se invoca ese
nico mtodo.
El seguimiento est
deshabilitado en el
constructor
Seguimiento
habilitado
El seguimiento est
deshabilitado cuando se
invocan los mtodos del
componente.
El seguimiento no est
establecido en el
componente
Seguimiento
habilitado
El seguimiento est habilitado
cuando se invocan los mtodos
del componente.


Los mensajes de seguimiento de un componente aparecern en
todas las pginas con seguimiento habilitado que invoquen el componente si
el seguimiento no se ha deshabilitado intencionadamente en el componente.

Visual Basic .NET
C#
Importante
18 Seguimiento en aplicaciones Web con Microsoft ASP.NET




Leccin: depuracin remota
Cmo depurar remotamente

***************************** use******************************
La depuracin se utiliza normalmente para capturar errores durante la
creacin de una aplicacin Web. La mayor parte de la depuracin tiene lugar
localmente; es decir, ejecutamos el depurador de Visual Studio .NET en el
equipo que hospeda la aplicacin Web. La depuracin remota permite
depurar una aplicacin Web que se ejecuta en una ubicacin remota. En esta
leccin, aprenderemos a realizar la depuracin remota.
En esta leccin, aprenderemos a depurar aplicaciones remotamente.
Introduccin
Objetivos de la leccin
Seguimiento en aplicaciones Web con Microsoft ASP.NET 19



Cmo depurar remotamente
La depuracin remota:
Depura aplicaciones Web remotamente
Simplifica el desarrollo en equipo
Simplifica la administracin de sitios Web
Requerimientos para la depuracin remota:
Requiere Visual Studio .NET o componentes remotos en
el servidor
Visual Studio .NET debe estar instalado en el cliente
Requiere acceso administrativo al servidor
Requiere acceso para el usuario que realiza la depuracin

***************************** use******************************
La depuracin remota es el proceso de depurar aplicaciones Web que se
estn ejecutando en otro servidor. La depuracin remota permite depurar
aplicaciones Web en varios servidores distintos desde una sola estacin de
trabajo.
Para que la depuracin remota funcione, deben cumplirse las siguientes
condiciones:
Visual Studio .NET o los componentes remotos de Visual Studio .NET
deben estar instalados en el servidor que hospeda la aplicacin Web que
deseamos depurar.
Visual Studio .NET debe estar instalado en el equipo cliente, que es la
estacin de trabajo desde la que se producir la depuracin.
Debemos disponer de acceso administrativo al servidor que hospeda la
aplicacin Web.
El servidor remoto debe conceder acceso al usuario que realiza la
depuracin. Para conceder acceso a un usuario, le agregaremos al grupo
Usuarios de depurador del servidor. Este permiso es necesario aunque
el usuario sea un administrador en el servidor remoto.

Introduccin
Requerimientos para la
depuracin remota
20 Seguimiento en aplicaciones Web con Microsoft ASP.NET




Depurar remotamente
1. En el equipo cliente, iniciar Visual Studio .NET.
2. En el men Archivo, hacer clic en Abrir y clic en Proyecto desde Web.
3. En el cuadro de dilogo Abrir Proyecto desde Web, escribir la direccin
URL (Uniform Resource Locator) del servidor desde el que deseamos
abrir el proyecto, y hacer clic en Aceptar.
4. En el cuadro de dilogo Abrir proyecto, ir al proyecto en el servidor
remoto y hacer clic en Abrir.
5. Despus de abrir el proyecto, podemos establecer puntos de interrupcin
y ejecutar la aplicacin Web en modo de depuracin, igual que si
estuviramos ejecutando una aplicacin local.

Para ms informacin sobre la depuracin remota, consultar Depurar
aplicaciones Web en un servidor remoto y Configurar la depuracin
remota en el SDK de Microsoft .NET Framework.


Procedimiento de
depuracin remota
Nota
Prctica A: Validar la entrada de datos del usuario
Medical
Medical.aspx
Medical
Medical.aspx
Benefits
Home Page
Default.aspx
Benefits
Home Page
Default.aspx
Life Insurance
Life.aspx
Life Insurance
Life.aspx
Retirement
Retirement.aspx
Retirement
Retirement.aspx
Dental
Dental.aspx
Dental
Dental.aspx
Dentists
Doctors
Doctors.aspx
Doctors
Doctors.aspx
Doctors
Logon Page
Login.aspx
Logon Page
Login.aspx
Registration
Register.aspx
Registration
Register.aspx
Coho
Winery
Prospectus
Prospectus.aspx
Prospectus
Prospectus.aspx
XML Web
Service
dentalService1.asmx
XML Web
Service
dentalService1.asmx
Page Header
Header.ascx
Page Header
Header.ascx
ASPState
tempdb
LabWeb
Application
User Control
namedate.ascx
User Control
namedate.ascx
Menu
Component
Class1.vb or Class1.cs
Menu
Component
Class1.vb or Class1.cs
XML
Files
Web.
config

***************************** use******************************
En este laboratorio, aprenderemos a:
Utilizar controles de validacin para validar valores de cuadros de texto en un
formulario Web Form con Microsoft ASP.NET.
Utilizar un control de validacin ValidationSummary para resumir errores de
validacin en un formulario Web Form.

Este laboratorio se centra en los conceptos de este mdulo. Por ello,
podra no cumplir las recomendaciones de seguridad de Microsoft.

Para trabajar en este laboratorio, es necesario tener:
Conocimientos sobre cmo agregar controles Web a un formulario Web Form
ASP.NET.
Conocimientos sobre cmo escribir una funcin Microsoft Visual Basic
Scripting Edition (VBScript) en el lado del cliente.
Conocimientos sobre cmo crear un procedimiento de evento para un control
Web.

Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios de
este curso, crearemos un sitio Web que permita a los empleados seleccionar y
configurar los beneficios que elijan.
La aplicacin Web Benefits tiene un formulario Web Form denominado
life.aspx. Esta pgina se utiliza para el beneficio de seguro de vida, y solicita
Nombre, Fecha de nacimiento e Importe de cobertura al usuario. En este
laboratorio, agregaremos controles de validacin para validar las entradas en
estos campos de texto. Tambin agregaremos un control de validacin resumen
para resumir las entradas no vlidas en la pgina.
Objetivos
Nota
Requisitos previos
Escenario
Tiempo estimado para
completar el laboratorio:
15 minutos
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList.
Estos proyectos pueden haberse creado utilizando Visual Basic .NET o
Microsoft Visual C#

.NET.
Si no se han creado estos proyectos, realizar los siguientes pasos.
Crear la solucin LabApplication

Realizar este procedimiento nicamente si no se ha creado un
archivo de solucin LabApplication.

Utilizando Visual Studio .NET, crear una nueva solucin en blanco
denominada LabApplication:
En el men Archivo, seleccionar Nuevo, y hacer clic en Solucin en
blanco.
En el cuadro de dilogo Nuevo proyecto, escribir LabApplication en el
cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto Benefits, o si se ha eliminado.

Crear un nuevo proyecto de aplicacin Web ASP.NET, denominado
BenefitsVB o BenefitsCS, en la solucin LabApplication:
En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic o Proyectos de Visual C#.
En la lista Plantillas, hacer clic en Aplicacin Web ASP.NET,
establecer la Ubicacin en http://localhost/BenefitsVB para un
proyecto Visual Basic .NET o en http://localhost/BenefitsCS para un
proyecto Visual C#.
Hacer clic en Agregar a Solucin, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solucin, es importante el
uso de maysculas en el nombre del proyecto. Probablemente, utilizaremos
algunos formularios Web Forms ya generados en ste y en otros
laboratorios, por ello, debemos verificar que hemos escrito con maysculas
el nombre del proyecto Benefits.


Importante
Importante
Precaucin
Actualizar el proyecto Benefits
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsVB o BenefitsCS, seleccionar Agregar, y hacer clic en Agregar
elemento existente.
Ir a la carpeta VB\Starter\BenefitsVB

Ir a la carpeta CS\Starter\BenefitsCS
Estas carpetas pueden encontrarse dentro del fichero labs06.zip
1. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente Benefits, hacer clic en Todos los archivos (*.*).
2. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
3. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.

Crear la biblioteca de clases BenefitsList

Realizar estos pasos nicamente si no se ha creado anteriormente
un proyecto BenefitsList, o si se ha eliminado.

1. Crear un proyecto de biblioteca de clases.
Crear un nuevo proyecto de biblioteca de clases Visual Basic .NET con el
nombre BenefitsListVB y aadirlo a la solucin LabApplication:
En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual Basic.
En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListVB.
Hacer clic en Agregar a solucin, y clic en Aceptar.
Crear un nuevo proyecto de biblioteca de clases Visual C#.NET con el
nombreBenefitsListCS y aadirlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListCS.
d. Hacer clic en Agregar a solucin, y clic en Aceptar.

Verificar que se han escrito correctamente las maysculas del
proyecto BenefitsList.


Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Importante
Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Importante
Actualizar el proyecto BenefitsList
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente.
3. Ir al proyecto BenefitsList.
Ir a la carpeta VB\Starter\BenefitsListVB.

Ir a la carpeta CS\Starter\BenefitsListCS.
Estas carpetas pueden encontrarse dentro del fichero labs06.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.

Crear una referencia al componente BenefitsList del proyecto Benefits
1. En el proyecto Benefits de la solucin LabApplication, completar los
siguientes pasos para agregar una referencia al componente BenefitsList
que acabamos de crear:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB o
BenefitsCS en el Explorador de soluciones y hacer clic en Agregar
referencia.
b. En el cuadro de dilogo Agregar referencia, en la pestaa Proyectos,
hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.
c. En la lista Componentes seleccionados, seleccionar el componente
BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar.
El componente se agrega a la carpeta Referencias en el Explorador de
soluciones.

Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Ejercicio 1
Uso de los controles RequiredFieldValidator
En este ejercicio, agregaremos controles RequiredFieldValidator para los
cuadros de texto Name, Birth Date y Coverage del formulario Web Form
ASP.NET life.aspx.
Agregar controles RequiredFieldValidator
1. Abrir la pgina life.aspx en el proyecto Benefits de la solucin
LabApplication.
2. Mediante una operacin de arrastrar y soltar, ubicar tres controles
RequiredFieldValidator en el formulario Web Form de forma que el
formulario tenga un aspecto similar a la siguiente ilustracin.

3. Establecer las propiedades de los tres controles RequiredFieldValidator
utilizando los valores que se muestran en la siguiente tabla.
ID Mensaje de error Texto ControlToValidate

vldName El Nombre no puede dejarse
en blanco
* txtName
vldBirth La Fecha de nacimiento no
puede dejarse en blanco
* txtBirth
vldCoverage La cobertura no puede dejarse
en blanco
* txtCoverage

Cuando cambiamos la propiedad Text de los controles, cambiamos el texto
que aparece en la vista Diseo. La pgina debera tener ahora un aspecto
similar a la siguiente ilustracin.

4. Generar y examinar la pgina life.aspx.
5. En el explorador, dejar los campos Name, Birth Date y Coverage en
blanco y hacer clic en Guardar.
Qu ocurre y por qu?
____________________________________________________________
____________________________________________________________
6. En el explorador, introducir los valores para los campos Name, Birth Date
y Coverage y hacer clic en Guardar.
Qu ocurre y por qu?
____________________________________________________________
____________________________________________________________

Ejercicio 2
Uso del control ValidationSummary
En este ejercicio, utilizaremos un control ValidationSummary para hacer un
resumen de los errores de validacin de la pgina life.aspx.
Agregar un control ValidationSummary a la pgina life.aspx
1. Mediante una operacin de arrastrar y soltar, ubicar un control
ValidationSummary en la parte inferior del formulario Web Form life.aspx
y establecer su propiedad ID en vldSummary.
2. Establecer la propiedad HeaderText del control vldSummary en el valor
These errors were found
El aspecto de la pgina debera ser similar al de la siguiente ilustracin.

3. Generar y examinar la pgina life.aspx.
4. En el explorador, dejar en blanco los campos Name, Birth Date y
Coverage y hacer clic en Guardar.
Adems del asterisco rojo que aparece junto a las entradas no vlidas,
deberamos ver un resumen de errores en la parte inferior de la pgina.
5. De dnde proviene el resumen de mensajes de error?
____________________________________________________________
____________________________________________________________

Probar si la pgina es vlida
1. Agregar un control Label en la parte inferior del formulario Web Form,
establecer la propiedad ID del control en lblMessage y borrar el valor
predeterminado de su propiedad Text.
El aspecto de la pgina debera ser similar al de la siguiente ilustracin.

2. Abrir el procedimiento de evento Click para el botn Guardar.
3. Modificar el cdigo del procedimiento de evento para probar si los controles
de la pgina son vlidos y, si lo son, escribir un mensaje en el control
lblMessage indicando que la pgina es vlida.
El cdigo debera ser como el siguiente:
If Page.IsValid Then
lblMessage.Text = "La pgina es vlida"
End If

if (Page.IsValid)
{
lblMessage.Text = "La pgina es vlida";
}

4. Generar y examinar la pgina life.aspx.
5. En el explorador, introducir valores para los campos Name, Birth Date y
Coverage y hacer clic en Guardar.
Verificar que aparece el mensaje La pgina es vlida.

Visual Basic .NET
C#
Ejercicio 3
Uso del control CompareValidator
En este ejercicio, utilizaremos un control CompareValidator para validar la
entrada del usuario en el campo de texto Fecha de nacimiento.
Agregar un control CompareValidator
1. Mediante una operacin de arrastrar y soltar, ubicar un control
CompareValidator en el formulario Web Form life.aspx, junto al control
vldBirth RequiredFieldValidator.
2. Establecer las propiedades del control CompareValidator como se muestra
en la siguiente tabla.
Propiedad Valor

ErrorMessage El valor de Fecha de nacimiento no es vlido
Text *
ControlToValidate txtBirth
Operator DataTypeCheck
Type Date
ID vldBirthType

El aspecto de la pgina debera ser similar al de la siguiente ilustracin.

3. Generar y examinar la pgina life.aspx.
4. Introducir una fecha no vlida, como 14/3/02 (el mes 14 es incorrecto), en el
campo Birth Date y hacer clic en Guardar.
Debera aparecer el asterisco rojo junto al campo Birth Date.
5. Introducir una fecha vlida, como s 12/3/02, en el campo Birth Date y
hacer clic en Guardar.
El asterisco rojo junto al campo Birth Date debera desaparecer.

Ejercicio 4
Uso del control RegularExpressionValidator
En este ejercicio, utilizaremos un control RegularExpressionValidator para
validar la entrada del usuario en el campo de texto Coverage.
Agregar un control RegularExpressionValidator
1. Mediante una operacin de arrastrar y soltar, colocar un control
RegularExpressionValidator en el formulario Web Form life.aspx, junto
al control vldCoverage RequiredFieldValidator.
2. Establecer las propiedades del control como muestra la siguiente tabla.
Propiedad Valor

ErrorMessage La Cobertura debe tener un valor de tipo moneda
Text *
ControlToValidate txtCoverage
ValidationExpression \ d +( \ . \ d { 2 } ) ?
ID vldCoverageType

El aspecto de la pgina debera ser similar al de la siguiente ilustracin.

3. Cules son las entradas vlidas para el campo Coverage?
____________________________________________________________
____________________________________________________________
4. Generar y examinar la pgina life.aspx.
5. Introducir un valor incorrecto, como 333.3, en el campo Coverage y hacer
clic en Guardar.
Debera aparecer el asterisco rojo junto al campo Coverage.
6. Introducir un valor correcto, como 3.33, en el campo Coverage y hacer clic
en Guardar.
El asterisco rojo junto al campo Coverage debera desaparecer.






ndice
Descripcin 1
Leccin: Descripcin de la validacin de
entrada de datos del usuario 2
Leccin: uso de los controles de validacin 8
Leccin: validacin de pginas 30

Validacin de entrada de datos de
usuario
Validacin de entrada de datos de usuario 1


Descripcin
Descripcin de la validacin de entrada de datos de
usuario
Uso de controles de validacin
Validacin de pginas

***************************** use******************************
Al crear un control de entrada de datos, como un control TextBox, podemos
tener ciertas expectativas del tipo de entrada que el usuario introducir en ese
control. Una entrada de datos incorrecta, como mnimo, retrasar al usuario, y
puede incluso terminar nuestra aplicacin Web. Para verificar que la entrada de
datos cumple nuestras expectativas, debemos compararlo con el valor, intervalo
o formato que esperamos recibir del usuario. Para crear esta comprobacin,
enlazamos al menos un control de validacin de entrada de datos con el control
de entrada de datos y comparamos la entrada de datos de los usuarios con
nuestras expectativas.
En este mdulo, estudiaremos los controles de validacin de entrada de datos
disponibles en MicrosoftASP.NET. Tambin estudiaremos cmo aplicar de
forma eficaz estos controles a un formulario Web Form con ASP.NET
utilizando Microsoft Visual Studio .NET.
En este mdulo, aprenderemos a:
Identificar cundo es apropiada la validacin de entrada de datos en los
formularios Web Forms.
Utilizar controles de validacin de entrada de datos para verificar los datos
introducidos por el usuario en un formulario Web Form.
Verificar que todos los controles de validacin de una pgina son vlidos.

Introduccin
Objetivos
2 Validacin de entrada de datos de usuario


Leccin: validacin de entrada de datos del usuario
Ques es la validacin de entrada de datos?
Validacin del lado del cliente y del lado del servidor
Controles de validacin ASP.NET

***************************** use******************************
En esta leccin, estudiaremos cmo la validacin de entrada de datos verifica
que el usuario ha cumplimentado correctamente los controles de entrada de
datos en un formulario Web Form, antes de que una peticin sea procesada en
el servidor. Tambin estudiaremos los tipos de controles de validacin de
entrada de datos disponibles en ASP.NET.
En esta leccin, aprenderemos a:
Explicar el concepto de validacin.
Explicar la diferencia entre validacin del lado del cliente y validacin del
lado del servidor.
Combinar los tipos apropiados de controles de validacin ASP.NET para
determinados requerimientos de entrada.

Introduccin
Objetivos de la leccin
Validacin de entrada de datos de usuario 3


Qu es la validacin de entrada de datos?
Verifica que el usuario ha introducido correctamente el
valor de un control
Bloquea el procesamiento de una pgina hasta que
todos los controles son vlidos
Evita el spoofing
o aadir
cdigo mal
intencionado

***************************** use******************************
La validacin de entrada de datos es el proceso de verificar que la entrada de
datos de un usuario en un formulario Web Form concuerda con el valor,
intervalo o formato de datos previsto. La validacin de la entrada de datos
mejora la experiencia del usuario en el sitio Web reduciendo el tiempo de
espera de mensajes de error y la probabilidad de envos incorrectos o cadas del
sitio Web debido a problemas con la entrada de datos del usuario. Cuando se
combinan con mensajes de error comprensibles y tiles, los controles de
validacin de entrada de datos pueden mejorar enormemente el uso de una
aplicacin Web, mejorando por tanto la percepcin de usuario de la calidad
global del sitio Web.
Los controles de validacin de entrada de datos actan para verificar que el
usuario ha cumplimentado correctamente un control de entrada de datos, como
un control TextBox, antes de que la solicitud sea procesada en el servidor. Los
controles de validacin de entrada de datos de un formulario Web Form actan
como filtros de datos antes de que la pgina o la lgica de servidor sea
procesada.
En ASP.NET, la validacin de entrada de datos siempre se ejecuta en el lado
del servidor, y puede ejecutarse en el lado del cliente si el navegador cliente
soporta la validacin. Si el navegador soporta la validacin del lado del cliente,
los controles de validacin de entrada de datos realizan la comprobacin de
errores en el cliente antes de enviar los datos al servidor. El usuario recibe
informacin inmediata sobre si los datos que ha introducido son vlidos o no.
Por motivos de seguridad, toda validacin de entrada de datos que se ejecute en
el lado del cliente se repite a continuacin en el lado del servidor.
La validacin de entrada funciona comparando la entrada de datos del usuario
con el formato de entrada de datos predeterminado. Estos formatos
predeterminados de entrada de datos pueden incluir el nmero de caracteres, el
uso de dgitos y/o letras, el intervalo del valor, una cadena especfica de
caracteres, o una frmula matemtica.
Introduccin
Verificar valores de
control
4 Validacin de entrada de datos de usuario


Por ejemplo, un control de entrada de datos que solicita al usuario que
introduzca su nmero de telfono podra tener un control de validacin de
entrada de datos adjunto que verificara que el usuario nicamente introduce
nmeros en un formato basado en el nmero de telfono. Introducir letras o
muy pocos nmeros activara el control de validacin de entrada de datos para
validar la entrada de datos.
La entrada de usuario que concuerda con el formato predeterminado es
procesada por el formulario Web Form. La entrada de usuario que no concuerda
con el formato predeterminado provoca un mensaje de error que detiene el
procesamiento por parte del formulario Web hasta que la entrada de usuario se
corrige para cumplir con el formato previsto y la pgina haya sido reenviada
para su procesamiento.
Los controles de validacin protegen los formularios Web Forms de dos
importantes peligros: spoofing y cdigo mal intencionado. Ejecutando todos los
controles de validacin en el lado del servidor, con independencia de la
validacin del lado del cliente, ASP.NET protege de las siguientes amenazas:
Spoofing
Spoofing es cuando un usuario modifica la pgina HTML (Hypertext
Markup Language) que se le ha enviado, y devuelve valores que hacen que
parezca que ha introducido datos vlidos o pasado una comprobacin de
autorizacin. La validacin nicamente es susceptible de spoofing en el lado
del cliente, porque el usuario puede deshabilitar scripts del lado del cliente
cambiando las opciones del navegador y no ejecutar el cdigo de validacin
del lado del cliente, lo que crea un falso nivel de autorizacin.
Con ASP.NET, la validacin de entrada de datos del lado del cliente
siempre se repite en el lado del servidor, donde los usuarios no pueden
modificar o deshabilitar el control de validacin.
Cdigo mal intencionado
Cuando un usuario puede agregar texto ilimitado a una pgina Web
mediante controles de entrada de datos de usuario que no dispongan de
validacin de entrada de datos, puede introducir cdigo mal intencionado.
Cuando el usuario enva la siguiente solicitud al servidor, este cdigo
aadido podra ser muy perjudicial para el servidor Web y las aplicaciones
conectadas.
Por ejemplo, si decidimos no validar un campo UserName porque tenemos
clientes internacionales y no podemos pensar en un formato de nombres
universal para la validacin, un usuario mal intencionado podra explotar
esta falta de validacin para provocar varios problemas, incluyendo:
Generar un error de tipo buffer overrun y una cada del servidor
introduciendo un nombre con varios miles de caracteres.
Crear y autenticar una nueva cuenta de usuario.
Agregar privilegios a su propia cuenta, y eliminar privilegios de otras
cuentas.
Enviar una consulta SQL a nuestra base de datos de clientes y descargar
todos los datos presentes, incluyendo nombres de usuario, direcciones,
contraseas y nmeros de tarjetas de crdito.

Procesamiento de
bloque de errores
Spoofing y cdigo mal
intencionado
Validacin de entrada de datos de usuario 5


Validacin del lado del cliente y del lado del servidor
ASP.NET puede generar
validacin del lado del cliente y
del lado del servidor
Validacin del lado del cliente
Dependiente de la versin del
navegador
Respuesta inmediata
Reduce los ciclos de postback
Validacin del lado del servidor
Repite toda la validacin del lado
del cliente
Puede validar contra datos
almacenados
Vlido?
Vlido?
El usuario
introduce datos
No
No
S
S
Mensaje
de error
Cliente
Servidor
Aplicacin Web
procesada

***************************** use******************************
La validacin de entrada de datos puede tener lugar tanto en el servidor como
en el cliente. Aunque ASP.NET siempre requiere validacin del lado del
servidor, la validacin del lado del cliente es una opcin con algunos
navegadores.
Los controles de validacin de ASP.NET disponen de soporte tanto del lado del
cliente como del lado del servidor. La validacin del lado del cliente utiliza
J avaScript y scripts DHTML (HTML Dinmico). La validacin del lado del
servidor puede ser desarrollada en cualquier lenguaje basado en Microsoft
.NET, y se compila a Microsoft Intermediate Language (MSIL). Tanto la
validacin del lado del cliente como la validacin del lado del servidor utilizan
el mismo modelo de programacin, aunque algunas variaciones entre los
lenguajes pueden crear pequeas diferencias en las funciones de validacin.
La validacin del lado del cliente mejora el uso del formulario Web Form
comprobando la entrada de datos del usuario mientras se produce. Al
comprobar si se generan errores mientras se introducen, la validacin del lado
del cliente permite detectar errores antes de que el formulario Web Form sea
enviado, evitando as el viaje de ida y vuelta necesario para la validacin del
lado del servidor.
Escribir mltiples versiones de cdigo de validacin para soportar tanto el
servidor como los diferentes navegadores puede exigir mucho tiempo al
desarrollador. Los controles de validacin ASP.NET eliminan este problema ya
que la lgica de validacin se encapsula en los controles. Los controles crean
cdigo especfico para los navegadores de forma que los usuarios con soporte
de scripts del lado del cliente tendrn validacin de entrada de datos. Los
navegadores que no soporten scripts no recibirn los scripts de validacin en el
lado del cliente.
En versiones de navegador que soporten la validacin de entrada de datos,
como Microsoft Internet Explorer 4 o posterior, la validacin del lado del
cliente se produce cuando el usuario hace clic en el botn Submit. La pgina no
se publicar de nuevo en el servidor hasta que toda la validacin del lado del
Introduccin
Validacin del lado del
cliente
6 Validacin de entrada de datos de usuario


cliente sea correcta. En Internet Explorer 5 o posterior, el uso de la tecla
TABULADOR para moverse de un control de entrada de datos al siguiente
ejecuta la validacin del lado del cliente para el control de entrada de datos
completo. Esta validacin utilizando el TABULADOR ofrece al usuario
informacin inmediata sobre los datos que ha introducido.
Todos los controles de validacin de entrada de datos se ejecutan en el lado del
servidor. Las validaciones del lado del cliente se repiten en el lado del servidor
cuando la pgina se enva de nuevo al servidor. Esta repeticin evita el spoofing
de usuarios que no ejecutan el script del lado del cliente e intentan introducir
datos no vlidos.
Los controles de validacin del lado del servidor pueden escribirse en cualquier
lenguaje basado en .NET, y se compilan en MSIL antes de ser ejecutados en el
servidor.
Adems de validar el formato de los datos introducidos, los controles de
validacin del lado del servidor pueden utilizarse para comparar la entrada de
datos del usuario con datos almacenados. Esta funcionalidad permite validacin
contra diversos elementos, como contraseas previamente almacenadas o
restricciones geogrficas, incluyendo las leyes y los impuestos locales.
Validacin del lado del
servidor
Validacin de entrada de datos de usuario 7


Controles de validacin ASP.NET
ASP.NET proporciona controles de validacin para:
Comparar valores
Comparar con una frmula personalizada
Comparar con un intervalo
Comparar con un modelo de expresin habitual
Requerir entrada de datos por parte del usuario
Resumir los controles de validacin de una pgina

***************************** use******************************
ASP.NET incluye los controles de validacin que se muestran en la siguiente
tabla.
Control de validacin Funcin

CompareValidator Compara un control de entrada de datos con otro, un valor fijo,
un tipo de datos o un archivo. Por ejemplo, este control puede
utilizarse para campos de verificacin de contraseas.
CustomValidator Nos permite escribir nuestro propio cdigo para crear la
expresin de validacin. Por ejemplo, este control puede
utilizarse para verificar que el valor es un nmero primo.
RangeValidator Similar al control CompareValidator, pero este control puede
verificar que la entrada de datos de usuario est entre dos
valores o los valores de otros controles de entrada de datos.
Por ejemplo, este control puede utilizarse para verificar que la
entrada el usuario coincide con el intervalo de edad esperado.
RegularExpression
Validator
Verifica que la entrada coincide con un modelo definido por
una expresin habitual. Este control de validacin permite
comprobar secuencias predecibles de caracteres, como
nmeros de la seguridad social, direcciones electrnicas,
nmeros de telfono y cdigos postales. Visual Studio .NET
proporciona modelos predefinidos para expresiones habituales
como nmeros de telfono.
RequiredFieldValidator Comprueba si se ha introducido un valor en un control. Es el
nico control de validacin que requiere un valor. El resto de
controles de validacin de entrada de datos aceptarn un
control vaco como respuesta vlida.
ValidationSummary Muestra un resumen de todos los errores de validacin para
todos los controles de validacin de la pgina. Este control se
ubica normalmente cerca del botn Submit para proporcionar
respuesta inmediata sobre el estado de entrada de datos de la
pgina.
Controles de validacin
8 Validacin de entrada de datos de usuario


Leccin: uso de los controles de validacin
Agregar controles de validacin a un formulario Web
Form
Posicionar controles de validacin en un formulario
Web Form
Combinar controles de validacin
Controles de validacin para la entrada de datos
Uso del control RegularExpressionValidator
Demostracin: uso de controles de validacin
Uso del control CustomValidator
Demostracin: uso del control CustomValidator

***************************** use******************************
En esta leccin, estudiaremos cmo aplicar controles de validacin a controles
de entrada de datos en un formulario Web Form ASP.NET.
Validar los datos introducidos por el usuario sola ser un proceso difcil. Para
cada control de entrada de datos, era necesario escribir primero cdigo de
validacin para el servidor en un determinado lenguaje. A continuacin, si se
realizaba validacin en el lado del cliente, necesitbamos escribir la validacin
equivalente en el lado del cliente en un script diferente para cada navegador.
ASP.NET y Visual Studio .NET han hecho ms fcil la validacin de la entrada
de usuario al proporcionar controles de validacin que proporcionan cdigo en
el lado del servidor y en el lado del cliente al agregarlos a nuestro formulario
Web Form.
En esta leccin, aprenderemos a:
Agregar un control de validacin a un formulario Web Form y asociarlo a
un control de entrada de datos.
Posicionar los controles de validacin en una pgina Web para soportar el
uso correcto del control de entrada de datos asociado.
Utilizar los controles de validacin RequiredInputValidator,
CompareValidator y RangeValidator para validar datos introducidos por
el usuario.
Utilizar el control RegularExpressionValidator para validar datos
introducidos por el usuario.
Utilizar el control CustomValidator para validar datos introducidos por el
usuario.
Asociar mltiples controles de validacin a un nico control de entrada de
datos.

Introduccin
Objetivos de la leccin
Validacin de entrada de datos de usuario 9


Agregar controles de validacin a un formulario Web Form
1. Agregar un control de validacin
2. Seleccionar el control de entrada de datos para validar
3. Establecer propiedades de validacin
<asp:Type_of_Validator
id="Validator_id"
runat="server"
ControlToValidate="txtName"
ErrorMessage="Message_for_error_summary"
Display="static|dynamic|none"
Text="Text_to_display_by_input_control">
</asp:Type_of_Validator>
<asp:Type_of_Validator
id="Validator_id"
runat="server"
ControlToValidate="txtName"
ErrorMessage="Message_for_error_summary"
Display="static|dynamic|none"
Text="Text_to_display_by_input_control">
</asp:Type_of_Validator>
<asp:TextBox id="txtName" runat="server" />
<asp:TextBox id="txtName" runat="server" />
1
1 1
2
2 2
3
3 3

***************************** use******************************
Como todos los controles de validacin de entrada de datos comparten un
modelo de objetos comn, el proceso de agregar controles de validacin a una
pgina es el mismo para todos los controles. En Visual Studio .NET,
simplemente arrastramos el control de validacin de entrada a una pgina,
seleccionamos el control de entrada a validar y establecemos las propiedades.
Para agregar un control de validacin, abrimos el cuadro de herramientas del
formulario Web Form, seleccionamos uno de los controles de validacin
disponibles y lo arrastramos junto al control de entrada de datos que deseamos
validar.
Seleccionamos el control de entrada de datos para validar abriendo la ventana
Propiedades y seleccionando el ID de control de entrada de datos apropiado en
la lista desplegable que se encuentra junto a la propiedad ControlToValidate.
Podemos adjuntar mltiples controles de validacin a un nico control de
entrada de datos. Todos los controles de validacin adjuntos deben estar en
True antes de que ese control de entrada de datos sea aceptado y el formulario
Web Form ASP.NET pueda ser procesado.
Una vez el control de validacin de entrada de datos est ubicado en la pgina,
utilizamos la ventana Propiedades para introducir las propiedades especficas
del control, como la expresin de validacin, el mensaje de error y mensaje de
texto.
La sintaxis compartida para los controles de validacin de entrada de datos es la
siguiente:
<asp:type_of_validator id="validator_id" runat="server"
ControlToValidate="control_id"
ErrorMessage="error_message_for_error_summary"
Display="static|dynamic|none"
Text="Text_to_display_by_input_control">
</asp:type_of_validator>

Introduccin
Agregar un control de
validacin
Seleccionar el control de
entrada de datos para
validar
Establecer las
propiedades de
validacin
10 Validacin de entrada de datos de usuario


Cada control de validacin tiene propiedades nicas adicionales que definen el
modo de funcionamiento. Dos de las propiedades que comparten todos los
controles de validacin, a excepcin del control ValidationSummary, son
Type y EnableClientScript:
Type
La propiedad Type es el tipo de datos que se validar. Visual Studio .NET
ajustar automticamente el tipo de datos para que coincida con el control
de entrada de datos adjunto al seleccionar ControlToValidate.
Entre los tipos de datos disponibles se incluyen String, Integer, Double,
Date y Currency.
EnableClientScript
La propiedad EnableClientScript indica si realizamos o no la validacin
del lado del cliente. El valor predeterminado de esta propiedad es true.
ASP.NET crea procedimientos de validacin en el lado del cliente en
Microsoft J Script .NET, y crea procedimientos de validacin del lado del
servidor en C#y Microsoft Visual Basic.NET. Esta diferencia de lenguaje
puede provocar pequeas diferencias entre las implementaciones de
controles de validacin en el lado del cliente y en el lado del servidor.

Validacin de entrada de datos de usuario 11


Posicionar controles de validacin en un formulario Web Form
Crear mensajes de error
Seleccionar modo de presentacin
Esttico
Dinmico

***************************** use******************************
Los controles de validacin de entrada de datos pueden mostrar un mensaje de
error cuando se produce una violacin en la entrada de datos. Es importante
posicionar los controles de validacin de entrada de datos de modo que el
usuario vea claramente qu control contiene la entrada de datos incorrecta. En
Visual Studio .NET, debemos posicionar el control de validacin en la pgina
donde debe aparecer el mensaje de error.
El cdigo HTML estndar para un control de validacin de entrada de datos es
el siguiente:
<asp:type_of_validator id="validator_id" runat="server"
ControlToValidate="control_id"
ErrorMessage="error_message_for_error_summary"
Display="static|dynamic|none"
Text="Text_to_display_by_input_control">
</asp:type_of_validator>

Los controles de validacin de entrada de datos ASP.NET contienen dos
propiedades de mensajes de error: una propiedad ErrorMessage y una
propiedad Text, pudindose mostrar ambas en la ubicacin del control de
validacin de entrada de datos. La diferencia entre ambas propiedades de
mensajes de error es la siguiente:
Propiedad ErrorMessage
La propiedad ErrorMessage es el mensaje de error que se muestra en la
ubicacin de un control de validacin cuando ste se dispara, si no est
establecida la propiedad Text. Este mensaje tambin se incluir en un
control ValidationSummary si se utiliza uno en el formulario Web Form.
Introduccin
Mensajes de error
12 Validacin de entrada de datos de usuario


Propiedad Text
La propiedad Text es el texto alternativo que se mostrar en la ubicacin del
control de validacin cuando se utilizan las propiedades ErrorMessage y
Text, y se dispara el control de validacin. Si se utiliza un control
ValidationSummary para capturar mensajes de error, normalmente se
utiliza un asterisco (*) rojo a la derecha del control de entrada de datos no
vlido para indicar dnde se encuentra el error.
En Visual Studio .NET, el script predeterminado para la propiedad Text es
imprimir el contenido de Text entre las etiquetas de inicio y final del control
de validacin, como muestra el siguiente cdigo:
<asp:type_of_validator>Text</asp:type_of_validator>

En este mdulo, observarmos la propiedad Text declarada explcitamente,
como muestra el siguiente cdigo:
<asp:type_of_validatorText="Text">
</asp:type_of_validator>


La propiedad Display establece el espacio de mensajes de error desde mltiples
controles de validacin cuando se muestra el formulario Web Form en
FlowLayout. La propiedad Display nicamente afecta a mensajes de error en la
ubicacin del control de validacin. Los mensajes que se muestran en
ValidationSummary no se ven afectados por la propiedad Display.
La siguiente tabla describe las diversas opciones de la propiedad Display.
Opciones Descripcin

Static Define una presentacin prefijada para el mensaje de error, con cada
control de validacin ocupando un espacio, aunque no haya texto de
mensaje de error visible. Esta opcin permite definir una presentacin
fija para la pgina, como se muestra en la ilustracin anterior.
De forma predeterminada, Visual Studio .NET utiliza
Display="static" para posicionar el texto del mensaje de error.
Dynamic Permite que los controles de validacin se representen en la pgina
como parte del flujo de texto. El uso de esta opcin evita que se
muestren espacios en blanco en la pgina cuando no se invocan los
controles de validacin de entrada de datos, como se muestra en la
ilustracin anterior. En ocasiones, esta opcin hace que los controles
tengan movimiento en el formulario Web Form cuando se muestran
mensajes de error.
None Bloquea la visualizacin de mensajes de error en la ubicacin del
control de validacin.

Establecer la propiedad
Display
Validacin de entrada de datos de usuario 13


Combinar controles de validacin
Pueden existir mltiples controles de validacin en un nico
control de entrada de datos
nicamente RequiredFieldValidatorcomprueba los controles
vacos

***************************** use******************************
En ocasiones, una nica funcin o control de validacin no es suficiente para
verificar que el usuario ha introducido correctamente los datos en un control de
entrada.
Por ejemplo, un control TextBox con nmeros de telfono puede requerir una
entrada, ajustarse a uno o varios modelos de nmero de telfono y ser verificada
contra una base de datos que almacena nmeros de telfono. En este escenario,
TextBox debera estar enlazado a un control RequiredFieldValidator, un
control RegularExpressionValidator con varios patrones y un control
CustomValidator con acceso a una base de datos.
Podemos asociar mltiples controles de validacin a un nico control de
entrada de datos. Esta asociacin muchos-a-uno de los controles de validacin
permite la introduccin de datos del usuario para ms de un requerimiento de
validacin.
El siguiente cdigo de ejemplo muestra un nico control de entrada de datos
para un nmero de telfono. El contenido del control de entrada de datos se
comprueba utilizando un control RequiredFieldValidator, y el formato
correcto se comprueba utilizando un control RegularExpressionValidator:
Control de entrada de datos
El siguiente cdigo define el control TextBox que se est validando:
<asp:TextBox id="txtPhone1" runat="server" >
</asp:TextBox>

Introduccin
Mltiples controles de
validacin en un nico
control de entrada
Ejemplo
14 Validacin de entrada de datos de usuario


Control RequiredFieldValidator
El siguiente cdigo define el control RequiredFieldValidator que verifica
que hay una entrada en txtPhone1:
<asp:RequiredFieldValidator
id="RequiredtxtPhone1Validator1"
runat="server"
ErrorMessage=
"A telephone number is required"
ControlToValidate="txtPhone1"
Text="*">
</asp:RequiredFieldValidator>

Control RegularExpressionValidator
El siguiente cdigo define el control RegularExpressionValidator que
verifica que la entrada en txtPhone1 coincide con el modelo de nmero de
telfono de Estados Unidos:
<asp:RegularExpressionValidator
id="RegulartxtPhone1Validator1"
runat="server"
ErrorMessage=_
"This telephone number is not formatted correctly"
ControlToValidate="txtPhone1"
ValidationExpression=
"((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}"
Text="*">
</asp:RegularExpressionValidator>

Control CustomValidator
El siguiente cdigo define el control CustomValidator que invoca la
funcin MyServerValidation, que compara la entrada en txtPhone1 con
una base de datos de nmeros de telfono:
<asp:CustomValidator
id="CustomValidator1"
OnServerValidate = "MyServerValidation"
runat="server"
ErrorMessage="This telephone number is not recognized"
ControlToValidate="txtPhone1"
Text="*">
</asp:CustomValidator>


Validacin de entrada de datos de usuario 15


Controles de validacin de entrada de datos
RequiredFieldValidator
InitialValue
CompareValidator
ValueToCompararo ControlToComparar
Type
Operator
RangeValidator
MinimumValue
MaximumValue
Type
Cdigo de ejemplo

***************************** use******************************
Los controles de validacin ms sencillos son los controles
RequiredFieldValidator, CompareValidator y RangeValidator. Todos ellos
validan contra valores fijos o contra un segundo control de entrada de datos.
Utilizamos el control RequiredFieldValidator para obligar a un usuario a
introducir datos en un control de entrada de datos. Cualquier carcter es una
respuesta vlida con este control de validacin. nicamente la nula entrada de
datos (en blanco), o espacios, constituye una entrada no vlida con este control.
El control RequiredFieldValidator se utiliza normalmente slo en controles de
entrada de datos necesarios para completar un proceso solicitado. Por ejemplo,
un control RequiredFieldValidator se utilizara para los campos
nombre_usuario y contrasea en una pgina de inicio de sesin, pero no para
informacin secundaria, como una oferta para convertirse en visitante favorito
de un determinado sitio Web.
Una opcin para el control RequiredFieldValidator es tener un valor inicial
que no sea una cadena vaca (en blanco). Resulta til tener un valor inicial
cuando tenemos un valor predeterminado para un control de entrada de datos y
deseamos que el usuario introduzca otro valor. Para requerir un cambio del
valor inicial del control de entrada de datos asociado, establecer la propiedad
InitialValue para que coincida con el valor inicial del control de entrada de
datos.
En el siguiente ejemplo, un control RequiredFieldValidator verifica que el
valor txtName del control TextBox no es el valor inicial de Enter your name:
Introduccin
Control
RequiredFieldValidator
16 Validacin de entrada de datos de usuario


<asp:TextBox id="txtName" runat="server">
Enter your name</asp:TextBox>

<asp:RequiredFieldValidator id="txtNameValidator"
runat="server"
ControlToValidate="txtName"
InitialValue="Enter your name"
ErrorMessage="You must enter your name"
Display="dynamic"
Text="*">
</asp:RequiredFieldValidator>

nicamente el control RequiredFieldValidator requiere que se
introduzca un valor en un control. El resto de controles de validacin aceptarn
un control vaco o un espacio como respuesta vlida.

Utilizamos el control CompareValidator para probar la entrada de datos del
usuario contra un valor especfico o contra un segundo control de entrada de
datos. El control CompareValidator a menudo se utiliza donde el riesgo de
errores tipogrficos es alto, como campos de contrasea que no muestran la
entrada real de usuario.
El control CompareValidator mostrar como vlido un control de entrada de
datos vaco.
El control CompareValidator utiliza las siguientes propiedades:
ValueToCompare
La propiedad ValueToCompare se utiliza para establecer un valor
constante con el que realizar la comparacin. Utilizamos un carcter tubera
(|) para separar varios valores. Esta propiedad se utiliza especialmente para
validar contra valores inalterables, como un lmite de edad mnima.
Utilizamos el control CustomValidator para comparar contra valores que
pueden cambiar.
ControlToCompare
La propiedad ControlToCompare se utiliza para identificar otro control
con el que realizar la comparacin. Esta propiedad puede utilizarse para
buscar errores tipogrficos haciendo que el usuario introduzca los mismos
datos en dos campos adyacentes.
Si establecemos ambas propiedades, ValueToCompare y
ControlToCompare, la propiedad ControlToCompare tiene prioridad.
Type
La propiedad Type se utiliza para especificar el tipo de datos. Utilizamos
esta propiedad cuando deseamos comparar el valor de un control de entrada
de datos contra un DataType.
Operator
La propiedad Operator especifica el operador de comparacin a utilizar.
Los operadores se especifican con el nombre de los operadores de
comparacin, como Equal, NotEqual, GreaterThan y
GreaterThanEqual.

Nota
Uso del control
CompareValidator
Validacin de entrada de datos de usuario 17


En el siguiente ejemplo, un control CompareValidator verifica que los valores
de los controles TextBox, txtPassword1 y txtPassword2, coinciden:
<asp:TextBox id="txtPassword1" runat="server">
Enter your password </asp:TextBox>

<asp:TextBox id="txtPassword2" runat="server" >
Enter your password again </asp:TextBox>

<asp:CompareValidator id="CompareValidator1" runat="server"
ErrorMessage="These fields do not match"
ControlToCompare="txtPassword1"
ControlToValidate="txtPassword2"
Text="*">
</asp:CompareValidator>

El control RangeValidator se utiliza para comprobar si el valor introducido
est dentro de un determinado intervalo. El intervalo de medida es inclusivo y
los valores mnimo y mximo se consideran vlidos. El control
RangeValidator se utiliza normalmente para verificar que el valor introducido
(por ejemplo, edad, estatura, salario o nmero de hijos) coincide con un
intervalo previsto.
El control RangeValidator mostrar como vlido un control de entrada de
datos vaco.
El control RangeValidator tiene las siguientes propiedades:
MinimumValue
La propiedad MinimumValue especifica el valor mnimo del intervalo
vlido para variables numricas, o la longitud mnima de la cadena de
caracteres para variables de cadena.
MaximumValue
La propiedad MaximumValue especifica el valor mximo del intervalo
vlido para variables numricas, o la longitud mxima de la de caracteres
cadena para variables de cadena.
Type
La propiedad Type se utiliza para especificar el tipo de datos de los valores
a comparar. Los valores a comparar se convierten en este tipo de datos antes
de que se realice alguna comparacin.

En el siguiente ejemplo, un control RangeValidator verifica que el control
TextBox denominado txtAge tiene un valor entre 18 y 50:
Uso del control
RangeValidator
18 Validacin de entrada de datos de usuario


<asp:textbox id="txtAge" runat="server">
Enter your age</asp:textbox>
<asp:RangeValidator id="txtAgeValidator" runat="server"
ControlToValidate="txtAge"
Type="Integer"
MinimumValue="18"
MaximumValue="50"
ErrorMessage="Applicants must be between 18 and 50"
Display="dynamic"
Text="*">
</asp:RangeValidator>


Validacin de entrada de datos de usuario 19


Uso del control RegularExpressionValidator
Se utiliza cuando la entrada debe ajustarse a un
modelo predefinido
Visual Studio .NET incluye modelos para:
Nmeros de telfono
Cdigos postales
Direcciones electrnicas
<asp:RegularExpressionValidator
ControlToValidate="US_PhoneNumber"
ValidationExpression="((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}"
>*</asp:RegularExpressionValidator >
<asp:RegularExpressionValidator
ControlToValidate="US_PhoneNumber"
ValidationExpression="((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}"
>*</asp:RegularExpressionValidator >
Cdigo de ejemplo

***************************** use******************************
Cuando debemos verificar que los datos introducidos por un usuario coinciden
con un modelo predefinido, como un nmero de telfono, un cdigo postal o
una direccin electrnica, utilizamos el control RegularExpressionValidator.
Este control de validacin compara el modelo de caracteres, dgitos y smbolos
introducidos por el usuario con uno o ms modelos en el control.
Cuando hacemos clic en ValidationExpression en la ventanaPropiedades,
Visual Studio .NET proporciona una serie de modelos de expresiones
habituales preestablecidas. Estos modelos incluyen direcciones electrnicas y
Web, nmeros de telfono y cdigos postales. Para crear un nuevo modelo,
seleccionar la plantilla Custom. El ltimo modelo utilizado estar disponible
para ser modificado. Esta caracterstica del ltimo utilizado ofrece una base a
partir de la cual crear nuestro propio modelo.
Introduccin
20 Validacin de entrada de datos de usuario


Generamos nuestras propias expresiones habituales personalizadas utilizando el
conjunto de caracteres de control que se muestran en la siguiente tabla.
Carcter Definicin

a Debe utilizar la letra en minscula. Las letras que no estn precedidas
por una barra invertida (\), o parte de un intervalo, son un
requerimiento para ese valor literal.
1 Debe utilizar el nmero 1. Cualquier nmero que no est precedido de
una barra invertida (\),o parte de un intervalo, es un requerimiento para
ese valor literal.
? Elemento 0 1.
* Elementos 0 a N.
+ Elementos 1 a N (1 como mnimo).
[0-n] Intervalo de valores enteros de 0 a n.
{n} La longitud debe ser n caracteres.
| Separa mltiples modelos vlidos.
\ El siguiente carcter es un carcter comando.
\w Debe tener un carcter.
\d Debe tener un dgito.
\. Debe tener un periodo.


Para ms informacin sobre los caracteres de control, leer la
Introduccin a las expresiones regulares, en la documentacin en lnea de
Referencia de JScript.

El siguiente cdigo de ejemplo muestra cmo podemos utilizar un control
RegularExpressionValidator para comprobar si un usuario ha introducido una
direccin electrnica vlida:
<asp:TextBox id="txtEmail" runat="server" />

<asp:RegularExpressionValidator id="txtEmail_validation"
runat="server"
ControlToValidate="txtEmail"
ErrorMessage="Use the format username@organization.xxx"
ValidationExpression="\w+@\w+\.\w+"
Text="*">
</asp:RegularExpressionValidator>

Caracteres de
expresiones habituales
Nota
Ejemplo de una
expresin simple
Validacin de entrada de datos de usuario 21


Este control de validacin RegularExpression comprueba un modelo
especfico, como muestra la siguiente tabla.
Caracteres Definicin

\w+ Una cadena de un carcter como mnimo.
@ Un signo (@).
\w+ Una cadena de un carcter como mnimo.
\. Un periodo.
\w+ Una cadena de un carcter como mnimo.

Una direccin electrnica vlida para este control es: alguien@ejemplo.com.
Una direccin electrnica no vlida para este control es: alguien.com, o
alguien@.com.
La expresin predeterminada de correo electrnico de Visual Studio .NET es
ms compleja que el ejemplo anterior. El modelo predeterminado de correo
electrnico tambin limita la separacin de trminos antes y despus del signo
(@) a xx.xx o xx-xx.
La expresin regular predeterminada para direcciones electrnicas es:
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

Este control de validacin RegularExpression comprueba un modelo
especfico, como muestra la siguiente tabla.
Caracteres Definicin

\w+ Una cadena de un carcter como mnimo.
([-+.]\w+)* Puede tener uno o ms guiones o un punto, y una cadena de un
carcter como mnimo.
@ Un signo (@).
\w+ Una cadena de un carcter como mnimo.
([-.]\w+)* Puede tener un guin o un punto, y una cadena de un carcter como
mnimo.
\. Un punto.
\w+ Una cadena de un carcter como mnimo.
([-.]\w+)* Puede tener un guin o un punto, y una cadena de un carcter como
mnimo.

Una direccin electrnica vlida para este control es: algu-
ien@ejemplo.empresa.com.
Una direccin electrnica no vlida para este control es:
algu,ien@ejemplo..empresa.com.
Ejemplo de una
expresin compleja
22 Validacin de entrada de datos de usuario


Demostracin: uso de los controles de validacin
Crear un formulario Web FormASP.NET
con controles TextBox y Button
Agregar un control
RequiredFieldValidator
Agregar un control RangeValidator
Agregar un control
RegularExpressionValidator

***************************** use******************************
En esta demostracin, veremos cmo puede utilizarse un control
RequiredFieldValidator para verificar que un control TextBox se ha rellenado
antes de que un formulario Web Form sea procesado.
Ejecutar esta demostracin
1. Crear un nuevo proyecto de aplicacin Web denominado ValidationTst1.
2. Cambiar a FlowLayout.
3. Arrastrar los siguientes controles Web desde el Cuadro de herramientas a
WebForm1: TextBox y Button.
4. Agregar un control RequiredFieldValidator junto al control de entrada de
datos TextBox.
5. Establecer las propiedades del control RequiredFieldValidator en la
ventana Propiedades, como muestra la siguiente tabla.
Propiedad Valor

ControlToValidate TextBox1
ErrorMessage Texto del mensaje de error
Text Se requiere entrada de datos

6. Mostrar que la propiedad Display de RequiredFieldValidator est
establecida en Static de forma predeterminada.
7. Guardar, generar y examinar la pgina.
8. Dejar el control en blanco y hacer clic en Button1.
Se obtiene el mensaje de error Text, y no el mensaje ErrorMessage.
Crear un formulario Web
FormASP.NET con
controles TextBox y
Button
Agregar un control
RequiredFieldValidator
Validacin de entrada de datos de usuario 23


9. Agregar un control RangeValidator al formulario Web Form junto a
RequiredFieldValidator.
10. Establecer las propiedades del control RangeValidator en la ventana
Propiedades, como muestra la siguiente tabla:
Propiedad Valor

ControlToValidate TextBox1
ErrorMessage Texto del mensaje de error
Text Fuera del intervalo
MaximumValue 100
MinimumValue 16
Type Entero

11. Guardar, generar y examinar la pgina.
12. Dejar el valor en blanco y hacer clic en Button.
Se debera obtener el mensaje Se requiere entrada de datos del control
RequiredFieldValidator.
13. Escribir un valor mayor que 100 o menor que 16, y hacer clic en Button. Se
debera obtener el mensaje Fuera del intervalo del control
RangeValidator.
El mensaje de texto Fuera del intervalo no est directamente junto al
control de entrada de datos. Debido a que la pgina est en modo de
presentacin esttico, el control RequiredFieldValidator guarda un espacio
para su mensaje de texto.
14. Volver a abrir el formulario Web Form, seleccionar el control
RequiredFieldValidator y cambiar la propiedad Display a Dynamic.
15. Guardar, generar y examinar la pgina.
16. Introducir un valor mayor que 100 o menor que 16, y hacer clic en Button.
Se debera obtener el mensaje Fuera del intervalo del control
RangeValidator.
Esta vez, el mensaje de texto Fuera del intervalo est directamente junto al
control de entrada de datos debido a que RequiredFieldValidator no
guarda el espacio para su mensaje de texto (modo de presentacin
dinmico).
17. Agregar un segundo control TextBox y un control
RegularExpressionValidator junto a l.
18. Hacer clic con el botn derecho en el control RegularExpressionValidator
y clic en Propiedades, o clic en el control RegularExpressionValidator si
la ventana Propiedades sigue abierta, e introducir las siguientes propiedades:
a. En la propiedad ErrorMessage, escribir Direccin electrnica no
vlida.
b. En la propiedad ControlToValidate, seleccionar TextBox2.
c. En la propiedad ValidationExpression, seleccionar Internet E-mail
Address.
19. Guardar, generar y examinar la pgina.
Agregar un control
RangeValidator
Agregar un segundo
control TextBox y un
control Regular
ExpressionValidator
24 Validacin de entrada de datos de usuario


Escribir una direccin electrnica incorrecta en el segundo cuadro de texto y
hacer clic en Button. Se debera obtener el mensaje de texto Direccin
electrnica no vlida del control RegularExpressionValidator.
20. Seleccionar Ver fuente y mostrar la validacin del lado del cliente HTML.

Validacin de entrada de datos de usuario 25


Uso del control CustomValidator
Es posible validar en lado del cliente, en el lado del
servidor, o en ambos
ClientValidationFunction
OnServerValidate
Validar con:
Frmula
Datos
Objetos COM
Servicio Web
Cdigo de ejemplo

***************************** use******************************
Utilizamos el control CustomValidator cuando deseamos utilizar nuestra
propia lgica de validacin personalizada para comprobar los datos
introducidos por el usuario contra una variable, frmula, o la entrada desde una
segunda fuente. El control CustomValidator se utiliza a menudo para
situaciones como la verificacin de contraseas, en las que los datos
introducidos por el usuario se comparan con una contrasea almacenada en una
base de datos de usuarios.
El control CustomValidator valida en el lado del servidor, y puede validar en
el lado del cliente si el navegador soporta la validacin. A diferencia de otros
controles de validacin, donde ASP.NET crea los scripts de validacin de
cliente y servidor, debemos escribir explcitamente los scripts de validacin
para el control CustomValidator. Establecemos el control CustomValidator
como vlido o no vlido utilizando la propiedad args.IsValid.
Las propiedades del control CustomValidator incluyen:
ClientValidationFunction
La propiedad ClientValidationFunction es el script que deseamos que
ejecute el control CustomValidator en el lado del cliente. Debido a que
escribimos nuestro propio script en el cliente, es importante comprobar que
existe coherencia lgica con el cdigo del lado del servidor.
OnServerValidate
La propiedad OnServerValidate es el script que deseamos que ejecute el
control CustomValidator en el lado del servidor. Debido a que escribimos
nuestro propio cdigo en el servidor, es importante comprobar que existe
coherencia lgica con el script del lado del cliente.

Introduccin
Validacin del lado del
cliente y del lado del
servidor
26 Validacin de entrada de datos de usuario


El siguiente cdigo de ejemplo muestra procedimientos del lado del servidor y
del lado del cliente para un control CustomValidator y verificar que un
nmero introducido en un control de entrada de datos es un nmero par:
<asp: CustomValidator
ClientValidationFunction = "MyClientFunction"
OnServerValidate = "MyServerFunction" />

Procedimiento del lado del cliente
El siguiente cdigo J Script est pensado para ejecutarse en Internet Explorer
6, y verificar que un nmero es par:
<script language = "Jscript">
function MyClientFunction(source, arguments) {
alert("Ejecucin en el cliente");
var intValue = arguments.Value;
if (intValue % 2 == 0) {
arguments.IsValid = true;
} else {
arguments.IsValid = false;
}
}
</script>

Procedimiento del lado del servidor
El siguiente cdigo est diseado para ejecutarse en un servidor .NET, y
verificar que un nmero es par:
Sub MyServerFunction(objSource as Object, _
args as ServerValidateEventArgs)
Dim intValue As Integer = args.Value
If intValue mod 2 = 0 Then
args.IsValid = True
Else
args.IsValid = False
End If
End Sub

private void MyServerFunction(object objSource,
ServerValidateEventArgs args)
{
int intValue = Convert.ToInt16(args.Value);
if (intValue%2 == 0)
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
}


Ejemplo
Visual Basic .NET
C#
Validacin de entrada de datos de usuario 27


Demostracin: uso del control CustomValidator
Agregar un control CustomValidator
Escribir el cdigo del lado del servidor
Escribir el scripten el lado del cliente
Probar el resultado

***************************** use******************************
En esta demostracin, veremos cmo utilizar un control CustomValidator.
El cdigo para esta demostracin se encuentra en el proyecto Demo06VB o
Demo06CS que se pueden encontrar dentro del fichero demos06.zip
Ejecutar esta demostracin
1. Abrir el formulario Web Form denominado CustomValidator.aspx en
Visual Studio .NET.
El formulario Web Form ya dispone de un control TextBox y de un control
Button.
2. Agregar un control CustomValidator al formulario Web Form .
3. En la propiedad Text del control CustomValidator, escribir Es un nmero
impar.
4. Establecer la propiedad ControlToValidate en TextBox1.
5. Hacer doble clic en CustomValidator para abrir el procedimiento de evento
del lado del servidor y agregar el siguiente cdigo:
Dim intValue As Integer = args.Value
If intValue mod 2 = 0 Then
args.IsValid = True
Else
args.IsValid = False
End If

Introduccin
Agregar un control
CustomValidator
Escribir el cdigo del
lado del servidor
Visual Basic .NET
28 Validacin de entrada de datos de usuario


int intValue = Convert.ToInt16(args.Value);
if (intValue % 2 == 0)
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}

El procedimiento de eventos del lado del servidor que Visual Studio .NET
ha creado automticamente debera tener el nombre
CustomValidator1_ServerValidate, y dos parmetros: source (tipo
Object) y args (tipo ServerValidateEventArgs).
6. En la propiedad ClientValidationFunction del control CustomValidator,
escribir MyClientValidation.
7. Abrir el cdigo fuente HTML de la pgina CustomValidator.aspx (y no
CustomValidator.aspx.vb).
8. Quitar el comentario del siguiente cdigo que se encuentra justo despus de
la etiqueta <head>. Este ejemplo est en J Script:
function MyClientValidation(source, arguments)
{
alert("Ejecucin en el cliente");
var intValue = arguments.Value;
if (intValue % 2 == 0)
{
arguments.IsValid = true;
} else {
arguments.IsValid = false;
}
}

Verificar que el navegador de destino es Internet Explorer 5. En la vista de
Diseo o la vista HTML, seleccionar Propiedades, y verificar que Target
Schema est establecido a Internet Explorer 5.0.
9. Establecer la propiedad EnableClientScript del control CustomValidator
a True.
El script del lado del cliente se ejecutar antes del cdigo del lado del
servidor para evitar el viaje de ida y vuelta al servidor con la pgina si esta
propiedad est establecida a True y el navegador cliente es Internet
Explorer 4 o posterior.
C#
Escribir el script del
lado del cliente
Probar el resultado
Validacin de entrada de datos de usuario 29


10. Generar y examinar CustomValidator.aspx.
11. Escribir un nmero en el cuadro de texto.
12. Se debera obtener el cuadro de mensaje Ejecucin en el cliente al hacer
clic en Button. Adems, se debera obtener el mensaje Es un nmero
impar cuando el nmero sea impar.
13. Establecer la propiedad EnableClientScript del control CustomValidator
en False, de forma que nicamente se ejecute el cdigo del lado del
servidor.
14. Generar y examinar la pgina.
15. En este momento no se debera obtener el cuadro de mensaje, ya que se est
ejecutando el cdigo en el lado del servidor. Sin embargo, seguir
apareciendo el mensaje Es un nmero impar cuando el nmero sea impar.

30 Validacin de entrada de datos de usuario


Leccin: validacin de pginas
Uso de la propiedad Page.IsValid
Uso del control ValidationSummary
Demostracin: uso de la propiedad Page.IsValidy del
control ValidationSummary

***************************** use******************************
En esta leccin, estudiaremos cmo utilizar la propiedad Page.IsValid y el
control ValidationSummary para verificar que todos los controles de
validacin de un formulario ASP.NET Web Form son vlidos antes de que se
inicie el proceso.
En esta leccin, aprenderemos a:
Utilizar la propiedad Page.IsValid para determinar si todos los controles de
validacin de entrada de datos de una pgina son vlidos.
Utilizar el control ValidationSummary para mostrar un resumen de
mensajes de error en una pgina.

Introduccin
Objetivos de la leccin
Validacin de entrada de datos de usuario 31


Uso de la propiedad Page.IsValid
Examina todos los controles de validacin
Sub cmdSubmit_Click(s As Object, e As EventArgs)
If Page.IsValid Then
Message.Text = "Page is valid!"
' Perform database updates or other logic here
End If
End Sub
Sub cmdSubmit_Click(s As Object, e As EventArgs)
If Page.IsValid Then
Message.Text = "Page is valid!"
' Perform database updates or other logic here
End If
End Sub
private void cmdSubmit_Click(object s, System.EventArgs e)
{ if (Page.IsValid)
{ Message.Text = "Page is Valid!";
// Perform database updates or other logic here
}
}
private void cmdSubmit_Click(object s, System.EventArgs e)
{ if (Page.IsValid)
{ Message.Text = "Page is Valid!";
// Perform database updates or other logic here
}
}

***************************** use******************************
.NET permite verificar que todos los controles de una pgina son vlidos antes
de que realicen alguna accin. Esta verificacin puede llevarse a cabo en el
cliente o en el servidor, dependiendo del navegador que se est utilizando. La
verificacin del lado del cliente se realiza con el control ValidationSummary,
mientras que la verificacin del lado del servidor se realiza con la propiedad
Page.IsValid.
Para determinar si todos los controles de validacin de una pgina son vlidos,
comprobamos la propiedad IsValid de la pgina en tiempo de ejecucin. La
propiedad IsValid se vincula a los valores de todos los controles de validacin
que se encuentran en la pgina (utilizando un AND lgico). Si algn control de
validacin no es vlido, la propiedad IsValid devuelve False. Esta propiedad
proporciona una forma sencilla de determinar si los controles de entrada de
datos en el formulario Web Form son vlidos y si el formulario Web Form est
preparado para seguir con la lgica de negocio.
Los controles de validacin verifican las entradas del usuario, establecen un
estado de error y producen mensajes de error. Sin embargo, los controles de
validacin no cambian el flujo de procesamiento de pginas. Por ejemplo, los
controles de validacin no evitan nuestro cdigo si detectan un error en los
datos introducidos por el usuario. En lugar de ello, probamos el estado de los
controles en nuestro cdigo antes de realizar lgica especfica de aplicacin. Si
detectamos un error, evitamos que nuestro cdigo se ejecute; la pgina seguir
procesndose y se devuelve al usuario con mensajes de error.

La informacin de validacin no est disponible durante la inicializacin
de una pgina o durante la fase de carga. Para obtener informacin sobre los
estados de pgina, examinar Estados de procesamiento de pginas de
formularios Web Forms en la documentacin de Visual Studio .NET.

Introduccin
Uso de la propiedad
Page.IsValid
Nota
32 Validacin de entrada de datos de usuario


El siguiente ejemplo muestra el controlador de eventos de un botn. El cdigo
verifica la propiedad IsValid de toda la pgina. No es necesario para una
clusula Else, ya que la pgina ser enviada de vuelta automticamente al
navegador y los controles de validacin mostrarn sus propios mensajes de
error:
Sub cmdSubmit_Click (s As Object, e As EventArgs)
If Page.IsValid Then
Message.Text = "Page is valid!"
' Perform database updates or other logic here
End If
End Sub

private void cmdSubmit_Click(object s, System.EventArgs e)
{
if (Page.IsValid)
{
Message.Text = "Page is Valid!";
// Perform database updates or other logic here
}
}

Ejemplo
Visual Basic .NET
C#
Validacin de entrada de datos de usuario 33


Uso del control ValidationSummary
Recopila los mensajes de error de todos los controles
de validacin de la pgina
Puede mostrar mensajes de texto y de error
Utilizar Text="*" para indicar la ubicacin del error
<asp:ValidationSummary id="valSummary"
runat="server"
HeaderText="These errors were found:"
ShowSummary="True"
DisplayMode="List"/>
<asp:ValidationSummary id="valSummary"
runat="server"
HeaderText="These errors were found:"
ShowSummary="True"
DisplayMode="List"/>

***************************** use******************************
El control ValidationSummary muestra cuando la propiedad Page.IsValid
devuelve False. Se contacta con cada control de validacin de la pgina y el
control ValidationSummary rene los mensajes de ErrorMessage.
El control ValidationSummary puede mostrar un cuadro de mensaje o un rea
de texto, con un encabezado y una lista de errores, dependiendo del valor
DisplayMode, podemos mostrar la lista de errores como una lista de vietas o
un nico prrafo. Los controles ValidationSummary se ubican normalmente
cerca del botn Submit de forma que todos los mensajes de error sean
fcilmente visibles para el usuario cuando se disparen los controles de
validacin de entrada de datos.
El siguiente cdigo HTML muestra un control ValidationSummary tpico:
<asp:ValidationSummary id="valSummary"
runat="server"
HeaderText="These errors were found:"
ShowSummary="True"
DisplayMode="List" />

Cuando se utiliza el control ValidationSummary, la propiedad Text (si se
utiliza) se muestra en la ubicacin del control de validacin, mientras que la
propiedad ErrorMessage se muestra en la presentacin del control
ValidationSummary.
Normalmente, se muestra una propiedad Text con un asterisco (*) rojo a la
derecha del control de entrada de datos para avisar al usuario de que el control
de entrada de datos no se ha cumplimentado correctamente. En el control
ValidationSummary, se muestra una propiedad ErrorMessage, con una
descripcin del error de entrada de datos, que normalmente se ubica cerca del
evento que dispara el control.
Introduccin
Muestra mensajes de
texto y de error
Uso de * para localizar
errores
34 Validacin de entrada de datos de usuario


La siguiente ilustracin muestra un par de campos de contrasea con varios
controles de validacin de entrada de datos y un control ValidationSummary.


Ejemplo
Validacin de entrada de datos de usuario 35


Demostracin: uso de la propiedad Page.IsValid y del control
ValidationSummary
Abrir una pgina ASP.NET con mltiples
cuadros de texto y controles de
validacin
Agregar un control ValidationSummary
Agregar un scriptque utilice la propiedad
Page.IsValid

***************************** use******************************
En esta demostracin, veremos cmo utilizar el mtodo Page.IsValid y el
control Validation Summary.
Los campos de esta demostracin se encuentran en el proyecto Demo06VB o
Demo06CS que se pueden encontrar dentro del fichero demos06.zip
Ejecutar esta demostracin
1. Abrir el formulario Web Form denominado ValidationSummary.aspx en
Visual Studio .NET.
La pgina ya contiene dos controles TextBox. Hay un control
RequiredFieldValidator y un control RangeValidator, que validan el
primer cuadro de texto. La pgina tambin contiene un control
RequiredFieldValidator y un control RegularExpressionValidator, que
validan el segundo cuadro de texto. Adems, hay un botn Submit y un
Label.
2. Arrastrar el control ValidationSummary a la parte inferior de la pgina.


3. Hacer doble clic en el control Button para abrir el controlador de eventos
Click, y eliminar el comentario del siguiente cdigo:

If Page.IsValid Then
lblMessage.Text = "Page is valid!"
End If

Introduccin
Abrir una pgina
ASP.NET
Agregar un control
Validation
Summary
Agregar cdigo para
probar la validez de la
pgina
Visual Basic .NET
C#
36 Validacin de entrada de datos de usuario


if (Page.IsValid)
{
lblMessage.Text = "Page is valid!";
}

4. Guardar, generar y examinar la pgina ValidationSummary.aspx.
Deberamos ver el mensaje Page is valid! cuando toda la pgina sea vlida.




ndice
Descripcin 1
Leccin: agregar controles de usuario a un formulario
Web Form ASP.NET 2
Leccin: crear controles de usuario 12

Creacin de controles de usuario
Creacin de controles de usuario 1

Descripcin
Agregar controles de usuario a un formulario Web
FormASP.NET
Crear controles de usuario

***************************** ******************************
Adems de Hypertext Markup Language (HTML) y los controles de servidor
Web, podemos crear fcilmente nuestros propios controles que pueden ser
reutilizados en las aplicaciones Web. Estos controles se denominan controles de
usuario. Los controles de usuario proporcionan un modo fcil de reutilizar
componentes habituales de la interfaz de usuario y cdigo en una aplicacin
Web.
En este mdulo, aprenderemos a:
Agregar un control de usuario a un formulario MicrosoftASP.NET.
Crear un control de usuario.

Introduccin
Objetivos
2 Creacin de controles de usuario

Leccin: agregar controles de usuario a un formulario
Web FormASP.NET
Ques uncontrol de usuario?
Por quutilizar controles deusuario?
Prctica: hacer unalistadecontroles deusuario
Agregar uncontrol deusuario
Demostracin: Crear uncontrol deusuario

***************************** ******************************
Un control de usuario es una pgina ASP.NET que otro formulario Web Form
ASP.NET puede importar como un control de servidor. De modo similar a los
controles de servidor Web, que son componentes que se ejecutan en el servidor,
los controles de usuario proporcionan interfaz de usuario y dems
funcionalidades relacionadas. Una vez creado un control de usuario, ste puede
ser utilizado por otras pginas de la misma aplicacin Web.
En esta leccin, estudiaremos qu son los controles de usuario, porqu
deberamos pensar en utilizarlos en nuestras aplicaciones Web, cmo
referenciar un control de usuario desde un formulario Web Form ASP.NET, y
cmo acceder a las propiedades de un control de usuario.
En esta leccin, aprenderemos a:
Explicar qu es un control de usuario y por qu deberamos utilizar uno.
Agregar un control de usuario a una pgina ASP.NET.
Acceder a las propiedades de los controles de usuario de una pgina
ASP.NET.

Introduccin
Objetivos de la leccin
Creacin de controles de usuario 3

Qu es un control de usuario?
Los controles de usuario simplifican la reutilizacin de
cdigo y componentes de la IUen una aplicacin Web
Un control de usuario es un control de servidor Web
definido por el usuario con una extensin .ascx
Contiene HTML, pero no las etiquetas <HTML>,
<BODY>, o <FORM>

Contiene cdigo para gestionar sus propios eventos


<%@ Control Language="vb" %>
<%@ Control Language="vb" %>
<%@ Control Language="c#" %>
<%@ Control Language="c#" %>

***************************** ******************************
Los controles de usuario pueden simplificar la reutilizacin de cdigo y
componentes habituales de la interfaz de usuario; por ello, saber qu son y
cmo funcionan es una parte importante del aprendizaje del desarrollo con
ASP.NET.
Los controles de usuario son pginas ASP.NET con una extensin de archivo
.ascx. Los controles de usuario ofrecen un modo fcil de particionar y reutilizar
funcionalidades habituales de la interfaz de usuario en nuestras aplicaciones
Web ASP.NET. Similar a una pgina de un formulario Web Form, podemos
crear estos controles con cualquier editor de texto, o desarrollarlos utilizando
clases de cdigo subyacente. Adems, de forma similar a un formulario Web
Form, los controles de usuario se compilan cuando se solicitan por primera vez
y se almacenan en memoria del servidor para reducir el tiempo de respuesta de
las siguientes peticiones. Sin embargo, a diferencia de los formularios Web
Form, los controles de usuario no pueden ser solicitados de modo
independiente; deben estar incluidos en una pgina Web Form para que puedan
funcionar.

El Microsoft .NET Framework impide que archivos con la extensin de
archivo .ascx puedan ser visualizados en un navegador Web. Es una medida de
seguridad que asegura que el control de usuario no puede ser visualizado como
una pgina ASP.NET independiente.

Un control de usuario est formado por HTML y cdigo, pero como los
controles de usuario son utilizados por formularios Web Forms, no contienen
las etiquetas HTML <HEAD>, <BODY>ni <FORM>. En lugar de ello, estas
Introduccin
Definicin
Nota
Qu hay en un control
de usuario?
4 Creacin de controles de usuario

etiquetas se incluyen en cada formulario Web Form que utilice el control de
usuario.
Cuando un formulario Web Form utiliza un control de usuario, ste ltimo
participa en el ciclo de vida del evento del formulario Web Form. Adems,
como un control de usuario es una pgina ASP.NET, tiene su propia lgica de
pgina. Por ejemplo, un control de usuario puede gestionar su propio postback
en su procedimiento de evento Page_Load.

Los controles de usuario son diferentes de los controles de servidor
personalizados. Para aprender ms sobre la creacin de controles de servidor
personalizados, leer Desarrollo de controles de servidor ASP.NET en la
documentacin de Microsoft Visual Studio .NET.

Al igual que los formularios Web Forms tienen pginas de cdigo subyacente,
los controles de usuario tambin tienen una pgina de cdigo subyacente
asociada. La directiva @ Page se utiliza en los formularios Web Forms para
asociar una pgina de cdigo subyacente, mientras que la directiva @ Control
se utiliza para hacer referencia a una pgina de cdigo subyacente desde una
pgina de control de usuario. La directiva @ Control slo puede utilizarse con
controles de usuario, y nicamente podemos incluir una directiva @ Control
por cada archivo .ascx. Por ejemplo, para hacer referencia a una pgina de
cdigo subyacente de un control de usuario denominada WebUserControl1, en
un proyecto de aplicacin Web denominado test, utilizamos la siguiente
directiva @ Control:
<%@ Control Language="vb" Codebehind="WebUserControl1.ascx.vb"
Inherits="test.WebUserControl1" %>

<%@ Control Language="c#" Codebehind="WebUserControl1.ascx.cs"
Inherits="test.WebUserControl1" %>

La directiva @ Control soporta los mismos atributos que la directiva @
Page, salvo los atributos AspCompat y Trace. Como la directiva @ Control
no utiliza el atributo Trace, si deseamos habilitar el seguimiento para el control
de usuario, debemos aadirlo a la directiva @ Page para la pgina .aspx que
invoca el control de usuario.

Un control de usuario es distinto de un control de servidor Web. Los controles
de servidor Web no slo incluyen controles de tipo formulario, como botones y
cuadros de texto, sino tambin controles especficos como calendarios, etc.

Para ms informacin sobre los controles de servidor Web, ver el
Mdulo Crear un formulario Web Form con Microsoft ASP.NET.

Nota
Controles de usuario y
sus pginas asociados
de cdigo subyacente
Visual Basic .NET
C#
Nota
Control de usuario
frente a control de
servidor Web
Nota
Creacin de controles de usuario 5

Por qu utilizar controles de usuario?
Reutilizar interfaz de usuario y cdigo
Page2.aspx
Control1.ascx
Page1.aspx
Page3.aspx
AplicacinA AplicacinB

***************************** ******************************
Son varias las ventajas de utilizar controles de usuario en nuestras aplicaciones
Web ASP.NET. Los controles de usuario son autocontenidos, pueden utilizarse
muchas veces y pueden escribirse en un lenguaje distinto al de la pgina
principal que los hospeda.
Los controles de usuario se utilizan para numerosas utilidades, como crear
encabezados y barras de navegacin, y para repetir bloques de cdigo en un
proyecto de aplicacin Web.

En las pginas Web Active Server Pages (ASP) tradicionales, la
funcionalidad include de archivos se utiliza para reutilizar cdigo e interfaz de
usuario. En ASP.NET, las pginas de controles de usuario sustituyen la
funcionalidad include de archivos.

Los controles de usuario ofrecen numerosas ventajas en el desarrollo de una
aplicacin Web:
Los controles de usuario son autocontenidos. Proporcionan espacios de
nombres de variables distintos, lo cual significa que ninguno de los mtodos
y propiedades del control de usuario entra en conflicto con ningn mtodo
existente o propiedad de la pgina que lo aloja.
Los controles de usuario pueden utilizarse ms de una vez en la pgina que
los hospeda, sin causar conflictos con propiedades o mtodos.
Los controles de usuario pueden escribirse en un lenguaje distinto del de la
pgina principal. Por ejemplo, un control de usuario escrito en Microsoft
Visual C#puede utilizarse en un formulario Web Form escrito en Microsoft
Visual Basic .NET.
Introduccin
Ventajas de utilizar
controles de usuario
Nota
6 Creacin de controles de usuario

Un nico control de usuario puede ser compartido por todas las pginas de una
aplicacin Web. Sin embargo, las pginas .aspx de una aplicacin Web no
pueden hospedar un control de usuario de otra aplicacin Web. Para utilizar un
control de usuario en varias aplicaciones Web, el control de usuario debe
copiarse a la carpeta raz del directorio virtual de cada aplicacin Web.
Para compartir controles entre mltiples aplicaciones Web, tambin podemos
crear un control Web personalizado, que acta como un control de usuario
compartible. Los controles Web personalizados son ms difciles de crear que
los controles de usuario, ya que, a diferencia de los controles de usuario, los
controles Web personalizados no pueden crearse utilizando las herramientas
visuales de Visual Studio .NET; de este modo, todo el desarrollo debe realizarse
nicamente por cdigo.

Para ms informacin sobre controles de usuario y los controles Web
personalizados, ver Controles de usuario Web y controles Web
personalizados en la documentacin de Visual Studio .NET.

Compartir controles de
usuario
Nota
Creacin de controles de usuario 7

Prctica: hacer una lista de controles de usuario
Los estudiantes:
Crearn una lista de ejemplos sobre
cundo resultaapropiado el uso de
controles de usuario
Tiempo: 5minutos

***************************** ******************************
En esta prctica, generaremos una lista de ideas en las que podramos utilizar
controles de usuario y compartiremos estos ejemplos con el resto de la clase.
Pensar en cuatro ejemplos en los que un control de usuario simplifique el
desarrollo de pginas Web
________________________________________________________________
________________________________________________________________

Introduccin
8 Creacin de controles de usuario

Agregar un control de usuario
Utilizar la directiva @Registerpara incluir un control de
usuario en una pgina ASP.NET
Insertar el control de usuario en un formulario Web Form
Utilizar las propiedades Gety Setdel control de usuario
o
<%@ Register TagPrefix="demo"
TagName="validNum" Src="numberbox.ascx" %>
<%@ Register TagPrefix="demo"
TagName="validNum" Src="numberbox.ascx" %>
<demo:validNum id="num1" runat="server"/>
<demo:validNum id="num1" runat="server"/>
num1.pNum = 5 'uses Set
x = num1.pNum 'uses Get
num1.pNum = 5 'uses Set
x = num1.pNum 'uses Get
num1.pNum = 5; //uses Set
x = num1.pNum; //uses Get
num1.pNum = 5; //uses Set
x = num1.pNum; //uses Get

***************************** ******************************
Podemos ubicar un control de usuario en cualquier formulario Web Form
ASP.NET. La pgina que hace referencia al control de usuario se denomina
host, y el control se incluye en ella.
Los controles de usuario se incluyen en un formulario Web ASP.NET
utilizando la directiva @ Register, como muestra el siguiente cdigo:
<%@ Register TagPrefix="demo" TagName="validNum"
Src="numberbox.ascx" %>

El atributo TagPrefix determina un espacio de nombres nico para el control de
usuario de forma que mltiples controles de usuario con el mismo nombre
pueden diferenciarse entre s. El atributo TagName es el nico nombre para el
control de usuario. El atributo Src es la ruta virtual al archivo del control de
usuario.
Tras registrar el control de usuario con la directiva @ Register, podemos ubicar
la etiqueta del control de usuario en el formulario Web Form al igual que
colocaramos un control de servidor Web normal, incluyendo el uso del atributo
runat="server". El siguiente cdigo de ejemplo agrega dos controles de
usuario a un formulario Web Form:
<demo:validNum id="num1" runat="server"/>
<demo:validNum id="num2" runat="server"/>

Cuando se solicita el formulario Web Form principal, el entorno de ejecucin
compila el archivo del control de usuario y lo pone a disposicin de la pgina.
Introduccin
Incluir controles de
usuario
Uso del control de
usuario
Creacin de controles de usuario 9

En los procedimientos de evento en la pgina host, podemos acceder a las
propiedades del control de usuario agregando declaraciones para el control de
usuario. El siguiente cdigo muestra declaraciones para dos controles de
usuario numberbox:
Protected num1 As numberbox
Protected num2 As numberbox

protected numberbox num1;
protected numberbox num2;

En los ejemplos de cdigo anteriores, numberBox es el nombre de la clase que
implementa el control de usuario. El nombre de variable (num1 o num2) debe
ser el mismo que el atributo id que se utiliza cuando se agrega el control de
usuario al formulario Web Form.
El siguiente ejemplo invoca la propiedad Get de los controles de usuario num1
y num2:
lblSum.Text = (num1.pNum + num2.pNum).ToString()

lblSum.Text = (num1.pNum + num2.pNum).ToString();

El siguiente ejemplo invoca la propiedad Set de los controles de usuario num1
y num2 para mostrar las constantes 5 y 7 en el control de usuario:
num1.pNum = 5
num2.pNum = 7

num1.pNum = 5;
num2.pNum = 7;

Uso de las propiedades
Get y Set
Visual Basic .NET
C#
Visual Basic .NET
C#
Visual Basic .NET
C#
10 Creacin de controles de usuario

Demostracin: crear un control de usuario
Crear un nuevo control de usuario
Crear una propiedad

***************************** ******************************
En esta demostracin, crearemos un control de usuario con Visual Studio .NET.
El cdigo completo para esta demostracin se encuentra en el archivo
numberbox.ascx del proyecto Demo07VB o Demo07CS, que se pueden
encontrar dentro del fichero demos07.zip.
Ejecutar esta demostracin
1. Crear un nuevo proyecto de aplicacin Web o utilizar un proyecto existente.
2. Agregar la pgina beforeuser.aspx al proyecto de aplicacin Web.
Agregar la pgina
carpeta_instalacin\Democode\Mod08VB\beforeuser.aspx al proyecto.
Agregar la pgina
carpeta_instalacin\Democode\Mod08CS\beforeuser.aspx al proyecto.
3. Abrir la pgina y mostrar el cdigo fuente HTML. El cdigo HTML utiliza
la misma combinacin de controles (un cuadro de texto y dos controles de
validacin) en dos lugares.
4. En vista Diseo, agrupar, seleccionar y copiar el primer conjunto del cuadro
de texto y los controles de validacin de la pgina.
5. Crear un nuevo control de usuario aadiendo un nuevo Control de Usuario
Web al proyecto. Denominarlo numberbox.ascx.
6. Mostrar el cdigo HTML de la pgina y observar la directiva @ Control
que ha creado Visual Studio .NET.
7. En la vista Diseo, pegar en el cuadro de texto y en los controles de
validacin.
Introduccin
Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Creacin de controles de usuario 11

8. Abrir la pgina de cdigo subyacente para el nuevo control de usuario.
9. En la pgina de cdigo subyacente denominada numberbox.ascx.vb o
numberbox.ascx.cs, crear una propiedad pblica para el valor del cuadro de
texto, como muestra el siguiente cdigo de ejemplo:
Public Property pNum() As Integer
Get
Return CInt(txtNum1.Text)
End Get
Set(ByVal Value As Integer)
txtNum1.Text = Value.ToString()
End Set
End Property

Observar que cuando se introduce el encabezado de la propiedad pNum,
Visual Studio .NET crea una plantilla para las propiedades Get y Set.
public int pNum
{
get
{
return Convert.ToInt32(txtNum1.Text);
}
set
{
txtNum1.Text = Convert.ToString(value);
}
}

Observar que la propiedad set no toma ningn argumento. El valor pasado
se asigna automticamente a una variable denominada value, accesible para
la propiedad set.
10. Guardar los cambios de la pgina numberbox.ascx.

Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
12 Creacin de controles de usuario

Leccin: crear controles de usuario
Crear un control de usuario
Demostracin: utilizarun control de usuario

***************************** ******************************
Despus de crear un control de usuario, ste puede ser utilizado por otras
pginas de la misma aplicacin Web. En esta leccin, aprenderemos a crear
controles de usuario.
En esta leccin, aprenderemos a:
Crear un control de usuario.
Convertir un formulario Web Form existente en un control de usuario.

Introduccin
Objetivos de la leccin
Creacin de controles de usuario 13

Crear un control de usuario
Dos mtodos paralacreacindecontroles deusuario:
Crear un nuevo control de usuario utilizando Visual Studio .NET
Convertir una pgina ASP.NET existente en un control de usuario
Lapaginahostinteractaconel control utilizandopropiedades
Lapginahostdeberautilizar el flujodepresentacin
Public Property pNum() As Integer
Get
Return Convert.ToInt32(txtNum.Text)
End Get
Set (ByVal value As Integer)
txtNum.Text = CStr(value)
End Set
End Property
Public Property pNum() As Integer
Get
Return Convert.ToInt32(txtNum.Text)
End Get
Set (ByVal value As Integer)
txtNum.Text = CStr(value)
End Set
End Property
public int pNum
{
get
{
return
Convert.ToInt32(txtNum.Text);
}
set
{
txtNum.Text =
Convert.ToString(value);
}
}
public int pNum
{
get
{
return
Convert.ToInt32(txtNum.Text);
}
set
{
txtNum.Text =
Convert.ToString(value);
}
}

***************************** ******************************
Podemos crear un nuevo control de usuario o convertir un formulario Web
Form ASP.NET existente en un control de usuario.
Crear un nuevo control de usuario
1. Hacer clic con el botn derecho en un proyecto de aplicacin Web en el
Explorador de soluciones de Visual Studio .NET, seleccionar Agregar, y
hacer clic en Agregar control de usuario Web.
2. Poner al control un nombre y hacer clic en Abrir.
Se crea una pgina con una extensin .ascx.

La pgina se crea con la presentacin de pgina establecida en modo de
presentacin de flujo, y una directiva@ Control. Podemos arrastrar un control
de panel de presentacin en rejilla (Grid Layout Panel) desde la seccin de
HTML al cuadro de herramientas si necesitamos generar el control de usuario
con una presentacin de rejilla en lugar de presentacin de flujo.

3. Agregar los elementos de la interfaz de usuario. Generamos la pgina del
mismo modo que un formulario Web ASP.NET, agregando elementos de la
interfaz de usuario desde el Cuadro de herramientas de Visual Studio .NET
o escribiendo el cdigo HTML.

Cuando generamos la parte de interfaz de usuario de un control de
usuario en Visual Studio .NET, debemos utilizar presentacin de flujo en
lugar de presentacin de rejilla.

Introduccin
Crear un nuevo control
de usuario
Nota
Nota
14 Creacin de controles de usuario

4. Agregar procedimientos de evento para elementos de interfaz de usuario y
los eventos de pgina. Al igual que la creacin de cualquier otra pgina
ASP.NET, agregamos procedimientos de evento a la pgina de cdigo
subyacente.
5. Crear propiedades para interactuar con la pgina host. Las propiedades
permiten al formulario Web Form que hospeda el control leer y escribir
valores en los elementos de la interfaz de usuario del control de usuario. Las
propiedades del control de usuario ocultan la implementacin del control.
Convertir un formulario Web Form existente en un control de usuario
6. Eliminar todas las etiquetas <HTML>, <BODY>y <FORM>.
7. Si hay una directiva @ Page existente en la pgina, modificarla a una
directiva @ Control. Aunque la mayora de atributos @ Page tambin estn
soportados por la directiva@ Control, comprobar que no hay atributos no
soportados.

Para ms informacin sobre los atributos soportados por las directivas
@ Page y @ Control, ver Sintaxis de directivas en la documentacin de
Visual Studio .NET.

8. Agregar un atributo className a la directiva@ Control. El atributo
className permite que control de usuario sea fuertemente tipado cuando se
agrega a una pgina.
9. Cambiar el nombre del archivo a un nombre que represente su
funcionalidad, y cambiar la extensin de archivo .aspx por .ascx.

La pgina host es el formulario Web Form que incluir el control de usuario.
Esta pgina debera estar en modo de presentacin de flujo para evitar
solapamientos entre el contenido del control de usuario y el contenido de la
pgina.
La pgina host no tiene acceso directo a los elementos de la interfaz de usuario
que estn en un control de usuario. Por tanto, utilizamos propiedades pblicas
en un control de usuario para exponer los elementos de la interfaz de usuario
que se encuentran en el control de forma que el host puede utilizar los
elementos de la interfaz de usuario.
Por ejemplo, si un control de usuario est formado por dos cuadros de texto,
necesitaramos una propiedad para cada cuadro de texto para que la pgina host
pueda leer y escribir el valor de cada cuadro de texto.
El siguiente cdigo es la parte HTML de un control de usuario Visual Basic
.NET que incluye un cuadro de texto y dos controles de validacin de entrada
de datos:
Convertir un formulario
Web Formexistente en
un control de usuario
Nota
Pgina host
Creacin de controles de usuario 15

<%@ Control Language="vb" Codebehind="WebUserControl1.ascx.vb"
Inherits="test.WebUserControl1" %>
<asp:textbox id="txtNum" runat="server" />
<asp:RequiredFieldValidator id="txtNumValidator"
runat="server"
controlToValidate="txtNum"
errorMessage="You must enter a value"
display="dynamic">
</asp:RequiredFieldValidator>
<asp:RangeValidator id="txtNumRngValidator" runat="server"
controlToValidate="txtNum"
errorMessage="Please enter a number between 0 and 99"
type="Integer"
minimumValue="0"
maximumValue="99"
display="dynamic">
</asp:RangeValidator>

Para exponer los valores del cuadro de texto en el host, debemos crear una
propiedad pblica. Por ejemplo, el siguiente cdigo de la pgina de cdigo
subyacente crea una propiedad denominada pNum. La propiedad pNum
expone la propiedad Text del control del cuadro de texto en el control de
usuario:
Public Property pNum() As Integer
Get
Return CInt(txtNum.Text)
End Get
Set(ByVal Value As Integer)
txtNum.Text = Value.ToString()
End Set
End Property

public int pNum
{
get
{
return Convert.ToInt32(txtNum1.Text);
}
set
{
txtNum1.Text = Convert.ToString(value);
}
}

Todas las variables, propiedades y mtodos pblicos de un control de usuario se
convierten en propiedades y mtodos del control en la pgina host. Desde los
ejemplos de cdigo anteriores, podemos acceder a la propiedad pNum como un
atributo de una etiqueta de la pgina host. Si el control de usuario se denomina
userText1, podemos leer y escribir la propiedad userText1.pNum. Del mismo
modo, si creamos una funcin pblica en el control de usuario, se convierte en
un mtodo que puede ser utilizado desde la pgina host.
Visual Basic .NET
C#
16 Creacin de controles de usuario

Demostracin: uso de un control de usuario
Insertar un control de usuario en una
pgina
Utilizar los controles de usuario en la
pgina de cdigo subyacente

***************************** ******************************
En esta demostracin, veremos cmo utilizar un control de usuario desde una
pgina host.
El cdigo completo para la demostracin de Visual Basic .NET se encuentra en
el archivo Demo07VB\afteruser.aspx.
El cdigo completo para la demostracin de Visual C#se encuentra en el
archivo Demo07CS\afteruser.aspx.
Ambos archivos pueden encontrarse dentro del fichero demos07.zip.

Esta demostracin se aade a la primera demostracin de este mdulo,
Crear un control de usuario.

Utilizar un control de usuario en una nueva pgina ASP.NET
1. Editar la pgina beforeuser.aspx.
2. Borrar los dos conjuntos de cuadros de texto y controles de validacin (seis
controles en total).
3. Mediante una operacin de arrastrar y soltar, colocar el control de usuario
numberbox.ascx desde el Explorador de soluciones en la ubicacin del
primer conjunto de controles en el formulario Web Form que acabamos de
borrar.
4. Visualizar el cdigo HTML de la pgina; Visual Studio .NET ha agregado
la directiva @ Register, junto con la etiqueta para el control de usuario,
como muestra el siguiente cdigo de ejemplo:
Introduccin
Nota
Creacin de controles de usuario 17

<%@ Register TagPrefix="uc1" TagName="numberbox"
Src="numberbox.ascx" %>
...
<uc1:numberbox id=Numberbox1 runat="server">
</uc1:numberbox>
...
5. Colocar un segundo control numberbox.ascx en el formulario Web Form
beforeuser.aspx en la ubicacin del segundo conjunto de controles que
acabamos de borrar.
Visual Studio .NET agrega el siguiente cdigo HTML para crear el control
de usuario:
<uc1:numberbox id=Numberbox2 runat="server">
</uc1:numberbox>

6. En la pgina de cdigo subyacente del archivo beforeuser.aspx, agregar
declaraciones para los dos nuevos controles:
Protected Numberbox1 As numberbox
Protected Numberbox2 As numberbox

protected numberbox Numberbox1;
protected numberbox Numberbox2;


Si el nombre de nuestro proyecto no es Mod08CS o Mod08VB,
deberamos cambiar el nombre del espacio de nombres en beforeuser.aspx.cs o
.vb para que coincida con el nombre del proyecto.

7. Cambiar el procedimiento de evento del botn Compute para leer los
valores de los controles de usuario:
Sub Button1_Click(s As Object, e As EventArgs)
If Page.IsValid Then
lblSum.Text = _
CStr(Numberbox1.pNum + Numberbox2.pNum)
End If
End Sub

private void Button1_Click(object sender, System.EventArgs
e)
{
if (Page.IsValid)
lblSum.Text = Convert.ToString(Numberbox1.pNum +
Numberbox2.pNum);
}

8. Generar y examinar la pgina beforeuser.aspx.
9. Visualizar el cdigo fuente HTML en el navegador.
10. Observar cmo los controles de usuario se representan en HTML.
11. En el control de usuario numberbox.ascx, agregar cdigo de inicializacin al
procedimiento de evento Page_Load:


Visual Basic .NET
Visual C#
Nota
Visual Basic .NET
C#:
18 Creacin de controles de usuario

If Not Page.IsPostBack Then
txtNum1.Text = "0"
End If

if (!Page.IsPostBack)
txtNum1.Text = "0";

12. Generar y examinar la pgina beforeuser.aspx.
13. Ahora, el control de usuario tiene un valor inicial de 0.
Visual Basic .NET
C#
1

Prctica A: Crear controles de usuario
Medical
Medical.aspx
Medical
Medical.aspx
Benefits
Home Page
Default.aspx
Benefits
Home Page
Default.aspx
Life Insurance
Life.aspx
Life Insurance
Life.aspx
Retirement
Retirement.aspx
Retirement
Retirement.aspx
Dental
Dental.aspx
Dental
Dental.aspx
Dentists
Doctors
Doctors.aspx
Doctors
Doctors.aspx
Doctors
Logon Page
Login.aspx
Logon Page
Login.aspx
Registration
Register.aspx
Registration
Register.aspx
Coho
Winery
Prospectus
Prospectus.aspx
Prospectus
Prospectus.aspx
XML Web
Service
dentalService1.asmx
XML Web
Service
dentalService1.asmx
Page Header
Header.ascx
Page Header
Header.ascx
ASPState
tempdb
LabWeb
Application
User Control
namedate.ascx
User Control
namedate.ascx
Menu
Component
Class1.vb or Class1.cs
Menu
Component
Class1.vb or Class1.cs
XML
Files
Web.
config

*****************************illegal for non-trainer use******************************
En este laboratorio, aprenderemos a:
Crear un control de usuario.
Utilizar un control de usuario en un formulario Web Form con Microsoft
ASP.NET.

Este laboratorio se centra en los conceptos de este mdulo. Por ello,
podra no cumplir las recomendaciones de seguridad de Microsoft.

Para trabajar en este laboratorio, es necesario tener:
Conocimientos sobre cmo utilizar controles Web de servidor en un
formulario Web Form ASP.NET.
Conocimientos sobre cmo utilizar los controles de validacin en un
formulario Web Form.
Conocimientos sobre cmo crear procedimientos de eventos para controles
en un formulario Web Form.
Conocimientos sobre cmo crear una propiedad en Microsoft Visual Basic
.NET o C#.

Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios de
este curso, crearemos un sitio Web que permita a los empleados seleccionar y
configurar los beneficios que elijan.
En muchas pginas del sitio Web de la compaa, se recoge el nombre y fecha
de nacimiento del usuario. En este laboratorio, crearemos un control de usuario
para recoger esa informacin y utilizar el control de usuario en la pgina
medical.aspx del sitio Web.
Objetivos
Nota
Requisitos previos
Escenario
Tiempo estimado para
completar el laboratorio:
30 minutos
2 Error! No hay texto con el estilo especificado en el documento.

Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits. Si no se han creado estos proyectos, realizar los
siguientes pasos:
Crear la solucin LabApplication

Realizar este procedimiento nicamente si no se ha creado un
archivo de solucin LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solucin en blanco
denominada LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Solucin en
blanco.
b. En el cuadro de dilogo Nuevo proyecto, escribir LabApplication en el
cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto Benefits, o si se ha eliminado.

1. Crear un nuevo proyecto de aplicacin Web ASP.NET, denominado
BenefitsVB o BenefitsCS, en la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic o Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Aplicacin Web ASP.NET,
establecer la ubicacin en http://localhost/BenefitsVB para el proyecto
Visual Basic .NET o en http://localhost/BenefitsCS para el proyecto
Visual C#.
d. Hacer clic en Agregar a Solucin, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solucin, es importante el uso de
maysculas en el nombre del proyecto. Probablemente, utilizaremos algunos
formularios Web Forms ya generados en ste y en otros laboratorios, por ello,
debemos verificar que hemos escrito con maysculas el nombre del proyecto
Benefits. Pueden crearse dos versiones del proyecto; BenefitsVB sera una
solucin Visual Basic .NET y BenefitsCS sera una solucin Visual C#.


Importante
Importante
Precaucin
3

Actualizar el proyecto Benefits
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente:
a. Ir a la carpeta VB\Starter\BenefitsVB para los archivos de Visual Basic
.NET.
b. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsVB, hacer clic en Todos los archivos.
a. Ir a la carpeta CS\Starter\BenefitsCS para los archivos de Visual C#.
b. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsCS, hacer clic en Todos los archivos.
Estas carpetas pueden encontrarse dentro del fichero labs07.zip
3. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
4. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.

Crear la biblioteca de clases BenefitsList

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto BenefitsList, o si se ha eliminado.

1. Crear un nuevo proyecto de biblioteca de clases Visual Basic .NET con el
nombre BenefitsListVB o BenefitsListCS, y agregarlo a la solucin
LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. Crear el proyecto de biblioteca de clases.
En el cuadro de dilogo Nuevo proyecto, hacer clic en Proyectos de
Visual Basic en la lista Tipos de proyecto, hacer clic en Biblioteca de
clases en la lista Plantillas, establecer Name como BenefitsListVB,
hacer clic en Agregar a solucin, y hacer clic en Aceptar.
En el cuadro de dilogo Nuevo proyecto, hacer clic en Proyectos de
Visual C# en la lista Tipos de proyecto, hacer clic en Biblioteca de
clases en la lista Plantillas, establecer Name como BenefitsListCS,
hacer clic en Agregar a solucin, y hacer clic en Aceptar.

Verificar que se han escrito correctamente las maysculas del
proyecto BenefitsList.


Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Importante
Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Precaucin
4 Error! No hay texto con el estilo especificado en el documento.

Actualizar el proyecto BenefitsList
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
1. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente.
2. Copiar archivos de la carpeta Labfiles.
Ir a la carpeta VB\Starter\BenefitsListVB.
En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsListVB, seleccionar Todos los archivos (*.*).
Ir a la carpeta CS\Starter\BenefitsListCS.
En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsListCS, seleccionar Todos los archivos (*.*).
Estas carpetas pueden encontrarse dentro del fichero labs07.zip
3. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
4. Hacer clic en S a la pregunta de sobrescribir o recargar los archivos.

Crear una referencia al componente BenefitsList del proyecto Benefits
1. En el proyecto BenefitsVB de la solucin LabApplication, completar los
siguientes pasos para agregar una referencia al componente BenefitsList
que acabamos de crear:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB en el
Explorador de soluciones y hacer clic en Agregar referencia.
b. En el cuadro de dilogo Agregar referencia, en la pestaa Proyectos,
hacer doble clic en el proyecto BenefitsListVB.
c. En la lista Componentes seleccionados, seleccionar el componente
BenefitsListVB, y hacer clic en Aceptar.
El componente se agrega a la carpeta Referencias en el Explorador de
soluciones.
1. En el proyecto BenefitsCS de la solucin LabApplication, completar los
siguientes pasos para agregar una referencia al componente BenefitsList
que acabamos de crear:
a. Hacer clic con el botn derecho en el proyecto BenefitsCS en el
Explorador de soluciones y hacer clic en Agregar referencia.
b. En el cuadro de dilogo Agregar referencia, en la pestaa Proyectos,
hacer doble clic en el proyecto BenefitsListCS.
c. En la lista Componentes seleccionados, seleccionar el componente
BenefitsListCS, y hacer clic en Aceptar.
El componente se agrega a la carpeta Referencias en el Explorador de
soluciones.

Para el proyecto Visual
Basic .NET:
Para el proyecto Visual
C#:
Para el proyecto Visual
Basic .NET:
Para el proyecto Visual
C#:
5

Ejercicio 1
Crear un control de usuario
En este ejercicio, crearemos un control de usuario desde los controles Name y
Birth Date de la pgina life.aspx.
Crear la interfaz de usuario
1. Utilizando Visual Studio .NET, abrir la solucin LabApplication.
2. Agregar un nuevo control de usuario al proyecto BenefitsVB o BenefitsCS
denominado namedate.ascx:
a. Hacer clic con el botn derecho en el proyecto Benefits, seleccionar
Agregar, y hacer clic en Agregar control de usuario Web.
b. En el cuadro de dilogo Agregar nuevo elemento, escribir
namedate.ascx en el campo Nombre, y hacer clic en Abrir.
3. Abrir la pgina life.aspx del proyecto Benefits.
4. Copiar los controles Label, TextBox, y los controles de validacin para los
campos de entrada del nombre y fecha de nacimiento (siete controles en
total).
5. Pegar los controles que se acaban de copiar en la pgina namedate.ascx.
6. Utilizando la tecla Intro y la barra espaciadora, organizar los controles para
que tenga un aspecto similar al de la siguiente ilustracin.


6 Error! No hay texto con el estilo especificado en el documento.

Crear las propiedades del control de usuario
1. Abrir la pgina de cdigo subyacente de la pgina namedate.ascx,
denominada namedate.ascx.vb o namedate.ascx.cs.
2. Agregar una propiedad denominada strName de tipo String para leer y
escribir la propiedad Text del control txtName.
El cdigo debera ser similar al siguiente:
Public Property strName() As String
Get
Return txtName.Text
End Get
Set(ByVal Value As String)
txtName.Text = Value
End Set
End Property

public String strName
{
get
{
return txtName.Text;
}
set
{
txtName.Text = value;
}
}

Cuando se utilice C#, las palabras set y get se especifican en
minsculas.

3. Agregar una propiedad denominada dtDate para leer y escribir la propiedad
Text del control txtBirth.
Agregar una propiedad denominada dtDate de tipo Date para leer y escribir
la propiedad Text del control txtBirth.
Agregar una propiedad denominada dtDate de tipo DateTime para leer y
escribir la propiedad Text del control txtBirth.
El tipo de datos de la propiedad dtDate es Date para Visual Basic .NET y
DateTime para C#, pero el control txtBirth guarda un valor String. Por
tanto, en la propiedad Get, es necesario convertir el valor del control a un
tipo de datos Date, y en la propiedad Set, es necesario convertir el valor de
entrada a un tipo de datos String.
Visual Basic .NET
C#
Precaucin
Visual Basic .NET
C#
7

El cdigo debera ser similar al siguiente:
Public Property dtDate() As Date
Get
Return CDate(txtBirth.Text)
End Get
Set(ByVal Value As Date)
txtBirth.Text = Value.ToString()
End Set
End Property

public DateTime dtDate
{
get
{
return Convert.ToDateTime(txtBirth.Text);
}
set
{
txtBirth.Text = value.ToString();
}
}

4. Guardar los cambios.
Guardar los cambios de los archivos namedate.ascx y namedate.ascx.vb.
Guardar los cambios de los archivos namedate.ascx y namedate.ascx.cs
Probaremos el control de usuario en el Ejercicio 2.

Visual Basic .NET
C#
Visual Basic .NET
C#
8 Error! No hay texto con el estilo especificado en el documento.

Ejercicio 2
Uso del control de usuario
En este ejercicio, utilizaremos el control de usuario de la pgina medical.aspx
para solicitar el nombre y la fecha de nacimiento del usuario.
Ubicar un control de usuario en la pgina medical.aspx
1. Abrir la pgina medical.aspx del proyecto BenefitsVB o BenefitsCS.
2. Mediante una operacin de arrastrar y soltar, ubicar el control
namedate.ascx del Explorador de soluciones en la primera fila de la tabla de
la pgina medical.aspx.
La pgina debera tener un aspecto similar a la siguiente ilustracin.

3. Visualizar el cdigo HTML creado.
Introducir la directiva @ Register creada por Visual Studio .NET en las
siguientes lneas.
_____________________________________________________________
_____________________________________________________________
Introducir el cdigo HTML creado por Visual Studio .NET para el control
de usuario en las siguientes lneas.
_____________________________________________________________
_____________________________________________________________
4. Abrir la pgina de cdigo subyacente del formulario Web Form
medical.aspx, medical.aspx.vb o medical.aspx.cs.
9

5. Declarar una variable Protected denominada Namedate1 de tipo de datos
namedate.
Protected Namedate1 As BenefitsVB.namedate

protected BenefitsCS.namedate Namedate1;

6. Crear un procedimiento de evento Click para el botn Save.
Cuando el usuario haga clic en Save, el procedimiento de evento debera
devolver los valores del nombre y fecha de nacimiento del control de
usuario al control Label2 de la pgina medical.aspx.
El cdigo debera ser similar al siguiente:
Private Sub cmdSave_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdSave.Click

Label2.Text = Namedate1.strName & " born on " & _
Namedate1.dtDate.ToString()
End Sub

private void cmdSave_Click(object sender, System.EventArgs
e)
{
Label2.Text = Namedate1.strName + " born on " +
Namedate1.dtDate.ToString();
}

7. Generar y examinar la pgina medical.aspx.
8. En el explorador, introducir un nombre y una fecha de nacimiento, y hacer
clic en Guardar.



Visual Basic .NET
C#
Visual Basic .NET
C#



ndice
Descripcin 1
Leccin: introduccin al uso de ADO.NET 2
Leccin: conectar a una base de datos 6
Leccin: acceso a datos con DataSets 14
Leccin: utilizar mltiples tablas 34
Leccin: acceder a datos con DataReaders 44

Acceso a datos con Microsoft
ADO.NET
Acceso a datos con Microsoft ADO.NET 1


Descripcin
Introduccin a ADO.NET
Conectar a una base de datos
Acceder a datos con DataSets
Utilizar mltiples tablas
Acceder a datos con DataReaders

*****************************
Crear un sitio Web dinmico que responda a las peticiones de los usuarios con
datos personalizados puede requerir que vinculemos nuestra aplicacin Web a
varias fuentes de datos. MicrosoftADO.NET es la herramienta que nos
permite acceder programticamente a fuentes de datos desde un formulario
Web Form.
En este mdulo, aprenderemos a utilizar ADO.NET para agregar acceso a datos
a nuestra aplicacin Web con Microsoft ASP.NET.
En esta leccin, aprenderemos a:
Describir el modelo de objetos de ADO.NET para acceder a datos.
Crear conexiones seguras a una base de datos Microsoft SQL Server


utilizando los objetos SqlConnection y SqlDataAdapter.
Utilizar objetos DataSet para soportar los requerimientos de
almacenamiento y manipulacin de datos locales de los formularios Web
Forms.
Almacenar mltiples tablas de datos en un objeto DataSet, y mostrar los
datos en controles DataGrid.
Leer datos programticamente de una base de datos SQL utilizando un
objeto SqlDataReader.

Introduccin
Objetivos de la leccin
2 Acceso a datos con Microsoft ADO.NET


Leccin: introduccin al uso de ADO.NET
Multimedia: modelode objetos ADO.NET
Utilizar DataSetsfrente a DataReaders
Prctica: cundo utilizar DataSetso DataReaders

*****************************
ADO.NET est diseado para cargar datos desde una fuente de datos y trabajar
con esos datos en modo desconectado. Este estado de desconexin permite al
formulario Web Form operar de forma semi-independiente de las fuentes de
datos, reduciendo as el trfico de red. ADO.NET utiliza Extensible Markup
Language (XML) como formato universal de transmisin de datos, lo cual
garantiza la interoperabilidad con cualquier plataforma donde est disponible
un parser XML.
En esta leccin, estudiaremos el uso del modelo de objetos de ADO.NET para
acceder a datos. Tambin estudiaremos cmo utilizar los objetos DataSet y
DataReader para acceder a datos.
En esta leccin, aprenderemos a:
Describir el acceso a datos de los objetos DataSet y DataReader.
Escoger entre los objetos DataSet y DataReader, dependiendo de las
necesidades de acceso a datos de una aplicacin Web.

Introduccin
Objetivos de la leccin
Acceso a datos con Microsoft ADO.NET 3


Uso de DataSets frente a DataReaders
Soportado por las herramientas
de Visual Studio .NET
Acceso ms lento
Slo hacia delante
Vinculado a un nico control
Basado en una instruccin SQL
de una base de datos
Slo lectura
Codificacin manual
Acceso ms rpido
Bsqueda de datos hacia
delante y hacia atrs
Vinculado a mltiples controles
Incluye mltiples tablas de
distintas bases dedatos
Acceso lectura/escritura a
datos
DataReader DataSet
Desconectado Conectado

*****************************
Los objetos DataSet son objetos complejos que nos permiten almacenar
mltiples tablas de datos DataTables desde una fuente de datos. Los objetos
DataSet son como una base de datos virtual ubicada dentro de una aplicacin
Web. Los objetos DataSet tambin pueden contener relaciones entre los datos
de las DataTables, y pueden utilizar esas relaciones para recuperar datos.
Los objetos DataReader son objetos ligeros que se utilizan para leer datos
desde una fuente de datos; los objetos DataReader proporcionan acceso slo
hacia delante (forward-only) y de slo lectura (read-only) a los datos de una
base de datos.
La eleccin entre utilizar objetos DataSet u objetos DataReader debera
basarse en el uso previsto para los datos. Normalmente, los objetos
DataReader se utilizan para leer datos en situaciones en las que es necesario el
acceso una nica vez, y de solo lectura, como cuando accedemos a una
contrasea almacenada, o se cumplimenta un control enlazado a una lista. Los
objetos DataSet se utilizan para un acceso a datos ms complejo, como el
acceso a todo el historial de pedidos de un cliente.
Algunos de los aspectos relativos al acceso a datos que se deben tener en cuenta
a la hora de decidir entre objetos DataSet y DataReader incluyen:
Acceso a datos
Si nuestra intencin es leer y escribir a nuestra fuente de datos, debemos
utilizar un objeto DataSet. Los objetos DataReader son conexiones de slo
lectura y deberan utilizarse nicamente cuando los datos vayan a utilizarse
en una situacin de slo lectura.
Acceso a mltiples bases de datos
Si nuestra intencin es combinar tablas de una o ms bases de datos,
debemos utilizar un objeto DataSet. Los objetos DataReader se basan en
una nica instruccin SQL de una sola base de datos.
Enlace a controles
Introduccin
Uso de DataSets y
DataReaders
4 Acceso a datos con Microsoft ADO.NET


Si nuestra intencin es enlazar los datos a ms de un control, debemos
utilizar un objeto DataSet. Los objetos DataReader slo pueden vincularse
a un nico control.
Modo conexin
Si nuestra intencin es trabajar en un modo desconectado, debemos utilizar
un objeto DataSet. Los objetos DataReader deben ejecutarse en modo
conectado.
Bsqueda (scanning) de datos
Si nuestra intencin es buscar los datos hacia atrs y hacia delante, debemos
utilizar un objeto DataSet. Los objetos DataReader buscan hacia adelante a
medida que los datos fluyen desde la base de datos.
Velocidad de acceso
Si necesitamos acceso de alta velocidad a nuestra fuente de datos,
utilizaremos un objeto DataReader. Los objetos DataSet son ms lentos
que los objetos DataReader en el acceso a una base de datos, debido a que
los objetos DataSet almacenan los datos en un objeto del servidor Web.
Tambin la sobrecarga es mayor en la creacin del objeto DataSet debido a
la capacidad de leer y escribir datos y bsqueda hacia delante y hacia atrs.
Los objetos DataReader son ms rpidos debido a la naturaleza del objeto
ms ligera. Hay muy poca sobrecarga para el objeto DataReader, ya que
ste trabaja slo hacia delante y slo de lectura.
Soporte de herramientas
Si nuestra intencin es utilizar Microsoft Visual Studio .NET para crear la
conexin a datos, utilizaremos objeto DataSet. Con los objetos DataSet,
podemos elegir entre escribir nuestro propio cdigo o utilizar el cdigo
mquina de Visual Studio .NET. Con los objetos DataReader, debemos
escribir todo el cdigo de soporte.

Acceso a datos con Microsoft ADO.NET 5


Prctica: cundo utilizar DataSets o DataReaders
Los estudiantes:
Seleccionarn la mejor opcin de acceso
a datos para determinados escenarios
Tiempo: 5 minutos

*****************************
Leer los siguientes escenarios, y decidir si es mejor utilizar un objeto
DataSet o un objeto DataReader
Deseamos obtener informacin de dos tablas que se encuentran en dos bases
de datos distintas, y mostrar las tablas al usuario.
____________________________________________________________
____________________________________________________________
Deseamos obtener informacin de una tabla en una base de datos, permitir
al usuario modificar los datos y almacenar esos cambios en la base de datos.
____________________________________________________________
____________________________________________________________
Deseamos obtener informacin de dos tablas de la misma base de datos y
mostrar esa informacin al usuario.
____________________________________________________________
____________________________________________________________
Deseamos obtener informacin de una tabla de una base de datos y dejar al
usuario visualizar los datos en mltiples configuraciones distintas.
____________________________________________________________
____________________________________________________________

6 Acceso a datos con Microsoft ADO.NET


Leccin: conexin a una base de datos
Seguridad SQL Server
Crear la conexin
Demostracin: establecer la seguridad SQL Server

*****************************
El primer paso en el uso de una base de datos para soportar nuestra aplicacin
Web es crear una conexin segura a la base de datos. Las conexiones no
seguras pueden exponer a ataques mal intencionados tanto la aplicacin Web
como la base de datos.
En esta leccin, aprenderemos a crear conexiones seguras a una base de datos
SQL Server utilizando los objetos SqlConnection y SqlDataAdapter.
En esta leccin, aprenderemos a:
Explicar la diferencia entre el modo mixto y la autenticacin slo Windows.
Crear una conexin, con autenticacin slo Windows, a una base de datos
SQL Server.

Introduccin
Objetivos de la leccin
Acceso a datos con Microsoft ADO.NET 7


Seguridad SQL Server
Cliente Cliente
Enviar el nombre de
usuario y contrasea
en texto claro.
No enviar el nombre de
usuario y contrasea.
Enviar slo que el
usuario ha sido
autenticado.
Autenticacin
modo mixto
Autenticacin
modo mixto
Autenticacin
slo Windows
Autenticacin
slo Windows
Servidor SQL
Slo la cuenta ASPNET
tiene concedido acceso
Servidor SQL
Slo la cuenta ASPNET
tiene concedido acceso
Servidor Web
Autenticacin Windows
Servidor Web
Autenticacin Windows
o
o
Servidor SQL
Cada cuenta de usuario se
agrega a grupo loginde SQL Server
Servidor SQL
Cada cuenta de usuario se
agrega a grupo loginde SQL Server
Servidor Web
Configuracin ASP.NET
predeterminada
Servidor Web
Configuracin ASP.NET
predeterminada
Aqu est el
nombre de usuario
y la contrasea

*****************************
Desde la perspectiva del usuario, el acceso a datos desde una base de datos SQL
Server es un proceso en dos pasos. En primer lugar, el usuario enva una
peticin a la aplicacin Web, y sta se conecta a la base de datos SQL Server
para satisfacer la solicitud. Existen dos mtodos principales para que una
aplicacin Web se conecte a una base de datos SQL Server: autenticacin en
modo mixto y autenticacin en modo slo Windows. El mtodo ms utilizado
es la autenticacin slo Windows.
La autenticacin en modo mixto utiliza la configuracin predeterminada de
ASP.NET y de la aplicacin Web. Cada usuario de la aplicacin Web debe
tener una cuenta de usuario aadida al grupo logins de SQL Server. El punto
dbil de la autenticacin en modo mixto es que los nombres de usuario y las
contraseas se envan al equipo que ejecuta SQL Server en cdigo HTML no
encriptado. Estos datos expuestos podran permitir a terceros obtener las
credenciales de inicio de sesin. Adems, es necesario administrar cuentas de
usuario tanto en el servidor Web como en el equipo que ejecuta SQL Server.
Para utilizar la autenticacin en modo mixto, configurar SQL Server en modo
de autenticacin mixto (SQL Server y Windows). El siguiente cdigo puede
utilizarse para conectar a un SQL Server con autenticacin en modo mixto:
Dim strConn As String = _
"data source=localhost; " & _
"initial catalog=northwind; " & _
"user id=CohoUser;password=1Coho"
Dim conn As New SqlConnection(strConn)

string strConn =
"data source=localhost; " +
"initial catalog=northwind; " +
"user id=CohoUser; " +
"password=1Coho";
SqlConnection conn = new SqlConnection(strConn);

Introduccin
Autenticacin En modo
mixto
Visual Basic .NET
C#
8 Acceso a datos con Microsoft ADO.NET



Utilizar la autenticacin en modo mixto para acceder a SQL Server
desde una aplicacin Web es un riesgo de seguridad y no est recomendado. La
autenticacin en modo mixto se describe aqu como una tcnica que puede
utilizarse durante el desarrollo de la aplicacin Web.

La autenticacin en modo slo Windows es el mtodo ms utilizado para
conectar una aplicacin Web a una base de datos SQL Server. Cuando
utilizamos la autenticacin en modo slo Windows, SQL Server no necesita el
nombre de usuario y la contrasea. Slo se requiere una confirmacin de que el
usuario ha sido autenticado por una fuente de confianza para procesar la
peticin a la base de datos.
El proceso de la autenticacin en modo slo Windows utiliza una sola cuenta
denominada ASPNET para todos los accesos a SQL Server desde la aplicacin
Web. Esta nica cuenta elimina los problemas de transmitir nombres de usuario
y contraseas no encriptados entre la aplicacin Web y SQL Server, junto con
la necesidad de mantener cuentas de usuario en ambos servidores.
Con la autenticacin en modo slo Windows, los usuarios acceden al
formulario Web Form como usuarios annimos. ASP.NET se conecta a SQL
Server y se autentica utilizando la cuenta de usuario ASPNET. Los datos
solicitados son devueltos por SQL Server y utilizados por la aplicacin Web.
Finalmente, el formulario Web Form que incluye los datos solicitados se
devuelven al usuario.
Para utilizar la autenticacin en modo slo Windows, configuramos SQL
Server con la autenticacin en modo slo Windows. El siguiente cdigo puede
utilizarse para conectar a un SQL Server con autenticacin en modo slo
Windows:
Dim strConn As String = _
"data source=localhost; " & _
"initial catalog=northwind; " & _
"integrated security=true"
Dim conn As New SqlConnection(strConn)

string strConn =
"data source=localhost; " +
"initial catalog=northwind; " +
"integrated security=true";
SqlConnection conn = new SqlConnection(strConn);

Aviso
Autenticacin slo
Windows
Visual Basic .NET
C#
Acceso a datos con Microsoft ADO.NET 9


Cuando utilizamos la autenticacin en modo slo Windows, podemos mantener
a SQL Server en el modo de autenticacin predeterminado de slo Windows. Si
utilizamos la autenticacin en modo mixto, necesitamos modificar el modo de
autenticacin de SQL Server.
Cambiar el modo de autenticacin de SQL Server
1. En el men Inicio, hacer clic con el botn derecho en Mi PC y clic en
Administrar.
2. En la consola Administracin de equipos, expandir la carpeta Servicios y
Aplicaciones y la carpeta Servidores Microsoft SQL Server.
3. Hacer clic con el botn derecho en el servidor SQL Server (local) y clic en
Propiedades.
4. En el cuadro de dilogo Propiedades de SQL Server, en la ficha
Seguridad, hacer clic en el botn de opcin SQL Server y Windows o la
opcin slo Windows de la seccin Autenticacin, y hacer clic en
Aceptar.

Para ms informacin sobre securizar una aplicacin Web, ver el Mdulo
Securizar una aplicacin Web con Microsoft ASP.NET.

Configurar el SQL
Server para ejecutar
autenticacin
en modo mixto o slo
Windows
Nota
10 Acceso a datos con Microsoft ADO.NET


Crear la conexin
Uso de SqlConnection
Establecer los parmetros de la cadena de conexin
Timeout de conexin
Fuente de datos
Catlogo inicial
Seguridad integrada
Dim strConn As String = "data source=localhost; " & _
"initial catalog=northwind; integrated security=true"
Dim conn As New SqlConnection(strConn)
Dim strConn As String = "data source=localhost; " & _
"initial catalog=northwind; integrated security=true"
Dim conn As New SqlConnection(strConn)
Contrasea
Persistir informacin seguridad
Proveedor
ID de usuario
string strConn = "data source=localhost; " +
"initial catalog=northwind; integrated security=true";
SqlConnection conn = new SqlConnection(strConn);
string strConn = "data source=localhost; " +
"initial catalog=northwind; integrated security=true";
SqlConnection conn = new SqlConnection(strConn);

*****************************
Para mover datos entre una base de datos y nuestra aplicacin Web, en primer
lugar debemos crear una conexin a la base de datos. Para ello, debemos
identificar el nombre del servidor de base de datos, el nombre de la base de
datos, y la informacin de inicio de sesin requerida.
Dependiendo del tipo de base de datos al que accedamos, podemos utilizar un
objeto SqlConnection o un objeto OleDbConnection. Utilizamos un objeto
SqlConnection para conectar a bases de datos SQL Server 7.0 o posterior, y
objetos OleDbConnection para conectar al resto de bases de datos.
Creamos un objeto SqlConnection pasando una cadena de conexin que
proporciona los parmetros necesarios para crear una conexin a una fuente de
datos.
El siguiente cdigo de ejemplo crea un objeto SQLConnection a la base de
datos SQL Server Northwind:
Dim strConn As String = _
"data source=localhost; " & _
"initial catalog=northwind; " & _
"integrated security=true"
Dim conn As New SqlConnection(strConn)

string strConn =
"data source=localhost; " +
"initial catalog=northwind; " +
"integrated security=true";
SqlConnection conn = new SqlConnection(strConn);

Introduccin
Crear una cadena de
conexin
Visual Basic .NET
C#
Acceso a datos con Microsoft ADO.NET 11


La siguiente tabla describe algunos de los parmetros ms habituales de un
objeto de conexin:
Parmetro Descripcin

Connection Timeout El intervalo de tiempo de espera en segundos en una conexin
al servidor antes de finalizar el intento y generar una
excepcin. 15 segundos es el tiempo predeterminado.
Data Source El nombre del servidor SQL Server utilizado cuando se abre
una conexin, o el nombre del archivo que se utiliza cuando en
la conexin a una base de datos Microsoft Access.
Initial Catalog El nombre de la base de datos.
Integrated Security El parmetro que determina si la conexin es o no segura. Los
valores posibles son True, False y SSPI. SSPI es el
equivalente a True.
Password La contrasea de inicio de sesin en la base de datos SQL
Server.
Persist Security Info Cuando est establecido a False no se devuelve informacin
sensible a la seguridad (como la contrasea) como parte de la
conexin, si la conexin est abierta o ha estado en un estado
abierto. Establecer esta propiedad a True puede constituir un
riesgo de seguridad. La configuracin predeterminada es False.
Provider La propiedad que se utiliza para establecer o devolver el
nombre del proveedor de la conexin; este parmetro se utiliza
nicamente para objetos OleDbConnection.
User ID El nombre de cuenta de inicio de sesin de SQL Server.

Parmetros de la cadena
de conexin
12 Acceso a datos con Microsoft ADO.NET


Demostracin: establecer la seguridad de SQL Server
Abrir SQL Server EnterpriseManager
Establecer el modo
de autenticacin
Probar con seguridad
integrada
Probar con seguridad
en modo mixto

*****************************
En esta demostracin, veremos cmo establecer y probar una conexin de
seguridad integrada entre una aplicacin Web y un SQL Server.
Ejecutar esta demostracin
1. En el men Inicio, hacer clic con el botn derecho en Mi PC y clic en
Administrar.
2. En la consola Administracin de equipos, expandir la carpeta Servicios y
aplicaciones y expandir la carpeta Servidores Microsoft SQL Server.
3. Hacer clic con el botn derecho en el servidor SQL Server (local) y clic en
Propiedades.
4. En el cuadro de dilogo Propiedades de SQL Server, en la ficha
Seguridad, hacer clic en el botn de opcin Slo Windows de la seccin
Autenticacin y hacer clic en Aceptar.
5. Abrir el formulario Web Form SQLSecurityModes.aspx del proyecto
Demo08VB o Demo08CS ue se pueden encontrar dentro del fichero
demos08.zip
6. Generar y examinar la pgina SQLSecurityModes.aspx.
7. Hacer clic en Utilizar seguridad integrada, y clic en Get Data.
Los datos se recuperan de la base de datos y se muestran en el control
DataGrid.
8. Hacer clic en Utilizar seguridad estndar, y clic en Get Data.
Obtenemos un error porque el usuario no existe en el SQL Server.
9. Crear un nuevo usuario para SQL Server:
a. En la consola Gestin de equipos, expandir la carpeta SQL Server
(local) y expandir la carpeta Seguridad.
b. Hacer clic con el botn derecho en Logins y hacer clic en Nuevo Login.
Introduccin
Abrir SQL Server
Enterprise Manager
Establecer el modo de
autenticacin
Prueba con seguridad
integrada
Acceso a datos con Microsoft ADO.NET 13


c. En el cuadro de dilogo Propiedades de login de SQL Server, escribir
CohoUser en el campo Nombre, hacer clic en Autenticacin SQL
Server en la seccin Autenticacin, escribir 1Coho en el campo
Contrasea, y hacer clic en Aceptar.
d. Teclear 1Coho en el cuadro de dilogo Confirmar contrasea, y hacer
clic en Aceptar.
10. Cambiar el modo de autenticacin de SQL Server a modo mixto.
a. En la consola Gestin de equipos, hacer clic con el botn derecho en
SQL Server (local) y clic en Propiedades.
b. En el cuadro de dilogo Propiedades de SQL Server, en la ficha
Seguridad, hacer clic en el botn de opcin SQL Server y Windows de
la seccin Autenticacin, y hacer clic en Aceptar.
c. A la pregunta de si es necesario reiniciar el servicio SQL Server, hacer
clic en S.
11. Visualizar la pgina SQLSecurityModes.aspx en el navegador de nuevo y
probar ambos mtodos para acceder a SQL Server. Ahora, funcionarn los
dos mtodos.

Prueba con seguridad
en modo mixto
14 Acceso a datos con Microsoft ADO.NET


Leccin: acceso a datos con DataSets
Crear un DataAdapter
Crear un DataSet
Demostracin: utilizar programticamente un DataSet
Utilizar un DataView
Prctica: organizar cdigo para crear un DataSet
Vincular un DataSeta un control enlazado a lista
Prctica dirigida por el instructor: visualizarun
DataSet
Gestin de errores

*****************************
El objeto DataSet representa una copia local de los datos que provienen de una
o ms fuentes de datos. El uso de un objeto DataSet permite que un formulario
Web Form se ejecute de forma semi-independiente de las fuentes de datos. El
objeto DataSet puede utilizar un objeto DataAdapter para cargar los datos de
una fuente de datos y puede desconectarse de la misma. El usuario puede
entonces utilizar y manipular los datos. Cuando los datos necesitan ser
actualizados contra la fuente de datos, se utiliza un objeto DataAdapter para
volver a conectarse y actualizar la fuente de datos.
En esta leccin, estudiaremos cmo utilizar los objetos DataSet para soportar el
almacenamiento local de datos y los requerimientos de manipulacin de los
formularios Web Forms.
En esta leccin, aprenderemos a:
Crear un objeto DataAdapter para enlazar un objeto DataSet a una fuente
de datos.
Crear un objeto DataSet para guardar datos de una fuente de datos.
Utilizar objetos DataView para guardar un subconjunto de datos de un
objeto DataSet.
Vincular un objeto DataSet y un objeto DataView a un control enlazado a
lista.
Gestionar los errores tpicos que nos encontramos en el acceso a datos.

Introduccin
Objetivos de la leccin
Acceso a datos con Microsoft ADO.NET 15


Crear un DataAdapter
Almacenar la consulta en un DataAdapter
El constructor DataAdapterestablece la propiedad
SelectCommand
Establecer las propiedades InsertCommand,
UpdateCommandy DeleteCommandsi fuera necesario
Dim da As New SqlDataAdapter _
("select * from Authors", conn)
Dim da As New SqlDataAdapter _
("select * from Authors", conn)
da.SelectCommand.CommandText
da.SelectCommand.Connection
da.SelectCommand.CommandText
da.SelectCommand.Connection
SqlDataAdapter da = new SqlDataAdapter
("select * from Authors",conn);
SqlDataAdapter da = new SqlDataAdapter
("select * from Authors",conn);
da.SelectCommand.CommandText;
da.SelectCommand.Connection;
da.SelectCommand.CommandText;
da.SelectCommand.Connection;

*****************************
El objeto DataSet representa una copia local de datos de una fuente de datos.
Cuando se utiliza sin una fuente de datos, el objeto DataSet resulta til para
guardar datos locales a los cuales pueden acceder los formularios Web Forms.
Sin embargo, para actuar como una herramienta de gestin de datos real, un
objeto DataSet debe poder interactuar con una o ms fuentes de datos. Para
conseguir esta interaccin, el .NET Framework proporciona las clases
SqlDataAdapter y OleDbDataAdapter.
Un objeto DataAdapter acta como enlace entre un objeto DataSet y una
fuente de datos que puede utilizarse para recuperar y guardar datos. La clase
DataAdapter representa un conjunto de comandos de base de datos y una
conexin a una base de datos que utilizamos para rellenar un objeto DataSet y
actualizar la fuente de datos. Cada objeto DataAdapter intercambia datos entre
un nico objeto DataTable en un objeto DataSet y un nico conjunto de
resultados de una instruccin SQL o un procedimiento almacenado.
Visual Studio .NET pone a disposicin dos clases principales DataAdapter
para su uso con bases de datos:
ClaseOleDbDataAdapter
Esta clase es adecuada para utilizarse con cualquier fuente de datos expuesta
por un OLE DB Data Provider.
ClaseSqlDataAdapter
Esta clase es especfica para una base de datos SQL Server versin 7.0 o
posterior. El objeto SqlDataAdapter es ms rpido que el objeto
OleDbDataAdapter porque funciona directamente con SQL Server y no
debe funcionar a travs de una capa OLE DB Data Provider.

Adems, las clases DataAdapter para otros tipos de fuentes de datos pueden
integrarse con Visual Studio .NET.
Introduccin
DataAdapter
16 Acceso a datos con Microsoft ADO.NET


Cuando utilizamos objetos DataAdapter para intercambiar datos entre un
objeto DataSet y una fuente de datos, podemos especificar las acciones que
deseamos realizar utilizando una de las cuatro propiedades DataAdapter. Las
propiedades DataAdapter ejecutan una instruccin SQL o invocan un
procedimiento almacenado.
Las propiedades que estn disponibles con la clase DataAdapter se muestran
en la siguiente tabla.
Propiedad Funcin

SelectCommand La propiedad SelectCommand recupera filas de la fuente de
datos.
InsertCommand La propiedad InsertCommand escribe filas insertadas del
DataSet a la fuente de datos.
UpdateCommand La propiedad UpdateCommand escribe filas modificadas del
DataSet a la fuente de datos.
DeleteCommand La propiedad DeleteCommand elimina filas en la fuente de
datos.

El siguiente cdigo de ejemplo muestra cmo crear un objeto SqlDataAdapter
denominado da que contiene una sentencia de consulta:
'Create a connection
Dim conn As New SqlConnection _
("data source=localhost;initial catalog=pubs;" & _
"integrated security=true;persist security info=True;")

'Create the DataAdapter
Dim da As New SqlDataAdapter _
("select * from Authors", conn)

//Create a connection
SqlConnection conn = new SqlConnection
("data source=localhost; initial catalog=pubs; " +
"integrated security=true; persist security info=True;");

//Create the DataAdapter
SqlDataAdapter da = new SqlDataAdapter
("select * from Authors", conn);

Propiedades del
DataAdapter
Ejemplo de
SqlDataAdapter
Visual Basic .NET
C#
Acceso a datos con Microsoft ADO.NET 17


Crear un DataSet
Crear y poblar un DataSetcon DataTables
El mtodo Fillejecuta el SelectCommand
Acceder a DataTable
Dim ds As New DataSet()
da.Fill(ds, "Authors")
Dim ds As New DataSet()
da.Fill(ds, "Authors")
Dim r As DataRow
Dim str As String
For Each r in _
ds.Tables("Authors").Rows
str &= r(2)
str &= r("au_lname")
Next
Dim r As DataRow
Dim str As String
For Each r in _
ds.Tables("Authors").Rows
str &= r(2)
str &= r("au_lname")
Next
ds.Tables("Authors").Rows.Count
ds.Tables("Authors").Rows.Count
DataSet ds = new DataSet();
da.Fill(ds, "Authors");
DataSet ds = new DataSet();
da.Fill(ds, "Authors");
ds.Tables["Authors"].Rows.Count;
ds.Tables["Authors"].Rows.Count;
string str="";
foreach(DataRow r in
ds.Tables["Authors"].Rows)
{
str += r[2];
str += r["au_lname"];
}
string str="";
foreach(DataRow r in
ds.Tables["Authors"].Rows)
{
str += r[2];
str += r["au_lname"];
}

*****************************
Para crear una copia local de una base de datos, creamos y poblamos un objeto
DataSet utilizando objetos DataTable.
El primer paso para crear un objeto DataSet es declarar el nombre del objeto
DataSet. El siguiente cdigo crea un objeto DataSet denominado ds:
Dim ds As New DataSet()

DataSet ds = new DataSet();

Tras crear un objeto DataSet, rellenamos los objetos DataTable creando un
objeto DataAdapter. Invocamos el mtodo Fill en el objeto DataAdapter y
especificamos el objeto DataTable que deseamos rellenar. El siguiente cdigo
rellena la tabla Authors del objeto DataSet ds utilizando un DataAdapter
denominado da:
da.Fill(ds, "Authors")

da.Fill(ds, "Authors");

El mtodo Fill ejecuta implcitamente una consulta SQL en la propiedad
SelectCommand del objeto DataAdapter. Los resultados de la consulta SQL
se utilizan para definir la estructura del objeto DataTable, y para poblar la tabla
con datos.
Introduccin
Crear a DataSet
Visual Basic .NET
C#
Rellenar el DataSet
Visual Basic .NET
C#
18 Acceso a datos con Microsoft ADO.NET


El siguiente cdigo de ejemplo muestra cmo crear un objeto SqlDataAdapter
da, e invocar a continuacin el mtodo Fill para almacenar los datos en el
objeto DataSet ds.
'Create a connection
Dim conn As New SqlConnection _
("data source=localhost;initial catalog=pubs;" & _
"integrated security=SSPI;persist security info=True;")

'Create the DataSet
Dim ds As New DataSet()

'Create the DataAdapter
Dim da As New SqlDataAdapter _
("select * from Authors", conn)

'Fill the DataSet ds
da.Fill(ds, "Authors")

//Create a connection
SqlConnection conn = new SqlConnection
("data source=localhost;initial catalog=pubs; " +
"integrated security=SSPI;persist security info=True;");

//Create the DataSet
DataSet ds = new DataSet();

//Create the DataAdapter
SqlDataAdapter da = new SqlDataAdapter
("select * from Authors", conn);

//Fill the DataSet ds
da.Fill(ds, "Authors");

El segundo argumento del mtodo Fill es un nombre para el objeto DataTable
que est creado. Utilizamos este nombre para acceder a los datos devueltos.
Una vez insertados los datos en un objeto DataSet, podemos acceder
programticamente a los datos. Como muestra el siguiente cdigo, cada objeto
DataSet est formado por uno o ms objetos DataTable a los que podemos
hacer referencia por su nombre o posicin ordinal:
ds.Tables("Authors")
-o-
ds.Tables(0)

ds.Tables["Authors"];
-o-
ds.Tables[0];

Visual Basic .NET
C#
Acceder a DataTable
Visual Basic .NET
C#
Acceso a datos con Microsoft ADO.NET 19


Las clases DataRow y DataColumn son los componentes principales de una
clase DataTable. Utilizaramos un objeto DataRow con sus propiedades y
mtodos para recuperar y evaluar los valores de un objeto DataTable.
DataRowCollection representa los objetos DataRow reales que se encuentran
en el objeto DataTable, y DataColumnCollection contiene los objetos
DataColumn que describen el esquema del objeto DataTable. La propiedad
Rows del objeto DataTable proporciona acceso programtico a
DataRowCollection. La propiedad Columns del objeto DataTable
proporciona acceso programtico a DataColumnCollection.
El siguiente cdigo de ejemplo agrega los nombres de columnas de un objeto
DataSet al control ListBox denominado lstItems:
Dim col As DataColumn
For Each col In ds.Tables(0).Columns
lstItems.Items.Add(col.ColumnName)
Next

foreach(DataColumn col in ds.Tables[0].Columns)
{
lstItems.Items.Add(col.ColumnName);
}

Tanto el objeto DataRowCollection como el objeto DataColumnCollection
tienen una propiedad Count que nos permite determinar el nmero de filas o
columnas de un objeto DataTable, como muestra el siguiente cdigo de
ejemplo:
ds.Tables("Authors").Rows.Count
ds.Tables("Authors").Columns.Count

ds.Tables["Authors"].Rows.Count;
ds.Tables["Authors"].Columns.Count;

Contar las filas y columnas del objeto DataTable nos permite acceder a campos
individuales del objeto DataTable. Podemos acceder a campos por posicin
ordinal (basada-en-0) o por el nombre. En el siguiente cdigo, x es el ndice de
la fila de datos a la que deseamos acceder:
DataSet.Tables(0).Rows(x)(1)
DataSet.Tables(0).Rows(x)("fieldname")

ds.Tables["Authors"].Rows[x][1];
ds.Tables["Authors"].Rows[x]["fieldname"];

Visual Basic .NET
C#
Visual Basic .NET
C#
Visual Basic .NET
C#
20 Acceso a datos con Microsoft ADO.NET


El siguiente cdigo recorre en bucle cada fila del objeto DataTable
denominado Authors y crea una cadena utilizando los campos segundo y
au_lname de Authors:
Dim r As DataRow
Dim str As String
For Each r in ds.Tables("Authors").Rows
str &= r(1)
str &= r("au_lname")
Next

string str = "";
foreach(DataRow r in ds.Tables["Authors"].Rows)
{
str += r[1];
str += r["au_lname"];
}

Visual Basic .NET
C#
Acceso a datos con Microsoft ADO.NET 21


Demostracin: utilizar programticamente un DataSet
Crear una conexin
Crear DataAdapter
Crear DataSet
Leer los datosdel DataSet
programticamente

*****************************
En esta demostracin, examinaremos cdigo que crea y rellena un objeto
DataSet, y veremos cmo ese cdigo rellena dinmicamente un control
ListBox desde el objeto DataSet.
Ejecutar la demostracin
1. Abrir la pgina UseDataSet.aspx del proyecto Demo08VB o Demo08CS
que se pueden encontrar dentro del fichero demos08.zip.
2. Generar y examinar la pgina.
La primera vez que se carga la pgina, el cuadro de lista lstItems se rellena
dinmicamente con los nombres de las columnas del DataSet.
El botn Get Number of Rows y el botn Get Values leen la informacin
del DataSet.
3. Hacer clic en Get Number of Rows.
El cdigo en el procedimiento de evento click muestra la propiedad Count
de la coleccin Rows.
4. Seleccionar una columna en el cuadro de lista y hacer clic en Get Values.
El cdigo en el procedimiento de evento click recorre en bucle las filas del
DataSet y muestra el campo seleccionado.
5. En Visual Studio .NET, visualizar la pgina de cdigo subyacente de la
pgina UseDataSet.aspx.
Introduccin
22 Acceso a datos con Microsoft ADO.NET


6. En el procedimiento de evento Page_Load, mostrar el cdigo que crea los
siguientes objetos:
SqlConnection
SqlDataAdapter
DataSet
7. En el procedimiento de evento Page_Load, mostrar cmo la primera vez
que se muestra la pgina, el cuadro lista se rellena nicamente con los
nombres de columnas.
8. En el procedimiento de evento cmdRows_Click, mostrar cmo se recupera
el nmero de filas desde el DataSet.
9. En el procedimiento de evento cmdGetValues_Click, mostrar cmo se
recupera el campo seleccionado desde el DataSet.

Acceso a datos con Microsoft ADO.NET 23


Utilizar un DataView
Un DataViewpuede personalizarse para presentar un
subconjunto de datos de un DataTable
La propiedad DefaultViewdevuelve el DataView
predeterminado de la tabla
Establecer una vista distinta de un DataSet
DataView dv = new DataView(ds.Tables["Authors"]);
dv.RowFilter = "state = 'CA'";
DataView dv = new DataView(ds.Tables["Authors"]);
dv.RowFilter = "state = 'CA'";
Dim dv As DataView = ds.Tables("Authors").DefaultView
Dim dv As DataView = ds.Tables("Authors").DefaultView
Dim dv As New DataView (ds.Tables("Authors"))
dv.RowFilter = "state = 'CA'"
Dim dv As New DataView (ds.Tables("Authors"))
dv.RowFilter = "state = 'CA'"
DataView dv = ds.Tables["Authors"].DefaultView;
DataView dv = ds.Tables["Authors"].DefaultView;

*****************************
Para mostrar los datos que almacena un objeto DataSet, podemos vincular el
objeto DataSet directamente a un control enlazado a una lista o utilizar un
objeto DataView. Un objeto DataView es una vista personalizada y enlazable
de un nico objeto DataTable. Despus de crear un objeto DataView, el
usuario puede utilizarlo para clasificar, filtrar, buscar, editar y navegar por
datos.
Los objetos DataView pueden personalizarse para presentar un subconjunto de
datos de un objeto DataTable. Esta personalizacin permite tener dos controles
vinculados al mismo objeto DataTable, pero con cada control mostrando
distintas versiones de los datos. Por ejemplo, un control puede estar vinculado a
un objeto DataView mostrando todas las filas de la tabla, y un segundo control
puede estar vinculado a otro objeto DataView configurado para mostrar
nicamente las filas que se han eliminado del objeto DataTable.
Cada objeto DataTable de un objeto DataSet tiene una propiedad
DefaultView, que devuelve la vista predeterminada de la tabla. El siguiente
cdigo muestra cmo podemos acceder al objeto DataView dv predeterminado,
de un objeto DataTable denominado Authors:
Dim dv As DataView = ds.Tables("Authors").DefaultView

DataView dv = ds.Tables["Authors"].DefaultView;

Introduccin
DataViews como
subconjunto de un
DataTable
DefaultView
Visual Basic .NET
C#
24 Acceso a datos con Microsoft ADO.NET


Tambin podemos crear un objeto DataView personalizado basado en un
subconjunto de datos que se encuentran en un objeto DataTable. Por ejemplo,
podemos establecer la propiedad DataView RowFilter utilizando una
expresin de filtro. La expresin de filtro puede tener el valor True o False.
Tambin podemos establecer la propiedad Sort del objeto DataView utilizando
una expresin de clasificacin. La expresin de clasificacin puede incluir los
nombres de objetos DataColumn o un clculo.
En el siguiente cdigo, la propiedad RowFilter, de un objeto DataView dv,
est asignada para recuperar autores nicamente del estado de California y, a
continuacin, ordenar los resultados por apellido:
Dim dv As New DataView(ds.Tables("Authors"))
dv.RowFilter = "state = 'CA'"
dv.Sort = "au_lname"

DataView dv = new DataView(ds.Tables["Authors"]);
dv.RowFilter = "state = CA";
dv.Sort = "au_lname";

DataViewpersonalizado
Visual Basic .NET
C#
Acceso a datos con Microsoft ADO.NET 25


Prctica: organizar cdigo para crear un DataSet
Los estudiantes:
Reordenarn lneas de cdigo para crear
un DataSet
Tiempo: 5 minutos

*****************************
En esta prctica, reordenaremos lneas de cdigo ADO.NET en el orden
correcto para crear un objeto DataSet.
Ejecutar la prctica
Visualizar la pgina http://localhost/Mod10VB/DataSetCode.aspx o
http://localhost/Mod10CS/DataSetCode.aspx y organizar las lneas de
cdigo ADO.NET en el orden correcto para crear un objeto DataSet.

Hay varias respuestas correctas para esta prctica.


Nota
26 Acceso a datos con Microsoft ADO.NET


Vincular un DataSet a un control enlazado a lista
Crear el control
Vincular a un DataSeto un DataView
dg.DataSource = ds
dg.DataMember = "Authors"
dg.DataBind()
dg.DataSource = ds
dg.DataMember = "Authors"
dg.DataBind()
<asp:DataGrid id="dg" runat="server" />
<asp:DataGrid id="dg" runat="server" />
dg.DataSource = ds;
dg.DataMember = "Authors";
dg.DataBind();
dg.DataSource = ds;
dg.DataMember = "Authors";
dg.DataBind();

*****************************
ASP.NET incluye un conjunto de controles enlazados a listas, como los
controles DataGrid, DataList y DataRepeater, que facilitan y flexibilizan la
visualizacin de datos desde una fuente de datos. Los desarrolladores
nicamente deben vincular estos controles a una fuente de datos para mostrar
los datos seleccionados.
El primer paso para vincular el objeto DataSet al control enlazado a lista es
crear el control. El siguiente cdigo muestra cmo crear un control DataGrid
dg que produce la salida HTML parecida a una hoja de clculo:
<asp:DataGrid id="dg" runat="server" />

Para vincular un objeto DataSet a un control DataGrid, en primer lugar
debemos establecer la propiedad DataSource del control DataGrid a un objeto
DataSet, DataTable o DataView, e invocar el mtodo DataBind.
Si establecemos la propiedad DataSource del control DataGrid directamente a
un objeto DataSet, el objeto DataTable con el ndice 0 se utiliza de forma
predeterminada. Para especificar otro objeto DataTable, establecer la
propiedad DataMember del control DataGrid con el nombre del objeto
DataTable deseado.
El siguiente cdigo de ejemplo muestra cmo vincular la tablaAuthors, del
objeto DataSet ds, a un control DataGrid denominado dg:
dg.DataSource = ds
dg.DataMember = "Authors"
dg.DataBind()

dg.DataSource = ds;
dg.DataMember = "Authors";
dg.DataBind();

Introduccin
Crear el control
Vincular a un Dataset o
DataView
Visual Basic .NET
C#
Acceso a datos con Microsoft ADO.NET 27


El siguiente cdigo muestra cmo podemos utilizar tambin la coleccin
Tables del objeto DataSet ds para asignar el objeto DataTable Authors
directamente a la propiedad DataSource del control DataGrid denominado dg:
dg.DataSource = ds.Tables("Authors")
dg.DataBind()

dg.DataSource = ds.Tables["Authors"];
dg.DataBind();

Si deseamos mostrar una vista distinta de los datos del control DataGrid,
deberemos crear un nuevo objeto DataView desde el objeto DataSet y vincular
ese objeto al control.
El siguiente cdigo de ejemplo muestra cmo vincular un objeto DataView dv,
filtrado para el estado de California, a un control DataGrid dg:
Dim dv As New DataView(ds.Tables("Authors"))
dv.RowFilter = "state = 'CA'"
dg.DataSource = dv
dg.DataBind()

DataView dv = new DataView(ds.Tables["Authors"]);
dv.RowFilter = "state = 'CA'";
dg.DataSource = dv;
dg.Databind();

La siguiente ilustracin muestra el formato predeterminado del control
DataGrid, mostrando datos de autores que viven en el estado de California.

Visual Basic .NET
C#
Ejemplo de uso de una
vista personalizada
Visual Basic .NET
C#
28 Acceso a datos con Microsoft ADO.NET


Prctica dirigida por el instructor: mostrar un DataSet
Crear una conexin
Crear un DataAdapter
Crear un DataSet
Crear un DataView
VincularDataSety DataViewa controles
DataGrid

*****************************
En esta prctica dirigida por el instructor, examinaremos cdigo que crea y
rellena un objeto DataSet, crea un objeto DataView utilizando datos
clasificados y filtrados del objeto DataSet, y vincula los controles DataGrid a
los objetos DataSet y DataView.
Ejecutar la prctica dirigida por el instructor
1. Abrir la pgina UseGrid.aspx del proyecto Mod10VB o Mod10CS de la
solucin 2310Demos.
2. Generar y examinar la pgina UseGrid.aspx.
Hay dos controles DataGrid vinculados al mismo objeto DataSet. El
primer control DataGrid muestra todos los datos del objeto DataSet. El
segundo control DataGrid est vinculado a un objeto DataView, que filtra
y clasifica los datos. El segundo control DataGrid tambin implementa la
clasificacin estableciendo la propiedad Sort del objeto DataView.
3. En Visual Studio .NET, visualizar el cdigo subyacente de la pgina
UseGrid.aspx.
4. En el procedimiento de evento Page_Load, mostrar el cdigo que hace lo
siguiente:
Crea el objeto SqlConnection.
Crea el objeto SqlDataAdapter.
Crea un objeto DataSet.
Vincula el primer control DataGrid con el objeto DataSet.
Crea un objeto DataView y establece las propiedades RowFilter y Sort.
Vincula el segundo control DataGrid con el objeto DataView.

Introduccin
Acceso a datos con Microsoft ADO.NET 29


Gestin de errores
La conexin no se abre
La cadena de conexin no es vlida
El servidor o la base de datos no se encuentran
Fallo de inicio de sesin
El DataAdapterno puede crear un DataSet
Sintaxis SQL no vlida
Nombre de tabla o campo no vlido
Cdigo de ejemplo

*****************************
Existen dos fuentes principales de error cuando intentamos acceder a datos
desde un formulario Web Form utilizando ADO.NET: problemas de conexin y
una falta de alineacin con la base de datos.
Cuando se invoca el mtodo Open, puede producirse ms de un error. Ante la
posibilidad de que ocurra ms de un error, debemos ser capaces de gestionar
mltiples errores utilizando las instrucciones TryCatchFinally. Si se
produce una o ms excepciones SqlException, podemos recorrer todos los
objetos de excepciones SQL devueltos a nuestra aplicacin Web.
El siguiente cdigo muestra cmo utilizar una instruccin Try...Catch para
capturar mltiples tipos de excepciones. En este ejemplo, el cdigo captura el
tipo de excepcin InvalidOperationException, junto con otras excepciones,
utilizando un procesador de excepciones genrico:
Introduccin
La conexin no se abre
30 Acceso a datos con Microsoft ADO.NET


Try
Dim conn As New SqlConnection(...)
Dim da As New SqlDataAdapter(..., conn)
Dim ds As New DataSet()
da.Fill(ds)

Catch ex1 As System.Data.SqlClient.SqlException
Select Case ex1.Number
Case 17
lblErrors.Text = lblErrors.Text & _
("invalid Server name")
Case 156, 170 'bad SQL syntax
lblErrors.Text = lblErrors.Text & _
("incorrect syntax")
Case 207 'bad field name in select
lblErrors.Text = lblErrors.Text & _
("invalid column name")
Case 208 'bad table name in select
lblErrors.Text = lblErrors.Text & _
("invalid object name")
Case 18452
lblErrors.Text = lblErrors.Text & _
("invalid user name")
Case 18456
lblErrors.Text = lblErrors.Text & _
("invalid password")
Case 4060
lblErrors.Text = lblErrors.Text & _
("invalid database")
End Select

Catch ex2 As System.Exception
lblErrors.Text = lblErrors.Text & _
("Unexpected exception: " & ex2.Message & ". ")
End Try

Visual Basic .NET
Acceso a datos con Microsoft ADO.NET 31


try
{
SqlConnection conn = new SqlConnection("...");
SqlDataAdapter da = new SqlDataAdapter("...",conn);
DataSet ds = new DataSet();
da.Fill(ds);
}
catch (System.Data.SqlClient.SqlException ex1)
{
switch(ex1.Number)
{
case 17:
lblErrors.Text = lblErrors.Text +
("invalid Server name");
break;
case 156:
case 170: //bad SQL syntax
lblErrors.Text = lblErrors.Text +
("incorrect syntax");
break;
case 207: //bad field name in select
lblErrors.Text = lblErrors.Text +
("invalid column name");
break;
case 208: //bad table name in select
lblErrors.Text = lblErrors.Text +
("invalid object name");
break;
case 18452:
lblErrors.Text = lblErrors.Text +
("invalid user name");
break;
case 18456:
lblErrors.Text = lblErrors.Text +
("invalid password");
break;
case 4060:
lblErrors.Text = lblErrors.Text +
("invalid database");
break;
}
}
catch (System.Exception ex2)
{
lblErrors.Text = lblErrors.Text +
("Unexpected exception: " + ex2.Message + ". ");
}

C#
32 Acceso a datos con Microsoft ADO.NET


La clase SqlException contiene la excepcin que se lanza cuando SQL Server
devuelve un aviso o error. Esta clase se crea siempre que el Proveedor de Datos
.NET de SQL Server encuentra una situacin que no puede gestionar. La clase
SqlException siempre contiene al menos la instancia de un objeto SqlError.
Podemos utilizar el nivel de severidad de la clase para que nos ayude a
determinar el contenido de un mensaje mostrado por una excepcin.
Para capturar objetos SqlException, debemos buscar errores de tipo
System.Data.SqlClient.SqlException. Cuando se produce un objeto
SqlException, el objeto de excepcin contiene una coleccin Errors.
El siguiente ejemplo muestra cmo podemos recorrer la coleccin Errors para
encontrar informacin sobre los errores que se han producido:
Dim erData As SqlClient.SqlErrorCollection = ex1.Errors
Dim i As Integer
For i = 0 To erData.Count - 1
lblErrors.Text &= ("Error " & i & ": " & _
erData(i).Number & ", " & _
erData(i).Class & ", " & _
erData(i).Message & "<br>")
Next i

SqlErrorCollection erData = ex1.Errors;
for(int i = 0; i < erData.Count; i++)
{
lblErrors.Text += "Error" + i + ": " +
erData[i].Number + ", " +
erData[i].Class + ", " +
erData[i].Message + "<br>";
}

Los errores de SQL Server comparten propiedades comunes y estn
identificados por un nmero y un nivel de gravedad:
La clase SqlError y propiedades comunes
Cada objeto SqlError tiene las propiedades comunes que se muestran en la
siguiente tabla.
Propiedad Descripcin

Class Obtiene el nivel de gravedad del error devuelto por SQL Server.
LineNumber Obtiene el nmero de lnea del archivo de proceso por lotes con
comandos Transact-SQL o el procedimiento almacenado que
contiene el error.
Message Obtiene el texto que describe el error.
Number Obtiene un nmero que identifica el tipo de error.


Para una lista completa de las propiedades de la clase SqlError,
consultar la documentacin de Visual Studio .NET.

El DataAdapter no
puede crear un DataSet
Visual Basic .NET
C#
Errores de SQL Server
Nota
Acceso a datos con Microsoft ADO.NET 33


Nmeros de error de SQL Server
La propiedad Number permite determinar el error especfico que se ha
producido. Por ejemplo, la siguiente tabla ofrece una lista de algunos
nmeros de errores SQL Server ms habituales y sus descripciones.
Nmero Descripcin

17 Nombre de servidor no vlido
4060 Nombre de base de datos no vlido
18456 Nombre de usuario o contrasea no vlidos

Niveles de gravedad de SQL Server
La siguiente tabla describe niveles de severidad de errores de SQL Server, a
los que se accede a travs de la propiedad Class de la clase SqlError.
Gravedad Descripcin Accin

11-16 Generado por usuario Puede ser corregido por el usuario.
17-19 Errores de software o
hardware
Podemos seguir trabajando, pero es posible
que no podamos ejecutar una instruccin
determinada. SqlConnection permanece
abierto.
20-25 Errores de software o
hardware
El servidor cierra SqlConnection. El
usuario puede volver a abrir la conexin.

34 Acceso a datos con Microsoft ADO.NET


Leccin: utilizar mltiples tablas
Almacenar mltiples tablas
Crear relaciones
Navegar programticamente entre tablas utilizando
relaciones
Navegar visualmente entre tablas utilizando
relaciones
Prctica dirigida por el instructor: mostrar datos de
mltiples tablas

*****************************
Uno de los puntos fuertes de los objetos DataSet es que pueden contener
mltiples objetos DataTable, y cada objeto DataTable puede provenir de una
fuente distinta.
En esta leccin, estudiaremos cmo almacenar mltiples tablas de datos en un
objeto DataSet y cmo mostrar esos datos en controles DataGrid.
En esta leccin, aprenderemos a:
Almacenar datos en mltiples tablas de mltiples fuentes.
Crear relaciones entre datos de mltiples fuentes de datos.
Utilizar relaciones para navegar entre tablas de datos de mltiples fuentes.

Introduccin
Objetivos de la leccin
Acceso a datos con Microsoft ADO.NET 35


Almacenar mltiples tablas
Agregar la primera tabla
Agregar la(s) siguiente(s) tabla(s)
daCustomers = New SqlDataAdapter _
("select * from Customers", conn1)
daCustomers.Fill(ds, "Customers")
daCustomers = New SqlDataAdapter _
("select * from Customers", conn1)
daCustomers.Fill(ds, "Customers")
Orders
Customers
daOrders = New SqlDataAdapter _
("select * from Orders", conn2)
daOrders.Fill(ds, "Orders")
daOrders = New SqlDataAdapter _
("select * from Orders", conn2)
daOrders.Fill(ds, "Orders")
conn2 conn1
DataSet

*****************************
Para rellenar un objeto DataSet con mltiples objetos DataTable que
provienen de una o ms fuentes de datos, debemos utilizar mltiples objetos
DataAdapter. Cada objeto DataAdapter rellena una tabla distinta del objeto
DataSet. Como el orden de los objetos DataAdapter controla el orden de
implementacin, podemos controlar el orden en que se escriben las
actualizaciones a y desde la base de datos. Este control sobre el orden de
implementacin nos ayuda a conservar la integridad referencial entre las tablas
relacionadas de la base de datos.
Un ejemplo de control del orden en que se crean los objetos DataTable podra
ser un responsable de ventas que necesita recuperar informacin de clientes, e
informacin sobre rdenes de compra realizadas por cada cliente, desde una
base de datos central. Para satisfacer este requerimiento, podemos crear una
aplicacin Web que contenga dos objetos DataAdapter, el primero para
recuperar registros de clientes y el segundo para recuperar registros de rdenes
de compra. Cargando primero los datos de los clientes, podemos conservar la
integridad referencial entre los clientes y sus rdenes de compra.
Introduccin
Agregar la primera tabla
36 Acceso a datos con Microsoft ADO.NET


El siguiente cdigo puebla un objeto Customers DataTable utilizando un
objeto DataAdapter denominado daCustomers:
Dim conn As SqlConnection
Dim daCustomers As SqlDataAdapter
Dim daOrders As SqlDataAdapter
Dim ds As New DataSet()

'create a connection to the Pubs database
conn = New SqlConnection("data source=localhost;" & _
"integrated security=true;initial catalog=northwind")

'create the first DataTable
daCustomers = New SqlDataAdapter _
("select CustomerID, CompanyName from Customers", conn)
daCustomers.Fill(ds, "Customers")

SqlConnection conn;
SqlDataAdapter daCustomers;
SqlDataAdapter daOrders;
DataSet ds = new DataSet();

// Create a connection to the Pubs database
conn = new SqlConnection("data source=localhost; " +
"integrated security=true;initial catalog=northwind");

// Create the first DataTable
daCustomers = new SqlDataAdapter
("select CustomerID, CompanyName from Customers", conn);
daCustomers.Fill(ds, "Customers");

Despus de cargar el primer objeto DataTable, podemos rellenar objetos
DataTable adicionales y definir las relaciones entre los objetos basadas en el
objeto DataTable inicial. Siguiendo con el ejemplo anterior, rellenaramos el
objeto Orders DataTable.
El siguiente cdigo puebla el objeto Orders DataTable utilizando un objeto
DataAdapter denominado daOrders:
'Create the second DataTable
daOrders = New SqlDataAdapter _
("select CustomerID, OrderID, OrderDate, ShippedDate " & _
"from Orders", conn)
daOrders.Fill(ds, "Orders")

// Create the second DataTable
daOrders = new SqlDataAdapter
("select CustomerID, OrderID, OrderDate, ShippedDate " +
"from Orders", conn);
daOrders.Fill(ds, "Orders");

Deberamos utilizar un nuevo objeto DataAdapter para cada objeto
DataTable de un objeto DataSet.

Visual Basic .NET
C#
Agregar tablas
subsiguientes
Visual Basic .NET
C#
Nota
Acceso a datos con Microsoft ADO.NET 37


Crear relaciones
Identificar la columna primaria
Identificar la columna secundaria
Crear DataRelation
Dim dr As New DataRelation _
("name", parentCol, _
childCol)
ds.DataRelations.Add(dr)
Dim dr As New DataRelation _
("name", parentCol, _
childCol)
ds.DataRelations.Add(dr)
Dim parentCol As DataColumn = _
ds.Tables("Customers").Columns("CustomerID")
Dim parentCol As DataColumn = _
ds.Tables("Customers").Columns("CustomerID")
Dim childCol As DataColumn = _
ds.Tables("Orders").Columns("CustomerID")
Dim childCol As DataColumn = _
ds.Tables("Orders").Columns("CustomerID")
TablaOrders
TablaCustomers
DataSet
parentCol
childCol
DataRelation
Cdigo de ejemplo C#

*****************************
Se utiliza un objeto DataRelation para referenciar dos objetos DataTable entre
s a travs de objetos DataColumn. Por ejemplo, en una relacin
Customer/Orders, Customers es la tabla primaria de la relacin y Orders es la
secundaria. Esta relacin es similar a una relacin clave principal/clave fornea.
Las relaciones se crean entre columnas coincidentes de las tablas primaria y
secundaria. El valor de DataType para ambas columnas debe ser idntico.
Los objetos DataRelation estn contenidos en un objeto
DataRelationCollection, al que podemos acceder no slo a travs de la
propiedad Relations del objeto DataSet, sino tambin a travs de las
propiedades ChildRelations y ParentRelations del objeto DataTable.
Para crear un objeto DataRelation, utilizamos el constructor DataRelation y el
mtodo Add de la coleccin Relations de un objeto DataSet.
Introduccin
38 Acceso a datos con Microsoft ADO.NET


El siguiente ejemplo crea un objeto DataRelation dr y lo agrega al objeto
DataSet ds:
'Create DataRelation: each publisher publishes many titles
Dim dr As DataRelation
Dim parentCol As DataColumn
Dim childCol As DataColumn

parentCol = ds.Tables("Customers").Columns("CustomerID")
childCol = ds.Tables("Orders").Columns("CustomerID")
dr = New DataRelation("CustOrders", parentCol, childCol)
ds.Relations.Add(dr)

// Create DataRelation: each publisher publishes many titles
DataRelation dr;
DataColumn parentCol;
DataColumn childCol;

parentCol = ds.Tables["Customers"].Columns["CustomerID"];
childCol = ds.Tables["Orders"].Columns["CustomerID"];
dr = new DataRelation("CustOrders", parentCol, childCol);
ds.Relations.Add(dr);

Para ms informacin sobre relaciones de datos, ver Explorar una
relacin entre tablas, en la documentacin de Visual Studio .NET.

Ejemplo de objeto
DataRelation
Visual Basic .NET
C#
Nota
Acceso a datos con Microsoft ADO.NET 39


Navegar programticamente entre tablas utilizando relaciones
ds.Tables(index).Rows(index).GetChildRows("relation")
ds.Tables(index).Rows(index).GetParentRow("relation")
ds.Tables(index).Rows(index).GetChildRows("relation")
ds.Tables(index).Rows(index).GetParentRow("relation")
Customers Orders
GetChildRows
GetParentRow
DataSet
ds.Tables[index].Rows[index].GetChildRows("relation");
ds.Tables[index].Rows[index].GetParentRow("relation");
ds.Tables[index].Rows[index].GetChildRows("relation");
ds.Tables[index].Rows[index].GetParentRow("relation");

*****************************
En muchos ejemplos de aplicaciones Web, necesitaremos trabajar con datos de
ms de una tabla, y a menudo querremos trabajar con datos de tablas
relacionadas. La relacin entre una tabla primaria y una tabla secundaria se
denomina relacin principal-detalle. Un ejemplo de esta relacin sera
recuperar el registro de un cliente y visualizar tambin informacin de los
pedidos relacionados con ese cliente.
El modelo de objetos DataSet desconectado nos permite trabajar con mltiples
objetos DataTables en nuestra aplicacin Web y definir una relacin entre esos
objetos DataTable. Podemos utilizar la relacin para navegar por registros
relacionados de las tablas.
Una de las principales funciones de una clase DataRelation es permitir la
navegacin desde un objeto DataTable a otro objeto DataTable en un objeto
DataSet. Esta capacidad de navegacin nos permite recuperar todos los objetos
DataRow relacionados en un objeto DataTable cuando tenemos un nico
objeto DataRow de un objeto DataTable relacionado. Por ejemplo, tras
establecer un objeto DataRelation entre un objeto DataTable de clientes y un
objeto DataTable de rdenes de compra, podemos recuperar todas las filas de
los pedidos de un determinado cliente utilizando el mtodo
DataRow.GetChildRows.
El mtodo GetChildRows de un objeto DataRow recupera las filas
relacionadas de un objeto DataTable secundario. El mtodo GetParentRow de
un objeto DataRow recupera la fila primaria de un objeto DataTable primario.
Introduccin
Navegar
programticamente
40 Acceso a datos con Microsoft ADO.NET


Por ejemplo, podemos tener un control DataGrid denominado dgCustomers
que muestre datos del objeto DataTable Customers, que es un objeto DataSet
ds. El siguiente cdigo muestra un bucle que recorre todos los registros
childOrder para obtener una lista de nmeros de pedido:
currentParentRow = ds.Tables("Customers"). _
Rows(dgCustomers.SelectedIndex)
For Each r In currentParentRow.GetChildRows("CustOrders")
Label1.Text &= r("OrderID") & ", "
Next

currentParentRow = ds.Tables["Customers"].
Rows[dgCustomers.SelectedIndex];
foreach(DataRow r
in currentParentRow.GetChildRows("CustOrders"))
{
Label1.Text += r["OrderID"] + ",";
}

Visual Basic .NET
C#
Acceso a datos con Microsoft ADO.NET 41


Navegar visualmente entre tablas utilizando relaciones
Dim tableView As DataView
Dim currentRowView As DataRowView
tableView = New DataView(ds.Tables("Customers"))
currentRowView = tableView(dgCustomers.SelectedIndex)
dgChild.DataSource = currentRowView.CreateChildView("CustOrders")
Dim tableView As DataView
Dim currentRowView As DataRowView
tableView = New DataView(ds.Tables("Customers"))
currentRowView = tableView(dgCustomers.SelectedIndex)
dgChild.DataSource = currentRowView.CreateChildView("CustOrders")
Customers Orders
CreateChildView
DataRowView
DataView
DataSet
DataView tableView;
DataRowView currentRowView;
tableView = new DataView(ds.Tables["Customers"]);
currentRowView = tableView[dgCustomers.SelectedIndex];
dgChild.DataSource = currentRowView.CreateChildView("CustOrders");
DataView tableView;
DataRowView currentRowView;
tableView = new DataView(ds.Tables["Customers"]);
currentRowView = tableView[dgCustomers.SelectedIndex];
dgChild.DataSource = currentRowView.CreateChildView("CustOrders");

*****************************
Con Visual Studio .NET tambin podemos mostrar relaciones arrastrando
controles desde el cuadro de herramientas. Si deseamos mostrar las filas
secundarias de una relacin en otro control enlazado a lista, podemos utilizar el
mtodo CreateChildView y vincular el control enlazado a lista al objeto
DataView resultante.
Para conectar dos controles enlazados a lista a travs de un objeto
DataRelation, necesitamos obtener el objeto DataRowView de la fila
seleccionada del control enlazado a lista primario, e invocar el mtodo
CreateChildView del objeto DataRowView.
El siguiente cdigo crea un objeto DataView desde un objeto DataRelation
para mostrar registros secundarios en un control DataGrid:
Dim parentTableView As New _
DataView(ds.Tables("Customers"))
Dim currentRowView As DataRowView = _
parentTableView(dgCustomers.SelectedIndex)
dgChild.DataSource = _
currentRowView.CreateChildView("CustOrders")
dgChild.DataBind()

DataView parentTableView = new
DataView(ds.Tables["Customers"]);
DataRowView currentRowView =
parentTableView[dgCustomers.SelectedIndex];

dgChild.DataSource =
currentRowView.CreateChildView("CustOrders");
dgChild.DataBind();

Navegar visualmente
Visual Basic .NET
C#
42 Acceso a datos con Microsoft ADO.NET


Prctica dirigida por el instructor: mostrar datos de mltiples tablas
Programticamente:
Crear un DataSet
Crear un DataRelation
Mostrar registros secundarios utilizando
DataRelation
Visualmente:
Invocar CreateChildView

*****************************
Ejecutar la prctica dirigida por el instructor
1. Abrir la pgina UseRelations.aspx del proyecto Mod10VB o Mod10CS de
la solucin 2310Demos.
2. Generar y examinar la pgina UseRelations.aspx.
La pgina tiene dos controles DataGrid. Cuando seleccionamos un cliente
en el primer control DataGrid, el procedimiento de evento lee las filas
relacionadas del objeto DataTable Orders, basndose en la relacin y los
nmeros de pedido que se muestran, y genera un DataView para el control
DataGrid secundario.
3. En Visual Studio .NET, visualizar la pgina de cdigo subyacente de la
pgina UseRelations.aspx.
4. El procedimiento de evento Page_Load invoca tres sub-procedimientos:
CreateDataSet, MakeDataRelation y BindToDataGrid:
CreateDataSet. Este sub-procedimiento crea el objeto Connection, el
objeto DataAdapter y el objeto DataSet.
MakeDataRelation. Este sub-procedimiento crea el objeto
DataRelation entre las dos tablas. La relacin es Publishers a Titles.
BindToDataGrid. Este sub-procedimiento vincula el control DataGrid
a la tabla primaria, Customers.
5. El procedimiento de evento dgParent_SelectedIndexChanged muestra
filas secundarias de dos modos: programticamente y visualmente:
Programticamente. El procedimiento invoca el mtodo GetChildRows
de la fila actual recorre los registros devueltos para mostrar el campo
OrderID de cada fila.
Visualmente. El procedimiento invoca el mtodo CreateChildView de
la vista de la fila actual y la vincula a un segundo control DataGrid.

Acceso a datos con Microsoft ADO.NET 43


Mostrar el Asistente para formularios de datos
1. Hacer clic con el botn derecho en el proyecto Mod10, clic en Agregar y
clic en Agregar nuevo elemento.
2. En el cuadro de dilogo Agregar nuevo elemento, hacer clic en el
Asistente para formularios de datos en la lista Plantillas, escribir
CustOrders.aspx en el campo Nombre y hacer clic en Abrir.
3. Seguir los pasos del asistente como muestra la siguiente tabla.
En esta pgina Hacer lo siguiente

Bienvenido Hacer clic en Siguiente.
Escoger el DataSet que deseamos
utilizar
Hacer clic en Crear un nuevo DataSet
denominado, escribir dsCustOrders en
el campo y hacer clic en Siguiente.
Escoger una conexin de datos Seleccionar una conexin existente a la
base de datos Northwind o crear una
nueva, y hacer clic en Siguiente.
Escoger tablas o vistas Agregar las tablas Customers y Orders a
la lista Elemento(s) seleccionado(s) y
hacer clic en Siguiente.
Crear una relacin entre tablas Introducir CustOrders en el campo
Nombre, seleccionar Customers como
Tabla primaria, seleccionar Orders
como Tabla secundaria, seleccionar
CustomerID como Clave para ambas
tablas (primaria y secundaria), hacer clic
en el botn > y clic en Siguiente.
Escoger las tablas y columnas a mostrar Mantener los valores predeterminados
para mostrar todas las columnas en las
tablas Principal y Detalle, y hacer clic
en Finalizar.

El Asistente para formularios de datos crea un formulario Web Form con
un control DataGrid y un botn Load.
4. Hacer clic con el botn derecho en la pgina CustOrders.aspx del
Explorador de soluciones y hacer clic en Ver en el navegador.
5. En el navegador, hacer clic en Cargar.
El control DataGrid se carga con datos de la tabla Customers y se muestran
los datos.
6. Hacer clic en Mostrar detalles para uno de los clientes y desplazarse hasta
la parte inferior de la pgina.
La informacin detallada del cliente seleccionado se muestra en otra tabla.

44 Acceso a datos con Microsoft ADO.NET


Leccin: acceder a datos con DataReaders
Ques un DataReader?
Crear un DataReader
Leer datos de un DataReader
Vincular un DataReadera un control enlazado a lista
Prctica: organizar cdigo para crear un DataReader
Demostracin: mostrar datos utilizando DataReaders

*****************************
La ventaja de utilizar un objeto DataSet es que proporciona una copia
desconectada de la base de datos. Para aplicaciones Web de larga ejecucin, el
uso de un objeto DataSet es a menudo la mejor opcin. Sin embargo, los
desarrolladores frecuentemente realizan operaciones cortas y sencillas, como
mostrar un nico conjunto de datos directamente al usuario o acceder a una
nica contrasea, con cada peticin de datos. Para ese tipo de operaciones, los
desarrolladores no necesitan mantener un objeto DataSet; pueden utilizar un
objeto DataReader.
En esta seccin, aprenderemos a leer datos de una fuente de datos utilizando la
clase DataReader.
En esta leccin, aprenderemos a:
Explicar cmo funciona la clase DataReader.
Crear un objeto DataReader.
Leer datos de un objeto DataReader.
Vincular un control de servidor enlazado a lista a un objeto DataReader.

Introduccin
Objetivos de la leccin
Acceso a datos con Microsoft ADO.NET 45


Qu es un DataReader?
Slo hacia delante, slo lectura
Acceso rpido a datos
Conexin a una fuente de datos
Gestin de la conexin por s mismo
Gestin de los datos por s mismo, o vincularlos a un
control enlazado a lista
Utiliza menos recursos delservidor

*****************************
Cuando se recupera una gran cantidad de datos de una fuente de datos,
mantener la memoria abierta puede ser un problema. Por ejemplo, leer 10.000
filas de una base de datos hace que un objeto DataTable asigne y mantenga
memoria para esas 10.000 filas durante la vida de la tabla. Si 1.000 usuarios
hacen esto contra el mismo equipo a la vez, el uso de la memoria ser un factor
crtico. Para abordar estas situaciones del uso de memoria, la clase DataReader
est diseada para producir un flujo de datos de slo lectura y slo hacia delante
que la base de datos devuelve. Por tanto, slo hay un registro en memoria cada
vez en el servidor.
La clase DataReader proporciona una transferencia de datos de slo lectura y
slo hacia delante que puede vincularse a un control enlazado a lista. Por
ejemplo, si slo deseamos mostrar los resultados de una consulta a una base de
datos en un nico control enlazado a lista, y si no vamos a manipular esos
datos, una clase DataReader es una forma ideal de conseguirlo.
Los objetos DataReader son ms rpidos que los objetos DataSet por la
naturaleza ligera de la clase DataReader. En la creacin del objeto DataSet, la
sobrecarga es mayor debido a que los objetos DataSet tienen la capacidad de
leer y escribir datos y examinar hacia delante y hacia atrs. Hay muy poca
sobrecarga en un objeto DataReader ya que es slo hacia delante y slo de
lectura. Esta relativa falta de sobrecarga supone un acceso a datos ms rpido
con un objeto DataReader que con un objeto DataSet.
ADO.NET incluye dos tipos de objetos DataReader: el objeto SqlDataReader
para datos SQL Server versin 7.0 o posterior, y el objeto OleDbDataReader
para datos OLE DB Data Provider. Utilizamos los objetos OleDbCommand y
SqlCommand, y el mtodo ExecuteReader, para transferir datos a un objeto
DataReader.
Introduccin
Slo hacia delante, slo
lectura
Acceso rpido a datos
Conexin a la fuente de
datos
46 Acceso a datos con Microsoft ADO.NET


A diferencia de un objeto DataAdapter que se abre y cierra automticamente,
debemos gestionar la conexin del objeto DataReader por nosotros mismos.
La clase DataReader se parece a la clase DataAdapter en que creamos un
objeto Command desde una instruccin y una conexin SQL. Sin embargo,
con el objeto DataReader Command, debemos abrir y cerrar explcitamente el
objeto Connection.
Tenemos la opcin de recorrer los datos del objeto DataReader y mostrarlo
programticamente, o podemos vincular un objeto DataReader a un control
enlazado a lista. En ambos casos, debemos escribir el cdigo nosotros mismos.
Debido a que el DataReader no es una representacin en memoria de los datos,
utilizar un DataReader afecta poco a la disponibilidad de los recursos del
servidor.
Gestin de la conexin
por s mismo
Gestin de los datos
uno mismo
Utiliza menos recursos
del servidor
Acceso a datos con Microsoft ADO.NET 47


Crear un DataReader
Cdigode ejemplo
Para utilizar un DataReader:
1. Crear y abrir la conexin a la base de datos
2. Crear un objeto Command
3. Crear un DataReaderdesde el objeto Command
4. Invocar el mtodo ExecuteReader
5. Utilizar el objeto DataReader
6. Cerrar el objeto DataReader
7. Cerrar el objeto Connection
Utilizar el controlador de errores TryCatchFinally
1
1 1
2
2 2
3
3 3
4
4 4
5
5 5
6
6 6
7
7 7

*****************************
Para utilizar un objeto SqlDataReader, necesitamos crear un objeto
SqlCommand en lugar de un objeto SqlDataAdapter, que es lo que se
necesitaba con los objetos DataSet. El objeto SqlCommand expone un mtodo
ExecuteReader que devuelve un objeto SqlDataReader.
Similar a un objeto DataAdapter, creamos un objeto Command desde una
instruccin SQL y una conexin. Sin embargo, con el objeto DataReader
Command, debemos explcitamente abrir y cerrar el objeto Connection.
Para utilizar un objeto DataReader, debemos codificar manualmente todo el
proceso de conexin. Para utilizar un objeto DataReader se requieren los
siguientes pasos:
1. Crear y abrir la conexin a la base de datos.
2. Crear un objeto Command.
3. Crear el objeto DataReader desde el objeto Command.
4. Invocar el mtodo ExecuteReader.
5. Utilizar el objeto DataReader.
6. Cerrar el objeto DataReader.
7. Cerrar el objeto Connection.

Introduccin
Utilizar un DataReader
48 Acceso a datos con Microsoft ADO.NET


El siguiente cdigo de ejemplo abre una conexin a una base de datos, crea un
objeto DataReader desde un objeto Command, y recorre el objeto
DataReader y agrega campos de los registros a un control ListBox:
'Create connection and command objects
Dim conn As New SqlConnection _
("data source=localhost;integrated security=true;" & _
"initial catalog=pubs")
Dim cmdAuthors As New SqlCommand _
("select * from Authors", conn)
conn.Open()

'create DataReader and display data
Dim dr As SqlDataReader
dr = cmdAuthors.ExecuteReader()
Do While dr.Read()
lstBuiltNames.Items.Add(dr("au_lname") + ", " + _
dr("au_fname"))
Loop

'close DataReader and Connection
dr.Close()
conn.Close()

// Open Connection and create command
SqlConnection conn = new SqlConnection
("data source=localhost; integrated security=true; " +
"initial catalog=pubs;");
SqlCommand cmdAuthors = new SqlCommand
("select * from Authors", conn);
conn.Open();

// Create DataReader and read data
SqlDataReader dr;
dr = cmdAuthors.ExecuteReader();
while (dr.Read())
{
lstBuiltNames.Items.Add(dr["au_lname"] + ", " +
dr["au_fname"]);
}

// Close DataReader and Connection
dr.Close();
conn.Close();

Visual Basic .NET
C#
Acceso a datos con Microsoft ADO.NET 49


Cuando se utilizan conexiones con el objeto DataReader, debemos utilizar
siempre una instruccin TryCatchFinally para garantizar que si algo falla,
la conexin se cerrar. De lo contrario, la conexin puede permanecer abierta
de forma indefinida.
El siguiente cdigo de un objeto DataReader captura errores y cierra la
conexin:
Try
conn.Open()
dr = cmdAuthors.ExecuteReader()
'use the returned data in the DataReaders
Catch e As Exception
'handle the error
Finally
dr.Close()
conn.Close()
End Try

try
{
conn.Open();
dr = cmdAuthors.ExecuteReader();
// use the returned data in the DataReaders
}
catch(Exception e)
{
// Handle error
}
finally
{
dr.Close();
conn.Close();
}

Utilizar el controlador de
eventos
TryCatchFinally
Visual Basic .NET
C#
50 Acceso a datos con Microsoft ADO.NET


Leer datos desde un DataReader
Invocar Readpara cada registro
Devuelve falsecuando no hay ms registros
Acceso a campos
Parmetro es la posicin ordinal o nombre del campo
Las funciones Getofrecen un mejor rendimiento
Cerrar el DataReader
Cerrar la conexin
Do While myReader.Read()
str &= myReader(1)
str &= myReader("field")
str &= myReader.GetDateTime(2)
Loop
Do While myReader.Read()
str &= myReader(1)
str &= myReader("field")
str &= myReader.GetDateTime(2)
Loop
while (myReader.Read())
{
str += myReader[1];
str += myReader["field"];
str += myReader.GetDateTime(2);
}
while (myReader.Read())
{
str += myReader[1];
str += myReader["field"];
str += myReader.GetDateTime(2);
}

*****************************
Tras invocar el mtodo ExecuteReader del objeto Command, podemos
acceder a un registro del objeto DataReader invocando el mtodo Read. El
objeto DataReader se posiciona de modo predeterminado antes del primer
registro; por tanto, debemos invocar el mtodo Read antes de acceder a algn
dato. Cuando ya no hay ms registros disponibles, el mtodo Read devuelve un
valor nulo.
El siguiente cdigo recorre todos los registros de un objeto DataReader dr, y
muestra el campo au_fname en el control Label lblName:
Do While dr.Read()
lblName.Text &= dr("au_fname")
Loop

while (dr.Read())
{
lblName.Text += dr["au_name"];
}

Invocar Read para cada
registro
Visual Basic .NET
C#
Acceso a datos con Microsoft ADO.NET 51


Para obtener los datos de los campos del registro actual, podemos acceder a un
campo por su posicin ordinal, por su nombre o invocando un mtodo Get
adecuado, como GetDateTime, GetDouble, GetInt32 o GetString.

Utilizar un mtodo Get especfico es ms rpido que acceder por
la posicin ordinal o por el nombre, porque el DataReader no necesita
comprobar el formato de los datos.

Por ejemplo, el siguiente cdigo de ejemplo lee los campos del primer y ltimo
nombre, ambos valores de cadena, desde el primer registro del objeto
DataReader dr, utilizando el mtodo GetString():
dr.Read()
lblName.Text = dr.GetString(1) + ", " + _
dr.GetString(2)

dr.Read();
lblName.Text = dr.GetString(1) + ", " +
dr.GetString(2);

Tambin podemos referenciar, por nombre, los campos de datos del registro
actual del objeto DataReader. Seguidamente, podemos invocar una funcin de
conversin apropiada, como muestra el siguiente cdigo de ejemplo:
myReader("au_fname")

myReader["au_fname"];

Mientras el objeto DataReader est en uso, la conexin asociada est ocupada
dando servicio al objeto DataReader. Por tanto, debemos invocar el mtodo
Close para cerrar el objeto DataReader cuando finalicemos su uso, como
muestra el siguiente cdigo de ejemplo:
myReader.Close()

myReader.Close();

DataReader no cierra automticamente la conexin. Debemos invocar
explcitamente el mtodo Close para cerrar la conexin cuando finalicemos su
uso, como muestra el siguiente cdigo de ejemplo:
conn.Close()

conn.Close();

Acceso a campos
Sugerencia
Visual Basic .NET
C#
Visual Basic .NET
C#
Cerrar el DataReader
Visual Basic .NET
C#
Cerrar la conexin
Visual Basic .NET
C#
52 Acceso a datos con Microsoft ADO.NET


Vincular un DataReader a un control enlazado a lista
Crear el control
Vincular a un DataReader
dgAuthors.DataSource = dr
dgAuthors.DataBind()
dgAuthors.DataSource = dr
dgAuthors.DataBind()
<asp:DataGrid id="dgAuthors" runat="server" />
<asp:DataGrid id="dgAuthors" runat="server" />
dgAuthors.DataSource = dr;
dgAuthors.DataBind();
dgAuthors.DataSource = dr;
dgAuthors.DataBind();

*****************************
Adems de recorrer los datos del objeto DataReader y mostrarlos
programticamente, podemos vincular un objeto DataReader a un control
enlazado a lista.
Para vincular un objeto DataReader a un control enlazado a lista, establecemos
la propiedad DataSource del control enlazado a lista al objeto DataReader. El
siguiente cdigo de ejemplo crea un objeto DataReader dr, lo vincula a un
control ListBox au_lname, y cierra los objetos DataReader y Connection:
Dim conn As New SqlConnection _
("data source=localhost;integrated security=true;" & _
"initial catalog=pubs")
conn.Open()
Dim cmdAuthors As New SQLCommand _
("select * from Authors", conn)

'bind the datareader to a listbox
Dim dr As SqlDataReader
dr = cmdAuthors.ExecuteReader()
lstBoundNames.DataSource = dr
lstBoundNames.DataTextField = "au_lname"
lstBoundNames.DataBind()

'close the datareader and the connection
dr.Close()
conn.Close()

Introduccin
Visual Basic .NET
Acceso a datos con Microsoft ADO.NET 53


SqlConnection conn = new SqlConnection
("data source=localhost; integrated security=true; " +
"initial catalog=pubs");
conn.Open();

SqlCommand cmdAuthors = new SqlCommand
("select * from Authors", conn);

//bind the datareader to a listbox
SqlDataReader dr;
dr = cmdAuthors.ExecuteReader();
lstBoundNames.DataSource = dr;
lstBoundNames.DataTextField = "au_lname";
lstBoundNames.DataBind();

//close the datareader and the connection
dr.Close();
conn.Close();

C#
54 Acceso a datos con Microsoft ADO.NET


Prctica: organizar cdigo para crear un DataReader
Los estudiantes:
Reordenarn lneas de cdigo para crear
un DataReader
Tiempo: 5 minutos

*****************************
En esta prctica, reorganizaremos las lneas de cdigo ADO.NET en el orden
correcto para crear un objeto DataReader.
Ejecutar la prctica
Visualizar la pgina http://localhost/Mod10VB/DataReaderCode.aspx o
http://localhost/Mod10CS/DataReaderCode.aspx y colocar las lneas de
cdigo ADO.NET en el orden correcto para crear un objeto DataReader.

Hay varias respuestas correctas para esta prctica.


Nota
Acceso a datos con Microsoft ADO.NET 55


Demostracin: mostrar datos utilizando DataReaders
Crear un objeto SqlConnection
Crear un objeto DataReader
Vincular el DataReadera un Cuadro de
lista
Generar los elementos del Cuadro de
lista a partir de datos proporcionados por
el DataReader

*****************************
En esta demostracin, examinaremos el cdigo que crea y rellena un objeto
DataReader utilizando un objeto SQLCommand que vincula el objeto
DataReader a un control ListBox, y vuelve a crear el DataReader para
vincularlo a un segundo control ListBox.
Ejecutar la demostracin
1. Abrir la pgina DataReader.aspx del proyecto Demo08VB o Demo08CS
que se pueden encontrar dentro del fichero demos08.zip.
2. Generar y examinar la pgina DataReader.aspx.
Hay dos cuadros de lista que muestran los mismos datos. El primer cuadro
de lista est vinculado a un objeto DataReader, mientras que el segundo
cuadro de lista se genera recorriendo los registros del objeto DataReader y
generando programticamente cada entrada del control ListBox.
3. En Visual Studio .NET, visualizar el cdigo subyacente de la pgina
DataReader.aspx.
4. En el procedimiento de evento Page_Load, mostrar el cdigo que hace lo
siguiente:
Crea un objeto SqlConnection.
Crea un objeto SqlCommand.
Crea un objeto DataReader.
Vincula el objeto DataReader al primer control ListBox.
Cerrar el objeto DataReader y crearlo de nuevo.
Este paso es necesario debido a que un objeto DataReader es una vista
de los datos slo hacia delante y ya habamos llegado al final de los
datos cuando el objeto DataReader se vincul al control ListBox.
Recorre el objeto DataReader y agrega dos campos por cada elemento
del segundo control ListBox.
Introduccin


Prctica A: Acceso a datos con Microsoft ADO.NET
Medical
Medical.aspx
Medical
Medical.aspx
Benefits
Home Page
Default.aspx
Benefits
Home Page
Default.aspx
Life Insurance
Life.aspx
Life Insurance
Life.aspx
Retirement
Retirement.aspx
Retirement
Retirement.aspx
Dental
Dental.aspx
Dental
Dental.aspx
Dentists
Doctors
Doctors.aspx
Doctors
Doctors.aspx
Doctors
Logon Page
Login.aspx
Logon Page
Login.aspx
Registration
Register.aspx
Registration
Register.aspx
Coho
Winery
Prospectus
Prospectus.aspx
Prospectus
Prospectus.aspx
XML Web
Service
dentalService1.asmx
XML Web
Service
dentalService1.asmx
Page Header
Header.ascx
Page Header
Header.ascx
ASPState
tempdb
LabWeb
Application
User Control
namedate.ascx
User Control
namedate.ascx
Menu
Component
Class1.vb or Class1.cs
Menu
Component
Class1.vb or Class1.cs
XML
Files
Web.
config


En este laboratorio, aprenderemos a:
Recuperar datos de una base de datos MicrosoftSQL Server

utilizando
los objetos SqlConnection y SqlDataAdapter.
Almacenar datos en un objeto DataSet y mostrar esos datos a los usuarios
en un control DataGrid.
Recuperar datos de una base de datos SQL Server utilizando los objetos
SqlConnection y SqlDataReader.
Vincular un objeto SqlDataReader a un control DataGrid para mostrar
datos.

Este laboratorio se centra en los conceptos de este mdulo. Por ello,
podra no cumplir las recomendaciones de seguridad de Microsoft. Por ejemplo,
este laboratorio no cumple la recomendacin de que todo el acceso a datos se
realice a travs de procedimientos almacenados.

Para trabajar en este laboratorio, es necesario tener:
Conocimientos sobre cmo utilizar los objetos SqlConnection,
SqlDataAdapter, SqlDataReader y DataSet de Microsoft ADO.NET para
leer datos de una base de datos SQL Server.
Conocimientos sobre cmo mostrar datos DataSet en un control DataGrid.

Objetivos
Nota
Requisitos previos
Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios de
este curso, crearemos un sitio Web que permita a los empleados seleccionar y
configurar los beneficios que elijan.
Uno de los beneficios que ofrece Coho Winery es el seguro mdico. Cuando se
solicita un seguro mdico, el usuario debe seleccionar un mdico de cuidados
primarios. Los doctores aprobados por la compaa aparecen en una lista de una
base de datos SQL Server denominada doctors. La base de datos tambin
incluye las direcciones de los doctores. En este laboratorio, mejoraremos la
pgina doctors.aspx del sitio Web de Coho Winery para permitir a los usuarios
que generen una lista de los doctores de ciudades concretas.
Escenario
Tiempo estimado para
completar el laboratorio:
30 minutos


Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList.
Estos proyectos pueden haberse creado utilizando Visual Basic .NET o
Microsoft Visual C#

.NET.
Si no se han creado estos proyectos, realizar los siguientes pasos:
Crear la solucin LabApplication

Realizar este procedimiento nicamente si no se ha creado un
archivo de solucin LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solucin en blanco
denominada LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Solucin en
blanco.
b. En el cuadro de dilogo Nuevo proyecto, escribir LabApplication en el
cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto Benefits, o si se ha eliminado.

1. Crear un nuevo proyecto de aplicacin Web ASP.NET, denominado
BenefitsVB o BenefitsCS, en la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic o Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Aplicacin Web ASP.NET,
establecer la ubicacin en http://localhost/BenefitsVB para el proyecto
Visual Basic .NET o en http://localhost/BenefitsCS para el proyecto
Visual C#.
d. Hacer clic en Agregar a Solucin, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solucin, es importante el
uso de maysculas en el nombre del proyecto. Probablemente, utilizaremos
algunos formularios Web Forms ya generados en ste y en otros
laboratorios, por ello, debemos verificar que hemos escrito con maysculas
el nombre del proyecto Benefits.


Importante
Importante
Precaucin
Actualizar el proyecto Benefits
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente.
3. Buscar los archivos de proyecto.
Ir a la carpeta VB\Starter\BenefitsVB

Ir a la carpeta CS\Starter\BenefitsCS.
Estas carpetas pueden encontrarse dentro del fichero labs08.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de sobrescribir o recargar los archivos.

Crear la biblioteca de clases BenefitsList

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto BenefitsList, o si se ha eliminado.

1. Crear un nuevo proyecto de biblioteca de clases.
Crear un nuevo proyecto de biblioteca de clases Microsoft Visual Basic
.NET con el nombre BenefitsListVB, y agregarlo a la solucin
LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual Basic.
c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListVB.
d. Hacer clic en Agregar a solucin, y clic en Aceptar.
Crear un nuevo proyecto de biblioteca de clases Microsoft Visual C#


.NET con el nombre BenefitsListCS, y agregarlo a la solucin
LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre a BenefitsListCS.
d. Hacer clic en Agregar a solucin, y clic en Aceptar.

Verificar que se han escrito correctamente las maysculas del
proyecto BenefitsList.


Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Importante
Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Precaucin


Actualizar el proyecto BenefitsList
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente.
3. Ir al proyecto BenefitsList.
Ir a la carpeta VB\Starter\BenefitsListVB.

Ir a la carpeta CS\Starter\BenefitsListCS.
Estas carpetas pueden encontrarse dentro del fichero labs08.zip
4. En el cuadro Archivos del tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de sobrescribir o recargar los archivos.

Crear una referencia al componente BenefitsList del proyecto Benefits
1. En el proyecto Benefits de la solucin LabApplication, completar los
siguientes pasos para agregar una referencia al componente BenefitsList
que acabamos de crear:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB o
BenefitsCS en el Explorador de soluciones y hacer clic en Agregar
referencia.
b. En el cuadro de dilogo Agregar referencia, en la pestaa Proyectos,
hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.
c. En la lista Componentes seleccionados, seleccionar el componente
BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar.
El componente se agrega a la carpeta Referencias en el Explorador de
soluciones.

Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Ejercicio 1
Utilizar un SqlDataReader
En este ejercicio, rellenaremos un cuadro de lista en la pgina doctors.aspx con
las ciudades donde se encuentran los doctores. Cuando el usuario selecciona
una ciudad, crearemos una nueva vista DataSet de los datos y mostraremos los
datos en el DataGrid.
Agregar el cuadro lista
1. Abrir la pgina doctors.aspx del proyecto BenefitsVB o BenefitsCS.
2. Mediante una operacin de arrastrar y soltar, ubicar un control
DropDownList en la pgina doctors.aspx, como muestra la siguiente
ilustracin. El cuadro de lista mostrar las ciudades donde se encuentran los
doctores.

3. Establecer la propiedad ID del control DropDownList en lstCities.

Leer la lista de ciudades de la base de datos doctors
1. Abrir la pgina de cdigo subyacente de la pgina doctors.aspx,
doctors.aspx.vb o doctors.aspx.cs, e ir al procedimiento de evento
Page_Load.
2. Si se est utilizando C#para completar este laboratorio, introducir la
siguiente instruccin using tras las instrucciones using en la parte superior
del archivo doctors.aspx.cs.
using System.Data.SqlClient;

3. Localizar el siguiente comentario:
'TODO Lab10: bind the listbox to city field in the doctors table

//TODO Lab10: bind the listbox to city field in the doctors table

4. Escribir cdigo para crear un objeto SqlCommand y leer el campo city de
la tabla doctors en la base de datos SQL Server doctors. Utilizar el objeto
SqlConnection que se ha creado en la pgina.
Visual C#
Visual Basic .NET
C#


El comando SqlCommand debera ser "SELECT city FROM doctors."
5. Escribir cdigo para abrir la conexin a la base de datos.
6. Escribir cdigo para crear un objeto SqlDataReader desde el objeto
SqlCommand invocando el mtodo ExecuteReader del objeto
SqlCommand.
7. Escribir cdigo para establecer las propiedades de la lista desplegable
lstCities como se muestra en la siguiente tabla.
Propiedad Valor

DataSource Objeto SqlDataReader
DataTextField "city"

8. Escribir cdigo para invocar el mtodo DataBind del cuadro de lista
desplegable lstCities.
9. Escribir cdigo para cerrar los objetos DataReader y Connection.
El cdigo debera ser similar al siguiente:
Dim cmdCities As New SqlCommand _
("SELECT city FROM doctors", SqlConnection1)
Dim drCities As SqlDataReader
SqlConnection1.Open()
drCities = cmdCities.ExecuteReader()
lstCities.DataSource = drCities
lstCities.DataTextField = "city"
lstCities.DataBind()
drCities.Close()
SqlConnection1.Close()

SqlCommand cmdCities = new SqlCommand
("Select city FROM doctors", sqlConnection1);
sqlDataReader drCities;
sqlConnection1.Open();
drCities = cmdCities.ExecuteReader();
lstCities.DataSource = drCities;
lstCities.DataTextField = "city";
lstCities.DataBind();
drCities.Close();
sqlConnection1.Close();

Visual Basic .NET
C#
10. Generar y examinar la pgina doctors.aspx.
El cuadro de lista desplegable City debera mostrar la lista de ciudades
donde se encuentran los doctores.
Observar que el cuadro lista City muestra una ciudad por cada fila de la
base de datos. Aunque este mtodo funciona, no es la forma ms amigable
de mostrar la informacin sobre las ciudades. Qu podemos hacer para
mejorarlo?
____________________________________________________________
____________________________________________________________

El Laboratorio Invocar procedimientos almacenados con Microsoft
ADO.NET presenta una solucin a este problema.


Crear un DataView para el DataGrid
1. Establecer a true la propiedad AutoPostBack del cuadro de lista
desplegable lstCities.
2. Crear un procedimiento de evento SelectedIndexChanged para el cuadro
de lista desplegablelstCities.
En el procedimiento de evento SelectedIndexChanged, agregaremos el
cdigo para mostrar en el control DataGrid nicamente los doctores de la
ciudad seleccionada. Por ejemplo, si se selecciona Seattle en el cuadro de
lista desplegable, el control DataGrid nicamente mostrar doctores de esta
ciudad.
3. Leer la ciudad seleccionada en el cuadro de lista desplegable lstCities y
almacenar el nombre de la ciudad en una variable String denominada
strCity.
4. Rellenar el DataSet DsDoctors1 utilizando el DataAdapter
sqlDataAdapter1.
5. Crear un nuevo DataView desde Table(0) del DataSet.
6. Establecer la propiedad RowFilter del DataView para mostrar nicamente
los registros en los que el campo city sea igual a la ciudad seleccionada en
el cuadro de lista desplegablelstCities.
7. Establecer la propiedad DataSource del control DataGrid al nuevo
DataView.
Nota


8. Invocar el mtodo DataBind del control DataGrid.
El cdigo debera ser similar al siguiente:
Dim strCity As String = Trim(lstCities.SelectedItem.Value)
SqlDataAdapter1.Fill(DsDoctors1)
Dim dvDocs As New DataView(DsDoctors1.Tables(0))
dvDocs.RowFilter = "city = '" & strCity & "'"
dgDoctors.DataSource = dvDocs
dgDoctors.DataBind()

string strCity = lstCities.SelectedItem.Value.Trim();
sqlDataAdapter1.Fill(dsDoctors1);
DataView dvDocs = new DataView(dsDoctors1.Tables[0]);
dvDocs.RowFilter = "City = '" + strCity + "' ";
dgDoctors.DataSource = dvDocs;
dgDoctors.DataBind();

9. En vista de Diseo, eliminar la configuracin de las propiedades
DataSource y DataMember para el control DataGrid:
a. En la pgina doctors.aspx, seleccionar el control DataGrid dgDoctors.
b. En la ventana Propiedades, seleccionar DataMember, resaltar el valor
doctors, y pulsar SUPRIMIR.
c. En la ventana Propiedades, seleccionar DataSource, resaltar el valor
dsDoctors1, y pulsar SUPRIMIR.

Estamos eliminando estas configuraciones de propiedades porque
entran en conflicto con el cdigo que hemos agregado en los pasos
anteriores. Cuando las propiedades se establecen tanto en el cdigo como en
la interfaz de usuario (IU), el resultado obtenido es impredecible.

10. En el procedimiento de evento Page_Load, inmediatamente despus del
cdigo para rellenar el objeto DataSet dsDoctors1, establecer el
DataSource del DataGrid dgDoctors al objeto DataSet DsDoctors1. El
cdigo debera ser similar al siguiente, con la lnea recin agregada en
negrita:
SqlDataAdapter1.Fill(DsDoctors1)
dgDoctors.DataSource = DsDoctors1
dgDoctors.DataBind()

sqlDataAdapter1.Fill(dsDoctors1);
dgDoctors.DataSource = dsDoctors1;
dgDoctors.DataBind();

11. Generar y examinar la pgina doctors.aspx.
Cuando seleccionamos una ciudad en el cuadro de lista City, el DataGrid
dgDoctors muestra nicamente los doctores ubicados en la ciudad
seleccionada.

Visual Basic .NET
C#
Nota
Visual Basic .NET
C#
Ejercicio 2
Visualizar doctores de todas las ciudades
En este ejercicio, agregaremos la opcin All al cuadro de lista desplegable City
y restableceremos la funcionalidad a la pgina Web doctors.aspx, que
restablecer los controles del cuadro de lista DataGrid y Specialties a una
configuracin predeterminada.
Agregar un elemento [All] al cuadro lista
1. Abrir la pgina de cdigo subyacente para la pgina doctors.aspx,
doctors.aspx.vb o doctors.aspx.cs, e ir al procedimiento de evento
Page_Load.
2. Localizar el siguiente comentario:
'TODO Lab10: add the "All" item to the list and select it

//TODO Lab10: add the "All" item to the list and select it

3. Invocar el mtodo Add de la coleccin lstCities.Items para agregar un
nuevo elemento a la lista denominado [All].
4. Establecer la propiedad SelectedIndex del cuadro de lista desplegable
lstCities al ltimo elemento de la lista (que es el elemento [All] que
acabamos de aadir).
El cdigo debera ser similar al siguiente:
lstCities.Items.Add("[All]")
lstCities.SelectedIndex = lstCities.Items.Count 1

lstCities.Items.Add("[All]");
lstCities.SelectedIndex = lstCities.Items.Count 1;


Comprobar la seleccin de [All] en el procedimiento de evento
SelectedIndexChanged
1. En el archivo doctors.aspx.vb o the doctors.aspx.cs, ir al procedimiento de
evento lstCities_SelectedIndexChanged.
2. Agregar una prueba al procedimiento de evento
lstCities_SelectedIndexChanged, despus de rellenar el DataSet, pero
antes de invocar el mtodo DataBind, para ver si el elemento [All] estaba
seleccionado.
3. Si el elemento [All] est seleccionado, establecer el DataSource del control
dgDoctors DataGrid a todo el DataSet DsDoctors1.
4. Si una ciudad est seleccionada en el cuadro de lista desplegablelstCities,
crear un DataView para mostrar nicamente los doctores ubicados en esa
ciudad, y asignar el DataSource del DataGrid dgDoctors al DataView.
5. Invocar la funcin reset para eliminar las pginas o selecciones del
DataGrid.
La funcin reset ya est en la pgina de cdigo subyacente doctors.aspx.vb
o doctors.aspx.cs.
Visual Basic .NET
C#
Visual Basic .NET
C#


El procedimiento de evento lstCities_SelectedIndexChanged debera ser
similar al siguiente:
Private Sub lstCities_SelectedIndexChanged(...
Dim strCity As String = _
Trim(lstCities.SelectedItem.Value)
SqlDataAdapter1.Fill(DsDoctors1)

If strCity = "[All]" Then
dgDoctors.DataSource = DsDoctors1
Else
Dim dvDocs As New DataView(DsDoctors1.Tables(0))
dvDocs.RowFilter = "city = '" & strCity & "'"
dgDoctors.DataSource = dvDocs
End If

reset()
dgDoctors.DataBind()
End Sub

private void lstCities_SelectedIndexChanged(...
{
string strCity =
lstCities.SelectedItem.Value.Trim();
sqlDataAdapter1.Fill(dsDoctors1);

if (strCity == "[All]")
{
dgDoctors.DataSource = dsDoctors1;
}
else
{
DataView dvDocs =
new DataView(dsDoctors1.Tables[0]);
dvDocs.RowFilter = "city = '" + strCity + "'";
dgDoctors.DataSource = dvDocs;
}

reset();
dgDoctors.DataBind();
}

6. Generar y examinar la pgina doctors.aspx.
7. Hacer clic en el cuadro de lista desplegableCity.
Deberamos ver nicamente los doctores de esa ciudad.
8. Hacer clic en [All] en el cuadro de lista desplegableCity.
Deberamos ver todos los doctores de la base de datos doctors.

Paginacin con la seleccin de ciudad
1. En el archivo doctors.aspx.vb o the doctors.aspx.cs, ir al procedimiento de
evento dgDoctors_PageIndexChanged existente.
2. Recuperar el elemento actualmente seleccionado del cuadro de lista
desplegable lstCities y guardarlo en una variable denominada strCity.
Visual Basic .NET
C#
3. Agregar una prueba, despus de rellenar el DataSet, pero antes de invocar
el mtodo DataBind, para ver si el elemento [All] estaba seleccionado.
4. Si el elemento [All] est seleccionado, establecer la propiedad DataSource
del DataGrid dgDoctors a todo el DataSet DsDoctors1.
5. Si una ciudad est seleccionada en el cuadro de lista desplegablelstCities,
crear un DataView para mostrar nicamente los doctores que estn
ubicados en esa ciudad, y establecer la propiedad DataSource del
DataGrid dgDoctors al DataView.
Al finalizar, todo el procedimiento de evento
dgDoctors_PageIndexChanged debera ser similar al siguiente:
Private Sub dgDoctors_PageIndexChanged(...
Dim strCity As String = _
Trim(lstCities.SelectedItem.Value)
dgDoctors.CurrentPageIndex = e.NewPageIndex
SqlDataAdapter1.Fill(DsDoctors1)

If strCity = "[All]" Then
dgDoctors.DataSource = DsDoctors1
Else
Dim dvDocs As New DataView(DsDoctors1.Tables(0))
dvDocs.RowFilter = "city = '" & strCity & "'"
dgDoctors.DataSource = dvDocs
End If
dgDoctors.DataBind()
End Sub

private void dgDoctors_PageIndexChanged(...
{
string strCity =
lstCities.SelectedItem.Value.Trim();
dgDoctors.CurrentPageIndex = e.NewPageIndex;
sqlDataAdapter1.Fill(dsDoctors1);

if (strCity == "[All]")
{
dgDoctors.DataSource = dsDoctors1;
}
else
{
DataView dvDocs =
new DataView(dsDoctors1.Tables[0]);
dvDocs.RowFilter = "city = '" + strCity + "'";
dgDoctors.DataSource = dvDocs;
}
dgDoctors.DataBind();
}

6. Generar y examinar la pgina doctors.aspx.
Probar seleccionando una ciudad y, a continuacin, un nmero de pgina.
Visual Basic .NET
C#


NDICE
Descripcin 1
Leccin: descripcin de los procedimientos almacenados 2
Leccin: invocar procedimientos almacenados 9

Invocar procedimientos almacenados
con Microsoft ADO.NET
Invocar procedimientos almacenados con Microsoft ADO.NET 1


Descripcin
Descripcin de los procedimientos almacenados
Invocar procedimientos almacenados

*****************************
Acceder y manipular datos directamente en una base de datos desde un
formulario Web Form puede constituir un uso muy ineficaz de los recursos, y
puede crear riesgos de seguridad. Una forma de mejorar la eficacia y seguridad
del acceso a las bases de datos es crear procedimientos almacenados en el
servidor de la base de datos, e invocar estos procedimientos almacenados desde
nuestro formulario Web Form. Acceder a una base de datos a travs de un
procedimiento almacenado limita el cdigo del formulario Web Form y el
ancho de banda de la red que debemos utilizar cuando realizamos tareas
complicadas. Acceder a una base de datos mediante un procedimiento
almacenado tambin protege la base de datos al limitar el acceso directo a la
base de datos a procedimientos almacenados locales y de confianza.
En este mdulo, estudiaremos cmo realizar las tareas de acceso a datos desde
las aplicaciones Web utilizando MicrosoftADO.NET para acceder a
procedimientos almacenados.
En este mdulo, aprenderemos a:
Explicar qu es un procedimiento almacenado y los motivos para utilizarlos
en el acceso a una base de datos.
Invocar procedimientos almacenados.

Introduccin
Objetivos
2 Invocar procedimientos almacenados con Microsoft ADO.NET


Leccin: descripcin de los procedimientos almacenados
Ques un procedimiento almacenado?
Por quutilizar procedimientos almacenados?
Prctica: seleccionar el procedimientoalmacenado
correcto

*****************************
Una alternativa al acceso directo a bases de datos desde nuestra aplicacin Web
es invocar un procedimiento almacenado que acceder a la base de datos por
nosotros. El uso de procedimientos almacenados tiene varias ventajas respecto
al acceso directo a bases de datos, incluyendo la eficacia, seguridad y la
proteccin de la base de datos.
En esta leccin, aprenderemos qu es un procedimiento almacenado y los
motivos para invocar procedimientos almacenados cuando se accede a una base
de datos.
En esta leccin, aprenderemos a:
Describir qu es un procedimiento almacenado.
Explicar los motivos para utilizar procedimientos almacenados para acceder
y manipular bases de datos.

Introduccin
Objetivos de la leccin
Invocar procedimientos almacenados con Microsoft ADO.NET 3


Qu es un procedimiento almacenado?
Procedimientos comunes de datos que pueden ser
invocados por mltiples aplicaciones Web
Acceso programtico a una base de datos
Devolver registros
Devolver un valor
Realizar accin
Cliente Cliente
SQL Server
SQL Server
Formulario
Web Form
Procedimiento
almacenado
Procedimiento
almacenado
Servidor Web
Servidor Web
Base datos

*****************************
Un procedimiento almacenado es un procedimiento escrito por un desarrollador
de aplicaciones para bases de datos y que est asociado a una base de datos
especfica. A continuacin, otras aplicaciones Web pueden invocar estos
procedimientos almacenados para acceder y manipular datos de la base de
datos.
Los procedimientos almacenados permiten el acceso a una base de datos
mediante la invocacin de un procedimiento existente en lugar de tener que
escribir nuestras propias instrucciones SQL. Los procedimientos almacenados
estn formados por secuencias de instrucciones Transact-SQL, y funcionan de
modo similar a los procedimientos de una aplicacin Web en cuanto a que las
instrucciones se invocan por su nombre, y pueden tener tanto parmetros de
entrada como de salida.
Los tres tipos de procedimientos almacenados son:
Procedimientos almacenados que devuelven registros
Los procedimientos almacenados que devuelven registros se utilizan para
encontrar registros especficos, clasificar y filtrar esos registros, y devolver
el resultado de las operaciones de bsqueda, clasificacin y filtrado a un
objeto DataSet o un control enlazado a lista. Estos procedimientos
almacenados se basan en instrucciones Select de SQL.
Un ejemplo de un procedimiento almacenado que devuelve registros es una
peticin de la cantidad, fecha y receptor de los tres ltimos movimientos
procesados en una cuenta bancaria. Estos datos podran cargarse en un
objeto DataSet para su posterior procesamiento, o mostrarse directamente al
usuario en un control ListBox.
Introduccin
Acceso programtico a
una base de datos
4 Invocar procedimientos almacenados con Microsoft ADO.NET


Procedimientos almacenados que retornan un valor, tambin denominados
procedimientos almacenados escalares
Los procedimientos almacenados que retornan un valor se utilizan para
ejecutar un comando o funcin de la base de datos que devuelve un nico
valor. Debido a que slo se devuelve un valor, los procedimientos
almacenados que retornan un valor a menudo se utilizan en el cdigo y, a
continuacin, el resultado se muestra a los usuarios.
Un ejemplo de procedimiento almacenado que retorna un valor es devolver
el valor total de los tres ltimos movimientos que se han procesado en una
cuenta bancaria.
Los procedimientos almacenados de accin
Los procedimientos almacenados de accin se utilizan para realizar algunas
funciones en la base de datos, pero no devuelven un registro o un valor.
Estas funciones de la base de datos pueden incluir actualizar, editar o
modificar los datos.
Un ejemplo de un procedimiento almacenado de accin es una peticin para
actualizar una sola direccin de correo en la base de datos de clientes de una
compaa.

Invocar procedimientos almacenados con Microsoft ADO.NET 5


Por qu utilizar procedimientos almacenados?
Programacin modular
Distribucin del trabajo
Seguridad de la base de datos
Ejecucin ms rpida
Reduce el trfico de red
Proporciona flexibilidad

*****************************
Es ms fcil, ms eficaz y ms seguro utilizar un procedimiento almacenado
que escribir el cdigo requerido para conectarnos directamente a una base de
datos y ejecutar nuestras propias instrucciones Transact-SQL. Invocar un
procedimiento almacenado no requiere que entendamos cmo est diseada la
base de datos, y slo se accede a la base de datos mediante un procedimiento ya
probado.
Los procedimientos almacenados son ejemplos clsicos de programacin
modular. Creamos el procedimiento una vez, lo probamos una vez, lo
almacenamos en el servidor de la base de datos, y lo invocamos varias veces
desde mltiples aplicaciones. Las actualizaciones o cambios a la base de datos
permanecen ocultas para todas las aplicaciones que acceden mediante el
procedimiento almacenado.
Un desarrollador especialista en la programacin de bases de datos puede crear
los procedimientos almacenados, mientras que otros desarrolladores pueden
crear paralelamente las aplicaciones Web que utilizarn el procedimiento
almacenado. Esta distribucin del trabajo permite que cada desarrollador se
concentre en su propia especialidad, y cumpla con sus propios plazos.
El uso de procedimientos almacenados proporciona una mayor seguridad para
una base de datos al limitar el acceso directo. nicamente acceden directamente
a la base de datos los procedimientos almacenados probados que han sido
desarrollados por el propietario de la base de datos. Debido a que las dems
aplicaciones Web y otros desarrolladores no acceden directamente a la base de
datos, el riesgo de dao accidental de la estructura o el contenido de la base de
datos es mnimo.
Utilizar instrucciones SQL o Transact-SQL directamente en el cdigo
Microsoft ASP.NET tambin supone un riesgo para la seguridad ya que las
instrucciones pueden dar informacin a un hacker sobre la base de datos y su
estructura. Adems, con el acceso directo a una base de datos, tambin tenemos
el problema de seguridad al intentar determinar qu clase de permisos
deberamos dar a la cuenta de usuario Web sobre las tablas individuales.
Introduccin
Programacin modular
Distribucin del trabajo
Incremento de la
seguridad de la base de
datos
6 Invocar procedimientos almacenados con Microsoft ADO.NET


Si un procedimiento requiere una gran cantidad de cdigo Transact-SQL o si se
invoca repetidamente, el uso de procedimientos almacenados puede dar lugar a
una mayor rapidez de ejecucin que acceder directamente a la base de datos con
cdigo Transact-SQL. Los procedimientos almacenados son parseados y
optimizados cuando se crean, y puede utilizarse una versin en memoria del
procedimiento tras su primera ejecucin.
El acceso directo mediante instrucciones Transact-SQL requiere que las
instrucciones sean enviadas desde el cliente cada vez que se ejecutan. Las
instrucciones son compiladas y optimizadas cada vez que son ejecutadas por el
servidor de la base de datos.
En ocasiones, una operacin que requiere cientos de lneas de cdigo Transact-
SQL puede realizarse mediante una nica instruccin que invoque un
procedimiento almacenado. Enviar una llamada a travs de la red, en lugar de
cientos de lneas de cdigo, reduce el trfico de red.
Si el acceso a la base de datos se realiza a travs de procedimientos
almacenados, el desarrollador de la base de datos puede cambiar la estructura
de la base de datos sin romper las aplicaciones Web que los utilizan. Esta
proteccin permite la continua mejora de la base de datos sin poner en riesgo el
resto del sistema.
Ejecucin ms rpida
Reduccin del trfico de
red
Proporciona flexibilidad
Invocar procedimientos almacenados con Microsoft ADO.NET 7


Prctica: seleccionar el procedimiento almacenado correcto
Los estudiantes:
Decidirn, en determinados escenarios,
qutipo de procedimiento almacenado
debe utilizarse
Tiempo: 5 Minutos

*****************************
Leer los siguientes escenarios y decidir qu tipo de procedimientos
almacenados debera utilizarse:
Devolver registros
Devolver valor
Realizar accin

Debemos determinar los 10 mejores best sellers de la compaa.
____________________________________________________________
____________________________________________________________
Debemos determinar el beneficio neto de un determinado trimestre.
____________________________________________________________
____________________________________________________________
Debemos cambiar todos los prefijos telefnicos 425 de Estados Unidos por
el prefijo 415.
____________________________________________________________
____________________________________________________________
8 Invocar procedimientos almacenados con Microsoft ADO.NET


Debemos determinar qu registros tienen el prefijo telefnico 425 de
Estados Unidos.
_____________________________________________________________
_____________________________________________________________
Debemos eliminar todos los elementos que se han dejado de fabricar de una
determinada categora.
_____________________________________________________________
_____________________________________________________________

Invocar procedimientos almacenados con Microsoft ADO.NET 9


Leccin: invocar procedimientos almacenados
Invocar procedimientos almacenados
Demostracin: invocar un procedimiento almacenado
Prctica: mostrar datos de un procedimiento
almacenado
Utilizar parmetros
Pasar parmetros de entrada
Utilizar parmetros de salida
Demostracin: pasar parmetros

*****************************
Antes de poder invocar un procedimiento almacenado, debemos identificar el
nombre del procedimiento y los parmetros que utiliza. Una vez identificado el
procedimiento almacenado, podemos invocarlo, pasarle los parmetros de
entrada que se requieran para procesar nuestra peticin y gestionar los
parmetros de salida incluidos en la respuesta.
En esta leccin, aprenderemos cmo invocar procedimientos almacenados,
pasar parmetros de entrada y gestionar parmetros de salida.
En esta leccin, aprenderemos a:
Invocar un procedimiento almacenado desde un formulario Web Form.
Identificar el tipo de parmetros disponibles cuando se invocan los
procedimientos almacenados.
Pasar parmetros de entrada cuando se invocan procedimientos
almacenados desde un formulario Web Form.
Utilizar los parmetros de salida de un procedimiento almacenado.

Introduccin
Objetivos de la leccin
10 Invocar procedimientos almacenados con Microsoft ADO.NET


Invocar procedimientos almacenados
Identificar el procedimiento almacenado
Configurar la propiedad SelectCommanddel DataAdapter
Ejecutar el procedimiento almacenado y almacenar los
registros devueltos
Dim daCategory As New SqlDataAdapter()
daCategory.SelectCommand = New SqlCommand()
daCategory.SelectCommand.Connection = conn
daCategory.SelectCommand.CommandText = "ProductCategoryList"
daCategory.SelectCommand.CommandType = CommandType.StoredProcedure
Dim daCategory As New SqlDataAdapter()
daCategory.SelectCommand = New SqlCommand()
daCategory.SelectCommand.Connection = conn
daCategory.SelectCommand.CommandText = "ProductCategoryList"
daCategory.SelectCommand.CommandType = CommandType.StoredProcedure
daCategory.Fill(ds, "Categories")
daCategory.Fill(ds, "Categories")
SqlDataAdapter daCategory = new SqlDataAdapter();
daCategory.SelectCommand = new SqlCommand();
daCategory.SelectCommand.Connection = conn;
daCategory.SelectCommand.CommandText = "ProductCategoryList";
daCategory.SelectCommand.CommandType = CommandType.StoredProcedure;
SqlDataAdapter daCategory = new SqlDataAdapter();
daCategory.SelectCommand = new SqlCommand();
daCategory.SelectCommand.Connection = conn;
daCategory.SelectCommand.CommandText = "ProductCategoryList";
daCategory.SelectCommand.CommandType = CommandType.StoredProcedure;
daCategory.Fill(ds, "Categories");
daCategory.Fill(ds, "Categories");

*****************************
Para invocar un procedimiento almacenado, en primer lugar debemos
identificarlo, crear un objeto DataAdapter, y configurar el objeto
DataAdapter para que apunte a la conexin de la base de datos. Seguidamente,
establecer la propiedad CommandText al nombre del procedimiento
almacenado identificado y, finalmente, establecer la propiedad CommandType
en CommandType.StoredProcedure.
El primer paso para utilizar un procedimiento almacenado es identificar el tipo
y el nombre del mismo. Podemos utilizar un objeto DataAdapter o un objeto
DataReader para invocar los tres tipos de procedimientos almacenados. El
mtodo que invoquemos para ejecutar el procedimiento almacenado variar
dependiendo del tipo de procedimiento almacenado que invoquemos:
Procedimientos almacenados que devuelven registros
Cuando invocamos un procedimiento que devuelve un conjunto de registros,
necesitamos almacenar ese conjunto de registros en un DataSet, o
directamente en un control enlazado a lista utilizando un DataReader. Si
deseamos utilizar un DataSet, debemos utilizar un DataAdapter y el
mtodo Fill. Si deseamos utilizar un DataReader, debemos utilizar un
objeto Command y el mtodo ExecuteReader, y vincular el registro
devuelto al control enlazado a lista.
Procedimientos almacenados que retornan un valor
Cuando invocamos un procedimiento almacenado que devuelve un valor,
invocamos el mtodo ExecuteScalar del objeto Command, y guardamos el
resultado en una variable del tipo de datos apropiado.
Procedimientos almacenados que realizan una accin
Cuando invocamos un procedimiento almacenado que realiza alguna accin
en la base de datos pero no devuelve un conjunto de registros o un valor,
utilizamos el mtodo ExecuteNonQuery del objeto Command.

Introduccin
Identificar el
procedimiento
almacenado
Invocar procedimientos almacenados con Microsoft ADO.NET 11


Para configurar la llamada al procedimiento almacenado, debemos crear un
objeto SqlCommand y guardarlo como la propiedad SelectCommand de un
DataAdapter. A continuacin, debemos establecer las propiedades
Connection, CommandText y CommandType.
Podemos configurar visualmente la llamada a un procedimiento almacenado
utilizando las herramientas para procedimientos almacenados del Cuadro de
herramientas de Microsoft Visual Studio .NET, o podemos escribir
manualmente el cdigo para invocar el procedimiento almacenado. Los
siguientes ejemplos utilizan cdigo manual para mostrar tanto el cdigo
completo como el proceso lgico de invocacin de un procedimiento
almacenado.
Los siguientes ejemplos invocan el procedimiento almacenado
ProductCategoryList. El procedimiento almacenado ProductCategoryList
devuelve una lista de IDs y nombres de categoras de la tabla Categories:
Procedure ProductCategoryList
As
SELECT CategoryID,CategoryName
FROM Categories

El siguiente cdigo utiliza un objeto Connection y un objeto DataAdapter
para invocar el procedimiento almacenado que devuelve registros
ProductCategoryList:
Dim daCategory as New SqlDataAdapter()
daCategory.SelectCommand = New SqlCommand()
daCategory.SelectCommand.Connection = conn
daCategory.SelectCommand.CommandText = _
"ProductCategoryList"
daCategory.SelectCommand.CommandType = _
CommandType.StoredProcedure

SqlDataAdapter daCategory = new SqlDataAdapter();
daCategory.SelectCommand = new SqlCommand();
daCategory.SelectCommand.Connection = conn;
daCategory.SelectCommand.CommandText =
"ProductCategoryList";
daCategory.SelectCommand.CommandType =
CommandType.StoredProcedure;

Tambin podemos establecer directamente la conexin y el texto del
comando cuando creamos el objeto SqlDataAdapter. El siguiente cdigo
realiza la misma tarea que el cdigo anterior:
Dim daCategory As New SqlDataAdapter _
("ProductCategoryList", conn)
daCategory.SelectCommand.CommandType = _
CommandType.StoredProcedure

SqlDataAdapter daCategory = new SqlDataAdapter
("ProductCategoryList", conn);
daCategory.SelectCommand.CommandType =
CommandType.StoredProcedure;


Establecer la propiedad
SelectCommand
Visual Basic .NET
C#
Nota
Visual Basic .NET
C#
12 Invocar procedimientos almacenados con Microsoft ADO.NET


Para ejecutar el procedimiento almacenado y guardar los registros devueltos en
un DataSet, invocar el mtodo Fill del objeto SqlDataAdapter. Este mtodo
rellena un objeto DataTable con los registros devueltos del procedimiento
almacenado.
Por ejemplo, el siguiente cdigo rellena el objeto DataSet ds con los registros
devueltos desde el procedimiento almacenado ProductCategoryList utilizando
el daCategory SqlDataAdapter:
daCategory.Fill(ds, "Categories")

daCategory.Fill(ds, "Categories");

Tras rellenar un DataTable con los resultados de un procedimiento almacenado
Select, podemos vincular el DataTable a un control enlazado a lista para
mostrar los datos.
Ejecutar el
procedimiento
almacenado
Visual Basic .NET
C#
Invocar procedimientos almacenados con Microsoft ADO.NET 13


Demostracin: invocar un procedimiento almacenado

*****************************
En esta demostracin, veremos cmo invocar un procedimiento almacenado de
una base de datos Microsoft SQL Server

, y vincular los resultados a un


DataGrid.
Ejecutar la demostracin
1. Abrir la pgina SPGetRecords.aspx del proyecto Demo09VB o Demo09CS
que se pueden encontrar dentro del fichero demos9.zip.
2. Generar y examinar la pgina.
El DataGrid est vinculado al procedimiento almacenado Ten Most
Expensive Products de la base de datos Northwind Traders.
3. En Visual Studio .NET, visualizar la pgina de cdigo subyacente de la
pgina SPGetRecords.aspx.
4. En el procedimiento de evento Page_Load, mostrar el cdigo que realiza lo
siguiente:
Crea el objeto SqlConnection.
Crea los objetos SqlDataAdapter y SqlCommand.
Establece las propiedades del objeto SqlCommand para invocar el
procedimiento almacenado.
Crea un nuevo DataSet y lo rellena desde el DataAdapter.

Introduccin
14 Invocar procedimientos almacenados con Microsoft ADO.NET


Prctica: mostrar datos de un procedimiento almacenado
Los estudiantes:
Arrastrarn un procedimiento almacenado
desde el Explorador de servidores a un
formulario Web FormASP.NET
Crearn un objeto DataReaderpara leer
los datos del procedimiento almacenado
Vincularn un DataGridal DataReader
Tiempo: 15 minutos

*****************************
En esta prctica, crearemos un objeto DataReader para invocar un
procedimiento almacenado en una base de datos SQL Server, y vincularemos
los resultados a un DataGrid.
Ejecutar la prctica
1. Crear un nuevo proyecto de aplicacin Web y establecer su ubicacin en
http://localhost/Pract09VB
http://localhost/Pract09CS
2. Abrir la pgina WebForm1.aspx.
3. Abrir el Explorador de servidores y expandir las siguientes carpetas:
nombre_mquina, Servidores SQL Server, nombre_mquina, Northwind y
Procedimientos almacenados.
4. Hacer clic en el procedimiento almacenado Ten Most Expensive Products
y arrastrarlo a la pgina WebForm1.aspx.
Visual Studio .NET crea automticamente un objeto SqlConnection
denominado sqlConnection1 y un objeto SqlCommand denominado
sqlCommand1.
5. Utilizando el Cuadro de herramientas, ubicar un control DataGrid en la
pgina WebForm1.aspx.
Introduccin
Visual Basic .NET
C#
Invocar procedimientos almacenados con Microsoft ADO.NET 15


6. Crear un procedimiento de evento Page_Load y agregar el siguiente cdigo
para crear un DataReader desde el objeto SqlCommand y vincularlo al
DataGrid:
Dim dr As SqlClient.SqlDataReader
SqlConnection1.Open()
dr = SqlCommand1.ExecuteReader()
DataGrid1.DataSource = dr
DataGrid1.DataBind()
dr.Close()
SqlConnection1.Close()

SqlDataReader dr;
sqlConnection1.Open();
dr = sqlCommand1.ExecuteReader();
DataGrid1.DataSource = dr;
DataGrid1.DataBind();
dr.Close();
sqlConnection1.Close();

7. Si se est utilizando C#para generar este proyecto, debemos introducir el
siguiente cdigo al inicio de la pgina de cdigo subyacente.
using System.Data.SqlClient;

8. Generar y examinar la pgina WebForm1.aspx.

Visual Basic .NET
C#
C#
16 Invocar procedimientos almacenados con Microsoft ADO.NET


Utilizar parmetros
Identificar los parmetros disponibles
Input
Output
InputOutput
ReturnValue
Incluir parmetros en la coleccin de parmetros
o
Incluir valores de parmetros en la cadena de comando

*****************************
Cuando utilizamos procedimientos almacenados en una base de datos SQL
Server o en cualquier otra base de datos basada en procedimientos, se pueden
utilizar parmetros para pasar informacin y recuperar datos del procedimiento
almacenado.
Cuando utilizamos parmetros con una base de datos SQL Server, los nombres
de los parmetros que se agregan a la coleccin Parameters del objeto
Command deben coincidir con los nombres de los parmetros del
procedimiento almacenado; no obstante, el orden de los parmetros es flexible.

Cuando utilizamos parmetros en una base de datos OLE DB, el orden de
los parmetros en la coleccin Parmetros debe coincidir con el orden de los
parmetros definidos en el procedimiento almacenado.

La siguiente tabla describe los tipos de parmetros disponibles en los
procedimientos almacenados.
Parmetro Uso

Input Utilizado por la aplicacin Web para enviar valores de datos
especficos a un procedimiento almacenado.
Output Utilizado por un procedimiento almacenado para enviar valores
especficos de retorno a la aplicacin Web que lo invoca.
InputOutput Utilizado por un procedimiento almacenado tanto para recuperar
informacin enviada por nuestra aplicacin Web como para enviar
valores de retorno especficos a la aplicacin Web.
ReturnValue Utilizado por un procedimiento almacenado para enviar un valor de
retorno a la aplicacin Web que lo invoca.

Introduccin
Nota
Invocar procedimientos almacenados con Microsoft ADO.NET 17


Pasar parmetros de entrada
Crear el parmetro, establecer la direccin y el valor,
agregar a la coleccin de parmetros
Ejecutar el procedimiento almacenado y almacenar los
registros devueltos
SqlParameter param = new SqlParameter
("@Beginning_Date", SqlDbType.DateTime);
param.Direction = ParameterDirection.Input;
param.Value = Convert.ToDateTime
(txtStartDate.Text);
da.SelectCommand.parmetros.Add(param);
SqlParameter param = new SqlParameter
("@Beginning_Date", SqlDbType.DateTime);
param.Direction = ParameterDirection.Input;
param.Value = Convert.ToDateTime
(txtStartDate.Text);
da.SelectCommand.parmetros.Add(param);
ds = New DataSet();
da.Fill(ds, "Products");
ds = New DataSet();
da.Fill(ds, "Products");
Cdigosde ejemplo
ds = New DataSet()
da.Fill(ds, "Products")
ds = New DataSet()
da.Fill(ds, "Products")
param = New SqlParameter _
("@Beginning_Date", SQLDbType.DateTime)
param.Direction = ParameterDirection.Input
param.Value = CDate(txtStartDate.Text)
da.SelectCommand.parmetros.Add(param)
param = New SqlParameter _
("@Beginning_Date", SQLDbType.DateTime)
param.Direction = ParameterDirection.Input
param.Value = CDate(txtStartDate.Text)
da.SelectCommand.parmetros.Add(param)

*****************************
Una vez identificados los parmetros soportados por un procedimiento
almacenado, debemos agregar los parmetros que utilizaremos a la coleccin
Parameters del objeto Command.
Para crear un parmetro, crear un nuevo objeto SqlParameter con el nombre y
tipo de datos del parmetro, segn lo especificado por el procedimiento
almacenado. A continuacin, establecer la propiedad Direction del nuevo
parmetro para indicar la forma en que el procedimiento almacenado utilizar el
parmetro. Si el procedimiento almacenado devuelve un valor de retorno, crear
un parmetro denominado returnValue. Si el parmetro es de entrada,
establecer la propiedad Value para especificar los datos que deberan enviarse
al SQL Server.
Por ejemplo, el procedimiento almacenado ProductsByCategory toma un
parmetro de entrada, denominado @CategoryID de tipo int, como muestra el
siguiente cdigo:
Procedure ProductsByCategory (
@CategoryID int )
As
SELECT ProductID, ModelName, UnitCost, ProductImage,
Chairman
FROM Products
WHERE CategoryID=@CategoryID

Introduccin
Crear un parmetro
18 Invocar procedimientos almacenados con Microsoft ADO.NET


Para invocar el procedimiento almacenado ProductsByCategory, crear un
parmetro de entrada denominado @CategoryID y establecer su valor con el
valor de un cuadro de texto:
Dim workParam1 As New SqlParameter _
("@CategoryID", SqlDbType.Int)
workParam1.Direction = ParameterDirection.Input
workParam1.Value = Cint(txtStartDate.Text)

SqlParameter workParam1 = new SqlParameter
("@CategoryID", SqlDbType.Int);
workParam1.Direction = ParameterDirection.Input;
workParam1.Value = Convert.ToInt16(txtStartDate.Text);

Deberamos validar siempre el contenido de un cuadro de texto antes de
enviar la entrada del usuario al procedimiento almacenado. Para una mayor
simplicidad, el cdigo anterior no lo hace.

Una vez creado el objeto Parameter, utilizar el mtodo Add de la coleccin
Parameters del objeto SelectCommand. Si un procedimiento almacenado
tiene ms de un parmetro, no importa en qu orden los agreguemos puesto que
los creamos por nombre:
Dim daSales as New SqlDataAdapter()
daSales.SelectCommand = New SqlCommand()
daSales.SelectCommand.Connection = conn
daSales.SelectCommand.CommandText = "ProductsByCategory"
daSales.SelectCommand.CommandType = _
CommandType.StoredProcedure
daSales.SelectCommand.Parameters.Add(workParam1)

SqlDataAdapter daSales = new SqlDataAdapter();
daSales.SelectCommand = new SqlCommand();
daSales.SelectCommand.Connection = conn;
daSales.SelectCommand.CommandText = "ProductsByCategory";
daSales.SelectCommand.CommandType =
CommandType.StoredProcedure;
daSales.SelectCommand.Parameters.Add(workParam1);

Una vez creado el objeto Command, utilizamos el mtodo Fill para ejecutar el
procedimiento almacenado y recuperar los registros:

ds = New DataSet()
daSales.Fill(ds, "Products")

ds = new DataSet();
daSales.Fill(ds, "Products");

Visual Basic .NET
C#
Nota
Visual Basic .NET
C#
Ejecutar un
procedimiento
almacenado
Visual Basic .NET
C#
Invocar procedimientos almacenados con Microsoft ADO.NET 19


Utilizar parmetros de salida
Crearel parmetro, establecerdirecciny aadira la
coleccinParameters
Ejecutarel procedimientoalmacenadoy almacenarlos
registrosdevueltos
Leer losparmetrosde salida
param = New SqlParameter("@ItemCount", SQLDbType.Int)
param.Direction = ParameterDirection.Output
da.SelectCommand.parameters.Add(param)
param = New SqlParameter("@ItemCount", SQLDbType.Int)
param.Direction = ParameterDirection.Output
da.SelectCommand.parameters.Add(param)
ds = new DataSet()
da.Fill(ds)
ds = new DataSet()
da.Fill(ds)
iTotal = da.parameters("@ItemCount").Value
iTotal = da.parameters("@ItemCount").Value
param = new SqlParameter("@ItemCount", SqlDbType.Int);
param.Direction = ParameterDirection.Output;
da.SelectCommand.parameters.Add(param);
param = new SqlParameter("@ItemCount", SqlDbType.Int);
param.Direction = ParameterDirection.Output;
da.SelectCommand.parameters.Add(param);
ds = new DataSet();
da.Fill(ds);
ds = new DataSet();
da.Fill(ds);
iTotal = da.parameters("@ItemCount").Value;
iTotal = da.parameters("@ItemCount").Value;

*****************************
Para leer el valor de un parmetro de salida o un valor de retorno de un
procedimiento almacenado que devuelve registros, debemos acceder al valor
del parmetro de salida en la coleccin Parmetros despus de que el
procedimiento almacenado se haya ejecutado.
El procedimiento almacenado OrdersCount toma un ID de cliente y devuelve
el nmero de pedidos pendientes que ste tiene, pero no los pedidos actuales. El
procedimiento almacenado utiliza los parmetros de entrada @CustomerID, y
el parmetro de salida @ItemCount, ambos del tipo int, como muestra el
siguiente procedimiento almacenado:
Procedure OrdersCount (
@CustomerID int,
@ItemCount int OUTPUT )
As
SELECT @ItemCount=COUNT(OrderID)
FROM Orders
WHERE CustomerID=@CustomerID

Como el procedimiento almacenado anterior devuelve el nmero de filas y no
los datos de dichas filas, no necesitamos utilizar un objeto DataAdapter. En
lugar de ello, podemos utilizar un objeto Command directamente, e invocar el
mtodo ExecuteNonQuery para ejecutar el procedimiento almacenado.
Para invocar el procedimiento almacenado OrdersCount, necesitamos crear un
parmetro de entrada denominado @CustomerID y un parmetro de salida
denominado @ItemCount y aadirlos a la coleccin Parameters de un objeto
Command, y a continuacin invocar a ExecuteNonQuery para ejecutar el
procedimiento almacenado:



Introduccin
Ejemplo de uso de
parmetros de salida
Invocar un
procedimiento
almacenado que
devuelve un valor
20 Invocar procedimientos almacenados con Microsoft ADO.NET


Dim myCmd As SqlCommand = New SqlCommand("OrdersCount", conn)
myCmd.CommandType = CommandType.StoredProcedure

'add an input parameter
Dim workParam as SqlParameter
workParam = New SqlParameter("@CustomerID", SqlDbType.Int)
workParam.Direction = ParameterDirection.Input
workParam.Value = CInt(txtCustID.Text)
myCmd.Parameters.Add (workParam)

'add an output parameter
workParam = New SqlParameter("@ItemCount", SqlDbType.Int)
workParam.Direction = ParameterDirection.Output
myCmd.Parameters.Add (workParam)

SqlCommand myCmd = new SqlCommand("OrdersCount", conn);
myCmd.CommandType = CommandType.StoredProcedure;

// add an input parameter
SqlParameter workParam;
workParam = new SqlParameter("@CustomerID", SqlDbType.Int);
workParam.Direction = ParameterDirection.Input;
workParam.Value = Convert.ToInt16(txtCustID.Text);
myCmd.Parameters.Add(workParam);

// add an output parameter
workParam = new SqlParameter("@ItemCount", SqlDbType.Int);
workParam.Direction = ParameterDirection.Output;
myCmd.Parameters.Add(workParam);

El siguiente cdigo ejecuta el procedimiento almacenado MyCmd:

conn.Open()
myCmd.ExecuteNonQuery()
conn.Close()

conn.Open();
myCmd.ExecuteNonQuery();
conn.Close();

Si estamos recuperando un valor de un procedimiento almacenado que devuelve
valores o establece un parmetro de salida, necesitamos utilizar el mtodo
Value del parmetro devuelto en la coleccin Parameters. Podemos
referenciar el valor del parmetro de salida por el nombre o por el ndice. El
siguiente ejemplo de cdigo recupera el valor del parmetro de salida
@ItemCount por el nombre:
curSales = myCmd.Parameters("@ItemCount").Value

curSales = myCmd.Parameters["@ItemCount"].Value;

Visual Basic .NET
C#
Ejecutar el procedimiento
almacenado
Visual Basic .NET
C#
Leer parmetros de
salida
Visual Basic .NET
C#
Invocar procedimientos almacenados con Microsoft ADO.NET 21


Demostracin: pasar parmetros

*****************************
En esta demostracin, veremos cmo invocar un procedimiento almacenado
con dos parmetros de entrada y a continuacin enlazar los resultados a un
DataGrid.
Para ejecutar la demostracin
1. Abrir la pgina SPUseParameters.aspx del proyecto Demo09VB o
Demo09CS que se pueden encontrar dentro del fichero demos9.zip.
2. Generar y examinar.
Introducir las fechas de inicio y final en Beginning Date y Ending Date y a
continuacin hacer clic en Get Sales by Year.
Se enlaza un DataGrid al procedimiento almacenado Sales by Year en la
base de datos Northwind Traders.
3. En Visual Studio .NET, visualizar el cdigo subyacente de la pgina
SPUseParameters.aspx.
4. En el procedimiento de evento cmdSale_Click, mostrar el cdigo que
realiza lo siguiente:
Crea la SqlConnection.
Crea el SqlDataAdapter y establece las propiedades del
SelectCommand para invocar el procedimiento almacenado Sales by
Year.
Crear dos parmetros de entrada.
Crear un nuevo DataSet y rellenar el DataSet desde el DataAdapter.
Introduccin


Prctica A: invocar procedimientos almacenados con
Microsoft ADO.NET
Medical
Medical.aspx
Medical
Medical.aspx
Benefits
Home Page
Default.aspx
Benefits
Home Page
Default.aspx
Life Insurance
Life.aspx
Life Insurance
Life.aspx
Retirement
Retirement.aspx
Retirement
Retirement.aspx
Dental
Dental.aspx
Dental
Dental.aspx
Dentists
Doctors
Doctors.aspx
Doctors
Doctors.aspx
Doctors
Logon Page
Login.aspx
Logon Page
Login.aspx
Registration
Register.aspx
Registration
Register.aspx
Coho
Winery
Prospectus
Prospectus.aspx
Prospectus
Prospectus.aspx
XML Web
Service
dentalService1.asmx
XML Web
Service
dentalService1.asmx
Page Header
Header.ascx
Page Header
Header.ascx
ASPState
tempdb
LabWeb
Application
User Control
namedate.ascx
User Control
namedate.ascx
Menu
Component
Class1.vb or Class1.cs
Menu
Component
Class1.vb or Class1.cs
XML
Files
Web.
config


En este laboratorio, aprenderemos a:
Recuperar datos de una base de datos Microsoft SQL Server

utilizando
procedimientos almacenados.
Acceder a procedimientos almacenados utilizando objetos SqlCommand y
SqlDataReader.
Vincular un objeto SqlDataReader a un cuadro de lista.

Este laboratorio se centra en los conceptos de este mdulo. Por ello,
podra no cumplir las recomendaciones de seguridad de Microsoft.

Para trabajar en este laboratorio, es necesario tener:
Conocimientos sobre cmo utilizar los objetos SqlConnection,
SqlDataAdapter, SqlDataReader y SqlCommand de Microsoft
ADO.NET para leer datos de una base de datos SQL Server utilizando
procedimientos almacenados.
Conocimientos sobre cmo crear procedimientos de evento para controles
de servidor.
Conocimientos sobre cmo mostrar datos DataSet y DataReader en un
control enlazado a lista.

Objetivos
Nota
Requisitos previos
Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios de
este curso, crearemos un sitio Web que permita a los empleados seleccionar y
configurar los beneficios que elijan.
Uno de los beneficios que ofrece el seguro mdico. Cuando se solicita un
seguro mdico, el usuario debe seleccionar un mdico de cuidados primarios.
Los doctores aprobados por la compaa aparecen en una lista de una base de
datos SQL Server denominada doctors. La base de datos tambin incluye las
especialidades de los doctores. En este laboratorio, mejoraremos la pgina
doctors.aspx del sitio Web de Coho Winery para permitir a los usuarios ver la
lista de especialidades de un doctor seleccionado.
Escenario
Tiempo estimado para
completar el laboratorio:
30 minutos


Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList.
Estos proyectos pueden haberse creado utilizando Visual Basic .NET o
Microsoft Visual C#

.NET.
Si no se han creado estos proyectos, realizar los siguientes pasos:
Crear la solucin LabApplication

Realizar este procedimiento nicamente si no se ha creado un
archivo de solucin LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solucin en blanco
denominada LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Solucin en
blanco.
b. En el cuadro de dilogo Nuevo proyecto, escribir LabApplication en el
cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto Benefits t, o si se ha eliminado.

1. Crear un nuevo proyecto de aplicacin Web ASP.NET, denominado
BenefitsVB o BenefitsCS, en la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic o Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Aplicacin Web ASP.NET,
establecer la ubicacin en http://localhost/BenefitsVB para el proyecto
Visual Basic .NET o en http://localhost/BenefitsCS para el proyecto
Visual C#.
d. Hacer clic en Agregar a Solucin, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solucin, es importante el
uso de maysculas en el nombre del proyecto. Probablemente, utilizaremos
algunos formularios Web Forms ya generados en ste y en otros
laboratorios, por ello, debemos verificar que hemos escrito con maysculas
el nombre del proyecto Benefits.


Importante
Importante
Precaucin
Actualizar el proyecto Benefits
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente.
3. Buscar los archivos de proyecto:
Ir a la carpeta VB\Starter\BenefitsVB para los archivos de Visual Basic
.NET.
Ir a la carpeta CS\Starter\BenefitsCS para los archivos de Visual C#.
Estas carpetas pueden encontrarse dentro del fichero labs09.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.

Crear la biblioteca de clases BenefitsList

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto BenefitsList, o si se ha eliminado el proyecto
BenefitsList siguiendo los pasos del Apndice A, Recuperacin del
laboratorio.

1. Crear un nuevo proyecto de biblioteca de clases
Crear un nuevo proyecto de biblioteca de clases Visual Basic .NET con el
nombre BenefitsListVB, y agregarlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual Basic.
c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListVB.
d. Hacer clic en Agregar a solucin, y clic en Aceptar.
Crear un nuevo proyecto de biblioteca de clases Visual C#.NET con el
nombre BenefitsListCS, y agregarlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListCS.
a. Hacer clic en Agregar a solucin, y clic en Aceptar.

Verificar que se han escrito correctamente las maysculas del
proyecto BenefitsList.


Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Importante
Para el proyecto
Visual Basic .NET
Para el proyecto Visual
C#
Precaucin


Actualizar el proyecto BenefitsList
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente.
3. Ir al proyecto BenefitsList.
Ir a la carpeta VB\Starter\BenefitsListVB.

Ir a la carpeta CS\Starter\BenefitsListCS.
Estas carpetas pueden encontrarse dentro del fichero labs09.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de sobrescribir o recargar los archivos.

Crear una referencia al componente BenefitsList del proyecto Benefits
1. En el proyecto Benefits de la solucin LabApplication, completar los
siguientes pasos para agregar una referencia al componente BenefitsList
que acabamos de crear:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB o
BenefitsCS en el Explorador de soluciones y hacer clic en Agregar
referencia.
b. En el cuadro de dilogo Agregar referencia, en la pestaa Proyectos,
hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.
c. En la lista Componentes seleccionados, seleccionar el componente
BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar.
El componente se agrega a la carpeta Referencias en el Explorador de
soluciones.

Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Ejercicio 1
Obtener nombres de ciudades nicos
En este ejercicio, vincularemos el cuadro de lista desplegable lstCities de la
pgina doctors.aspx de forma que muestre los nombres de ciudades nicos de la
base de datos doctors. Cuando el usuario seleccione una ciudad, el cdigo
crear una nueva vista de los datos del DataSet y mostrar los datos en el
DataGrid.
El cuadro de lista desplegable lstCities actualmente est vinculado al campo de
ciudad de la tabla doctors utilizando un objeto SqlCommand. Esta vinculacin
hace que se muestren todas las ciudades en el cuadro de lista desplegable. En
este ejercicio, utilizaremos un procedimiento almacenado para seleccionar los
nombres de ciudades nicos de la tabla doctors.
Debido a que el cuadro de lista desplegable lstCities est actualmente
vinculado, debemos eliminar esa vinculacin antes de utilizar el procedimiento
almacenado.
Eliminar el cdigo de vinculacin existente
1. Abrir la pgina doctors.aspx.vb del proyecto BenefitsVB o la pgina
doctors.aspc.cs del proyecto BenefitsCS.
2. En el procedimiento de evento Page_Load, buscar el siguiente cdigo:
'TODO: Lab10: bind the listbox to city field
'in the doctors
table
Dim cmdCities As New SqlCommand _
("Select city from doctors", SqlConnection1)
Dim drCities As SqlDataReader
SqlConnection1.Open()
drCities = cmdCities.ExecuteReader()
lstCities.DataSource = drCities
lstCities.DataTextField = "city"
lstCities.DataBind()
drCities.Close()
SqlConnection1.Close()

//TODO Lab10: bind the listbox to city field
//in the doctors table
SqlCommand cmdCities = new SqlCommand
("Select city from doctors", sqlConnection1);
sqlDataReader drCities;
sqlConnection1.Open();
drCities = cmdCities.ExecuteReader();
lstCities.DataSource = drCities;
lstCities.DataTextField = "City";
lstCities.DataBind();
drCities.Close();
sqlConnection1.Close();

3. Comentar este cdigo seleccionando todas las lneas del cdigo y haciendo
clic en el icono Comentario de la Barra de herramientas.

Visual Basic .NET
C#


Vincular el cuadro de lista desplegable utilizando un procedimiento
almacenado
1. Localizar el siguiente comentario:
TODO: Lab11: bind the listbox to the getUniqueCities stored
procedure

2. Crear un nuevo objeto SqlCommand denominado cmdCities que utiliza el
objeto sqlConnection1 para invocar el procedimiento almacenado
getUniqueCities.
3. Establecer el CommandType del objeto cmdCities a Stored Procedure.
4. Abrir el objeto SqlConnection sqlConnection1.
5. Crear un objeto SqlDataReader desde el objeto SqlCommand invocando
el mtodo ExecuteReader del objeto SqlCommand. Poner el nombre
drCities al objeto SqlDataReader.
6. En el cdigo, establecer las propiedades del cuadro de lista desplegable
lstCities como muestra la siguiente tabla.
Propiedad Valor

DataSource drCities
DataTextField "City"

7. Invocar el mtodo DataBind del cuadro de lista desplegablelstCities.
8. Cerrar los objetos DataReader y Connection.
El cdigo debera ser similar al siguiente:
Dim cmdCities As SqlCommand = New _
SqlCommand("getUniqueCities", SqlConnection1)
cmdCities.CommandType = CommandType.StoredProcedure
SqlConnection1.Open()
Dim drCities As SqlDataReader
drCities = cmdCities.ExecuteReader()
lstCities.DataSource = drCities
lstCities.DataTextField = "City"
lstCities.DataBind()
drCities.Close()
SqlConnection1.Close()

SqlCommand cmdCities = new SqlCommand
("getUniqueCities", sqlConnection1);
cmdCities.CommandType = CommandType.StoredProcedure;
sqlConnection1.Open();
sqlDataReader drCities;
drCities = cmdCities.ExecuteReader();
lstCities.DataSource = drCities;
lstCities.DataTextField = "City";
lstCities.DataBind();
drCities.Close();
sqlConnection1.Close();

9. Generar y examinar la pgina doctors.aspx.
El cuadro de lista desplegable City muestra la lista de ciudades donde se
encuentran los doctores. No hay ciudades duplicadas en la lista.
Visual Basic .NET
C#
Ejercicio 2
Obtener las especialidades de los doctores
En este ejercicio, mostraremos las especialidades de un doctor en un cuadro de
lista. Cuando se selecciona un doctor en el objeto DataGrid dgDoctors, se
invoca el procedimiento almacenado getDoctorSpecialty y se muestra el
resultado en el cuadro de listalstSpecialties.
Invocar el procedimiento almacenado getDrSpecialty
1. Crear el procedimiento de evento SelectedIndexChanged.
Abrir el cdigo subyacente de la pgina doctors.aspx y crear un
procedimiento de evento SelectedIndexChanged para el control DataGrid:
a. En la pgina de cdigo subyacente, en la lista desplegableNombre de
clase, hacer clic en dgDoctors.
b. En la lista desplegableNombre de mtodo, hacer clic en
SelectedIndexChanged.
En las propiedades del control dgDoctors DataGrid, hacer clic en Events.
Desplazarse hacia abajo en la lista de eventos y hacer doble clic en el evento
SelectedIndexChanged.
2. Crear una variable de tipo cadena denominada strDrID para guardar el valor
de la columna dr_id para la fila seleccionada por el usuario.
3. Utilizando la coleccin Cells del objeto SelectedItem del DataGrid
dgDoctors, leer el valor del campo dr_id y almacenarlo en la variable
strDrID.
El cdigo debera ser similar al siguiente:
Dim strDrID As String
strDrID = dgDoctors.SelectedItem.Cells.Item(1).Text

string strDrID;
strDrID = dgDoctors.SelectedItem.Cells[1].Text;

4. Crear un nuevo objeto SqlCommand denominado cmdSpecialty que utilice
el objeto sqlConnection1 para invocar el procedimiento almacenado
getDrSpecialty.
5. Establecer el tipo de comando SqlCommand a un procedimiento
almacenado.
El cdigo debera ser similar al siguiente:
Dim cmdSpecialty As New _
SqlCommand("getDrSpecialty", SqlConnection1)
cmdSpecialty.CommandType = CommandType.StoredProcedure

SqlCommand cmdSpecialty = new
SqlCommand( "getDrSpecialty", sqlConnection1);
cmdSpecialty.CommandType = CommandType.StoredProcedure;

6. Crear un objeto SqlParameter denominado paramSpecialty utilizando el
parmetro que se muestra en la siguiente tabla.

Visual Basic .NET
C#
Visual Basic .NET
C#
Visual Basic .NET
C#



Nombre de parmetro Tipo de datos Tamao

@dr_id SqlDbType.Char 4
7. Establecer la propiedad Direction del SqlParameter a Input.
8. Establecer el valor del SqlParameter a la variable strDrID.
9. Agregar el parmetro al objeto SqlCommand utilizando el mtodo Add.
El cdigo debera ser similar al siguiente:
Dim paramSpecialty As New SqlParameter _
("@dr_id", SqlDbType.Char, 4)
paramSpecialty.Direction = ParameterDirection.Input
paramSpecialty.Value = strDrID
cmdSpecialty.Parameters.Add(paramSpecialty)

SqlParameter paramSpecialty = new SqlParameter
("@dr_id", SqlDbType.Char, 4);
paramSpecialty.Direction = ParameterDirection.Input;
paramSpecialty.Value = strDrID;
cmdSpecialty.Parameters.Add(paramSpecialty);

10. Abrir el objeto SqlConnection sqlConnection1.
11. Crear un nuevo objeto SqlDataReader denominado drSpecialty.
12. Rellenar el objeto SqlDataReader desde el objeto SqlCommand
invocando el mtodo ExecuteReader del objeto SqlCommand.
El cdigo debera ser similar al siguiente:
SqlConnection1.Open()
Dim drSpecialty As SqlDataReader
drSpecialty = cmdSpecialty.ExecuteReader()

sqlConnection1.Open();
sqlDataReader drSpecialty;
drSpecialty = cmdSpecialty.ExecuteReader();


Vincular el cuadro de lista lstSpecialties al DataReader drSpecialties y
hacer que est visible
1. En el cdigo, establecer las propiedades del cuadro de lista lstSpecialties
como muestra la siguiente tabla.
Propiedad Valor

DataSource drSpecialty
DataTextField "Specialty"

2. Invocar el mtodo DataBind del cuadro de lista.
Visual Basic .NET
C#
Visual Basic .NET
C#
3. Cerrar los objetos SqlDataReader y SqlConnection.
El cdigo debera ser similar al siguiente:
lstSpecialties.DataSource = drSpecialty
lstSpecialties.DataTextField = "Specialty"
lstSpecialties.DataBind()
drSpecialty.Close()
SqlConnection1.Close()

lstSpecialties.DataSource = drSpecialty;
lstSpecialties.DataTextField = "Specialty";
lstSpecialties.DataBind();
drSpecialty.Close();
sqlConnection1.Close();

4. Agregar cdigo para hacer que el cuadro de lista lstSpecialties y la etiqueta
lblSpecialties estn visibles, pero slo si hay especialidades en el
DataReader.
El cdigo debera ser similar al siguiente:
If Not IsDBNull(drSpecialty) Then
lstSpecialties.Visible = True
lblSpecialties.Visible = True
End If

if (drSpecialty != null)
{
lstSpecialties.Visible = true;
lblSpecialties.Visible = true;
}

5. Generar y examinar la pgina doctors.aspx:
a. En el explorador, seleccionar un doctor de la lista.
El cuadro de lista Specialties muestra las especialidades del doctor
seleccionado.
b. Escoger una ciudad del cuadro de lista desplegableCity y seleccionar un
nuevo doctor.
Es posible que el cuadro de lista Specialties muestre una lista distinta de
especialidades. Si no es as, seleccionar otro doctor para estar seguros de
que el cdigo funciona correctamente.
c. Hacer clic en Submit.
Seremos redireccionados a la pgina medical.aspx, y el nombre del
doctor seleccionado aparece en el cuadro de texto Primary Care
Physician.



Visual Basic .NET
C#
Visual Basic .NET
C#



ndice
Descripcin 1
Leccin: Descripcin de la arquitectura XML en ASP.NET 2
Leccin: XML y el objeto DataSet 10
Leccin: trabajar con datos XML 25
Leccin: uso del control de servidor Web XML 35

Leer y escribir datos XML
Leer y escribir datos XML 1


Descripcin
Descripcin de la arquitectura XML en ASP.NET
XML y el objeto DataSet
Trabajar con datos XML
Utilizar el control de servidor Web XML

*****************************
Aunque se almacena una gran cantidad de datos en bases de datos Microsoft
SQL Server

y se gestionan mediante Microsoft ADO.NET, recientemente


Extensible Markup Language (XML) se ha convertido en un slido estndar
para el almacenamiento, gestin y transferencia de datos. XML tiene dos
grandes ventajas en el almacenamiento y transferencia de datos:
XML es un estndar aceptado por el mercado.
XML utiliza nicamente texto plano.

En este mdulo, estudiaremos cmo leer, escribir y mostrar datos XML.
En este mdulo, aprenderemos a:
Describir la arquitectura XML en Microsoft ASP.NET.
Leer y escribir datos XML en un objeto DataSet.
Identificar cmo almacenar, recuperar y transformar datos XML utilizando
los objetos XmlDataDocument y XslTransform.
Utilizar el control de servidor Web XML para mostrar, cargar y almacenar
datos XML.

Introduccin
Objetivos
2 Leer y escribir datos XML


Leccin: descripcin de la arquitectura XML en ASP.NET
Ques XML?
Principales tecnologas XML

*****************************
ASP.NET proporciona varios tipos de clases y objetos que pueden utilizarse
para acceder y sincronizar con datos XML. Estas clases y objetos representan
componentes para procesar XML a bajo nivel que permiten integrar XML en
las aplicaciones Web ASP.NET.
En esta leccin, estudiaremos cmo est compuesto un documento XML.
Tambin estudiaremos las principales tecnologas XML. Estudiaremos las
clases y objetos que se utilizan para leer y escribir datos XML.
En esta leccin, aprenderemos a:
Distinguir entre XML vlido y XML con un formato correcto.
Describir las principales tecnologas XML.

Introduccin
Objetivos de la leccin
Leer y escribir datos XML 3


Qu es XML?
<?xml version="1.0"?>
<authors>
<author ID="1">
<name>Jay</name>
</author>
<!-- There are more authors. -->
</authors>
<?xml version="1.0"?>
<authors>
<author ID="1">
<name>Jay</name>
</author>
<!-- There are more authors. -->
</authors>
Proporciona un mtodo uniforme para describir e
intercambiar datos estructurados
Podemos definir nuestros propios elementos y atributos
Los elementos pueden anidarse
XML vlido frente a XML con un formato correcto
Instruccinde
procesamiento
Instruccinde
procesamiento
Elementos Elementos
Atributos Atributos
Comentarios Comentarios

*****************************
Actualmente, las empresas se enfrentan a numerosos problemas en la
organizacin de los datos porque necesitan cumplir con los siguientes
requerimientos:
Las estaciones de trabajo y los usuarios necesitan leer datos.
Tanto el contenido como la estructura de los datos deben estar definidos.
La estructura de los datos debe estar separada de su presentacin.
La estructura de los datos debe ser abierta y extensible.

XML satisface todos estos requerimientos, y por tanto es una ayuda para la
organizacin de datos en las empresas.
XML es el formato universal utilizado para describir e intercambiar
documentos y datos estructurados en Internet. XML es un subconjunto del
Standard Generalized Markup Language (SGML), y est definido por el World
Wide Web Consortium (W3C), y garantiza que los datos estructurados son
uniformes e independientes de las aplicaciones Web y de los fabricantes.
XML define la estructura de los datos de un modo abierto y autodescriptivo.
Este modo abierto y autodescriptivo permite que los datos sean fcilmente
transferidos a travs de una red y que el receptor los procese de modo
coherente. XML describe cmo se estructuran los datos, no cmo deberan
mostrarse o utilizarse, de forma similar a Hypertext Markup Language
(HTML). Los documentos XML contienen etiquetas que otorgan significado al
contenido del documento. Estas etiquetas permiten a los programadores
encontrar los datos que necesitan en el documento XML.
Las partes de un documento XML incluyen:
Instrucciones de procesamiento
Elementos
Atributos
Comentarios
Introduccin
Definicin
Partes de un documento
XML
4 Leer y escribir datos XML


La mayora de documentos XML empiezan con una instruccin de
procesamiento para el procesador XML indicando que el documento sigue las
recomendaciones XML del W3C.
A continuacin de la instruccin de procesamiento puede definirse un conjunto
de elementos anidados. Respecto a los elementos:
Normalmente, un elemento est formado por un par de etiquetas: una
etiqueta de inicio y una etiqueta de cierre.
Entre el par de etiquetas de inicio y cierre, un elemento puede contener el
contenido de datos u otros elementos.
Un elemento puede estar formado nicamente por la etiqueta de cierre.
El primer elemento que encuentra el procesador XML debe estar formado
por una etiqueta de inicio y una etiqueta de cierre. El primer elemento
contiene el resto de elementos y se denomina elemento raz.
El resto de elementos, tras el primero, pero dentro del elemento raz, se
denominan elementos secundarios.
Los elementos secundarios pueden anidar otros elementos secundarios. La
mayora de los datos del contenido XML se almacenan entre la etiqueta de
inicio y la etiqueta de cierre de los elementos secundarios.

Cualquier elemento puede contener atributos. El uso de atributos es una
alternativa al uso de elementos para almacenar el contenido. Los atributos
definen datos que pertenecen a un nico elemento. Respecto a los atributos:
Crear un atributo en la etiqueta de inicio de un elemento.
Declarar el nombre del atributo, seguido de una asignacin del valor.
Utilizar comillas simples o dobles para establecer el valor de un atributo.

Los comentarios son opcionales.
Un documento XML con un formato correcto cumple las especificaciones
listadas en la Recomendacin W3C de XML 1.0. Un documento XML se
considera con el formato correcto si:
Contiene exactamente un elemento raz (el elemento documento).
Todos los elementos secundarios estn anidados correctamente uno dentro
de otro.
Existen las etiquetas de inicio y final de un determinado elemento en el
cuerpo del mismo elemento primario.

Ejemplo de XML con el formato correcto:
<Temp>22</Temp>

Ejemplo de XML mal formado:
<Temp>22</temp>

El error en el ejemplo anterior es que la etiqueta de cierre <temp>no coincide
con la etiqueta de inicio <Temp>.
Instruccin de
procesamiento
Elementos
Atributos
Comentarios
XML de formato correcto
Leer y escribir datos XML 5


El XML es vlido si su vocabulario cumple con una serie de requisitos descritos
en un esquema:
En XML, un esquema es la descripcin de un documento XML.
Un esquema se utiliza para validar documentos XML. Los documentos
XML validados con un esquema se denominan documentos instancia. Si un
documento instancia coincide con la definicin del esquema, el documento
instancia se considera vlido.

Existen tres tipos de esquemas que pueden utilizarse para validar un documento
instancia XML, como muestra la siguiente tabla.
Tipo de esquema Descripcin

Document Type
Definition (DTD)
DTD es el mtodo de validacin original descrito en la
Recomendacin XML versin 1.0 del W3C. XML Schema
Definition (XSD) ha sustituido a DTD. Los DTDs no estn
basados en XML.
XML-Data Reduced
(XDR schema)
XDR es una tecnologa de esquema provisional desarrollada por
Microsoft. XDR es similar a XSD, pero los esquemas XDR
estn escritos en XML.
XML Schema
Definition language
(XSD)
XSD es la recomendacin del W3C para validar esquemas
XML. XSD sustituye a ambos esquemas, DTDs y XDR. Los
esquemas XSD estn escritos en XML.

XSD es el esquema utilizado ms frecuentemente en el .NET Framework.
XML vlido
6 Leer y escribir datos XML


Principales tecnologas XML
Definicin deesquemas XML (XSD)
Define la estructura requerida de un documento XML vlido
ExtensibleStylesheetLanguageTransformation(XSLT)
Transforma el contenido de un documento XML fuente en otro
documento que es diferente en formato o estructura
LenguajeXML Path(XPath)
Direccionapartes de un documento XML
DocumentObjectModel (DOM)
Modelo de objetos para trabajar programticamentecon
documentos XML en memoria
XML Query(XQuery)
Lenguaje de fcil implementacin en el que las consultas son
concisas y se entienden fcilmente

*****************************
Desde el principio, XML ha generado otras innovaciones tecnolgicas y
desarrollos que funcionan con XML para manipular datos. Las principales
tecnologas relacionadas con XML, todas ellas recomendaciones del W3C,
incluyen:
Definicin de esquemas XML (XSD)
Extensible Stylesheet Language Transformation (XSLT)
Lenguaje XML Path (XPath)
Document Object Model (DOM)
Consulta XML (XQuery)

XSD es el estndar actual para la definicin de esquemas, y define la estructura
que requiere un documento XML vlido. Podemos crear un esquema XSD
como un documento aislado y que sea referenciado por documentos instancia.
Un documento instancia es un documento XML validado por un esquema
XML. Tambin podemos incluir un esquema XSD en un documento XML. La
extensin de un archivo de esquema aislado es .xsd.
Podemos definir un documento XML como un esquema utilizando el elemento
<xsd:schema>. El espacio de nombres esquema del W3C cualifica el prefijo
xsd:. Cada elemento que identificamos con el prefijo xsd: pertenece al espacio
de nombres XSD.
En XSD, podemos referenciar mltiples espacios de nombres (xmlns). Por
ejemplo, la siguiente definicin de esquema referencia a dos espacios de
nombres, el primero para el XML Schema del W3C, y el segundo para un
esquema de datos de Microsoft Office 10:
<xsd:schema xmlns:xsd="http://www.w3c.org/2000/10/XMLSchema"
xmlns:od="urn:schemas-microsoft-com:officedata">

Introduccin
XSD
Definicin de esquema
Leer y escribir datos XML 7


Utilizamos declaraciones de elemento y atributo para definir el uso de los
elementos y los atributos en un documento XML. Podemos definir las
siguientes propiedades para un elemento o atributo: nombre, contenido,
nmero, secuencia de ocurrencias, tipo de datos.
En el siguiente ejemplo, el nombre del elemento se declara como <LastName>.
En el documento, <LastName>puede ocurrir 0 o ms veces. El tipo de
elemento es una cadena:
<xsd:element name="LastName" minOccurs="0" maxOccurs="*"
type="string"></xsd:element>

Por muchas razones, los datos XML deben transformarse en otras formas y
variantes. El W3C ha generado XSLT como uno de los lenguajes de
programacin que puede ser utilizado para transformar datos. XSLT es una
parte de XSL (eXtensible Stylesheet Language).
XSLT es un lenguaje basado en XML que transforma documentos XML a
formatos arbitrarios basados en texto, que pueden ser o no XML.
Los tres documentos siguientes se utilizan con XSLT:
El documento origen
El documento origen es simplemente un documento XML con un formato
correcto que proporciona la entrada para la transformacin. Por ejemplo, el
siguiente cdigo es una muestra de un documento origen XML:
<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="Employees1.xsl"?>
<employees>
<employee>
<name>Stuart Munson</name>
<jobtitle>Programmer</jobtitle>
</employee>
<employee>
<name>Robert Brown</name>
<jobtitle>Tester</jobtitle>
</employee>
</employees>

Declaraciones de
elemento y atributo
XSLT
8 Leer y escribir datos XML


Documento de hoja de estilo XSLT
El documento de hoja de estilo XSLT es un documento XML que utiliza el
vocabulario de XSLT para expresar las normas de transformacin. Por
ejemplo, el siguiente cdigo es el documento de hoja de estilo XSLT
(Employees1.xsl) que se aplicar al documento origen del cdigo anterior:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<xsl:apply-templates select="//employee" />
</xsl:template>
<xsl:template match="employee">
<P>
<xsl:apply-templates />
<HR />
</P>
</xsl:template>
<xsl:template match="name">
<FONT COLOR="red" />
<B>
<xsl:value-of select="." />
</B>
</xsl:template>
<xsl:template match="jobtitle">
<BR/>
<FONT COLOR="blue" />
<xsl:value-of select="." />
</xsl:template>
</xsl:stylesheet>

El documento resultante
El documento resultante es un documento de texto producido por la
ejecucin del documento origen a travs de las transformaciones que se
encuentran en la hoja de estilo XSLT. Por ejemplo, ejecutando el
documento origen del cdigo anterior a travs de la hoja de estilo XSLT
anterior Employees1.xsl, se produce el siguiente documento resultante:

Leer y escribir datos XML 9


XPath es un lenguaje completo utilizado para referenciar elementos en los
documentos XML. XPath versin 2.0 es una recomendacin del W3C.
El lenguaje XPath especifica un modelo de objetos para los documentos XML.
En el modelo de objetos XPath, un documento XML est representado como un
rbol de nodos. Consultamos una fuente XML utilizando las propiedades de sus
nodos XPath.
DOM es una representacin en forma de rbol en el cach de memoria de un
documento XML. DOM permite la navegacin y edicin de un documento
XML. W3C define las propiedades, mtodos y eventos de DOM.
Con ASP.NET, podemos escribir un script que se ejecuta en el servidor Web y
que utiliza el DOM para crear un documento XML que se enviar al navegador.
Tambin podemos escribir un script del lado del cliente que genere un
documento XML en el cliente enve los datos XML al servidor Web, cuando
resulte apropiado.
A medida que va aumentando la cantidad de informacin que se almacena,
intercambia y presenta mediante XML, la capacidad de consultar
inteligentemente las fuentes de datos XML es cada vez ms importante.
XQuery proporciona caractersticas para recuperar e interpretar informacin
desde estas fuentes de datos:
XQuery ha sido diseado como un lenguaje de fcil implementacin en el
que las consultas son concisas y se entienden fcilmente.
La flexibilidad de XQuery permite consultar un amplio espectro de fuentes
de informacin XML, incluyendo tanto bases de datos como documentos.
XQuery se basa en otras tecnologas del W3C. Por ejemplo, XQuery utiliza
sentencias de ruta de la recomendacin XPath 2.0.
XQuery depende en gran medida de XPath para dirigir sus consultas dentro
de un determinado origen XML. XQuery tambin toma prestado el modelo
de objetos de XPath.

Para ms informacin sobre las principales tecnologas XML, acceder al
sitio Web del W3C en http://www.w3c.org.

XPath
DOM
XQuery
Nota
10 Leer y escribir datos XML


Leccin: XML y el objeto DataSet
Por qu utilizar XML con DataSets?
Descripcin de XML y DataSets
Mtodos basados en XML del objeto DataSet
Demostracin: leer y escribir XML a/desde un DataSet
Prctica: uso del mtodo ReadXml
Crear datos XML anidados
Demostracin: crear XML anidado

*****************************
XML y los DataSets comparten una estrecha conexin. Los DataSets son la
base para el almacenamiento en modo desconectado y la manipulacin de datos
relacionales. Los DataSets tambin son un contenedor para una o ms tablas de
datos. XML es el formato estndar para los datos presentes en DataSets.
En esta leccin, aprenderemos a:
Describir el uso de XML con DataSets.
Identificar la relacin de XML con DataSets.
Identificar el uso de los mtodos ReadXml, WriteXml y GetXml.
Crear datos XML anidados.

Introduccin
Objetivos de la leccin
Leer y escribir datos XML 11


Por qu utilizar XML con DataSets?
XML es el formato universal para intercambiar datos en Internet
Los Datasetsserializandatos en forma deXML
XML proporciona un formato cmodo para transferir el contenido
de un Dataseta/desde clientes remotos
Los objetos XML sincronizan y transforman datos
Legiblepor una persona Legiblepor una persona
Legiblepor un mainframe Legiblepor un mainframe
Archivo
XML
o
Flujo
Legiblepor el navegador Legiblepor el navegador
Servidor Web Servidor Web
DataSet
Cortafuegos Cortafuegos

*****************************
XML es un formato universal utilizado para intercambiar datos en Internet, y un
DataSet es una vista relacional de datos que puede representarse en XML.
XML se utiliza con los DataSets de las siguientes formas:
Serializar datos
Los DataSets pueden serializar datos en forma de XML. El esquema de un
DataSet que incluye tablas, columnas, tipos de datos y restricciones se
define utilizando un esquema XML (archivo .xsd).
XML y XML Schema
XML y los esquemas XML Schema proporcionan un formato cmodo para
transferir el contenido de un DataSet a/desde clientes remotos. Podemos
inferir esquemas XML de DataSets existentes y crear DataSets desde
esquemas XML existentes.
Sincronizar y transformar datos
Podemos utilizar diferentes objetos XML para sincronizar y transformar
datos que estn representados por DataSets.

Introduccin
12 Leer y escribir datos XML


Descripcin de XML y DataSets
Archivo
XML
Objeto
DataSet
Objeto
DataSet
Objeto
XmlDataDocument
Objeto
XmlDataDocument
Objeto
XslTransform
Objeto
XslTransform
Archivo
XML o
HTML
Base de
datos
DataAdapter DataAdapter
ReadXML ReadXML
Doc.Save Doc.Save
WriteXML WriteXML
Archivo
XSLT
Archivo
XML
Archivo
XML

*****************************
XML desempea un importante papel en el modo en que el .NET Framework
gestiona los datos. XML es el formato utilizado en el .NET Framework para
almacenar y transferir todo tipo de datos. Los DataSets pueden almacenar y
transferir datos en formato XML. Respecto a las caractersticas de los DataSets
y XML:
La estructura de un DataSet puede definirse en un esquema XML Schema
La estructura de un DataSet que incluye tablas, columnas, relaciones y
restricciones puede definirse utilizando un esquema XML. Los esquemas
XML son un formato basado en estndares del W3C que pueden utilizarse
para definir la estructura de datos XML.
Generar una clase DataSet
Podemos generar una clase DataSet que incorpore informacin de esquema
para definir sus estructuras de sus datos (como tablas y columnas) como
miembros de clase.
Mtodos DataSet
Podemos leer un documento XML o generar un flujo en un DataSet
utilizando el mtodo ReadXML del DataSet y a continuacin escribir un
DataSet en XML utilizando el mtodo WriteXML del DataSet. Como XML
es un formato estndar para intercambiar datos entre distintas aplicaciones
Web, podemos cargar un DataSet con informacin formateada en XML que
haya sido enviada por otras aplicaciones. De forma similar, un DataSet
puede escribir sus datos como un flujo XML o un documento que ser
compartido con otras aplicaciones o simplemente almacenado como un
documento XML.
Introduccin
Leer y escribir datos XML 13


Crear una vista XML del contenido de un DataSet
Podemos crear una vista XML (un objeto XmlDataDocument) del
contenido de un DataSet, y visualizar y manipular los datos utilizando
mtodos relacionales (mediante el DataSet) o mtodos XML. Las dos vistas
se sincronizan automticamente cuando se modifican.
Transformacin de datos
Podemos utilizar el objeto XSLTransform para cargar una hoja de estilo
.xsl y aplicar la transformacin. El documento resultante puede ser un
archivo XML o HTML.

Los DataSets pueden leer y escribir esquemas que almacenan
informacin estructurada utilizando los mtodos ReadXmlSchema y
WriteXmlSchema. Si no hay ningn esquema disponible, el DataSet puede
producir uno, mediante su mtodo InferXmlSchema, a partir de los datos
existentes en un documento XML que est estructurado en un modo relacional.

Nota
14 Leer y escribir datos XML


Los mtodos basados en XML del objeto DataSet
Utilizan ReadXml para cargar datos de un archivo o flujo
Utilizan WriteXml para escribir datos XML a un archivo o
flujo
Utilizan GetXml para escribir datos a una variable de cadena
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("filename.xml"));
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("filename.xml"));
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter("select * from
Authors", conn);
da.Fill(ds);
ds.WriteXml(Server.MapPath("filename.xml"));
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter("select * from
Authors", conn);
da.Fill(ds);
ds.WriteXml(Server.MapPath("filename.xml"));
string strXmlDS = ds.GetXml();
string strXmlDS = ds.GetXml();
Cdigo de ejemplo deVisual Basic .NET

*****************************
El contenido de un DataSet puede crearse desde un flujo o un documento
XML. Adems, con el .NET Framework, tenemos una gran flexibilidad sobre
qu informacin se carga desde XML, y cmo se crea el esquema o estructura
relacional del DataSet.
Para rellenar un DataSet con datos de XML, utilizamos el mtodo ReadXml
del objeto DataSet. El mtodo ReadXml lee de un archivo, un flujo o un
XmlReader.
El mtodo ReadXml lee el contenido del flujo o documento XML y carga el
DataSet con esos datos. ReadXml tambin crea el esquema relacional del
DataSet, dependiendo del XmlReadMode especificado y de si existe ya o no
un esquema relacional.
El siguiente cdigo muestra cmo rellenar un DataSet con datos:
Dim ds As New DataSet()
ds.ReadXml(Server.MapPath("filename.xml"))

DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("filename.xml"));

El mtodo Server.MapPath devuelve la ruta de archivo fsica que
corresponde a la ruta virtual especificada en el servidor Web.

Para escribir un DataSet a un archivo, flujo o XmlWriter, utilizamos el
mtodo WriteXml. El primer parmetro que pasamos a WriteXml es el destino
de la salida XML. Por ejemplo, podemos pasar una cadena que contenga un
nombre de archivo, un objeto System.IO.TextWriter, etc. Podemos pasar un
segundo parmetro opcional de un XmlWriteMode para especificar cmo debe
escribirse la salida XML.
Introduccin
ReadXML
Microsoft Visual Basic
.NET
C#
Nota
WriteXML
Leer y escribir datos XML 15


El siguiente cdigo es un ejemplo de cmo escribir un DataSet:
Dim ds As New DataSet()
Dim da As New SqlDataAdapter( _
"select * from Authors", conn)
da.Fill(ds)
ds.WriteXml(Server.MapPath("filename.xml"))

DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter
("select * from Authors", conn);
da.Fill(ds);
ds.WriteXml(Server.MapPath("filename.xml"));

La representacin XML del DataSet puede escribirse en un archivo, un flujo,
un XmlWriter o una cadena. Estas opciones proporcionan una gran flexibilidad
para el modo de transporte de la representacin XML del DataSet. Para obtener
la representacin XML del DataSet como una cadena, utilizaramos el mtodo
GetXml, como muestran los siguientes ejemplos de cdigo:
Dim strXmlDS As String = ds.GetXml()

string strXmlDS = ds.GetXml();

GetXml devuelve la representacin XML del DataSet sin informacin de
esquema. Para escribir la informacin de esquema desde el DataSet (como el
esquema XML) a una cadena, utilizamos GetXmlSchema.
Visual Basic .NET
C#
GetXML
Visual Basic .NET
C#
16 Leer y escribir datos XML


Demostracin: leer y escribir XML a y desde un DataSet
Leer XML
Crear un DataSet
Cargar un DataSetdesde un archivo XML
Mostrar en un DataGrid
Escribir XML
Crear un DataSetdesde la base de datos
Crear un archivo XML desde un DataSet

*****************************
En esta demostracin, veremos cmo leer y escribir XML a/desde un DataSet.
Los archivos de esta demostracin se encuentran en los proyectos Demo10CS y
Demo10VB que se pueden encontrar dentro del fichero demos10.zip
Ejecutar la demostracin
1. Abrir el archivo Books.xml en Microsoft Visual Studio .NET.
Este archivo contiene los datos que se mostrarn.
2. Generar y examinar la pgina DisplayXML.aspx.
3. En el cuadro de texto, hacer clic en Books.xml y clic en Load.
4. En el cuadro de texto, hacer clic en Employees.xml y clic en Load.
5. Abrir el archivo de cdigo subyacente DisplayXML.aspx.vb o
DisplayXML.aspx.cs en Visual Studio .NET.
Introduccin
Leer datos XML
Leer y escribir datos XML 17


6. En el procedimiento de evento cmdLoad_Click, mostrar el cdigo que lee
un archivo XML en un DataSet y vincula el DataGrid al DataSet.

El DataGrid nicamente puede gestionar un nico nivel de elementos en
un archivo XML.

Si hay demasiada anidacin de elementos, los datos no se mostrarn.
Podemos demostrar una anidacin excesiva agregando un elemento author a
los elementos book en el archivo Books.xml:
<book>
...
<author>
<firstname>Jay</firstname>
<lastname>Bird</lastname>
</author>
</book>

7. Generar y examinar la pgina DisplayXML.aspx.
No se muestran los datos debido a la excesiva anidacin.
8. Generar y examinar la pgina SaveAsXML.aspx.
El DataGrid muestra los datos del DataSet que se guardarn en un archivo
XML.
9. Hacer clic en Save as XML, y clic en el hiperenlace View XML.
Estos son los datos XML que se han creado desde el DataSet.
10. Abrir uno de los archivos de cdigo subyacente SaveAsXml.aspx.vb o
SaveAsXml.aspc.cs en Visual Studio .NET.
Hay una funcin denominada CreateDataSet que genera el DataSet desde
una base de datos SQL Server.
11. Para crear un archivo XML, mostrar el cdigo en el procedimiento de
evento cmdSave_Click que invoca el mtodo WriteXml del DataSet.
12. Para crear un archivo de esquema XSD, mostrar el cdigo en el
procedimiento de evento cmdSchema_Click que invoca el mtodo
WriteXmlSchema del DataSet.

Nota
Escribir datos XML
18 Leer y escribir datos XML


Prctica: uso del mtodo ReadXml
Los estudiantes:
Crearn un DataSet
Cargarn un DataSetdesde un archivo
XML
Lo mostrarnen un DataGrid
Tiempo: 5 Minutos

*****************************
En esta prctica, aprenderemos a utilizar el mtodo ReadXml.
Los archivos de esta prctica se encuentran en los proyectos Demo10CS y
Demo10VB que se pueden encontrar dentro del fichero demos10.zip
Ejecutar la prctica
1. Abrir el archivo Employees.xml en Visual Studio .NET. En los siguientes
pasos, crearemos un formulario Web para mostrar los datos que se
encuentran en Employees.xml.
2. Crear un nuevo formulario Web Form en el proyecto Mod12VB o
Mod12CS denominado ReadXmlForm.aspx.
3. Arrastrar un control DataGrid al formulario Web Form. Establecer su
propiedad ID a dgEmployees.
4. En el procedimiento de evento Page_Load, crear un DataSet, invocar
ReadXml para leer los datos XML del archivo Employees.xml en el
DataSet, y vincular el DataGrid al DataSet.
El cdigo debera ser similar al siguiente:
Dim ds As New DataSet()
ds.ReadXml(Server.MapPath("Employees.xml"))
dgEmployees.DataSource = ds
dgEmployees.DataBind()

DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("Employees.xml"));
dgEmployees.DataSource = ds;
dgEmployees.DataBind();

5. Generar y examinar la pgina.

Introduccin
Visual Basic .NET
C#
Leer y escribir datos XML 19


Crear datos XML anidados
De forma predeterminada, la salida de DataTablees
secuencial
Para anidar XML, anidar DataRelation
Secuencial Anidado
Dim dr As New DataRelation _
("name", parentCol, childCol)
dr.Nested = True
ds.Relations.Add(dr)
Dim dr As New DataRelation _
("name", parentCol, childCol)
dr.Nested = True
ds.Relations.Add(dr)
<Title name="title1" />
<Title name="title2" />
<Title name="title3" />
<Publisher name="pub1" />
<Publisher name="pub2" />
<Title name="title1" />
<Title name="title2" />
<Title name="title3" />
<Publisher name="pub1" />
<Publisher name="pub2" />
<Publisher name="pub1" >
<Title name="title1" />
<Title name="title3" />
</Publisher>
<Publisher name="pub2" >
<Title name="title2" />
</Publisher>
<Publisher name="pub1" >
<Title name="title1" />
<Title name="title3" />
</Publisher>
<Publisher name="pub2" >
<Title name="title2" />
</Publisher>
DataRelation dr = new
DataRelation("name",
parentCol,
childCol);
dr.Nested = true;
ds.Relations.Add(dr);
DataRelation dr = new
DataRelation("name",
parentCol,
childCol);
dr.Nested = true;
ds.Relations.Add(dr);

*****************************
En una representacin relacional de datos, las tablas individuales contienen filas
relacionadas entre s utilizando una columna o un conjunto de columnas. En el
DataSet de ADO.NET, la relacin entre tablas se implementa utilizando una
DataRelation.
Cuando creamos una DataRelation, las relaciones primario-secundario se
gestionan nicamente mediante la relacin entre las filas y las columnas. Tablas
y columnas son entidades distintas. En la representacin jerrquica de datos que
proporciona XML, las relaciones primario-secundario estn representadas por
elementos primarios que contienen elementos secundarios anidados.

Cuando se utilizan relaciones anidadas, un elemento secundario slo
puede tener un elemento primario.

Para facilitar la anidacin de objetos secundarios cuando un DataSet est
sincronizado con un XmlDataDocument, o cuando est escrito como datos
XML utilizando WriteXml, el DataRelation expone una propiedad Nested.
Si se establece a true la propiedad Nested de una DataRelation, las filas
secundarias de la relacin sern anidadas en la columna primaria cuando el
DataSet est escrito como datos XML o se sincronice con un
XmlDataDocument. El valor predeterminado de la propiedad Nested del
objeto DataRelation es false.
Introduccin
DataRelation
Nota
20 Leer y escribir datos XML


En la siguiente ilustracin de un DataSet, veremos cmo escribir el cdigo
cuando la propiedad Nested del DataRelation est establecida a false, adems
cuando la propiedad Nested del DataRelation est establecida a true. Tambin
veremos la salida del resultado de invocar WriteXml en el DataSet.
DataSet














El siguiente cdigo muestra cmo establecer la propiedad Nested de
DataRelation a false:
Dim ds As New DataSet()
'fill the DataSet
...
Dim parentCol As DataColumn = _
ds.Tables("Publishers").Columns("pub_id")
Dim childCol As DataColumn = _
ds.Tables("Titles").Columns("pub_id")
Dim dr As New DataRelation _
("TitlePublishers", parentCol, childCol)
ds.Relations.Add(dr)
ds.WriteXml(Server.MapPath("PubTitlesNotNested.xml"), _
XmlWriteMode.IgnoreSchema)

DataSet ds = new DataSet();
//fill the DataSet
...
DataColumn parentCol =
ds.Tables["Publishers"].Columns["pub_id"];
DataColumn childCol= ds.Tables["Titles"].Columns["pub_id"];
DataRelation dr = new DataRelation ("TitlePublishers",
parentCol, childCol);
ds.Relations.Add(dr);
ds.WriteXml(Server.MapPath("PubTitlesNotNested.xml"),
XmlWriteMode.IgnoreSchema);

La propiedad Nested del objeto DataRelation no est establecida a true para el
anterior DataSet; por tanto, los objetos secundarios no se anidarn dentro de los
elementos primarios cuando este DataSet est representado como datos XML.
Visual Basic .NET
C#
title1
title2
title3
title pub_id
1
2
1
price
40,00
60,00
30,00
1
2

pub1
pub2
pub_id pub_name
D Da at ta aT Ta ab bl le e P Pu ub bl li is sh he er rs s
D Da at ta aT Ta ab bl le e T Ti it tl le es s
Secundaria
Primaria
Leer y escribir datos XML 21


El siguiente ejemplo de XML muestra el resultado que resultar de invocar
WriteXml en el DataSet:
<?xml version = "1.0" standalone = "yes"?>
<NewDataSet>
<Titles>
<title>title1</title>
<pub_id>1</pub_id>
<price>40.00</price>
</Titles>
<Titles>
<title>title2</title>
<pub_id>2</pub_id>
<price>60.00</price>
</Titles>
<Titles>
<title>title3</title>
<pub_id>1</pub_id>
<price>30.00</price>
</Titles>
<Publishers>
<pub_id>1</pub_id>
<pub_name>pub1</pub_name>
</Publishers>
<Publishers>
<pub_id>2</pub_id>
<pub_name>pub2</pub_name>
</Publishers>
</NewDataSet>

Los elementos Titles y Publishers se muestran como elementos secuenciales.
Para que los elementos Titles aparezcan como secundarios de sus respectivos
elementos primarios, la propiedad Nested de DataRelation debera estar
establecida a true y deberamos aadir el siguiente cdigo:

Dim dr As New DataRelation _
("TitlePublishers", parentCol, childCol)
dr.Nested = True
ds.Relations.Add(dr)
ds.WriteXML(Server.MapPath("PubTitlesNested.xml"), _
XmlWriteMode.IgnoreSchema)


DataRelation dr = new DataRelation("TitlePublishers",
parentCol, childCol);
dr.Nested = true;
ds.Relations.Add(dr);
ds.WriteXML(Server.MapPath("PubTitlesNested.xml"),
XmlWriteMode.IgnoreSchema);

Visual Basic .NET
C#
22 Leer y escribir datos XML


El siguiente XML muestra el aspecto que tendra la salida resultante con los
elementos Titles anidados dento de sus respectivos elementos primarios:
<?xml version = "1.0"standalone = "yes"?>
<NewDataSet>
<Publishers>
<pub_id>1</pub_id>
<pub_name>pub1</pub_name>
<Titles>
<title>title1</title>
<pub_id>1</pub_id>
<price>40.00</price>
</Titles>
<Titles>
<title>title3</title>
<pub_id>1</pub_id>
<price>30.00</price>
</Titles>
</Publishers>
<Publishers>
<pub_id>2</pub_id>
<pub_name>pub2</pub_name>
<Titles>
<title>title2</title>
<pub_id>2</pub_id>
<price>60.00</price>
</Titles>
</Publishers>
</NewDataSet>

Leer y escribir datos XML 23


Demostracin: crear XML anidado
WriteXml fuera de un DataSetsin
anidacin
Visualizar el archivo XML resultante
WriteXml fuera de unDataSet con
anidacin
Visualizar el archivo XML resultante

*****************************
En esta demostracin, aprenderemos a crear un documento XML anidado.
Los archivos de esta demostracin se encuentran en los proyectos Demo10CS y
Demo10VB que se pueden encontrar dentro del fichero demos10.zip
Ejecutar la demostracin
1. Abrir la pgina SaveNestedXML.aspx en Visual Studio .NET.
2. Visualizar la pgina de cdigo subyacente, explicar el cdigo y anotar lo
siguiente:
a. En la funcin CreateDataSet, se ha creado un DataSet con dos
DataTables.
b. En la funcin MakeDataRelation, se ha creado una DataRelation entre
las dos tablas, estableciendo la propiedad Nested a True o False,
dependiendo del argumento a la funcin.
c. En el procedimiento de evento cmdSave_Click, se ha creado la
DataRelation con Nested establecido a false, y el DataSet se ha escrito
en un archivo XML.
d. En el procedimiento de evento cmdSaveNested_Click, se ha creado la
DataRelation con la propiedad Nested establecida a true, y el DataSet
se ha escrito a un archivo XML.
3. Generar y examinar la pgina SaveNestedXML.aspx.
4. Hacer clic en Save as XML, y clic en el hiperenlace View XML.
stos son los datos XML creados desde el DataSet con la propiedad Nested
establecida a false. Todos los elementos Titles estn listados, seguidos de
los elementos Publishers.
5. Hacer clic en Save as Nested XML, y clic en el hiperenlace View Nested
XML.
Introduccin
24 Leer y escribir datos XML


stos son los datos XML que no han creado desde el DataSet con la
propiedad Nested establecida a True. Los elementos Titles estn anidados
dentro de los elementos Publishers relacionados.

Leer y escribir datos XML 25


Leccin: trabajar con datos XML
Descripcin de la sincronizacin de un DataSetcon un
XmlDataDocument
Cmo sincronizar un DataSetcon un XmlDataDocument
Trabajar con un XmlDataDocument
Transformar datos XML con XSLT
Demostracin: transformar datos con XSLT

*****************************
La clase XmlDataDocument permite que los documentos XML sean
almacenados, recuperados y manipulados mediante un DataSet relacional.
XmlDataDocument tiene una estrecha afiliacin con la clase DataSet, que
proporciona una vista relacional del documento XML cargado. Los cambios
que se realicen al XmlDataDocument se reflejan en el DataSet y viceversa.
De modo similar, para transformar el contenido de un documento fuente XML
en otro formato, como XML o HTML, podemos utilizar una transformacin
XSLT.
En esta leccin, estudiaremos cmo sincronizar un DataSet con un
XmlDataDocument. Tambin aprenderemos a utilizar XmlDataDocument.
Finalmente, estudiaremos cmo transformar datos XML utilizando el objeto
XslTransform.
En esta leccin, aprenderemos a:
Identificar las diferentes formas disponibles para sincronizar un DataSet
con un XmlDataDocument.
Identificar cmo sincronizar un DataSet con un XmlDataDocument.
Utilizar un XmlDataDocument.
Transformar datos XML utilizando el objeto XslTransform.

Introduccin
Objetivos de la leccin
26 Leer y escribir datos XML


Sincronizacin de un DataSet con un XmlDataDocument
Base de
datos
DataAdapter
DataSet
Tablas
XmlDataDocument
TransformacionesXML
Otrostiposde documentosXML
NavegacinpordocumentosXML
Sincronizado
System.Data System.Xml

*****************************
Los DataSets proporcionan una representacin relacional de los datos. Para el
acceso jerrquico a datos, podemos utilizar las clases XML disponibles en el
.NET Framework. Antes, las representaciones jerrquicas y relacionales de
datos se utilizaban por separado. Sin embargo, el .NET Framework permite el
acceso sncrono en tiempo real a las representaciones relacionales y jerrquicas
de datos mediante el objeto DataSet y el objeto XmlDataDocument,
respectivamente.
Cuando un DataSet est sincronizado con un XmlDataDocument, ambos
objetos trabajan con un nico conjunto de datos. Esto significa que si se
modifica el DataSet, el cambio se reflejar en el XmlDataDocument, y
viceversa.
La relacin entre el DataSet y el XmlDataDocument crea gran flexibilidad
permitiendo que una sola aplicacin, utilizando un solo conjunto de datos,
acceda a toda la familia de servicios creados alrededor del DataSet.
Sincronizar un XmlDataDocument con un DataSet conserva la fidelidad de un
documento XML. Si el DataSet se puebla desde un documento XML utilizando
ReadXml, los datos pueden ser muy distintos del documento XML original
cuando los datos son escritos de nuevo como un documento XML utilizando
WriteXml. Los datos pueden ser diferentes porque el DataSet no mantiene el
formato, como los espacios en blanco, o la informacin jerrquica, como el
orden de los elementos, del documento XML original. El DataSet tampoco
contiene los elementos del documento XML que han sido ignorados porque no
cumplan el esquema del DataSet. Sincronizar un XmlDataDocument con un
DataSet permite mantener el formato y la estructura jerrquica de los
elementos del documento XML original en el XmlDataDocument, mientras
que el DataSet contiene nicamente los datos y la informacin de esquema
apropiados para el DataSet.
Introduccin
Un nico conjunto de
datos
Leer y escribir datos XML 27


Cmo sincronizar un DataSet con un XmlDataDocument
Almacenar datos XML en un XmlDataDocument
Almacenar un DataSeten un XmlDataDocument
Dim ds As New DataSet()
'fill in ds
Dim objXmlDataDoc As New XmlDataDocument(ds)
Dim ds As New DataSet()
'fill in ds
Dim objXmlDataDoc As New XmlDataDocument(ds)
XmlDataDocument objXmlDataDoc = new XmlDataDocument();
objXmlDataDoc.Load(Server.MapPath ("file.xml"));
-or-
objXmlDataDoc.DataSet.ReadXml(Server.MapPath ("file.xml"));
XmlDataDocument objXmlDataDoc = new XmlDataDocument();
objXmlDataDoc.Load(Server.MapPath ("file.xml"));
-or-
objXmlDataDoc.DataSet.ReadXml(Server.MapPath ("file.xml"));
DataSet ds = new DataSet();
//fill in ds
objXmlDataDoc = new XmlDataDocument(ds);
DataSet ds = new DataSet();
//fill in ds
objXmlDataDoc = new XmlDataDocument(ds);
Dim objXmlDataDoc As New XmlDataDocument()
objXmlDataDoc.Load(Server.MapPath ("file.xml"))
-or-
objXmlDataDoc.DataSet.ReadXml(Server.MapPath ("file.xml"))
Dim objXmlDataDoc As New XmlDataDocument()
objXmlDataDoc.Load(Server.MapPath ("file.xml"))
-or-
objXmlDataDoc.DataSet.ReadXml(Server.MapPath ("file.xml"))

*****************************
Existen dos modos de sincronizar un DataSet con un XmlDataDocument.
Podemos:
Almacenar datos XML en un XmlDataDocument.
Almacenar un DataSet en un XmlDataDocument.

El siguiente cdigo de ejemplo muestra cmo almacenar datos XML en un
XmlDataDocument:
Dim objXmlDataDoc As New XmlDataDocument()
objXmlDataDoc.Load(Server.MapPath("file.xml"))

XmlDataDocument objXmlDataDoc = new XmlDataDocument();
objXmlDataDoc.Load(Server.MapPath("file.xml"));

La primera lnea del cdigo anterior crea un objeto XmlDataDocument, y la
segunda lnea carga el archivo XML en el objeto XmlDataDocument.
Tambin podemos almacenar datos XML en un XmlDataDocument utilizando
una lnea de cdigo como muestran los siguientes ejemplos:
objXmlDataDoc.DataSet.ReadXml(Server.MapPath("file.xml"))

objXmlDataDoc.DataSet.ReadXml(Server.MapPath("file.xml"));
Introduccin
Almacenar datos XML
en un XmlDataDocument
Visual Basic .NET
C#
Visual Basic .NET
C#
28 Leer y escribir datos XML


El siguiente cdigo de ejemplo muestra cmo almacenar un DataSet en un
XmlDataDocument:
Dim ds As New DataSet()
'fill in ds
...
Dim objXmlDataDoc As New XmlDataDocument(ds)

DataSet ds = new DataSet();
//fill in ds
...
XmlDataDocument objXmlDataDoc = new XmlDataDocument(ds);

La primera lnea del cdigo anterior crea un nuevo DataSet denominado ds. La
ltima lnea crea un objeto denominado XmlDataDocument y pasa ds, un
DataSet, como parmetro. El proceso de rellenar ds se ha omitido del ejemplo.
Almacenar un DataSet
en un XmlDataDocument
Visual Basic .NET
C#
Leer y escribir datos XML 29


Trabajar con un XmlDataDocument
Mostrar datos en un control enlazado a lista
Extraer filas del Datasetcomo XML
Utilizar mtodos XML DOM
XmlDataDocumenthereda de XmlDocument
Aplicar una transformacin XSLT
Objeto XslTransform
dg.DataSource = objXmlDataDoc.DataSet
dg.DataSource = objXmlDataDoc.DataSet
Dim elem As XmlElement
elem = objXmlDataDoc.GetElementFromRow _
(ds.Tables(0).Rows(1))
Dim elem As XmlElement
elem = objXmlDataDoc.GetElementFromRow _
(ds.Tables(0).Rows(1))
XmlElement elem;
elem = objXmlDataDoc.GetElementFromRow(ds.Tables[0].Rows[1]);
XmlElement elem;
elem = objXmlDataDoc.GetElementFromRow(ds.Tables[0].Rows[1]);
dg.DataSource = objXmlDataDoc.DataSet;
dg.DataSource = objXmlDataDoc.DataSet;

*****************************
El DataSet representa una fuente de datos relacional en ADO.NET. El
XmlDocument implementa el DOM en XML, y el XmlDataDocument unifica
ADO.NET y XML representando datos relacionales de un DataSet y
sincronizando esos datos con el modelo de documento XML.
El control DataGrid muestra todas las filas de la tabla del DataSet. El
siguiente cdigo muestra cmo asignar el objeto DataSet
(objXmlDataDoc.DataSet) al control DataGrid (dg):
dg.DataSource = objXmlDataDoc.DataSet

dg.DataSource = objXmlDataDoc.DataSet;

Para extraer filas individuales como XML, necesitamos consultar el DataSet.
Para consultar el DataSet, utilizamos el mtodo GetElementFromRow. El
siguiente cdigo muestra cmo el mtodo GetElementFromRow de
XmlDataDocument devuelve un objeto XmlElement:
Dim elem As XmlElement
elem = objXmlDataDoc.GetElementFromRow _
(ds.Tables(0).Rows(1))

XmlElement elem;
elem = objXmlDataDoc.GetElementFromRow(ds.Tables[0].Rows[1]);

Introduccin
Mostrar datos en un
control enlazado a lista
Visual Basic .NET
C#
Extraer filas del DataSet
Visual Basic .NET
C#
30 Leer y escribir datos XML


El .NET Framework implementa el XML DOM para proporcionar acceso a
datos de documentos XML y proporcionar acceso a las clases adicionales para
poder leer, escribir y navegar en documentos XML. XmlDataDocument
proporciona un acceso relacional a datos con su capacidad de sincronizar con
los datos relacionales del DataSet.
La clase XmlDataDocument extiende la clase XmlDocument. La clase
XmlDocument implementa el DOM; por tanto, nos permite cargar datos
relacionales o datos XML. XmlDataDocument tambin nos permite manipular
esos datos utilizando el DOM.
Si los datos se almacenan en una estructura relacional y deseamos que sean la
entrada en una transformacin XSLT, podemos cargar los datos relacionales en
un DataSet y asociarlos con el XmlDataDocument.
Tomando datos relacionales, cargndolos en un DataSet y utilizando la
sincronizacin dentro del XmlDataDocument, los datos relacionales pueden
sufrir transformaciones XSLT. El objeto XslTransform transforma datos XML
utilizando una hoja de estilo XSLT.
Utilizar mtodos XML
DOM
Aplicar una
transformacin XSLT
Leer y escribir datos XML 31


Transformar datos XML con XSLT
Crear un XmlDataDocument
Crear el objeto XSLTransforme invocar el mtodo
Transform
Dim ds As New DataSet()
'fill in DataSet
...
Dim xmlDoc As New XmlDataDocument(ds)
Dim ds As New DataSet()
'fill in DataSet
...
Dim xmlDoc As New XmlDataDocument(ds)
Dim xslTran As New XslTransform()
xslTran.Load(Server.MapPath("PubTitles.xsl"))
Dim writer As New XmlTextWriter _
(Server.MapPath("PubTitles_output.html"), _
System.Text.Encoding.UTF8)
xslTran.Transform(xmlDoc, Nothing, writer)
writer.Close()
Dim xslTran As New XslTransform()
xslTran.Load(Server.MapPath("PubTitles.xsl"))
Dim writer As New XmlTextWriter _
(Server.MapPath("PubTitles_output.html"), _
System.Text.Encoding.UTF8)
xslTran.Transform(xmlDoc, Nothing, writer)
writer.Close()
Cdigo de ejemplo de #

*****************************
El objetivo de la transformacin XSLT es transformar el contenido de un
documento XML origen en otro documento diferente en formato o estructura.
Por ejemplo, transformar XML en HTML para utilizarlo en un sitio Web o
transformar XML en un documento que contenga nicamente los campos que
requiere una aplicacin.
En el .NET Framework, la clase XslTransform es el procesador XSLT que
transforma un documento XML en otro.
Antes de transformar datos XML, es necesario crear un DataSet y un objeto
XmlDataDocument:
Dim ds As New DataSet()
'fill in DataSet
...
Dim xmlDoc As New XmlDataDocument(ds)

DataSet ds = new DataSet();
//fill in DataSet
...
XmlDataDocument xmlDoc = new XmlDataDocument(ds);

La primera lnea del cdigo anterior crea el DataSet. La siguiente lnea de
cdigo (el cdigo no se muestra; en lugar de ello, el comentario est presente)
rellena el DataSet. La ltima lnea del cdigo anterior crea un objeto
XmlDataDocument denominado xmlDoc y pasa un parmetro a xmlDoc, el
DataSet ds.
Introduccin
Crear XmlDataDocument
Visual Basic .NET
C#
32 Leer y escribir datos XML


Los siguientes pasos muestran el proceso de transformar datos XML creando un
objeto XslTransform e invocando el mtodo Transform:
1. Crear un objeto XslTransform:
Dim xslTran As New XslTransform()

XslTransform xslTran = new XslTransform();

2. Utilizar el mtodo Load para cargar el archivo de hoja de estilo .xsl para la
transformacin:
xslTran.Load(Server.MapPath("PubTitles.xsl"))

xslTran.Load(Server.MapPath("PubTitles.xsl"));

3. Crear un objeto XmlTextWriter para la salida del documento:
Dim writer As New XmlTextWriter _
(Server.MapPath("PubTitles_output.html"), _
System.Text.Encoding.UTF8)

XmlTextWriter writer = new XmlTextWriter
(Server.MapPath("PubTitles_output.html"),
System.Text.Encoding.UTF8);

4. Utilizar el mtodo Transform del objeto XslTransform para transformar
los datos. El mtodo Transform tiene mltiples sobrecargas y puede
gestionar distintos tipos de entradas y salidas.
La variable XmlDoc del tipo XmlDataDocument es uno de los parmetros
que se pasan al mtodo Transform:
xslTran.Transform(xmlDoc, Nothing, writer)

xslTran.Transform(xmlDoc, null, writer);

5. Cerrar XmlTextWriter:
writer.Close()

writer.Close();


El proceso de transformacin est especificado por la Recomendacin
XSLT versin 1.0 del W3C. Para ms informacin, ver www.w3c.org/TR/xslt.

Crear el objeto
XslTransforme invocar
el mtodo Transform
Visual Basic .NET
C#
Visual Basic .NET
C#
Visual Basic .NET
C#
Visual Basic .NET
C#
Visual Basic .NET
C#
Nota
Leer y escribir datos XML 33


Demostracin: transformar datos con XSLT
Crear un DataSet con dos DataTables
Crear XslTransform
Transformar el documento DataSeten
HTML

*****************************
En esta demostracin, veremos cmo transformar datos utilizando el objeto
XslTranform.
Los archivos de esta demostracin se encuentran en los proyectos Demo10CS y
Demo10VB que se pueden encontrar dentro del fichero demos10.zip
Ejecutar la demostracin
1. Abrir la pgina TransformPubTitles.aspx.
Los dos controles DataGrid muestran las dos DataTables en el DataSet.
2. Visualizar la pgina de cdigo subyacente.
3. Mostrar el cdigo del procedimiento de evento cmdTransform_Click y
explicar el cdigo:
a. El DataSet se crea utilizando CreateDataSet para crear el DataSet, y
seguidamente se invoca a MakeDataRelation para crear la
DataRelation. No obstante, para que el mapping XmlDataDocument
funcione, debe agregarse al DataSet la tabla primaria, Publishers, antes
de la tabla Titles.
b. Se crea un XmlDataDocument desde el DataSet.
c. Se crea un objeto XslTransform y se carga con la hoja de estilo
PubTitles.xsl.
d. Se invoca el mtodo Transform del objeto XslTransform para aplicar
la hoja de estilo al XmlDocument.

El mtodo Transform nicamente puede enviar la salida a un
XmlReader, un TextReader o a objetos XmlWriter.

Introduccin
Nota
34 Leer y escribir datos XML


4. Visualizar la pgina en un navegador.
5. Hacer clic en Transform Data, y clic en el hiperenlace View Transform
Output.
sta es la pgina HTML creada a partir de los datos del DataSet.
6. Abrir la pgina Transform.aspx en Visual Studio .NET.
7. Visualizar la pgina de cdigo subyacente.
8. Mostrar el cdigo en el procedimiento de evento cmdTransform_Click y
explicar el cdigo:
a. Se crea el DataSet invocando CreateCustOrdersDataSet para crear el
DataSet y el DataRelation.
b. Se crea un XmlDataDocument a partir del DataSet.
c. Se crea un objeto XslTransform y se carga con la hoja de estilo
CustomerOrders.xslt.
d. Se invoca el mtodo Transform del objeto XslTransform para aplicar
la hoja de estilos al XmlDocument.
9. Abrir la hoja de estilos PubTitles.xsl para mostrar cmo funciona.

Leer y escribir datos XML 35


Leccin: uso del control de Servidor Web XML
Qu es el control de Servidor Web XML?
Cargar y guardar datos XML
Demostracin: uso del control de ServidorWeb XML

*****************************
La informacin en un archivo XML es plana, nicamente contiene los datos y
no indica cmo formatearlos o mostrarlos. Para mostrar datos XML en la
pgina de un formulario Web Form, debemos proporcionar la informacin de
formato y presentacin.
En esta leccin, aprenderemos cmo mostrar, cargar y guardar datos XML.
En esta leccin, aprenderemos a:
Describir el control de Servidor Web XML.
Cargar y guardar datos XML.

Introduccin
Objetivos de la leccin
36 Leer y escribir datos XML


Qu es el control de Servidor Web XML?
<asp:Xml id="Xml1"
Document="XmlDocument object to display"
DocumentContent="String of XML"
DocumentSource="Path to XML Document"
Transform="XslTransform object"
TransformSource="Path to XSL Document"
runat="server"/>
<asp:Xml id="Xml1"
Document="XmlDocument object to display"
DocumentContent="String of XML"
DocumentSource="Path to XML Document"
Transform="XslTransform object"
TransformSource="Path to XSL Document"
runat="server"/>
Escribe a un documento XML
Escribe el resultado de una transformacin XSLT auna
pgina Web

*****************************
Para presentar datos XML en una pgina de un formulario Web Form, debemos
especificar las etiquetas, como <TABLE>, <P>, o cualquier otra etiqueta que
deseemos utilizar para mostrar los datos. Tambin debemos proporcionar
instrucciones sobre cmo los datos del archivo XML se muestran en estas
etiquetas; por ejemplo, si cada elemento del archivo XML debera mostrarse
como una fila o una columna de tabla, etc.
Una forma de proporcionar todas estas instrucciones es utilizar el lenguaje de
transformacin XSLT y crear archivos XSLT. Una vez dispongamos de las
transformaciones XSLT, debemos aplicarlas al archivo XML. El resultado es un
nuevo archivo con la informacin XML formateada segn el archivo de
transformacin.
Podemos utilizar el control de Servidor Web XML para escribir un documento
XML, o para escribir el resultado de una transformacin XSLT, en una pgina
Web. El resultado XML aparece en la ubicacin del control de la pgina Web.
La informacin del XML y de XSLT puede encontrarse en documentos
externos, o podemos incluir el XML en lnea. Existen dos formas de referenciar
documentos externos utilizando las configuraciones de propiedades del control
de Servidor Web XML. Podemos proporcionar una ruta al documento XML de
la etiqueta del control, o podemos cargar los documentos XML y XSLT como
objetos y pasarlos al control. Si preferimos incluir el XML en lnea, debemos
escribirlo entre las etiquetas de apertura y cierre del control.
El siguiente cdigo de ejemplo muestra cmo utilizar el control de Servidor
Web XML para mostrar el contenido de un documento XML o el resultado de
una transformacin XSLT:
Introduccin
Lenguaje de
transformacin XSLT
Utilizar el control de
Servidor Web XML para
escribir un documento
XML
Leer y escribir datos XML 37


<asp:Xml id="Xml1"
Document="XmlDocument object to display"
DocumentContent="String of XML"
DocumentSource="Path to XML Document"
Transform="XslTransform object"
TransformSource="Path to XSL Transform Document"
runat="server">

38 Leer y escribir datos XML


Cargar y guardar datos XML
xmlCtl.Document.Save(Server.MapPath("text.xml"))
xmlCtl.Document.Save(Server.MapPath("text.xml"))
Control de Servidor Web XML (en el formulario Web Form)
Cargar datos dinmicamente (en la pgina de cdigo
subyacente)
Guardar datos (en la pgina de cdigo subyacente)
xmlCtl.Document.Load(Server.MapPath("text.xml"))
xmlCtl.Document.Load(Server.MapPath("text.xml"))
<asp:Xml id="xmlCtl" runat="server" />
<asp:Xml id="xmlCtl" runat="server" />
xmlCtl.Document.Save(Server.MapPath("text.xml"));
xmlCtl.Document.Save(Server.MapPath("text.xml"));
xmlCtl.Document.Load(Server.MapPath("text.xml"));
xmlCtl.Document.Load(Server.MapPath("text.xml"));

*****************************
Antes de cargar y guardar datos XML en una aplicacin Web, debemos agregar
el control de servidor Web XML a la pgina del formulario Web Form, en la
ubicacin donde deseamos que aparezca el resultado.
Existen dos formas de agregar un control de servidor Web XML a la pgina de
un formulario Web Form:
1. Arrastrar un control XML desde la ficha Web Forms del Cuadro de
herramientas a la vista de Diseo, como muestra la siguiente ilustracin.

Introduccin
Agregar un control de
Servidor Web XML a la
pgina de un formulario
Web Form
Leer y escribir datos XML 39


2. Para agregar un control de servidor Web XML programticamente, en la
vista HTML, agregar la siguiente lnea de cdigo:
<asp:Xml id="xmlCtl" runat="server" />


Existen varias formas de cargar datos XML en una aplicacin Web. Podemos:
Proporcionar una ruta a un documento XML externo utilizando la propiedad
DocumentSource.
Cargar un documento XML como un objeto y pasarlo al control, utilizando
el mtodo Load del evento Page_Load, y asignar el documento a la
propiedad Document del control XML.
Incluir el contenido XML en lnea, entre las etiquetas de apertura y cierre
del control de Servidor Web XML.

Para proporcionar una ruta a un documento XML externo, seguir estos pasos:
1. Establecer la propiedad DocumentSource del control de Servidor Web
XML a la ruta del documento fuente XML.
2. El documento XML se escribir directamente al flujo de salida a menos que
tambin especifiquemos la propiedad TransformSource.
TransformSource debe ser un documento vlido de transformacin XSLT,
que se utilizar para transformar el documento XML antes de que su
contenido se escriba en el flujo de salida. El siguiente ejemplo muestra
cmo hacer referencia a documentos origen utilizando una ruta relativa:
<body>
<h3>XML Example</h3>
<form runat="server">
<asp:Xml id="xml1" DocumentSource="MySource.xml"
TransformSource="MyStyle.xsl" runat="server" />
</form>
</body>


Para cargar un documento XML como un objeto y pasarlo al control, seguir
estos pasos:
1. En el men Ver, hacer clic en Cdigo. En el Editor de cdigo, buscar el
procedimiento de evento Page_Load.
2. Agregar cdigo para cargar el documento fuente XML, y asignar la fuente a
la propiedad Document del control. Por ejemplo:
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim xmlDoc As System.Xml.XmlDocument = _
New System.Xml.XmlDocument()
xmlDoc.Load(Server.MapPath("MySource.xml"))
Dim xslTran As System.Xml.Xsl.XslTransform = _
New System.Xml.Xsl.XslTransform()
xslTran.Load(Server.MapPath("MyStyle.xsl"))
Xml1.Document = xmlDoc
Xml1.Transform = xslTran
End Sub

Cargar datos XML en el
control de Servidor Web
XML
Proporcionar una ruta a
un documento XML
externo
Cargar un documento
XML como un objeto y
pasarlo al control
Visual Basic .NET
40 Leer y escribir datos XML


private void Page_Load(object sender, System.EventArgs e)
{
System.Xml.XmlDocument xmlDoc = new
System.Xml.XmlDocument();
xmlDoc.Load(Server.MapPath("MySource.xml"));
System.Xml.Xsl.XslTransform xslTran = new
System.Xml.Xsl.XslTransform();
xslTran.Load(Server.MapPath("MyStyle.xsl"));
Xml1.Document = xmlDoc;
Xml1.Transform = xslTran;
}


Para incluir el contenido XML en lnea, seguir estos pasos:
1. En la visa HTML, buscar las etiquetas <asp:xml>y </asp:xml>.
2. Agregar nuestro cdigo XML entre ambas etiquetas. Por ejemplo:
<asp:xml TransformSource="MyStyle.xsl" runat="server">
<clients>
<name>Frank Miller</name>
<name>Judy Lew</name>
</clients>
</asp:xml>


Podemos guardar los datos XML utilizando el mtodo Save, como muestra el
siguiente cdigo de ejemplo:
XmlCtl.Document.Save(Server.MapPath("xmlResult.xml"))

XmlCtl.Document.Save(Server.MapPath("xmlResult.xml"));

C#
Incluir el contenido XML
en lnea
Guardar datos XML
Visual Basic .NET
C#
Leer y escribir datos XML 41


Demostracin: uso del control de servidor Web XML
Agregar el control de ServidorWeb XML
a un formulario Web Form
Establecer la propiedad DocumentSource
para leer un archivo XML
Ver el resultado
Establecer la propiedad TransformSource
para leer un archivo XSLT
Ver el resultado

*****************************
En esta demostracin, estudiaremos cmo utilizar el control de Servidor Web
XML.
Los archivos de esta demostracin se encuentran en los proyectos Demo10CS y
Demo10VB que se pueden encontrar dentro del fichero demos10.zip
El cdigo completo para esta demostracin se encuentra en el archivo
UseXmlControl.aspx.
Ejecutar la demostracin
1. Abrir el archivo PubTitlesData.xml.
Este archivo contiene los datos que se mostrarn de la pgina ASPX.
2. Crear un nuevo formulario Web en el proyecto Mod12VB o Mod12CS
denominado MyUseXmlControl.aspx.
3. Arrastrar el control XML desde el Cuadro de herramientas al formulario
Web Form.
4. Establecer la propiedad DocumentSource del control XML al archivo
PubTitlesData.xml.
5. Generar y examinar.
sta es la vista predeterminada de los datos segn lo establecido por el
control. La vista predeterminada de los datos no tiene formato.
6. Establecer la propiedad TransformSource del control XML al archivo
PubTitles.xsl.
7. Generar y examinar la pgina de nuevo.
sta es la vista de los datos segn lo establecido por la hoja de estilos
PubTitles.xsl.
Introduccin


Prctica A: Leer datos XML
Medical
Medical.aspx
Medical
Medical.aspx
Benefits
Home Page
Default.aspx
Benefits
Home Page
Default.aspx
Life Insurance
Life.aspx
Life Insurance
Life.aspx
Retirement
Retirement.aspx
Retirement
Retirement.aspx
Dental
Dental.aspx
Dental
Dental.aspx
Dentists
Doctors
Doctors.aspx
Doctors
Doctors.aspx
Doctors
Logon Page
Login.aspx
Logon Page
Login.aspx
Registration
Register.aspx
Registration
Register.aspx
Coho
Winery
Prospectus
Prospectus.aspx
Prospectus
Prospectus.aspx
XML Web
Service
dentalService1.asmx
XML Web
Service
dentalService1.asmx
Page Header
Header.ascx
Page Header
Header.ascx
ASPState
tempdb
LabWeb
Application
User Control
namedate.ascx
User Control
namedate.ascx
Menu
Component
Class1.vb or Class1.cs
Menu
Component
Class1.vb or Class1.cs
XML
Files
Web.
config

*****************************
En este laboratorio, aprenderemos a:
Leer un archivo Extensible Markup Language (XML) y almacenarlo en un
DataSet.
Aplicar una transformacin a un archivo XML.

Para trabajar en este laboratorio, es necesario tener:
Conocimientos sobre cmo utilizar un control DataGrid.
Conocimientos sobre cmo crear procedimientos de evento para controles
de servidor Web.

Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios de
este curso, crearemos un sitio Web que permita a los empleados seleccionar y
configurar los beneficios que elijan.
Uno de los beneficios que ofrece Coho Winery es la jubilacin. Cuando
solicitan este beneficio, los empleados pueden ver los prospectos de varios
fondos comunes de inversin que ofrece Coho Winery.
Objetivos
Requisitos previos
Escenario
Tiempo estimado para
completar el laboratorio:
30 minutos
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList.
Estos proyectos pueden haberse creado utilizando Visual Basic .NET o
Microsoft Visual C#

.NET.
Si no se han creado estos proyectos, realizar los siguientes pasos:
Crear la solucin LabApplication

Realizar este procedimiento nicamente si no se ha creado un
archivo de solucin LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solucin en blanco
denominada LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Solucin en
blanco.
b. En el cuadro de dilogo Nuevo proyecto, escribir LabApplication en el
cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto Benefits, o si se ha eliminado.

1. Crear un nuevo proyecto de aplicacin Web ASP.NET, denominado
BenefitsVB o BenefitsCS, en la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic o Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Aplicacin Web ASP.NET,
establecer la ubicacin en http://localhost/BenefitsVB para el proyecto
Visual Basic .NET o en http://localhost/BenefitsCS para el proyecto
Visual C#.
d. Hacer clic en Agregar a Solucin, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solucin, es importante el
uso de maysculas en el nombre del proyecto. Probablemente, utilizaremos
algunos formularios Web Forms ya generados en ste y en otros
laboratorios, por ello, debemos verificar que hemos escrito con maysculas
el nombre del proyecto Benefits.


Importante
Importante
Precaucin


Actualizar el proyecto Benefits
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente.
3. Buscar los archivos de proyecto:
Ir a la carpeta VB\Starter\BenefitsVB para los archivos de Visual Basic
.NET.
Ir a la carpeta CS\Starter\BenefitsCS para los archivos de Visual C#.
Estas carpetas pueden encontrarse dentro del fichero labs10.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente Benefits, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.

Crear la biblioteca de clases BenefitsList

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto BenefitsList, o si se ha eliminado.

1. Crear un nuevo proyecto de biblioteca de clases:
Crear un nuevo proyecto de biblioteca de clases Visual Basic .NET con el
nombre BenefitsListVB, y agregarlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual Basic.
c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListVB.
d. Hacer clic en Agregar a solucin, y clic en Aceptar.
Crear un nuevo proyecto de biblioteca de clases Visual C#.NET con el
nombre BenefitsListCS, y agregarlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListCS.
a. Hacer clic en Agregar a solucin, y clic en Aceptar.

Verificar que se han escrito correctamente las maysculas del
proyecto BenefitsList.


Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Importante
Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Precaucin
Actualizar el proyecto BenefitsList
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente.
3. Ir al proyecto BenefitsList.
Ir a la carpeta VB\Starter\BenefitsListVB.

Ir a la carpeta CS\Starter\BenefitsListCS.
Estas carpetas pueden encontrarse dentro del fichero labs10.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.

Crear una referencia al componente BenefitsList del proyecto Benefits
1. En el proyecto Benefits de la solucin LabApplication, completar los
siguientes pasos para agregar una referencia al componente BenefitsList
que acabamos de crear:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB o
BenefitsCS en el Explorador de soluciones y hacer clic en Agregar
referencia.
b. En el cuadro de dilogo Agregar referencia, en la pestaa Proyectos,
hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.
c. En la lista Componentes seleccionados, seleccionar el componente
BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar.
El componente se agrega a la carpeta Referencias en el Explorador de
soluciones.

Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#


Ejercicio 1
Leer una lista de fondos comunes de inversin de un archivo XML
En este ejercicio, leeremos una lista de los fondos comunes de inversin del
archivo mutual_funds.xml y los almacenaremos en un DataSet. A
continuacin, mostraremos el DataSet en un control DataGrid.
Leer una lista de fondos comunes de inversin
1. Abrir el proyecto Benefits en la solucin LabApplication Visual Studio
.NET.
2. Agregar archivos al proyecto Benefits:
a. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsVB o BenefitsCS, seleccionar Agregar, y escoger Agregar
elemento existente.
b. Ir a la carpeta de beneficios:
VB\Starter\BenefitsVB.
CS\Starter\BenefitsCS.
Estas carpetas pueden encontrarse dentro del fichero labs10.zip
c. En el cuadro de lista desplegable Archivos de tipo, hacer clic en Todos
los archivos (*.*).
d. Seleccionar los siguientes archivos y hacer clic en Abrir:
retirement.aspx
prospectus.aspx
mutual_funds.xml
lgcap.xml
growth.xml
midcap.xml
smcap.xml
prospectus_style.xsl
3. Abrir el archivo mutual_funds.xml y examinar su contenido. Cules son
los dos campos (elementos) de cada fondo?
_____________________________________________________________
_____________________________________________________________
4. Abrir el formulario Web Form retirement.aspx.
Se ha agregado ya un control DataGrid a la pgina. Este DataGrid tiene
dos columnas personalizadas, una columna Name para mostrar el nombre
de un fondo comn de inversin, y una columna Link to prospectus, que
contiene un hiperenlace al formulario Web Form prospectus.aspx. En los
siguientes pasos, llenaremos este DataGrid con datos de un archivo XML.
Visual Basic .NET
C#
5. Abrir la pgina de cdigo subyacente retirement.aspx.vb o
retirement.aspx.cs y localizar el siguiente comentario en el procedimiento de
evento Page_Load:
'TODO Lab 12: Create a DataSet, fill it with the
'XML file, and display it

//TODO Lab 12: Create a DataSet, fill it with the
//XML file, and display it

6. Llenar el DataSet con los datos del archivo XML y mostrar el DataSet en
el control DataGrid dgRetirement:
a. Crear un DataSet denominado dsRetirement.
b. Invocar el mtodo ReadXml del DataSet para leer el archivo
mutual_funds.xml.
c. Establecer la fuente de datos del DataGrid dgRetirement en
dsRetirement.
d. Invocar el mtodo DataBind del DataGrid.
El cdigo debera ser similar al siguiente:
Dim dsRetirement As New DataSet()
dsRetirement.ReadXml( _
Server.MapPath("mutual_funds.xml"))
dgRetirement.DataSource = dsRetirement
dgRetirement.DataBind()

DataSet dsRetirement = new DataSet();
dsRetirement.ReadXml( Server.MapPath("mutual_funds.xml"));
dgRetirement.DataSource = dsRetirement;
dgRetirement.DataBind();

Para qu se utiliza el mtodo Server.MapPath?
____________________________________________________________
____________________________________________________________
7. Guardar los cambios.
8. Generar y examinar la pgina retirement.aspx.
Deberamos ver todos los nombres de los fondos comunes de inversin,
adems de enlaces a los prospectos de fondos comunes de inversin del
DataGrid.
Aunque los enlaces a los prospectos no funcionan en este momento, abrirn
una pgina denominada prospectus.aspx y le pasarn un identificador id de
prospecto en el parmetro ProspID. Generaremos la pgina prospectus.aspx
para mostrar el prospecto solicitado en el Ejercicio 2.

Visual Basic .NET
C#
Visual Basic .NET
C#


Ejercicio 2
Leer, transformar y mostrar XML
En este ejercicio, utilizaremos el control Xml para leer, transformar y mostrar el
prospecto de un determinado fondo comn de inversin.
Leer y mostrar un prospecto
1. Abrir el archivo lgcap.xml y examinar su contenido.
Cules son los tres campos (elementos) de un prospecto?
_____________________________________________________________
_____________________________________________________________
2. Abrir el archivo prospectus_style.xsl y examinar su contenido.
Prospectus_style.xsl es un archivo de hoja de estilo XML que utiliza XSLT
para mostrar datos XML. Cul ser el ttulo de la pgina del prospecto?
Qu color se utilizar para mostrar el texto General Description?
_____________________________________________________________
_____________________________________________________________
3. Abrir el formulario Web Form prospectus.aspx.
Esta pgina actualmente contiene el control de usuario header.ascx y un
nico hiperenlace.
4. Arrastrar un control Xml del Cuadro de herramientas en la pgina
prospectus.aspx, para que la pgina sea similar a la siguiente ilustracin.

5. Establecer las propiedades del control Xml en la ventana Propiedades, como
muestra la siguiente tabla.
Propiedad Valor

ID xmlProspectus
DocumentSource lgcap.xml

6. Generar y examinar la pgina prospectus.aspx.
Deberamos ver el contenido del prospecto lgcap.xml como una cadena de
texto continua y sin formato.

Aplicar una transformacin al prospecto
1. Abrir el formulario Web Form prospectus.aspx.
2. Establecer la propiedad TransformSource del control xmlProspectus en
prospectus_style.xsl.
3. Generar y examinar la pgina prospectus.aspx.
Deberamos ver el contenido del prospecto lgcap.xml como Hypertext
Markup Language (HTML) con formato.

Modificar la propiedad DocumentSource del control Xml
dinmicamente
Ahora utilizaremos un parmetro de cadena denominado ProspID para
seleccionar qu prospectos se mostrarn:
1. Abrir el formulario Web Form prospectus.aspx.
2. En la ventana Propiedades, eliminar la propiedad DocumentSource del
control xmlProspectus.
3. Abrir la pgina de cdigo subyacente de prospectus.aspx.
Abrir la pgina prospectus.aspx.vb y localizar el siguiente comentario en el
procedimiento de evento Page_Load:
'TODO Lab 12: Dynamically select the prospectus

Abrir la pgina prospectus.aspx.cs y localizar el siguiente comentario en el
procedimiento de evento Page_Load:
//TODO Lab 12: Dynamically select the prospectus

4. Leer el parmetro ProspID de la cadena de consulta solicitada y almacenar
el parmetro en una variable denominada strProspID.
El cdigo debera ser similar al siguiente:
Dim strProspID As String = Request.Params("ProspID")

string strProspID = Request.Params["ProspID"];

Visual Basic .NET
C#
Visual Basic .NET
C#


5. En el cdigo, establecer la propiedad DocumentSource del control
xmlProspectus con el valor de la variable strProspID, concatenado con
una extensin .xml.
El cdigo debera ser similar al siguiente:
xmlProspectus.DocumentSource = strProspID & ".xml"

xmlProspectus.DocumentSource = strProspID + ".xml";

6. Guardar los cambios de la pgina prospectus.aspx.
7. Generar y examinar la pgina retirement.aspx.
8. Hacer clic en el enlace Prospectus junto a Large cap stocks.
Deberamos ver el prospecto del fondo comn de inversin Large cap
stocks.
9. Hacer clic en el enlace Back to retirement page.
10. Probar los enlaces Prospectus para Growth stocks, Mid-cap stocks y
Small-cap stocks.

Visual Basic .NET
C#
Ejercicio 3 (si se dispone de tiempo)
Datos anidados
En este ejercicio, experimentaremos con la generacin de datos XML anidados
de una base de datos Microsoft SQL Server

.
Generar datos secuenciales
1. Agregar el formulario Web Form nestedData.aspx de la carpeta Benefits.
Este archivo puede encontrarse en la carpeta del proyecto Benefits:
VB\Starter\BenefitsVB.
CS\Starter\BenefitsCS.
Estas carpetas pueden encontrarse dentro del fichero labs10.zip
2. Abrir el formulario Web Form nestedData.aspx.
3. Abrir la pgina de cdigo subyacente nestedData.aspx.vb o
nestedData.aspx.cs y examinar el cdigo.
El cdigo genera un DataSet denominado dsDoctorsSpecialities, que
contiene tres objetos DataTable: doctors, drspecialties y specialties. El
cdigo crea relaciones entre las tres tablas.
Qu columna vincula los objetos DataTable doctors y drspecialties en la
DataRelation relation1? Cul es la DataTable primaria de esta relacin?
____________________________________________________________
____________________________________________________________
4. Generar y examinar la pgina nestedData.aspx y analizar el XML creado.
Son datos anidados?
____________________________________________________________
____________________________________________________________
5. Localizar el siguiente comentario en el procedimiento de evento
Page_Load:
'TODO Lab 12: Create a nested relationship between the
doctors and drspecialties DataTable objects

//TODO Lab 12: Create a nested relationship between the
doctors and drspecialties DataTable objects

Visual Basic .NET
C#
Visual Basic .NET
C#


6. Quitar el comentario de la siguiente lnea de cdigo para crear una relacin
anidada entre los objetos DataTable doctors y drspecialties:
'dr1.Nested = True

//dr1.Nested = true;

7. Generar, examinar nestedData.aspx y analizar el XML creado.

Es posible que sea necesario actualizar el explorador despus
de que se haya cargado la pgina para ver los cambios de los datos XML.

Qu ha cambiado respecto a la respuesta XML anterior?
_____________________________________________________________
_____________________________________________________________
8. Eliminar la lnea de cdigo de la que quitamos el comentario en el Paso 6.
9. Localizar el siguiente comentario en el procedimiento de evento
Page_Load:
'TODO Lab 12: Create a nested relationship between the
specialties and drspecialties DataTable objects

//TODO Lab 12: Create a nested relationship between the
specialties and drspecialties DataTable objects

10. Quitar el comentario de la siguiente lnea de cdigo para crear una relacin
anidada entre los objetos DataTable specialties y drspecialties:
'dr2.Nested = True

//dr2.Nested = true;

11. Generar y examinar la pgina nestedData.aspx y analizar el XML creado.

Es posible que sea necesario actualizar el navegador despus
de que se haya cargado la pgina para ver los cambios de los datos XML.

Qu ha cambiado respecto a la respuesta XML anterior?
_____________________________________________________________
_____________________________________________________________

No podemos utilizar las dos relaciones anidadas al mismo tiempo
debido a que el mismo objeto DataTable (drspecialties) no puede ser
secundario en dos relaciones anidadas.



Visual Basic .NET
C#
Sugerencia
Visual Basic .NET
C#
Visual Basic .NET
C#
Sugerencia
Nota



ndice
Descripcin 1
Leccin: descripcin del uso de servicios Web XML 2
Leccin: invocar un servicio Web XML utilizando HTTP 11
Leccin: utilizar un proxy para invocar un servicio Web
XML 16
Leccin: crear un servicio Web XML 28

Crear y consumir
servicios Web XML
Crear y consumir servicios Web XML 1


Descripcin
Introduccin al uso de servicios Web XML
Invocar un servicio Web XML utilizando HTTP
Utilizar un proxypara invocar un servicio Web XML
Crear un servicio Web XML

*****************************
Internet ha contribuido a facilitar a las empresas una mejor comunicacin
interna y entre empresas proporcionando un rpido acceso a la informacin. Sin
embargo, la navegacin por pginas basadas en datos no responde
adecuadamente a las necesidades de negocio de muchas empresas. Satisfacera
mejor sus necesidades disponer de sitios Web programables que enlazaran
directamente organizaciones, aplicaciones y servicios. Este enlace directo entre
aplicaciones es el papel que desempean los servicios Web XML. Al enlazar
nuestras aplicaciones y sitios Web a servicios Web XML, tenemos la
oportunidad de expandir la funcionalidad que ofrece nuestro sitio Web a los
usuarios.
En este mdulo, estudiaremos cmo invocar un servicio Web XML
directamente con un navegador y mediante un proxy desde un formulario Web
Form. Tambin estudiaremos cmo crear y publicar servicios Web XML
utilizando MicrosoftVisual Studio .NET.
En este mdulo, aprenderemos a:
Describir la utilidad y el proceso existente tras la invocacin a un servicio
Web XML desde un formulario Web Form.
Invocar un Servicio Web XML directamente desde un navegador utilizando
Hypertext Transfer Protocol (HTTP).
Crear un proxy de referencia Web para el mtodo de un Servicio Web
XML, e invocar ese mtodo Web desde un formulario Web Form.
Utilizar las plantillas de Visual Studio .NET para crear un servicio Web
XML.

Introduccin
Objetivos
2 Crear y consumir servicios Web XML


Leccin: descripcin del uso de servicios Web XML
Ques un servicio Web XML?
Por quutilizar servicios Web XML?
Buscar un servicio Web XML
Multimedia: modelo de ejecucin del servicio Web XML

*****************************
Uno de los retos con los que podemos enfrentarnos en la creacin de sitios Web
con rica funcionalidad es la integracin de aplicaciones. A menudo,
necesitamos combinar varias aplicaciones para formar una solucin nica y
fcil de utilizar. El problema de intentar conseguir una solucin de este tipo es
que las aplicaciones que necesitamos combinar pueden encontrarse en distintas
plataformas, cada una ejecutando un sistema operativo distinto. Adems, es
posible que las aplicaciones se hayan creado en diferentes lenguajes de
programacin.
Los servicios Web XML proporcionan un modelo simple, flexible y basado en
estndares para conectar aplicaciones a travs de Internet. Los servicios Web
XML nos permiten aprovechar la infraestructura existente en Internet, y enlazar
aplicaciones, con independencia de las plataformas, lenguajes de programacin
o modelos de objetos que se hayan utilizado para implementarlas.
En esta leccin, estudiaremos la utilidad y el proceso que existe tras invocar un
servicio Web XML desde un formulario Web Form.
En esta leccin, aprenderemos a:
Explicar qu es un servicio Web XML.
Explicar por qu los servicios Web XML son importantes para los
desarrolladores de aplicaciones Web.
Describir cmo encontrar servicios Web XML existentes.
Identificar el proceso de integracin de servicios Web XML en sitios Web.

Introduccin
Objetivos de la leccin
Crear y consumir servicios Web XML 3


Qu es un servicio Web XML?
Lgica programable accesible por protocolos Web
estndares
Permite a las aplicaciones enviar y recibir
informacin a travs de Internet
Independiente de lenguaje, protocolo y plataforma
Arquitectura sin estado
Puede ser asncrono
Basado en un estndar W3C desarrollado

*****************************
Los servicios Web XML se parecen a los componentes en la medida en que
representan una funcionalidad de caja negra que los desarrolladores pueden
utilizar para agregar caractersticas a un formulario Web Form, a aplicaciones
Microsoft Windows o incluso a otro servicio Web XML, sin preocuparse de
cmo est implementado el servicio de soporte.
Los servicios Web XML estn diseados para interactuar directamente con
otras aplicaciones a travs de Internet. En consecuencia, los servicios Web
XML no tienen interfaz de usuario (IU), sino que proporcionan interfaces
definidos por estndares denominados contratos que describen los servicios que
proporcionan.
Un servicio Web XML puede ser utilizado internamente por una sola aplicacin
o externamente por muchas aplicaciones accediendo a l a travs de Internet.
La conexin a un servicio Web XML puede escribirse en cualquier lenguaje
basado en Microsoft .NET. Gracias a esta flexibilidad, no es necesario aprender
un nuevo lenguaje cada vez que deseamos utilizar un servicio Web XML.
A diferencia de las tecnologas de componentes actuales, los servicios Web
XML no utilizan protocolos especficos para determinados modelos de objetos,
como el Modelo de Objetos de Componentes Distribuido (Distributed
Component Object Model, DCOM). Los servicios Web XML se comunican
utilizando protocolos Web y formatos de datos estndares, como HTTP, XML o
SOAP (Simple Object Access Protocol). Los servidores que soporten estos
estndares Web pueden acceder u hospedar servicios Web XML.
Es posible acceder a los servicios Web XML mediante una interfaz estndar, lo
cual permite que sistemas distintos puedan trabajar juntos. Los servidores que
pueden soportar formularios Web Form tambin pueden soportar servicios Web
XML.
Introduccin
Comunicacin
aplicacin a aplicacin a
travs de Internet
Independencia del
lenguaje
Independencia del
protocolo
Independencia de la
plataforma
4 Crear y consumir servicios Web XML


El modelo de servicios Web XML asume una arquitectura de servicios sin
estado. Las arquitecturas sin estado generalmente son ms escalables que las
arquitecturas con estado. Cada respuesta del servicio Web XML es un nuevo
objeto, con un nuevo estado. A menos que los servicios Web XML utilicen los
servicios de gestin de estado de Microsoft ASP.NET para mantener el estado
entre peticiones, el estado de la respuesta se pierde en el servidor del servicio
Web XML.
Los servicios Web XML son asncronos, ya que el objeto que realiza la peticin
en la aplicacin cliente y el objeto de respuesta del servicio Web XML son
sobres SOAP nicos que no requieren una conexin compartida. Las
interacciones entre la aplicacin cliente y el servicio Web XML pueden ser
posteriormente divididas en una peticin y respuesta inicial para invocar el
mtodo del servicio Web XML, y una segunda peticin para recoger los
resultados. Esta comunicacin asncrona permite tanto a la aplicacin que
realiza la peticin como al servicio Web XML la oportunidad de seguir
procesndose mientras la interaccin est en funcionamiento.
Los servicios Web XML estn basados en un estndar del World Wide Web
Consortium (W3C) que sigue evolucionando. De tal modo, las caractersticas
genricas de los servicios Web XML estn fijadas; sin embargo, pueden
agregarse nuevas caractersticas en el futuro.

Para ms informacin sobre el estndar del servicio Web XML del W3C,
ver el sitio Web oficial de W3C en http://www.w3c.org.

Arquitectura sin estado
Asncrono
Basado en W3C
Nota
Crear y consumir servicios Web XML 5


Por qu utilizar los servicios Web XML?
Internet Internet
Servicio Web XML
meteorolgico
Servicio Web XML
meteorolgico
Servicio Web XML
tipo decambio
Servicio Web XML
tipo decambio
Seleccionar destino:
La previsin
meteorolgica es:
El tipo de cambio es:
El billete de avin slo cuesta:
Lluvia Lluvia
Redmond
$1.56
$1,999.98
Base dedatos de
precios debilletes
Base dedatos de
precios debilletes
Servicio Web XML
precio del billete
Servicio Web XML
precio del billete
Sitio de viajes
NorthwindTraders
Sitio de viajes
NorthwindTraders

*****************************
Los servicios Web XML permiten compartir la lgica y las capacidades de
programacin con numerosas aplicaciones Web y aplicaciones Windows, y con
aplicaciones que se ejecutan en otras plataformas. Pensemos en un servicio
Web XML como en un componente que puede exponer sus mtodos a travs de
la Web.
Los servicios Web XML se basan tambin en estndares del W3C. Los
servicios Web XML permiten adems el uso de protocolos Web estndares y
herramientas de soporte que estn disponibles en Visual Studio .NET. Con
Visual Studio .NET, es muy fcil desarrollar y consumir servicios Web XML.
Podemos imaginar un nmero infinito de servicios Web XML que podemos
utilizar para agregar caractersticas a nuestras aplicaciones Web. La siguiente
tabla muestra una lista de algunos de los servicios Web XML que pueden
utilizarse.
Servicio Web XML Caractersticas

Servicios de
autenticacin
Proporciona autenticacin de usuarios.
Por ejemplo, Microsoft Passport.
Informes
meteorolgicos
Proporciona informes meteorolgicos actualizados para
ubicaciones seleccionadas.
Por ejemplo, un sitio Web podra proporcionar previsiones
meteorolgicas locales para una determinada ciudad o rea
consumiendo un servicio Web XML sobre informacin
meteorolgica.
Tipos de cambio Proporciona el tipo de cambio actualizado para todas las
monedas.
Por ejemplo, un sitio Web de viajes podra proporcionar
tipos de cambio para posibles destinos de vacaciones
basndose en perfiles de usuario, consumiendo un servicio
Web XML sobre tipos de cambio.

Introduccin
Agregar servicios Web
XML a aplicaciones Web
6 Crear y consumir servicios Web XML


(continuacin)
Servicio Web XML Caractersticas

Precios de billetes de
avin
Proporciona precios de billetes actualizados de una o varias
lneas areas.
Por ejemplo, un sitio Web de viajes podra ofrecer
automticamente precios con descuento de las principales
lneas areas consumiendo un servicio Web XML sobre los
precios de billetes de avin.
Valores de cotizacin Proporciona valores de cotizacin actualizados.
Por ejemplo, una empresa podra publicar su propio valor de
cotizacin en su sitio Web mediante el consumo de un
servicio Web XML sobre valores burstiles.
Servicios para socios Proporciona a los socios del negocio la oportunidad de
acceder a nuestros servicios en su sitio Web.
Por ejemplo, los sitios Web de convenciones podran ofrecer
servicios de reservas de hotel.
Resumen de noticias Proporciona resmenes de noticias actualizados.
Por ejemplo, una empresa podra publicar titulares de
noticias sobre su mercado de negocio en su sitio Web
consumiendo un servicio Web XML sobre titulares de
noticias.
Seguimiento de pedidos Proporciona el estado de los pedidos vinculando los
sistemas existentes de gestin de recursos empresariales
(enterprise resource management, ERP) a sitios Web
internos y externos.
Por ejemplo, acoplar los resultados de las aplicaciones ERP
internas con los servicios Web XML de seguimiento de
pedidos de proveedores y empresas de transporte dara a los
clientes una visin completa del estado de sus pedidos.

La ilustracin anterior muestra un sitio Web hipottico que ofrece varias
utilidades basadas en servicios Web XML. En este escenario, el usuario
introduce el nombre de una ciudad de destino, y el formulario Web Form utiliza
este nombre como parmetro en las llamadas a varios servicios Web XML.
Desde la perspectiva del usuario, este es un sitio Web con muchas utilidades.
Desde la perspectiva del cdigo, el sitio Web es ms un interfaz grfico que
combina varios servicios Web XML de compaas no relacionadas.
Este sitio Web de una agencia de viajes, al utilizar servicios Web XML,
proporciona mltiples ventajas para el sitio Web consumidor y para los
distintos servicios Web XML:
Ventajas para el sitio Web:
Las aplicaciones a que las que la agencia de viajes tiene acceso no estn
limitadas por los conocimientos de programacin o disponibilidad del
desarrollador de la agencia.
La agencia de viajes no asume el alto coste de mantenimiento de
mantener actualizados datos, como los informes meteorolgicos o los
tipos de cambio.
Ejemplo de servicio Web
XML
Crear y consumir servicios Web XML 7


Los servicios Web XML utilizan Internet; por tanto, la agencia de viajes
no necesita crear ni mantener conexiones dedicadas para ofrecer el
servicio.
Los servicios Web XML son independientes del lenguaje, protocolo y
plataforma; por tanto, los desarrolladores de la agencia de viajes no
necesitan aprender cmo se gener e implant el servicio Web XML
para poder utilizarlo.
El sitio Web puede ser capaz de cobrar a los proveedores del servicio
Web XML por el derecho de ofrecer servicios a la base de clientes del
sitio Web de la agencia de viajes.
Ventajas para los proveedores del servicio Web XML:
Crear las nuevas aplicaciones como servicios Web XML, y actualizar las
aplicaciones existentes utilizando servicios Web XML, proporciona varias
ventajas a los proveedores de servicios:
El proveedor del servicio Web XML puede ser capaz de cobrar al sitio
Web para poder utilizar el servicio.
Al ofrecer una aplicacin, como una calculadora de tipo de cambio,
como un servicio Web XML, un banco puede acceder a la base de
clientes de varias agencias de viajes.
El proveedor del servicio Web XML no debe asumir el alto coste de
desarrollo y de marketing un sitio Web para el pblico que desea viajar.
Debido a que los servicios Web XML utilizan Internet para
comunicarse, los proveedores de los servicios no necesitan costosas
conexiones dedicadas para ofrecer nuestro servicio.
Debido a que los servicios Web XML son independientes del lenguaje,
protocolo y plataforma, el servicio Web XML puede ser consumido por
diversas aplicaciones.

8 Crear y consumir servicios Web XML


Buscar un servicio Web XML
Publicar la URL del servicio Web
XML y su descripcin
.disco
.wsdl
Servicio Web
Proxy Proxy
Web
Form
UDDI
1
1 1 2
2 2
3
3 3
4
4 4
5
5 5
6
6 6
1
1 1
2
2 2
3
3 3
4
4 4
5
5 5
Descubrir el servicio Web XML
Localizar la URL del servicio Web XML
Leer la descripcin .wsdl
Vincular el servicio Web XML al proxy
Invocar el
servicio Web
XML desde el
formulario
Web Form
Mediante el
proxy
6
6 6

*****************************
Podemos encontrar servicios Web XML existentes para agregar a nuestro sitio
Web utilizando uno o ms servicios de descubrimiento. Estos servicios de
descubrimiento estn evolucionando y cambiando rpidamente a medida que el
desarrollo y uso de los servicios Web XML va ganando aceptacin en la
comunidad de Internet.
El proceso de encontrar y vincular a un servicio Web XML es el siguiente:
1. Los desarrolladores de servicios Web XML publican las descripciones y las
ubicaciones de sus servicios Web XML en un sitio Web UDDI (Universal
Description, Discovery, and Integration).
2. Consultamos el sitio Web UDDI para encontrar los servicios Web XML
disponibles que satisfacen nuestros requerimientos. El sitio Web UDDI
proporciona un listado de servicios Web XML que incluyen las URLs
(Uniform Resource Locators) del documento de archivo de descubrimiento
(DISCO) para los servicios Web XML.
3. Seleccionar un servicio Web XML y acceder al documento DISCO para
localizar la URL del servicio Web XML y las URLs relacionadas con el
documento del lenguaje de descripcin de servicios Web (Web Services
Description Language, WSDL).
4. Generar un objeto proxy a partir del documento WSDL.
Una clase proxy es un cdigo que tiene exactamente el mismo aspecto que
la clase que representa; sin embargo, la clase proxy no contiene ninguna
lgica de aplicacin. En lugar de ello, la clase proxy contiene la lgica de
enlace y del transporte. Un objeto proxy permite a un cliente acceder a un
servicio Web XML como si fuera un objeto COM local.
5. Utilizar el objeto proxy para vincular el servicio Web XML.
6. Invocar el servicio Web XML desde el formulario Web Form utilizando el
proxy.

Introduccin
Buscar un servicio Web
XML
Crear y consumir servicios Web XML 9


La especificacin UDDI define un modo de publicar y descubrir informacin
sobre servicios Web XML y las empresas que los suministran.
Las empresas registran individualmente la informacin sobre los servicios Web
XML que exponen para que otras empresas puedan a continuacin utilizarlos.
Una vez que los datos han sido registrados, estn disponibles libremente para
cualquier persona que necesite descubrir cuales son los servicios Web XML
que expone un determinado negocio.

Para ms informacin sobre UDDI, conectarse al sitio Web UDDI en
http://www.uddi.org o al sitio Web de proyectos UDDI de Microsoft en
http://uddi.microsoft.com.

Los archivos de descubrimiento (DISCO) se utilizan para agrupar servicios
comunes en un servidor Web. Los archivos de descubrimiento, .disco y
.vsdisco, son archivos basados en XML que contienen enlaces en forma de
URLs a recursos que proporcionan informacin de descubrimiento para un
servicio Web XML. Estos archivos permiten el descubrimiento programtico de
los servicios Web XML. Los siguientes ejemplos muestran la diferencia entre
los archivos estticos y dinmicos de descubrimiento:
Archivos .disco
Un archivo de descubrimiento esttico (.disco) es un documento XML que
contiene enlaces a otros recursos que describen los servicios Web XML.
Los archivos .disco se generan automticamente para un servicio Web XML
cuando se accede al servicio utilizando una URL con ?DISCO en la cadena
de consulta.
El siguiente cdigo muestra un ejemplo de un archivo .disco:
<?xml version="1.0" ?>
<disco:discovery
xmlns:disco="http://schemas.xmlsoap.org/disco"
xmlns:wsdl="http://schemas.xmlsoap.org/disco/wsdl">
<wsdl:contractRef
ref="http://MyWebServer/UserName.asmx?WSDL"/>
</disco:discovery>

Archivos .vsdisco
Los archivos de descubrimiento dinmicos (.vsdisco) son documentos de
descubrimiento dinmico que Visual Studio .NET genera automticamente
durante la fase de desarrollo de un servicio Web XML.
Un archivo .vsdisco es un archivo basado en XML con un nodo raz
denominado <dynamicDiscovery>. Este nodo puede contener nodos
<exclude>. Cada nodo <exclude>contiene una ruta que el proceso de
descubrimiento dinmico no debera buscar.

Para mantener el control sobre los servicios Web XML que
pueden descubrir los clientes, deberamos utilizar nicamente el
descubrimiento dinmico en los servidores Web de desarrollo.

UDDI
Nota
Archivos DISCO
Precaucin
10 Crear y consumir servicios Web XML


El siguiente cdigo muestra un ejemplo de un archivo .vsdisco:
<?xml version="1.0" encoding="utf-8" ?>
<dynamicDiscovery xmlns="urn:schemas-
dynamicdiscovery:disco.2000-03-17">
<exclude path="_vti_cnf" />
<exclude path="_vti_pvt" />
<exclude path="_vti_log" />
<exclude path="_vti_script" />
<exclude path="_vti_txt" />
<exclude path="Web References" />
</dynamicDiscovery>

Un archivo WSDL define la gramtica XML que se utiliza para la
comunicacin con un servicio Web XML. Visual Studio .NET utiliza el archivo
WSDL para generar objetos proxy y comunicar con un servicio Web XML.
Los archivos WSDL contienen la siguiente informacin sobre un servicio Web
XML:
Dnde encontrar la URL.
Los mtodos y propiedades del servicio Web XML.
Tipos de datos utilizados.
Protocolos de comunicacin.

Para ms informacin sobre los archivos DISCO y WSDL, ver
Descubrimiento de servicios Web XML en la documentacin deVisual
Studio .NET.

Archivos WSDL
Nota
Crear y consumir servicios Web XML 11


Leccin: invocar un servicio Web XML mediante HTTP
Cmo invocar un servicio Web XML mediante HTTP
Prctica: invocar un servicio Web XML mediante
HTTP

*****************************
En esta leccin, estudiaremos cmo acceder a un servicio Web XML
directamente desde un explorador utilizando HTTP Get. Los desarrolladores
utilizan normalmente este proceso, denominado de acceso directo, en tiempo de
diseo para identificar y probar los servicios Web XML. El acceso directo
permite visualizar los mtodos, propiedades y el resultado de un servicio Web
XML en un entorno amigable para el desarrollador.
En esta leccin, aprenderemos a:
Invocar un servicio Web XML con un explorador utilizando acceso directo
al protocolo HTTP-Get.
Identificar los mtodos Web que estn disponibles desde un servicio Web
XML.
Invocar mtodos Web desde un servicio Web XML utilizando acceso
directo al protocolo HTTP-Get, y visualizar la respuesta.

Introduccin
Objetivos de la leccin
12 Crear y consumir servicios Web XML


Cmo invocar un servicio Web XML utilizando HTTP
1. Ir a la URL del servicio Web XML
2. Seleccionar un
mtodo del
servicio
Web XML
3. Invocar el
mtodo del
servicio
Web XML
4. Ver la respuesta
XML
1
1 1
2
2 2
3
3 3
4
4 4

*****************************
Cuando accedemos a un servicio Web XML directamente con un navegador,
accedemos en primer lugar a la pgina de descripcin HTML,
DefaultWsdlHelpGenerator.aspx. Desde esta pgina, podemos seleccionar entre
los mtodos del servicio Web XML disponibles e invocar un mtodo con
parmetros. Recibiremos una respuesta en formato XML.
Tambin podemos utilizar el protocolo HTTP-Post para acceder a un servicio
Web XML. No accederemos a la pgina predeterminada,
DefaultWsdlHelpGenerator.aspx; sin embargo, la respuesta final del servicio
Web XML ser idntica a una peticin HTTP-Get.
Tras haber encontrado un servicio Web XML en UDDI, utilizamos la URL
.asmx para navegar a la pgina de descripcin HTML. Esta pgina de
descripcin proporciona informacin sobre el propsito de un servicio Web
XML, los mtodos Web disponibles que contiene, los parmetros del mtodo
Web, y las respuestas. Adems, podemos utilizar la pgina de descripcin
HTML para probar la funcionalidad del servicio Web XML.
La siguiente ilustracin muestra la vista del navegador con un servicio Web
XML Stocks que se utilizar en las demostraciones de este mdulo.

Introduccin
Navegar hasta la URL
del servicio Web XML
Crear y consumir servicios Web XML 13


Cuando accedemos a la pgina de descripcin HTML de un servicio Web
XML, el navegador muestra los mtodos disponibles del servicio Web XML.
Podemos hacer clic en un mtodo Web para visualizar los parmetros
disponibles para ese mtodo Web.
La siguiente ilustracin muestra la vista del navegador resultante de la seleccin
del mtodo Web GetRating en el servicio Web XML Stocks.

Tambin podemos hacer clic en el enlace Service Description de la parte
superior de la pgina de descripcin HTML para ver el contrato WSDL, que
contiene una descripcin XML del servicio Web XML y su contenido.
Para invocar un mtodo Web, rellenamos el formulario y hacemos clic en
Invoke. El formulario Web Form pasa el nombre del mtodo, los parmetros
requeridos y los valores de los parmetros a la URL del servicio Web XML.
Los servicios Web XML siempre devuelven los datos en formato XML. La
siguiente ilustracin muestra la vista del navegador con el resultado de invocar
el servicio Web XML Stocks con el parmetro Contoso.

Seleccionar un mtodo
del servicio Web XML
Invocar el mtodo Web
Ver la respuesta XML
14 Crear y consumir servicios Web XML


Prctica: invocar un servicio Web XML utilizando HTTP
Los estudiantes:
Introducirn la URL de un servicio Web
XML en el equipo del instructor
Seleccionarn el mtodo del servicio Web
XML para invocar
Introducirn valores para los parmetros
Visualizarn el XML devuelto
Tiempo: 5 Minutos

*****************************
En esta prctica, accederemos a un servicio Web XML en el equipo del
instructor y probaremos los tres mtodos Web disponibles.
Acceder a este servicio Web XML
1. Abrir http://EquipoInstructor/Mod13VB/WeatherService.asmx o
http://EquipoInstructor/Mod13CS/WeatherService.asmx en un
navegador.
2. Hacer clic en WeatherByCity.
3. En el campo City, escribir el nombre de una ciudad, como Seattle, de la que
deseemos conocer la prediccin meteorolgica de maana.
4. Hacer clic en Invoke.
Introducir la respuesta XML en las siguientes lneas.

_____________________________________________________________
_____________________________________________________________
5. Invocar de nuevo el mtodo Web WeatherByCity, esta vez pasando otro
nombre de ciudad, como London, como parmetro en el campo City.
Observar la respuesta XML.
Observar tambin que con nombres de ciudades distintos de Seattle, se
recibe una previsin meteorolgica aleatoria de sol, nublado, o lluvia.
Cuando se introduce Seattle en el campo City, siempre se recibe la
previsin meteorolgica de sol.
Introduccin
Invocar el mtodo Web
WeatherByCity
Crear y consumir servicios Web XML 15


6. Regresar a la pgina preliminar
http://EquipoInstructor/Mod13VB/WeatherService.asmx o
http://EquipoInstructor/Mod13CS/WeatherService.asmx.
7. Hacer clic en TemperatureByCity.
8. En el campo City, introducir el nombre de una ciudad de la que se desee
conocer la temperatura actual.
9. Hacer clic en Invoke.
El valor resultado debera ser un valor aleatorio entre 31 y 60 grados
Fahrenheit.
10. Regresar a la pgina preliminar
http://EquipoInstructor/Mod13VB/WeatherService.asmx o
http://EquipoInstructor/Mod13CS/WeatherService.asmx.
11. Hacer clic en TravelAdviceByCity.
12. En el campo City, introducir el nombre de una ciudad, como Seattle, para la
que se desee obtener sugerencias sobre el viaje.
13. Hacer clic en Invoke.
Observar la respuesta XML.
14. Invocar de nuevo el mtodo Web TravelAdviceByCity, esta vez el nombre
de otra ciudad, como London, como parmetro en el campo City.
15. Observar la respuesta XML.

Invocar el mtodo Web
TemperatureByCity
Invocar el mtodo Web
TravelAdviceByCity
16 Crear y consumir servicios Web XML


Leccin: utilizar un proxy para invocar un servicio Web
XML
Utilizar proxiespara invocar servicios Web XML
Cmo utilizar un proxypara invocar un servicio Web
XML
Prctica dirigida por el instructor: utilizar un proxy
para invocar un servicio Web XML
Controlador de errores del servicio Web XML
Demostracin: probar la disponibilidad de un servicio
Web XML

*****************************
Para invocar programticamente un servicio Web XML desde un formulario
Web Form, debemos crear un proxy para controlar la invocacin. En esta
leccin, estudiaremos cmo crear un proxy de referencia Web para un mtodo
de un servicio Web XML, y cmo invocar el mtodo Web desde un formulario
Web Form.
En esta leccin, aprenderemos a:
Explicar el modo en que un proxy invoca un servicio Web XML.
Crear un proxy para invocar un servicio Web XML.
Incorporar el contenido de un servicio Web XML en un sitio Web.
Gestionar los errores de un servicio Web XML.
Probar la disponibilidad de un servicio Web XML.

Introduccin
Objetivos de la leccin
Crear y consumir servicios Web XML 17


Utilizar proxies para invocar servicios Web XML
Parecen idnticos que la clase original, pero no
contienen la lgica de la aplicacin
Utilizan SOAP para interactuar con el servicio Web XML
Se crean desde el archivo NombreServicio.asmx.wsdl
Agregan miembros para gestionar interacciones con el
servicio Web XML o soportar llamadas asncronas
Internet Internet Servicio
Web XML
Servicio
Web XML
Proxy Proxy
Web
Form
SOAP

*****************************
Para invocar un servicio Web XML desde un formulario Web Form, debemos
crear una referencia Web al servicio Web XML en nuestro proyecto de
aplicacin Web. La referencia Web crea el objeto proxy que se utiliza para
comunicar con el servicio Web XML utilizando SOAP.
Una clase proxy es cdigo que parece exactamente igual a la clase que
representa, pero no contiene lgica de aplicacin. En lugar de ello, la clase
proxy contiene la lgica de combinacin y de transporte. Un objeto proxy
permite que un cliente acceda a un servicio Web XML como si fuera un objeto
COM local. El proxy debe estar en el equipo que dispone de la aplicacin Web.
Visual Studio .NET crea automticamente un proxy denominado reference.vb o
reference.cs cuando agregamos una referencia Web a un servicio Web XML.
Cuando creamos la referencia Web, Visual Studio .NET crea el archivo de
referencia, que es el cdigo proxy.
Los proxies y los servicios Web XML interactan utilizando SOAP, que es un
protocolo XML utilizado para intercambiar informacin estructurada y tipada.

Para tener una vista previa de los mensajes SOAP de un servicio Web
XML, acceder al servicio Web XML URL directamente y examinar el cdigo
que muestra la pgina de descripcin HTML.

El proceso de acceder a un servicio Web XML mediante un proxy es el
siguiente:
1. El usuario enva una peticin URL a un formulario Web Form que requiere
una llamada a un servicio Web XML.
2. El formulario Web Form instancia el proxy, que invoca el servicio Web
XML utilizando SOAP.
La siguiente es la peticin SOAP para el mtodo Web GetRating en un
servicio Web XML Stocks y que pasa el argumento Contoso:
Introduccin
Qu es un proxy?
Interactuar con SOAP
Nota
18 Crear y consumir servicios Web XML


<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetRating xmlns="http://tempuri.org/">
<Ticker>Contoso</Ticker>
</GetRating>
</soap:Body>
</soap:Envelope>

3. El servicio Web XML enva una respuesta al proxy utilizando SOAP.
La siguiente es la respuesta SOAP del servicio Web XML GetRating:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetRatingResponse xmlns="http://tempuri.org/">
<GetRatingResult>Buy</GetRatingResult>
</GetRatingResponse>
</soap:Body>
</soap:Envelope>

4. El formulario Web Form ASP.NET consume la respuesta del servicio Web
XML.

Visual Studio .NET crea automticamente un proxy cuando seleccionamos
Agregar referencia Web en el men Proyecto e introducimos la URL del
servicio Web XML. El archivo .asmx.wsdl en el servidor del servicio Web
XML se utiliza para identificar los mtodos y parmetros Web disponibles en el
servicio Web XML.
Creado desde el archivo
.asmx.wsdl
Crear y consumir servicios Web XML 19


Cuando creamos un proxy utilizando Visual Studio .NET, hay disponibles
varios mtodos y propiedades que soportan un acceso programtico al servicio
Web XML. Los miembros disponibles para el proxy incluyen:
Miembros creados dentro del proxy
La infraestructura para realizar llamadas asncronas desde un formulario
Web Form a un servicio Web XML est generada en la clase proxy que
Visual Studio .NET crea automticamente cuando agregamos una referencia
Web. Por cada mtodo Web del servicio Web XML, se crea
automticamente un mtodo BeginNombreMtodoWeb y un mtodo
EndNombreMtodoWeb en el proxy:
BeginNombreMtodoWeb
El mtodo Begin se utiliza para iniciar la comunicacin asncrona con el
mtodo NombreMtodoWeb de un servicio Web XML.
EndNombreMtodoWeb
El mtodo End se utiliza para finalizar una comunicacin asncrona con
el mtodo NombreMtodoWeb de un servicio Web XML, y recuperar la
respuesta completa del mtodo del servicio Web XML.
Por ejemplo, crear una referencia Web al servicio Web XML Stocks crea un
proxy con dos mtodos adicionales: BeginGetRating y EndGetRating.

Para ms informacin sobre la invocacin asncrona de un servicio
Web XML, ver Comunicacin con servicios Web XML de modo
asncrona, en la documentacin de Visual Studio .NET.

Miembros heredados deSoapHttpClientProtocol
Un proxy hereda varios mtodos y propiedades de la clase
System.Web.Services.Protocols.SoapHttpClientProtocol que pueden ser
utilizados para gestionar las interacciones con el servicio Web XML.
Algunas de las propiedades del proxy incluyen:
Timeout
La propiedad Timeout indica la cantidad de tiempo, en milisegundos,
que un cliente de un servicio Web XML espera para que se complete la
solicitud de un servicio Web XML sncrono.
Url
La propiedad Url obtiene o establece la URL base del servicio Web
XML que el cliente est solicitando.

Para ms informacin sobre los miembros SoapHttpClientProtocol,
ver SoapHttpClientProtocol (Miembros de), en la documentacin de
Visual Studio .NET.


Agregar miembros para
gestionar las
interacciones con el
servicio Web XML y
soportar llamadas
asncronas
Nota
Note
20 Crear y consumir servicios Web XML


Cmo utilizar un proxy para invocar un servicio Web XML
1. Crear una referencia Web para el servicio Web XML
2. Crear una instancia del servicio Web XML
3. Invocar los mtodos Web del servicio Web XML
4. Generar la aplicacin Web ASP.NET
Sub Button1_Click(s As Object, e As EventArgs)...
Dim ProxyGetStocks As New _
GetStocks.localhost.Service1()
lblResults.Text = _
ProxyGetStocks.GetRating("Contoso")
End Sub
Sub Button1_Click(s As Object, e As EventArgs)...
Dim ProxyGetStocks As New _
GetStocks.localhost.Service1()
lblResults.Text = _
ProxyGetStocks.GetRating("Contoso")
End Sub
1
1 1
2
2 2
3
3 3
4
4 4
Cdigo de ejemplo enC#

*****************************
Para utilizar el servicio Web XML de un formulario Web Form creado en
Visual Studio .NET, debemos identificar antes la URL del servicio Web XML,
y crear una referencia Web.
Crear un proxy para invocar un servicio Web XML en un formulario
Web Form
1. Abrir la aplicacin Web y el formulario Web Form desde el que
invocaremos el servicio Web XML, y crear una referencia Web para el
servicio Web XML:
a. En el men Proyecto, hacer clic en Agregar referencia Web.
b. En el campo Direccin del cuadro de dilogo Agregar referencia Web,
escribir la URL del servicio Web XML al que se est accediendo, pulsar
ENTER, y hacer clic en Agregar referencia.
Visual Studio .NET crea una referencia Web al servicio Web XML, con
el nombre del servidor que hospeda el servicio Web XML.
Por ejemplo, si creamos una referencia Web a
http://localhost/Stocks/Service1.asmx, de forma predeterminada Visual
Studio .NET pondr el nombre localhost a la referencia Web.

Visual Studio .NET est optimizado para los servicios Web XML
creados por Visual Studio .NET. Es posible que ASP.NET no lea los
archivos .wsdl creados con otros programas, si los archivos incluyen
cadenas terminadas nulas.

Introduccin
Nota
Crear y consumir servicios Web XML 21


2. En un procedimiento de evento del formulario Web Form, crear una
instancia del proxy del servicio Web XML.
Por ejemplo, si un botn invoca el mtodo GetRating del servicio Web
XML Stocks, utilizar el siguiente cdigo en el procedimiento de evento
Click GetStocks.localhost.Service1:
Dim ProxyGetStocks As New GetStocks.localhost.Service1()

GetStocks.localhost.Service1 ProxyGetStocks =
new GetStocks.localhost.Service1();

GetStocks es el nombre de la aplicacin Web, localhost es el nombre de la
referencia Web, y Service1 el nombre del servicio Web.
3. Invocar los mtodos Web del servicio Web XML:
Label1.Text = ProxyGetStocks.GetRating("Contoso")

Label1.Text = ProxyGetStocks.GetRating("Contoso");

El cdigo completo en un procedimiento de evento button_Click sera
similar al siguiente:
Sub Button1_Click(s As Object, e As EventArgs) _
Handles Button1.Click
Dim ProxyGetStocks As New _
GetStocks.localhost.Service1()
lblResults.Text = ProxyGetStocks.GetRating("Contoso")
End Sub

private void Button1_Click(object sender,
System.EventArgs e)
{
GetStocks.localhost.Service1 ProxyGetStocks = new
GetStocks.localhost.Service1();
lblResults.Text = ProxyGetStocks.GetRating("Contoso");
}

4. Generar el proyecto de aplicacin Web ASP.NET.
Compilar la aplicacin Web haciendo clic en Generar en el men Generar.

Visual Basic .NET
C#
Visual Basic .NET
C#
Visual Basic .NET
C#
22 Crear y consumir servicios Web XML


Prctica dirigida por el instructor: utilizar un proxy para invocar un
servicio Web XML
Crear un nuevo proyecto de aplicacin Web
ASP.NET
Crear un proxy para un servicio Web XML
Probar con un navegador
Visualizar el archivo reference.vb o
reference.cs

*****************************
En esta prctica, utilizaremos un proxy para invocar un servicio Web XML.
Ejecutar la prctica dirigida por el instructor
1. Crear un nuevo proyecto de aplicacin Web ASP.NET denominado
GetWeatherVB o GetWeatherCS en Visual Studio .NET.
2. Agregar una referencia Web al servicio Web XML ubicado en
http://localhost/Mod13VB/WeatherService.asmx o
http://localhost/Mod13CS/WeatherService.asmx.
La referencia Web que estamos agregando crear un proxy y una nueva
referencia Web denominada localhost en el Explorador de soluciones.
Observar que el proxy se crea en el lenguaje de nuestro proyecto. Por
ejemplo, si se est utilizando Microsoft Visual Basic, el proxy se crear en
Visual Basic.
3. En el Explorador de soluciones, visualizar los archivos creados
automticamente por Visual Studio .NET.
4. Cambiar el nombre de la referencia Web en el Explorador de soluciones por
WeatherWebRef.
5. Abrir la pgina predeterminada Webform1.aspx en vista de Diseo y
agregar un control Text Box, un control Button y un control Label al
formulario Web Form. Conservar las propiedades predeterminadas de cada
control.
Introduccin
Crear un nuevo proyecto
Crear un proxy
Crear y consumir servicios Web XML 23


6. Crear un procedimiento de evento Click para el botn Button1 y agregar el
siguiente cdigo:
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim ProxyGetWeather As New _
GetWeatherVB.WeatherWebRef.WeatherService()
Label1.Text = _
ProxyGetWeather.WeatherByCity(TextBox1.Text)
End Sub

private void Button1_Click(object sender,
System.EventArgs e)
{
GetWeatherCS.WeatherWebRef.WeatherService
ProxyGetWeather = new
GetWeatherCS.WeatherWebRef.WeatherService();
Label1.Text =
ProxyGetWeather.WeatherByCity(TextBox1.Text);
}

7. Generar y examinar Webform1.aspx.
8. Para probar el servicio Web XML, escribir Seattle en el cuadro de texto y
hacer clic en el botn. A continuacin, escribir en el cuadro de texto el
nombre de otra ciudad, como London, y hacer clic de nuevo en el botn.
Si se introduce Seattle la previsin meteorolgica ser sol.
Si se introduce el nombre de otra ciudad, el resultado de la previsin
meteorolgica ser aleatorio: sol, nublado o lluvia.
9. Visualizar el archivo reference.vb o reference.cs. El archivo Reference.vb o
Reference.cs puede encontrarse haciendo clic en Mostrar todos los
archivos en el Explorador de soluciones y expandiendo Referencias Web,
WeatherWebRef, y Reference map.
Observar que el archivo de referencia es el cdigo fuente del proxy que
Visual Studio .NET ha generado automticamente. El proxy tiene mtodos
Begin y End para la invocacin asncrona de cada mtodo Web del servicio
Web XML.

Visual Basic .NET
C#
Probar con un
explorador
Visualizar el archivo de
referencia
24 Crear y consumir servicios Web XML


Control de errores del servicio Web XML
Servicio no disponible
Excepciones SOAP de servicios Web XML
GetStocks.StockWebRef.Service1 ProxyGetStocks = new
GetStocks.StockWebRef.Service1();
ProxyGetStocks.Timeout = 10000;
try
{
lblMessage.Text =
ProxyGetStocks.GetRating(TextBox1.Text);
}
catch (Exception err)
{
lblMessage.Text = err.Message;
}
GetStocks.StockWebRef.Service1 ProxyGetStocks = new
GetStocks.StockWebRef.Service1();
ProxyGetStocks.Timeout = 10000;
try
{
lblMessage.Text =
ProxyGetStocks.GetRating(TextBox1.Text);
}
catch (Exception err)
{
lblMessage.Text = err.Message;
}
Cdigo de ejemplo en Visual Basic .NET

*****************************
Existen tres fuentes principales de errores cuando se utiliza un servicio Web
XML: servicio no disponible, largos retrasos de respuesta y errores internos del
servicio Web XML, produciendo mensajes de error del servicio en forma de
excepciones SOAP. Nuestro formulario Web Form necesita ser capaz de
identificar y gestionar los tres tipos de errores.
Para probar la disponibilidad de un servicio Web XML desde un formulario
Web Form ASP.NET, debemos establecer un tiempo de espera para el proxy
del servicio Web XML. Debemos utilizar una instruccin
TryCatchFinally para gestionar la excepcin del tiempo de espera:
Establecer el parmetro del tiempo de espera en el proxy
Establecer la propiedad Timeout del proxy del servicio Web XML a un
valor en milisegundos, como muestra el siguiente cdigo:
ProxyName.Timeout = valor en milisegundos

Controlar las excepciones del tiempo de espera
El siguiente cdigo invoca el servicio Web XML, captura cualquier
excepcin y muestra un mensaje de error en Label1:
Try
'call the XML Web service
Catch err As Exception
Label1.Text = err.Message
End Try

Introduccin
Servicio Web XML no
disponible
Visual Basic .NET
Crear y consumir servicios Web XML 25


try
{
//call the XML Web service
}
catch (Exception err)
{
Label1.Text = err.Message;
}


Si un servicio Web XML no puede procesar una peticin, puede devolver un
mensaje de error utilizando una instancia del objeto SoapException de la clase
System.Web.Services. Para controlar estas excepciones, necesitamos utilizar
una instruccin TryCatchFinally.
El siguiente cdigo captura la excepcin y muestra un mensaje de error en
Label1:
Try
'call your XML Web service
Catch err As SoapException
Label1.Text = "Unable to process your request"
End Try

try
{
//call your XML Web service
}
catch (SoapException err)
{
Label1.Text = "Unable to process your request";
}

C#
Excepciones SOAP de
servicios Web XML
Visual Basic .NET
C#
26 Crear y consumir servicios Web XML


Demostracin: probar la disponibilidad de un servicio Web XML
Establecer una instruccin TryCatch para
elcontrol de errores del tiempo de espera
Ralentizar el servicio Web
Evaluar la excepcin

*****************************
En esta demostracin, estudiaremos cmo probar si el servicio Web XML est
disponible.
Ejecutar la demostracin
1. Volver a abrir el proyecto GetWeather de la prctica anterior.
2. Establecer el tiempo de espera de trycatch
3. Modificar el cdigo del controlador de evento del botn para establecer un
tiempo de espera de 10 segundos (10.000) y agregar cdigo al controlador
de evento del botn para aadir una instruccin trycatch sobre la llamada
al servicio Web XML.
El cdigo debera ser similar al siguiente:
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim ProxyGetWeather As New _
GetWeatherVB.WeatherWebRef.WeatherService()
ProxyGetWeather.Timeout = 10000
Try
Label1.Text = _
ProxyGetWeather.WeatherByCity(TextBox1.Text)
Catch err As Exception
Label1.Text = err.Message
End Try
End Sub

Introduccin
Visual Basic .NET
Crear y consumir servicios Web XML 27


private void Button1_Click(object sender,
System.EventArgs e)
{
GetWeatherCS.WeatherWebRef.WeatherService
ProxyGetWeather = new
GetWeatherCS.WeatherWebRef.WeatherService();
ProxyGetWeather.Timeout = 10000;
try
{
Label1.Text =
ProxyGetWeather.WeatherByCity(TextBox1.Text);
}
catch (Exception err)
{
Label1.Text = err.Message;
}
}

4. Generar y examinar WebForm1.aspx.
5. Probar el servicio Web XML introduciendo Seattle en el cuadro de texto y
haciendo clic en el botn para verificar que la aplicacin sigue funcionando
como antes.
6. Abrir el proyecto Mod13 de la solucin 2310Demos que contiene el
servicio Web XML.
7. En la parte superior de la pgina WeatherService.asmx.vb o
WeatherService.asmx.cs, agregar la siguiente instruccin de importacin:
Imports System.Threading

using System.Threading;

8. En la parte inicial del mtodo Web WeatherByCity, agregar el siguiente
cdigo para retrasar la respuesta a 40 segundos:
Thread.Sleep(40000)

Thread.Sleep(40000);

Este cdigo har que el servicio Web XML funcione muy despacio para
simular un servicio Web XML que no est en lnea o que opera con mucha
lentitud.
9. Generar la aplicacin Web haciendo clic con el botn derecho Mod13VB o
Mod13CS en el Explorador de soluciones, y hacer clic en Generar.
10. En el proyecto GetWeather, visualizar la pgina WebForm1.aspx en el
navegador.
11. Para probar el servicio Web XML, escribir Seattle en el cuadro de texto y
hacer clic en el botn.
Transcurridos 10 segundos, debera aparecer el mensaje en la etiqueta The
operation has timed-out.

C#
Ralentizar el servicio
Web XML
Visual Basic .NET
C#
Visual Basic .NET
C#
Probar la excepcin
28 Crear y consumir servicios Web XML


Leccin: crear un servicio Web XML
Cmo crear un servicio Web XML
Cdigo del servicio Web XML
Prctica dirigida por el instructor: crear un servicio
Web XML

*****************************
Visual Studio .NET proporciona plantillas que facilitan el desarrollo de los
servicios Web XML. En esta leccin, estudiaremos cmo utilizar estas
plantillas para crear un servicio Web XML.
En esta leccin, aprenderemos a:
Crear un servicio Web XML utilizando Visual Studio .NET.
Describir las clases y las estructuras que se utilizan en un proyecto de un
servicio Web XML generado mediante ASP.NET.
Explicar el cdigo generado cuando se crea un nuevo proyecto de servicio
Web XML utilizando ASP.NET.

Introduccin
Objetivos de la leccin
Crear y consumir servicios Web XML 29


Cmo crear un servicio Web XML
1. Crear un nuevo proyecto de servicio Web
XML en Visual Studio .NET
2. Declarar las funciones WebMethod
3. Generar el proyecto de servicio Web XML
4. Probar
con un
navegador
1
1 1
2
2 2
3
3 3
4
4 4

*****************************
Visual Studio .NET proporciona plantillas y un mtodo de servicio Web XML
predeterminado que nos sirven de ayuda para iniciar la creacin de servicios
Web XML.
Crear un servicio Web XML en Visual Studio .NET
1. Abrir Visual Studio .NET, y crear un nuevo proyecto de servicio Web
ASP.NET.
Visual Studio .NET crear automticamente las carpetas necesarias, y la
pgina del servicio Web XML. Se recomienda cambiar el nombre del
proyecto y del servicio Web XML como ayuda para identificar y mantener
el proyecto y los archivos.
2. Declarar las funciones que se invocarn a travs del Web.
Visual Studio .NET crea una funcin predeterminada Hello World en la
pgina del servicio Web XML. La funcin puede activarse eliminando las
etiquetas de comentario.
Casi cualquier tipo de funcin puede ser escrita como una funcin de
mtodos de un servicio Web XML, desde un sencillo clculo local a una
compleja consulta a una base de datos.
3. Generar el proyecto del servicio Web ASP.NET.
Una vez escritas las funciones, se debe generar el servicio Web para poder
probar la lgica. Al igual que los formularios Web Forms, ASP.NET
compila el servicio Web XML en Microsoft Intermediate Language (MSIL)
para su posterior ejecucin.
Introduccin
30 Crear y consumir servicios Web XML


4. Probar con un navegador.
Para verificar que las funciones funcionan correctamente, pueden probarse
accediendo al servicio Web XML directamente con un navegador. Para ello,
en Visual Studio .NET, hacer clic con el botn derecho en Servicio Web
XML en el Explorador de soluciones y clic en Ver en el navegador.
Tambin puede probarse el servicio Web XML con un navegador remoto,
desde Visual Studio .NET, haciendo clic con el botn derecho en Servicio
Web XML en el Explorador de soluciones y clic en Examinar con, o
abriendo el navegador e introduciendo la URL del servicio Web:
http://NombreServidor/WebService1/Service1.asmx


Crear y consumir servicios Web XML 31


Cdigo del servicio Web XML
Pgina .asmx
Pgina .asmx.vb
<%@ WebService Language="vb"
Codebehind="Service1.asmx.vb"
Class="XMLWebServiceName.Service1" %>
<%@ WebService Language="vb"
Codebehind="Service1.asmx.vb"
Class="XMLWebServiceName.Service1" %>
Imports System
Imports System.Web.Services
Class Service1
<WebMethod()> Public Function function1() As type
'function_here
End Function
End Class
Imports System
Imports System.Web.Services
Class Service1
<WebMethod()> Public Function function1() As type
'function_here
End Function
End Class
Cdigo de ejemplo en C#

*****************************
Cuando creamos un servicio Web XML con Visual Studio .NET, se crean dos
archivos principales que constituyen el servicio Web XML: el archivo .asmx y
el archivo .asmx.vb o .asmx.cs. El archivo .asmx identifica la pgina Web como
un servicio Web XML, y el archivo .asmx.vb o .asmx.cs, tambin denominado
pgina de cdigo subyacente, contiene la lgica del servicio Web XML.
Como un servicio Web XML no tiene ninguna interfaz de usuario, la pgina
.asmx nicamente contiene informacin del tipo de archivo y una directiva a la
pgina de cdigo subyacente.
El cdigo de una pgina .asmx es como sigue:
<%@ WebService Language="vb" Codebehind="Service1.asmx.vb"
Class="XMLWebServiceName.Service1" %>

<%@ WebService Language="c#" Codebehind="Service1.asmx.cs"
Class="XMLWebServiceName.Service1" %>

Las pginas .asmx tienen los siguientes atributos:
@ Web Service
El atributo @ Web Service identifica el archivo como un servicio Web
XML.
Language
El atributo Language define el lenguaje en que est escrito el script de la
pgina Web. Algunos valores de este atributo son: vb, c# y JScript

.
Introduccin
Pgina .asmx
Visual Basic .NET
C#
32 Crear y consumir servicios Web XML


Codebehind
El atributo Codebehind identifica el nombre y la ubicacin de la pgina de
cdigo subyacente .asmx.vb o .asmx.cs que contiene la lgica del servicio
Web XML.
Class
El atributo Class identifica la clase base que soporta esta instancia de un
servicio Web XML.
En el archivo .asmx, debemos definir una clase que encapsule la
funcionalidad del servicio Web XML. Esta clase definida debera ser
pblica, y debera heredarse de la clase base del servicio Web XML.
La clase predeterminada del servicio Web XML es:
Class Service1

class Service1


El archivo de cdigo subyacente es la pgina que contiene la lgica del servicio
Web XML.
El cdigo predeterminado de una pgina de cdigo subyacente es:
Imports System.Web.Services

<WebService(Namespace := "http://tempuri.org/")> _
Public Class Service1
Inherits System.Web.Services.WebService

'<WebMethod()> Public Function HelloWorld() As String
' HelloWorld = "Hello World"
' End Function

End Class

Visual Basic .NET
C#
Pgina de cdigo
subyacente
Visual Basic .NET
Crear y consumir servicios Web XML 33


using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;

namespace Service1
{
public class Service1 : System.Web.Services.WebService
{
public Service1()
{
//CODEGEN: This call is required by the ASP.NET Web
Services Designer
InitializeComponent();
}

// [WebMethod]
// public string HelloWorld()
// {
// return "Hello World";
// }
}
}

Las pginas de cdigo subyacente tienen los siguientes atributos:
Espacios de nombres
Los servicios Web XML importan los espacios de nombres System y
System.Web.Services:
Imports System
El espacio de nombres ASP.NET System contiene las clases que
soportan las clases ASP.NET generales.
Imports System.Web.Services
El espacio de nombres ASP.NET Web.Services contiene los mtodos y
las clases de propiedades que soportan los servicios Web XML.
C#
Visual Basic .NET
34 Crear y consumir servicios Web XML


Los servicios Web XML importan los espacios de nombres System y
System.Web.Services:
using System
El espacio de nombres ASP.NET System contiene las clases que
soportan las clases ASP.NET generales.
using System.Web.Services
El espacio de nombres ASP.NET Web.Services contiene los mtodos y
clases de propiedades que soportan los servicios Web XML.
using System.Collections
using System.ComponentModel
using System.Data
using System.Diagnostics
using System.Web
Class
El atributo Class identifica la clase base que soporta esta instancia de un
servicio Web XML.
La clase predeterminada del servicio Web XML es Service1.
Mtodos del servicio Web XML
Cada mtodo que se exponga desde el servicio Web XML debe estar
marcado con un atributo <WebMethod()> personalizado. Este atributo se
requiere para crear un mtodo que pueda ser invocado a travs del Web. Si
el mtodo no tiene el atributo personalizado <WebMethod()>, el mtodo no
ser expuesto desde el servicio Web XML.
Visual Studio .NET crea un mtodo Web "Hello World" predeterminado,
que puede activarse eliminando las etiquetas comentadas en la pgina del
servicio Web XML. Podemos modificar la funcin predeterminada, o
agregar nuestras propias funciones.
El siguiente cdigo es el mtodo predeterminado del servicio Web XML de
Visual Studio .NET:
<WebMethod()> Public Function HelloWorld() As String
HelloWorld = "Hello World"
End Function

[WebMethod]
public string HelloWorld()
{
return "Hello World";
}


C#
Visual Basic .NET
C#
Crear y consumir servicios Web XML 35


Prctica dirigida por el instructor: crear un servicio Web XML
Crear un servicio Web XML
Probar el servicio Web XML
Cambiar el espacio de nombres

*****************************
En esta prctica, crearemos un sencillo servicio de recomendaciones de valores
de mercado. Este servicio de recomendaciones devuelve un valor Buy si se
introduce el nombre de la compaa Contoso como parmetro de entrada. El
resto de nombres de compaas deberan devolver un valor Sell.
Ejecutar esta prctica
1. Crear un nuevo proyecto de servicio Web ASP.NET en Visual Studio .NET
y especificar la ubicacin del servicio Web en
http://localhost/StocksVB
http://localhost/StockCS.
Automticamente se crea una carpeta StocksVB o StocksCS en la carpeta
\Inetpub\wwwroot.
2. Abrir el archivo predeterminado .asmx, Service1.asmx, en vista de Cdigo
haciendo clic con el botn derecho sobre el archivo en el Explorador de
soluciones y clic en Ver cdigo.
Observar que el nombre predeterminado de la clase es Service1, y que
Visual Studio .NET ha abierto automticamente el archivo de cdigo
subyacente Sevice1.asmx.vb o Sevice1.asmx.cs.
Introduccin
Crear un servicio Web
XML
Visual Basic .NET
C#
36 Crear y consumir servicios Web XML


3. Crear una funcin GetRating como sigue:
<WebMethod()> Public Function GetRating( _
ByVal Ticker As String) As String
If Ticker ="Contoso" Then
Return "Buy"
Else
Return "Sell"
End If
End Function

[WebMethod]
public string GetRating(String Ticker)
{
if (Ticker == "Contoso")
return "Buy";
else
return "Sell";
}

4. Guardar el archivo.
5. Generar y examinar el servicio Web XML en Microsoft Internet Explorer
visualizando
http://localhost/StocksVB/Service1.asmx.
http://localhost/StocksCS/Service1.asmx.
Para abrir el servicio Web XML, tambin puede hacerse clic con el botn
derecho en Service1.asmx en el Explorador de soluciones y clic en Ver en
el navegador.
Observar que hay un comentario sobre el espacio de nombres.
6. Hacer clic en GetRating.
7. Escribir el nombre de una empresa para la que deseemos una
recomendacin de una cotizacin, como Contoso o Northwind Traders, en
el campo Ticker, y hacer clic en Invoke.
Para evitar que aparezca el comentario sobre el espacio de nombres cuando
se examina el servicio Web XML, debe cambiarse la URL del espacio de
nombres. Si se est utilizando Visual Basic .NET, cambiar la URL
predeterminada que proporciona Visual Studio .NET. Si se est utilizando
C#, Visual Studio .NET no genera un espacio de nombres predeterminado.
Debemos agregar un atributo WebService y agregarle la directiva del
espacio de nombres.
8. Agregar o modificar el atributo WebService.
Modificar la directiva del espacio de nombres en Sevice1.asmx.vb para que
utilice http://microsoft.com/webservices/:
<WebService(Namespace:= _
"http://microsoft.com/webservices/")> _

Agregar el atributo WebService y la directiva del espacio de nombres
debajo de la informacin de resumen en Service1.asmx.cs.
El cdigo C#debera ser como el siguiente (con el cdigo nuevo que debe
aadirse en negrita):
Visual Basic .NET
C#
Probar el servicio Web
XML
Visual Basic .NET
C#
Cambiar o agregar el
espacio de nombres
Visual Basic .NET
C#
Crear y consumir servicios Web XML 37


/// Summary description for WeatherService
/// </summary>
///
[WebService(Namespace="http://microsoft.com/webservices/")]
public class Service1 : System.Web.Services.WebService

9. Guardar y volver a generar el archivo.
10. Examinar el servicio Web en Internet Explorer visualizando
http://localhost/StocksVB/Service1.asmx.
http://localhost/StocksCS/Service1.asmx.
Observar que desaparece el comentario sobre el espacio de nombres.
11. Agregar una descripcin para Class. El cdigo debera ser similar al
siguiente:

<WebService(Namespace:= _
"http://microsoft.com/webservices/", _
Description:="My class description...")> _

[WebService(Namespace=
"http://microsoft.com/webservices/",
Description="My class description...")]

12. Agregar una descripcin a la directivaWebMethod. El cdigo debera ser
similar al siguiente:
<WebMethod(Description:="My WebMethod description...")>

[WebMethod(Description="My WebMethod description...")]

13. Guardar y volver a generar el archivo.
14. Examinar el servicio Web en Internet Explorer en
http://localhost/StocksVB/Service1.asmx.
http://localhost/StocksCS/Service1.asmx.
Verificar que aparecen las descripciones.
Visual Basic .NET
C#
Agregar una descripcin
para la clase y el mtodo
Web
Visual Basic .NET
C#
Visual Basic .NET
C#
Visual Basic .NET
C#


Prctica A: Crear y consumir servicios Web XML
Medical
Medical.aspx
Medical
Medical.aspx
Benefits
Home Page
Default.aspx
Benefits
Home Page
Default.aspx
Life Insurance
Life.aspx
Life Insurance
Life.aspx
Retirement
Retirement.aspx
Retirement
Retirement.aspx
Dental
Dental.aspx
Dental
Dental.aspx
Dentists
Doctors
Doctors.aspx
Doctors
Doctors.aspx
Doctors
Logon Page
Login.aspx
Logon Page
Login.aspx
Registration
Register.aspx
Registration
Register.aspx
Coho
Winery
Prospectus
Prospectus.aspx
Prospectus
Prospectus.aspx
XML Web
Service
dentalService1.asmx
XML Web
Service
dentalService1.asmx
Page Header
Header.ascx
Page Header
Header.ascx
ASPState
tempdb
LabWeb
Application
User Control
namedate.ascx
User Control
namedate.ascx
Menu
Component
Class1.vb or Class1.cs
Menu
Component
Class1.vb or Class1.cs
XML
Files
Web.
config

*****************************
En este laboratorio, aprenderemos a:
Crear un servicio Web XML que devuelva tipos de datos complejos.
Probar un servicio Web XML utilizando un explorador.

Para trabajar en este laboratorio, es necesario tener:
Conocimientos sobre cmo agregar una tabla Microsoft SQL Server

a un
proyecto.
Conocimientos sobre Microsoft ADO.NET.
Conocimientos sobre cmo agregar una referencia Web a un formulario Web
Form.
Conocimientos sobre cmo utilizar un DataGrid.
Conocimientos sobre cmo crear procedimientos de evento para controles de
servidor.

Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios de este
curso, crearemos un sitio Web que permita a los empleados seleccionar y
configurar los beneficios que elijan.
En este laboratorio:
Crearemos un servicio Web XML que nos permita recuperar la lista de todos
los dentistas utilizados por Coho Winery.
Recuperar la lista de dentistas de un determinado cdigo postal.
Consumir el servicio Web de la pgina dental.aspx.

Objetivos
Requisitos previos
Escenario
Tiempo estimado para
completar el laboratorio:
60 minutos
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList.
Estos proyectos pueden haberse creado utilizando Visual Basic .NET o Microsoft
Visual C#

.NET.
Si no se han creado estos proyectos, realizar los siguientes pasos:
Crear la solucin LabApplication

Realizar este procedimiento nicamente si no se ha creado un archivo
de solucin LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solucin en blanco
denominada LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Solucin en
blanco.
b. En el cuadro de dilogo Nuevo proyecto, escribir LabApplication en el
cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto Benefits, o si se ha eliminado.

1. Crear un nuevo proyecto de aplicacin Web ASP.NET, denominado
BenefitsVB o BenefitsCS, en la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic o Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Aplicacin Web ASP.NET, establecer
la ubicacin en http://localhost/BenefitsVB para el proyecto
Visual Basic .NET o en http://localhost/BenefitsCS para el proyecto
Visual C#.
d. Hacer clic en Agregar a Solucin, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solucin, es importante el uso
de maysculas en el nombre del proyecto. Probablemente, utilizaremos algunos
formularios Web Forms ya generados en ste y en otros laboratorios, por ello,
debemos verificar que hemos escrito con maysculas el nombre del proyecto
Benefits.


Importante
Importante
Precaucin


Actualizar el proyecto Benefits
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en BenefitsVB
o BenefitsCS, seleccionar Agregar y hacer clic en Agregar elemento
existente.
3. Buscar los archivos de proyecto:
Ir a la carpeta VB\Starter\BenefitsVB.

Ir a la carpeta Starter\BenefitsCS.
Estas carpetas pueden encontrarse dentro del fichero labs11.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente Benefits, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.

Crear la biblioteca de clases BenefitsList

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto BenefitsList, o si se ha eliminado el proyecto
BenefitsList siguiendo los pasos del Apndice A, Recuperacin del laboratorio.

1. Crear un nuevo proyecto de biblioteca de clases
Crear un nuevo proyecto de biblioteca de clases Visual Basic .NET con el
nombre BenefitsListVB, y agregarlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual Basic.
c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListVB.
d. Hacer clic en Agregar a solucin, y clic en Aceptar.
Crear un nuevo proyecto de biblioteca de clases Visual C#.NET con el nombre
BenefitsListCS, y agregarlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListCS.
a. Hacer clic en Agregar a solucin, y clic en Aceptar.

Verificar que se han escrito correctamente las maysculas del
proyecto BenefitsList.


Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Importante
Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Precaucin
Actualizar el proyecto BenefitsList
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
1. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente.
2. Ir al proyecto BenefitsList:
Ir a la carpeta VB\Starter\ BenefitsListVB.
Ir a la carpeta CS\Starter\ BenefitsListCS.
Estas carpetas pueden encontrarse dentro del fichero labs11.zip
2. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
3. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
3. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.

Crear una referencia al componente BenefitsList del proyecto Benefits
1. En el proyecto Benefits de la solucin LabApplication, completar los
siguientes pasos para agregar una referencia al componente BenefitsList que
acabamos de crear:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB o BenefitsCS
en el Explorador de soluciones y hacer clic en Agregar referencia.
b. En el cuadro de dilogo Agregar referencia, en la pestaa Proyectos,
hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.
c. En la lista Componentes seleccionados, seleccionar el componente
BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar.
El componente se agrega a la carpeta Referencias en el Explorador de
soluciones.

Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#


Ejercicio 1
Crear el mtodo GetAllDentists del servicio Web XML Dentist
En este ejercicio, utilizaremos Visual Studio .NET para crear un servicio Web
XML.
Crear un servicio Web XML
1. Utilizando Visual Studio .NET, abrir la solucin LabApplication.
2. Crear un nuevo proyecto de servicio Web ASP.NET, denominado
DentalServiceVB o DentalServiceCS, en la solucin LabApplication:
a. En el men Archivo, hacer clic en Nuevo y clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic o Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Servicio Web ASP.NET. Establecer la
ubicacin en http://localhost/DentalServiceVB para un proyecto de
Visual Basic o en http://localhost/DentalServiceCS para un proyecto de
Visual C#.
d. Hacer clic en Agregar a solucin, y clic en Aceptar.
3. En el Explorador de soluciones, hacer clic con el botn derecho en
Service1.asmx y cambiar el nombre por DentalService1.asmx
4. En el Explorador de soluciones, asegurmonos de que el archivo
DentalService1.asmx est abierto y hacer doble clic en la superficie de diseo
para abrir la pgina de cdigo subyacente.
5. Cambiar el nombre de la clase:
En el archivo DentalService1.asmx.vb, cambiar el nombre de la clase Service1
por DentalService1.
En el archivo DentalService1.asmx.cs, cambiar el nombre de la clase y el
constructor Service1 por DentalService1.

Crear los objetos Connection y DataAdapter
1. En Server Explorer, expandir Servidores, expandir nombreequipo, expandir
Servidores SQL Server, expandir nombreequipo, expandir dentists, y
expandir tablas para ver las tablas de la base de datos dentists.
2. En modo de Diseo, mediante una operacin de arrastrar y soltar, ubicar la
tabla Dentists de la base de datos dentists en la pgina DentalService1.asmx.
Se crea un objeto SqlConnection1 y un objeto SqlDataAdapter1 y se ubican
en la superficie de diseo del servicio Web XML DentalService1.asmx.
Se crea un objeto sqlConnection1 y un objeto sqlDataAdapter1 y se ubican
en la superficie de diseo del servicio Web XML DentalService1.asmx.
Visual Basic .NET
C#
Visual Basic .NET
C#
Crear el DataSet
1. Hacer clic en cualquier lugar de la superficie de diseo para deseleccionar los
objetos SqlConnection1 y SqlDataAdapter1.
2. Hacer clic con el botn derecho en el objeto SqlDataAdapter1 en la pgina
DentalService1.asmx y hacer clic en Generar Dataset.
3. En el cuadro de dilogo Generar Dataset, crear un nuevo DataSet
denominado dsDentists, asegurarse de que est seleccionada la opcin
Agregar este Dataset al diseador, y hacer clic en Aceptar.
Se crea un objeto dsDentists y se ubica en la vista de Diseo de la pgina
DentalService1.asmx, y se agrega un nuevo archivo esquema denominado
dsDentists.xsd al proyecto DentalService en el Explorador de soluciones.

Cuando se cree el DataSet dsDentists, Visual Basic .NET crear una
instancia dsDentists denominada DsDentists1 y Visual C#crear una
instancia dsDentists denominada dsDentists1.


Crear el mtodo de servicio Web XML GetAllDentists
1. En la pgina de cdigo subyacente de la pgina DentalService1.asmx,
DentalService1.asmx.vb o DentalService1.asmx.cs, crear un mtodo del
servicio Web XML denominado GetAllDentists, que devuelve un objeto
DataSet.
2. En el mtodo del servicio Web XML, invocar el mtodo Fill del objeto
SqlDataAdapter1 para rellenar el DataSet, dsDentists1, y retornar el
DataSet.
El cdigo debera ser similar al siguiente:
<WebMethod()> _
Public Function GetAllDentists() As DataSet
SqlDataAdapter1.Fill(DsDentists1)
Return DsDentists1
End Function

[WebMethod()]
public DataSet GetAllDentists()
{
sqlDataAdapter1.Fill(dsDentists1);
return dsDentists1;
}

3. Guardar los cambios.
Nota
Visual Basic .NET
C#


4. Generar y examinar la pgina DentalService1.asmx.
Se muestra la pgina de descripcin del servicio Web XML.
De dnde proviene esta pgina de descripcin?
_____________________________________________________________
_____________________________________________________________

Hay un mensaje de aviso en la parte inferior de la pgina sobre el uso de
tempuri.org. El aviso est aqu porque esta URL temporal es el espacio de
nombres temporal del servicio Web XML y nicamente se utiliza para realizar
las pruebas.

5. En el navegador, hacer clic en el enlace GetAllDentists y clic en Invoke.
El navegador muestra la respuesta XML del servicio Web XML.
Cul es la utilidad del contenido entre las etiquetas <xs:schema>y
</xs:schema>?
_____________________________________________________________
_____________________________________________________________

Modificar el resultado del servicio Web XML
1. En la pgina de cdigo subyacente DentalService1.asmx, establecer los
atributos del servicio Web de acuerdo con la siguiente tabla. Si se est
trabajando en C#, se deber crear el atributo WebService.
Atributo Valor

Namespace http://microsoft.com/webservices/
Description Este servicio Web XML contiene informacin sobre los
dentistas

El cdigo debera ser similar al siguiente:
<WebService( _
Namespace:="http://microsoft.com/webservices/", _
Description:="This XML Web service contains " & _
"information about the dentists.")> _
Public Class DentalService1
Inherits System.Web.Services.WebService

[WebService(Namespace="http://microsoft.com/webservices/",
Description="This XML Web service contains " +
"information about the dentists.")]
public class DentalService1 :
System.Web.Services.WebService

Nota
Visual Basic .NET
C#
2. Agregar un atributo description al mtodo de servicio Web XML
GetAllDentists y establecerlo a This XML Web service method returns all
the dentists.
El cdigo debera ser similar al siguiente:
<WebMethod(Description:= _
"This XML Web service method returns all the dentists")> _
Public Function GetAllDentists() As DataSet

[WebMethod(Description= "This XML Web service method returns
all the dentists")]
public DataSet GetAllDentists()

3. Generar y examinar la pgina DentalService1.asmx.
4. En el navegador, observar que la descripcin del servicio Web XML y que la
descripcin del mtodo de servicio Web XML han cambiado. Adems,
observar que el mensaje de aviso de la parte inferior de la pgina, con
independencia del uso de tempuri.org, ya no aparece debido a que se ha
cambiado el espacio de nombres del servicio.

Probar el servicio Web XML de un compaero
1. En Microsoft Internet Explorer, ir al servicio Web XML DentalService de un
compaero en la siguiente URL, siendo NombreEquipo el nombre del equipo
de otro estudiante:
http://NombreEquipo/DentalServiceVB/DentalService1.asmx o
http://NombreEquipo/DentalServiceCS/DentalService1.asmx

Tambin puede utilizarse el equipo del instructor, denominado London.

2. Invocar el mtodo de servicio Web XML GetAllDentists.

Visual Basic .NET
C#
Nota


Ejercicio 2
Crear el mtodo GetDentistsByPostalCode del servicio Web XML
En este ejercicio, agregaremos otro mtodo al servicio Web XML DentistService.
El nuevo mtodo del servicio Web XML se denomina GetDentistsByPostalCode
y devuelve un DataSet que contiene todos los dentistas en un determinado cdigo
postal. En este ejercicio, escribiremos cdigo utilizado por ADO.NET para invocar
un procedimiento almacenado SQL Server.
Crear el mtodo de servicio Web XML GetDentistsByPostalCode
1. En el archivo DentalService1.asmx.vb o DentalService1.asmx.cs, importar el
espacio de nombres System.Data.SqlClient.
El cdigo debera ser similar al siguiente:
Imports System.Data.SqlClient

using System.Data.SqlClient;

2. Crear un mtodo de servicio Web XML denominado
GetDentistsByPostalCode que tenga un parmetro String pasado por el valor
denominado strPostalCode y que devuelve un DataSet.
3. Establecer la descripcin del mtodo de servicio Web XML a This XML Web
service method returns the dentists from a supplied postal code.
El cdigo debera ser similar al siguiente:
<WebMethod(Description:= _
"This XML Web service method returns the " & _
"dentists from a supplied postal code.")> _
Public Function GetDentistsByPostalCode( _
ByVal strPostalCode As String) As DataSet

End Function

[WebMethod(Description=
"This XML Web service method returns the " +
"dentists from a supplied postal code.")]
public DataSet GetDentistsByPostalCode(
String strPostalCode)
{
}

Visual Basic .NET
C#
Visual Basic .NET
C#
4. En el mtodo GetDentistsByPostalCode del servicio Web XML, agregar
cdigo para rellenar un nuevo DataSet, con los dentistas que se encuentran en
un determinado cdigo postal, invocando el procedimiento almacenado
DentistByPostalCode.
El cdigo debera ser similar al siguiente:

Podemos copiar y pegar este cdigo desde el archivo
VB\Starter\DentalServiceVB\DentistsPoCode.txt, o
CS\Starter\DentalServiceCS\DentistsPoCode.txt. Los dos archivos se pueden
encontrar dentro del fichero labs11.zip

Dim conn As New SqlConnection _
("data source=localhost; " & _
"initial catalog=Dentists; " & _
"integrated security=true")
Dim daDentistsPoCode As SqlDataAdapter
Dim dsDentistsPoCode As New DataSet()
Dim workParam As SqlParameter = Nothing

'call the DentistsByState stored procedure
daDentistsPoCode = _
New SqlDataAdapter("DentistsByPostalCode", conn)
daDentistsPoCode.SelectCommand.CommandType = _
CommandType.StoredProcedure

'add the postal code input parameter
workParam = New SqlParameter("@PostalCode", _
System.Data.SqlDbType.NVarChar)
workParam.Direction = ParameterDirection.Input
workParam.Value = strPostalCode
daDentistsPoCode.SelectCommand.Parameters.Add(workParam)

'run the stored procedure and fill a dataset
daDentistsPoCode.Fill(dsDentistsPoCode, _
"DentistsPoCode")

'close the connection
conn.Close()

Return dsDentistsPoCode

Nota
Visual Basic .NET


SqlConnection conn = new SqlConnection
("data source=localhost;" +
"initial catalog=Dentists;" +
"integrated security=true");
SqlDataAdapter daDentistsPoCode;
DataSet dsDentistsPoCode = new DataSet();
SqlParameter workParam = null;

//call the DentistsByState stored procedure
daDentistsPoCode = new
SqlDataAdapter("DentistsByPostalCode", conn);
daDentistsPoCode.SelectCommand.CommandType =
CommandType.StoredProcedure;

//add the postal code input parameter
workParam = new SqlParameter("@PostalCode",
System.Data.SqlDbType.NVarChar);
workParam.Direction = ParameterDirection.Input;
workParam.Value = strPostalCode;
daDentistsPoCode.SelectCommand.Parameters.Add(workParam);

//run the stored procedure and fill a dataset
daDentistsPoCode.Fill(dsDentistsPoCode, "DentistsPoCode");

//close the connection
conn.Close();

return dsDentistsPoCode;

5. Guardar los cambios.
6. Generar y examinar la pgina DentalService1.asmx.
7. En el navegador, hacer clic en el enlace GetDentistsByPostalCode, escribir
98052 en el campo strPostalCode y hacer clic en Invoke.
Deberamos ver todos los dentistas del cdigo postal 98052. Debera haber seis
dentistas para este cdigo postal.
8. Probar de nuevo el mtodo GetDentistsByPostalCode del servicio Web XML
con el cdigo postal 94111.
Ahora, deberamos ver todos los dentistas del cdigo postal 94111. Debera
haber tres dentistas para este cdigo postal.
9. Probar de nuevo el mtodo GetDentistsByPostalCode del servicio Web XML
con el cdigo postal 02703.
No deberamos ver ningn dentista.

C#
Ejercicio 3
Consumir el mtodo de servicio Web XML GetAllDentists
En este ejercicio, invocaremos el mtodo GetAllDentists del servicio Web XML
DentalService. A continuacin, mostraremos el DataSet resultante en un control
DataGrid.
Consumir el servicio Web XML DentalService
1. Abrir el proyecto BenefitsVB o BenefitsCS de la solucin LabApplication en
Visual Studio .NET.
2. Agregar el formulario Web Form dental.aspx de la carpeta
VB\Starter\BenefitsVB o CS\Starter\BenefitsCS al proyecto BenefitsVB o
BenefitsCS. Estas carpetas se pueden encontrar dentro del fichero labs11.zip.
3. Agregar una referencia Web al servicio Web XML DentalService. El servicio
Web XML debera estar ubicado en
http://localhost/DentalServiceVB/DentalService1.asmx o
http://localhost/DentalServiceCS/DentalService1.asmx
a. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsVB o BenefitsCS, y hacer clic en Agregar referencia Web.
b. En el campo Direccin del cuadro de dilogo Agregar referencia Web,
escribir http://localhost/DentalServiceVB/DentalService1.asmx o
http://localhost/DentalServiceCS/DentalService1.asmx, y pulsar
ENTER.
c. Hacer clic en Agregar referencia.
Automticamente, se crea una nueva carpeta denominada Referencias Web
en el proyecto BenefitsVB o BenefitsCS, dentro del Explorador de
soluciones. La carpeta Referencias Web contiene un proxy y una nueva
referencia Web denominada localhost.

El proxy se crea en el lenguaje predeterminado de las opciones de
configuracin de nuestro proyecto. Por ejemplo, si estamos utilizando
Visual Basic .NET, se crear el proxy en Visual Basic .NET, y su nombre ser
Referencia.vb.

4. Hacer clic en el icono Mostrar todos los archivos del Explorador de
soluciones.
5. En el Explorador de soluciones, cambiar el nombre de la Referencia Web
localhost por DentalWebRef.
6. Expandir Referencias Web, expandir DentalWebRef, y hacer clic en el icono
Reference.map en el Explorador de soluciones.
Nota


7. Abrir el archivo Reference.vb o Reference.cs.
Cul es la utilidad de los mtodos BeginGetAllDentists y
EndGetAllDentists?
_____________________________________________________________
_____________________________________________________________
8. Cerrar Reference.vb o Reference.cs.

Invocar el mtodo GetAllDentists del servicio Web XML
1. Abrir el formulario Web Form dental.aspx.
La pgina ya incluye controles TextBox, Button y DataGrid.
2. Abrir la pgina de cdigo subyacente dental.aspx y localizar el siguiente
comentario en el procedimiento de evento cmdGetAllDentists_Click:
'TODO Lab 13: call the XML Web service method
'GetAllDentists

//TODO Lab 13: call the XML Web service method
//GetAllDentists

3. Escribir el cdigo para consumir el mtodo de servicio Web XML
GetAllDentists:
a. Crear un proxy DentalService denominado ProxyGetAllDentists.
b. Crear un DataSet denominado dsAllDentists.
c. Invocar el mtodo GetAllDentists del servicio Web XML y guardar el
resultado en dsAllDentists.
d. Establecer la fuente de datos del DataGrid dgDentists a dsAllDentists.
e. Generar el DataSet en el DataGrid.
Visual Basic .NET
C#
El cdigo debera ser similar al siguiente:
Dim ProxyGetAllDentists As New _
BenefitsVB.DentalWebRef.DentalService1()
Dim dsAllDentists As New DataSet()
dsAllDentists = _
ProxyGetAllDentists.GetAllDentists()
dgDentists.DataSource = dsAllDentists.Tables(0)
dgDentists.DataBind()

BenefitsCS.DentalWebRef.DentalService1 ProxyGetAllDentists
= new BenefitsCS.DentalWebRef.DentalService1();
DataSet dsAllDentists = new DataSet();
dsAllDentists = ProxyGetAllDentists.GetAllDentists();
dgDentists.DataSource = dsAllDentists.Tables[0];
dgDentists.DataBind();

Si DentalWebRef se muestra como localhost en Microsoft
IntelliSense, debemos cerrar Visual Studio .NET y volver a abrirlo antes de
escribir el cdigo para consumir los mtodos de servicio Web XML de la
Referencia Web.

4. Guardar los cambios.
5. Generar y examinar la pgina dental.aspx.
6. En el navegador, hacer clic en Get All Dentists.
Deberamos ver todos los dentistas en el DataGrid.

Visual Basic .NET
C#
Nota


Ejercicio 4
Consumir el mtodo GetDentistsByPostalCode del servicio Web XML
En este ejercicio, invocaremos el mtodo GetDentistsByPostalCode del servicio
Web XML Dentists.asmx. Utilizaremos un DataGrid para mostrar el DataSet
resultante de los dentistas de un determinado cdigo postal.
Invocar el mtodo GetDentistsByPostalCode del servicio Web XML
1. Abrir la pgina de cdigo subyacente dental.aspx y localizar el siguiente
comentario en el procedimiento de evento cmdSubmit_Click:
'TODO Lab 13: call the XML Web service methods
'GetDentistsByPostalCode

//TODO Lab 13: call the XML Web service methods
//GetDentistsByPostalCode

2. Escribir el cdigo para invocar el mtodo de servicio Web XML
GetDentistsByPostalCode:
a. Crear un proxy denominado ProxyGetDentistsByPostalCode.
b. Crear un DataSet denominado dsDentistsByPostalCode.
c. Invocar el mtodo GetDentistsByPostalCode del servicio Web XML,
pasarle el contenido del cuadro de texto txtPostalCode, y guardar el
DataSet resultante en el DataSet dsDentistsByPostalCode.
d. Establecer el DataSource del DataGrid dgDentists en
dsDentistsByPostalCode.
e. Vincular el DataSet al DataGrid.
El cdigo debera ser similar al siguiente:
Dim ProxyGetDentistsByPostalCode As New _
BenefitsVB.DentalWebRef.DentalService1()
Dim dsDentistsByPostalCode As New DataSet()
dsDentistsByPostalCode = _
ProxyGetDentistsByPostalCode. _
GetDentistsByPostalCode(txtPostalCode.Text)
dgDentists.DataSource = dsDentistsByPostalCode.Tables(0)
dgDentists.DataBind()

BenefitsCS.DentalWebRef.DentalService1
ProxyGetDentistsByPostalCode = new
BenefitsCS.DentalWebRef.DentalService1();
DataSet dsDentistsByPostalCode = new DataSet();
dsDentistsByPostalCode =
ProxyGetDentistsByPostalCode.GetDentistsByPostalCode
(txtPostalCode.Text);
dgDentists.DataSource = dsDentistsByPostalCode.Tables[0];
dgDentists.DataBind();

Visual Basic .NET
C#
Visual Basic .NET
C#
3. Guardar los cambios.
4. Generar y examinar dental.aspx.
5. Escribir 98052 en el cuadro de texto Postal Code, y hacer clic en Submit.
Deberamos ver todos los dentistas del cdigo postal 98052 en el DataGrid.
6. Escribir 94111 en el cuadro de texto Postal Code y hacer clic en Submit.
Veremos todos los dentistas del cdigo postal 94111 en el DataGrid.



THIS PAGE INTENTIONALLY LEFT BLANK

1

Prctica A: Almacenar datos de aplicacin y sesin
Medical
Medical.aspx
Medical
Medical.aspx
Benefits
Home Page
Default.aspx
Benefits
Home Page
Default.aspx
Life Insurance
Life.aspx
Life Insurance
Life.aspx
Retirement
Retirement.aspx
Retirement
Retirement.aspx
Dental
Dental.aspx
Dental
Dental.aspx
Dentists
Doctors
Doctors.aspx
Doctors
Doctors.aspx
Doctors
Logon Page
Login.aspx
Logon Page
Login.aspx
Registration
Register.aspx
Registration
Register.aspx
Coho
Winery
Prospectus
Prospectus.aspx
Prospectus
Prospectus.aspx
XML Web
Service
dentalService1.asmx
XML Web
Service
dentalService1.asmx
Page Header
Header.ascx
Page Header
Header.ascx
ASPState
tempdb
LabWeb
Application
User Control
namedate.ascx
User Control
namedate.ascx
Menu
Component
Class1.vb or Class1.cs
Menu
Component
Class1.vb or Class1.cs
XML
Files
Web.
config

*****************************
En este laboratorio, aprenderemos a:
Crear variables de sesin y de aplicacin y utilizarlas para almacenar y
recuperar informacin.
Crear, leer y escribir desde cookies persistentes.
Almacenar variables de sesin en una base de datos Microsoft SQL
Server

.

Este laboratorio se centra en los conceptos de este mdulo. Por ello,
podra no cumplir las recomendaciones de seguridad de Microsoft.

Para trabajar en este laboratorio, es necesario tener:
Conocimientos sobre cmo crear variables de sesin y de aplicacin.
Conocimientos sobre cmo crear cookies.

Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios de
este curso, crearemos un sitio Web que permita a los empleados seleccionar y
configurar los beneficios que elijan.
En este laboratorio, utilizaremos variables de sesin y de aplicacin para
mejorar la experiencia de los usuarios cuando navegan por el sitio Web
Benefits.
Objetivos
Nota
Requisitos previos
Escenario
Tiempo estimado para
completar el laboratorio:
90 minutos
2

Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList.
Estos proyectos pueden haberse creado utilizando Visual Basic .NET o
Microsoft Visual C#

.NET.
Si no se han creado estos proyectos, realizar los siguientes pasos:
Crear la solucin LabApplication

Realizar este procedimiento nicamente si no se ha creado un
archivo de solucin LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solucin en blanco
denominada LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Solucin en
blanco.
b. En el cuadro de dilogo Nuevo proyecto, escribir LabApplication en el
cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto Benefits, o si se ha eliminado.

1. Crear un nuevo proyecto de aplicacin Web ASP.NET, denominado
BenefitsVB o BenefitsCS, en la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic o Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Aplicacin Web ASP.NET,
establecer la ubicacin en http://localhost/BenefitsVB para el proyecto
Visual Basic .NET o en http://localhost/BenefitsCS para el proyecto
Visual C#.
d. Hacer clic en Agregar a Solucin, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solucin, es importante el
uso de maysculas en el nombre del proyecto. Probablemente, utilizaremos
algunos formularios Web Forms ya generados en ste y en otros
laboratorios, por ello, debemos verificar que hemos escrito con maysculas
el nombre del proyecto Benefits.


Importante
Importante
Precaucin
3

Actualizar el proyecto Benefits
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente.
3. Buscar los archivos de proyecto:
Ir a la carpeta VB\Starter\BenefitsVB.

Ir a la carpeta CS\Starter\BenefitsCS.
Estas carpetas pueden encontrarse dentro del fichero labs12.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente Benefits, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.

Crear la biblioteca de clases BenefitsList

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto BenefitsList, o si se ha eliminado.

1. Crear un nuevo proyecto de biblioteca de clases.
Crear un nuevo proyecto de biblioteca de clases Visual Basic .NET con el
nombre BenefitsListVB, y agregarlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual Basic.
c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListVB.
d. Hacer clic en Agregar a solucin, y clic en Aceptar.
Crear un nuevo proyecto de biblioteca de clases Visual C#.NET con el
nombre BenefitsListCS, y agregarlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListCS.
a. Hacer clic en Agregar a solucin, y clic en Aceptar.

Verificar que se han escrito correctamente las maysculas del
proyecto BenefitsList.


Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Importante
Para el proyecto
Visual Basic .NET
Para el proyecto Visual
C#
Precaucin
4

Actualizar el proyecto BenefitsList
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente.
3. Ir al proyecto BenefitsList.
Ir a la carpeta VB\Starter\BenefitsListVB.

Ir a la carpeta CS\Starter\BenefitsListCS.
Estas carpetas pueden encontrarse dentro del fichero labs12.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
1. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.

Crear una referencia al componente BenefitsList del proyecto Benefits
1. En el proyecto Benefits de la solucin LabApplication, completar los
siguientes pasos para agregar una referencia al componente BenefitsList
que acabamos de crear:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB o
BenefitsCS en el Explorador de soluciones y hacer clic en Agregar
referencia.
b. En el cuadro de dilogo Agregar referencia, en la pestaa Proyectos,
hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.
c. En la lista Componentes seleccionados, seleccionar el componente
BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar.
El componente se agrega a la carpeta Referencias en el Explorador de
soluciones.

Crear el Servicio Web XML Dental

Realizar este procedimiento nicamente si no se ha creado
anteriormente el proyecto DentalService, o si se ha eliminado el proyecto
DentalService siguiendo los pasos del Apndice A Recuperacin del
laboratorio.

1. Crear un nuevo proyecto de Servicio Web XML.
Crear un nuevo proyecto de Servicio Web XML en Visual Basic .NET,
denominado DentalServiceVB, y agregarlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic.
c. En la lista Plantillas, hacer clic en Servicio Web ASP.NET, y
establecer la ubicacin en http://localhost/DentalServiceVB.
d. Hacer clic en Agregar a solucin, y clic en Aceptar.
Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Importante
Para el proyecto
Visual Basic .NET
5


Verificar que se han utilizado correctamente las maysculas en
el proyecto DentalServiceVB.

Crear un nuevo proyecto de Servicio Web XML Visual C#, denominado
DentalServiceCS, y agregarlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic.
c. En la lista Plantillas, hacer clic en Servicio Web ASP.NET, y
establecer la ubicacin en http://localhost/DentalServiceCS.
d. Hacer clic en Agregar a solucin, y clic en Aceptar.

Verificar que se han utilizado correctamente las maysculas en
el proyecto DentalServiceVB.


Actualizar el proyecto DentalService
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
DentalServiceVB o DentalServiceCS, seleccionar Agregar, y hacer clic en
Agregar elemento existente.
3. Buscar los archivos de proyecto:
Ir a la carpeta VB\Starter\DentalServiceVB.

Ir a la carpeta CS\Starter\DentalServiceCS.
Estas carpetas pueden encontrarse dentro del fichero labs12.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente DentalService, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de esta carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.
7. Generar el servicio Web XML DentalService haciendo clic con el botn
derecho en el proyecto DentalServiceVB o DentalServiceCS en el
Explorador de soluciones y hacer clic en Generar.

Precaucin
Para el proyecto Visual
C#.NET
Precaucin
Para el proyecto
Visual Basic .NET
Para el proyecto Visual
C#.NET
6

Agregar una referencia Web en el proyecto Benefits al servicio Web
DentalService
1. En el proyecto Benefits de la solucin LabApplication, realizar los
siguientes pasos para agregar una referencia Web al servicio Web XML
DentalService:
a. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsVB o BenefitsCS y clic en Agregar referencia Web.
b. En el cuadro de texto Direccin, escribir:
http://localhost/DentalServiceVB/DentalService1.asmx o
http://localhost/DentalServiceCS/DentalService1.asmx y pulsar
ENTER.
Se mostrar la referencia Web DentalService.
c. Hacer clic en Agregar referencia.
La referencia Web se agrega al proyecto en la carpeta Referencias Web.
2. En el Explorador de soluciones, expandir Referencias Web, hacer clic con
el botn derecho en localhost, y seleccionar Cambiar nombre.
3. Escribir DentalWebRef, y pulsar ENTER.
4. Generar la solucin haciendo clic en Generar solucin en el men
Generar.

7

Ejercicio 1
Utilizar variables de sesin
En este ejercicio, almacenaremos el nombre y la fecha de nacimiento del
usuario en variables de sesin. Tanto el control de usuario namedate.ascx como
la pgina life.aspx buscarn las variables de sesin y rellenarn los cuadros de
texto adecuados con la informacin, si est disponible. Si las variables de sesin
no existen todava, una de las pginas las crear.
En la aplicacin Web actual, un usuario debe introducir informacin redundante
en mltiples pginas. Por ejemplo, el usuario debe suministrar su nombre y
fecha de nacimiento en la pgina mdica y en la pgina de seguro de vida. Para
simplificar el uso de la aplicacin Web, utilizaremos una cookie para almacenar
esta informacin en variables de sesin y as el usuario slo deber introducir
esta informacin una nica vez.
Obtener y establecer variables de sesin en life.aspx
1. En Visual Studio .NET, abrir la pgina de cdigo subyacente life.aspx del
proyecto Benefits.
2. Agregar cdigo al procedimiento de evento Page_Load que obtiene las
variables de sesin Name y Birth.
3. Establecer la propiedad Text del cuadro de texto txtName con el contenido
de la variable de sesin Name, y establecer la propiedad Text del cuadro de
texto txtBirth con el contenido de la variable de sesin Birth.
4. El cdigo debera ser similar al siguiente:
If Not (Page.IsPostBack) Then
Dim strName As String = CStr(Session("Name"))
Dim strBirth As String = CStr(Session("Birth"))
txtName.Text = strName
txtBirth.Text = strBirth
End If

if (!Page.IsPostBack)
{
string strName = (string)Session["Name"];
string strBirth = (string)Session["Birth"];
txtName.Text = strName;
txtBirth.Text = strBirth;
}

5. En el procedimiento de evento cmdSave_Click, buscar el siguiente
comentario:
'TODO Lab 14: Set Session variables

//TODO Lab 14: Set Session variables

Si esta seccin de cdigo no se encuentra en nuestro archivo
life.aspx, podemos copiar el cdigo del archivo life.aspx en la carpeta
VB\Starter\BenefitsVB o CS\Starter\BenefitsCS. Estos archivos
pueden encontrarse dentro del fichero labs12.zip

Escenario
Visual Basic .NET
Visual C#
Visual Basic .NET
Visual C#
Nota
8

6. Agregar el cdigo bajo este comentario que asigna el texto del cuadro de
texto txtName a la variable de sesin Name, y asigna el texto del cuadro de
texto txtBirth a la variable de sesin Birth.
7. El cdigo debera ser similar al siguiente:
Session("Name") = txtName.Text
Session("Birth") = txtBirth.Text

Session["Name"] = txtName.Text;
Session["Birth"] = txtBirth.Text;


Obtener y establecer variables de sesin en la pgina de cdigo
subyacente namedate.ascx
1. Abrir namedate.ascx.vb o namedate.ascx.cs.
ste es el control de usuario que muestra el nombre y la fecha de nacimiento
en el formulario Web Form medical.aspx.
2. Agregar cdigo al procedimiento de evento Page_Load que recupera las
variables de sesin Name y Birth.
3. Establecer la propiedad Text para el cuadro de texto txtName con el
contenido de la variable de sesin Name, y establecer la propiedad Text del
cuadro de texto txtBirth con el contenido de la variable de sesin Birth.
4. El cdigo debera ser similar al siguiente:
If Not (Page.IsPostBack) Then
Dim strName As String = CStr(Session("Name"))
Dim strBirth As String = CStr(Session("Birth"))
txtName.Text = strName
txtBirth.Text = strBirth
End If

if (!Page.IsPostBack)
{
string strName = (string)Session["Name"];
string strBirth = (string)Session["Birth"];
txtName.Text = strName;
txtBirth.Text = strBirth;
}

Visual Basic .NET
Visual C#
Visual Basic .NET
Visual C#
9

5. En la instruccin Get de la propiedad pblicastrName, agregar una lnea de
cdigo precediendo a la instruccin Return que establezca la variable de
sesin Name con el texto del cuadro de texto txtName.
La instruccin Get debera ser similar a la siguiente:
Get
Session("Name") = txtName.Text
Return txtName.Text
End Get

get
{
Session["Name"] = txtName.Text;
return txtName.Text;
}

6. En la instruccin Get de la propiedad pblicadtDate, agregar una lnea de
cdigo precediendo a la instruccin Return que establezca la variable de
sesin Birth con el texto del cuadro de texto txtBirth.
La instruccin Get debera ser similar a la siguiente:
Get
Session("Birth") = txtBirth.Text
Return CDate(txtBirth.Text)
End Get

get
{
Session["Birth"] = txtBirth.Text;
return Convert.ToDateTime(txtBirth.Text);
}


Evaluar el cdigo
1. Generar y examinar life.aspx.
2. En el navegador, escribir nuestro nombre en el cuadro de texto Name,
escribir nuestra fecha de nacimiento en el cuadro de texto Birthdate, y
escribir 400 en el cuadro de texto Coverage.
3. Hacer clic en Save.
4. En la parte superior del formulario Web Form life.aspx, hacer clic en el
enlace a Medical.
En el formulario Web Form medical.aspx, aparecen nuestro nombre y fecha
de nacimiento. Estos valores se han obtenido de las variables de sesin.
5. Cambiar nuestro nombre en el cuadro de texto, y hacer clic en Save.
6. Hacer clic en el enlace a Life Insurance y comprobar que nuestro nombre
ha cambiado en el formulario Web Form life.aspx.

Visual Basic .NET
Visual C#
Visual Basic .NET
Visual C#
10

Ejercicio 2
Utilizar cookies
En este ejercicio, utilizaremos cookies para almacenar todas las selecciones de
beneficios que haga el usuario. Cuando el usuario regrese a la pgina
default.aspx, sus selecciones aparecern en la pgina.
Antes de que el usuario finalice el proceso de seleccin de beneficios, debera
poder ver estas selecciones en una sola pgina. Hemos escogido ver una lista de
los beneficios seleccionados en la pgina default.aspx. Mostraremos todos los
beneficios seleccionados en la pgina default.aspx utilizando una cookie
persistente.
Para ambas pginas, medical.aspx y life.aspx, agregaremos cdigo que lea los
valores existentes de la cookie, los actualice y rescriba la cookie.
Configurar la pgina de inicio
1. Abrir la pgina default.aspx.
2. Agregar dos etiquetas y dos controles de cuadro de texto en la parte inferior
del formulario Web Form, de forma que ste tenga un aspecto similar al de
la siguiente ilustracin.

Escenario
11

3. Poner el nombre txtDoctor al primer cuadro de texto y txtLife al segundo.
4. Abrir default.aspx.vb o default.aspx.cs.
5. En el procedimiento de evento Page_Load, agregar cdigo para leer de una
cookie denominada Benefits. Este cdigo debera aadirse tras la condicin
Page.IsPostBack existente.
6. Declarar dos variables, strDoc y strLife, que almacenarn los valores
doctors y life de la cookieBenefits.
7. Si la cookie existe y no est vaca, establecer la propiedad Text del cuadro
de texto txtDoctors en strDoc, y establecer la propiedad de texto de txtLife
en strLife.
El cdigo debera ser similar al siguiente:
Dim objGetCookie As HttpCookie = _
Request.Cookies("Benefits")
Dim strDoc As String
Dim strLife As String

If Not objGetCookie Is Nothing Then
strDoc = objGetCookie.Values("doctor")
strLife = objGetCookie.Values("life")
txtDoctor.Text = strDoc
txtLife.Text = strLife
End If

HttpCookie objGetCookie =
Request.Cookies["Benefits"];
string strDoc;
string strLife;

if (objGetCookie != null)
{
strDoc = objGetCookie.Values["doctor"];
strLife = objGetCookie.Values["life"];
txtDoctor.Text = strDoc;
txtLife.Text = strLife;
}

8. Guardar default.aspx.

Visual Basic .NET
Visual C#
12

Almacenar la seleccin de doctores
1. Abrir medical.aspx.vb o medical.aspx.cs.
2. En el procedimiento de evento cmdSave_Click, agregar cdigo que
recupere toda la informacin de la cookie Benefits, pero slo si la cookie
existe y contiene informacin.
Este cdigo aadido debera incluir dos variables de tipo cadena que
almacenarn los valores de los doctores y del seguro de vida de la cookie. El
cdigo debera ser similar al siguiente:
Dim objCookie As HttpCookie = Request.Cookies("Benefits")
Dim strDoc As String
Dim strLife As String

If Not objCookie Is Nothing Then
strDoc = objCookie.Values("doctor")
strLife = objCookie.Values("life")
End If

HttpCookie objGetCookie = Request.Cookies["Benefits"];
string strDoc ="";
string strLife ="";

if (objGetCookie != null)
{
strDoc = objGetCookie.Values["doctor"];
strLife = objGetCookie.Values["life"];
}

3. Agregar cdigo para realizar las siguientes tareas:
a. Actualizar el valor de la variable strDoc con el texto que contiene el
cuadro de texto txtDoctor.
b. Crear un nuevo objeto cookie, objNewCookie, con el nombre de cookie
Benefits.
Sustituiremos la cookie Benefits existente con una nueva cookie que
contiene la informacin actualizada.
c. Establecer la fecha de expiracin de la cookie Benefits a 30 das a partir
de la fecha actual.
d. Agregar a la cookie dos valores, denominados doctor y life. Estos
valores contendrn strDoc y strLife, respectivamente.
e. Escribir la cookieobjNewCookie.
Visual Basic .NET
Visual C#
13

El cdigo debera ser similar al siguiente:
strDoc = txtDoctor.Text
Dim objNewCookie As New HttpCookie("Benefits")
objNewCookie.Expires = DateTime.Now.AddDays(30)
objNewCookie.Values.Add("doctor", strDoc)
objNewCookie.Values.Add("life", strLife)
Response.Cookies.Add(objNewCookie)

strDoc = txtDoctor.Text;
HttpCookie objNewCookie = new HttpCookie("Benefits");
objNewCookie.Expires = DateTime.Now.AddDays(30);
objNewCookie.Values.Add("doctor", strDoc);
objNewCookie.Values.Add("life", strLife);
Response.Cookies.Add(objNewCookie);

4. Finalmente, debemos agregar cdigo al procedimiento de evento
cmdSave_Click que redirecciona al usuario de regreso a la pgina
default.aspx. El cdigo agregado debera ser similar al siguiente:
Response.Redirect("default.aspx")

Response.Redirect("default.aspx");

5. Guardar el archivo medical.aspx.vb o medical.aspx.cs.

Almacenar las selecciones de seguro de vida (life insurance)
1. Abrir life.aspx.vb o life.aspx.cs.
2. En el procedimiento de evento cmdSave_Click, agregar cdigo que
recupere toda la informacin de la cookie Benefits, pero slo si la cookie
existe y contiene informacin.
Este cdigo es idntico al cdigo agregado a medical.aspx.
3. Buscar la siguiente lnea de cdigo:
'TODO Lab 14: Build the string

//TODO Lab 14: Build the string

Si esta seccin de cdigo no se encuentra en nuestro archivo
life.aspx, podemos copiar el cdigo del archivo life.aspx file de la carpeta
carpeta_instalacin\Labfiles\Lab14\VB\Starter\BenefitsVB o
carpeta_instalacin\Labfiles\Lab14\CS\Starter\BenefitsCS.

Visual Basic .NET
Visual C#
Visual Basic .NET
Visual C#
Visual Basic .NET
Visual C#
Note
14

4. Eliminar el comentario del cdigo bajo este comentario.
Este cdigo genera una cadena que incluye las opciones seleccionadas de
seguro de vida y el valor introducido para el importe de la cobertura
(coverage).
5. Agregar cdigo para crear y escribir la cookie Benefits.
Este cdigo es idntico al cdigo agregado a medical.aspx.
6. Agregar cdigo para redireccionar la pgina de regreso a la pgina
default.aspx.
7. Una vez finalizado, todo el procedimiento de evento cmdSave_Click de
life.aspx debera ser similar al siguiente:
If Page.IsValid Then
lblMessage.Text = "Valid!"

'TODO Lab 14: Set Session variables
Session("Name") = txtName.Text
Session("Birth") = txtBirth.Text

Dim objCookie As HttpCookie = _
Request.Cookies("Benefits")
Dim strDoc As String
Dim strLife As String

If Not objCookie Is Nothing Then
strDoc = objCookie.Values("doctor")
strLife = objCookie.Values("life")
End If

If (chkShortTerm.Checked) Then
If (chkLongTerm.Checked) Then
strLife = "Short Term and Long Term"
Else
strLife = "Short Term"
End If
ElseIf (chkLongTerm.Checked) Then
strLife = "Long Term"
End If
strLife &= ": Coverage = $" & txtCoverage.Text

Dim objNewCookie As New HttpCookie("Benefits")
objNewCookie.Expires = DateTime.Now.AddDays(30)
objNewCookie.Values.Add("doctor", strDoc)
objNewCookie.Values.Add("life", strLife)
Response.Cookies.Add(objNewCookie)
Response.Redirect("default.aspx")

End If

Podemos copiar y pegar este cdigo desde el archivo
VB\Starter\life.txt. Este archivo puede encontrarse dentro del fichero
labs12.zip

Visual Basic .NET
Nota
15

if (Page.IsValid)
{
lblMessage.Text = "Valid!";

//TODO Lab 14: Set Session variables
Session["Name"] = txtName.Text;
Session["Birth"] = txtBirth.Text;

HttpCookie objCookie =
Request.Cookies["Benefits"];
string strDoc = "";
string strLife = "";

if (objCookie != null)
{
strDoc = objCookie.Values["doctor"];
strLife = objCookie.Values["life"];
}

if (chkShortTerm.Checked)
{
if (chkLongTerm.Checked)
{
strLife = "Short Term and Long Term";
}
else
{
strLife = "Short Term";
}
}
else if (chkLongTerm.Checked)
{
strLife = "Long Term";
}

strLife += ": Coverage = $" + txtCoverage.Text;

HttpCookie objNewCookie = new HttpCookie("Benefits");
objNewCookie.Expires = DateTime.Now.AddDays(30);
objNewCookie.Values.Add("doctor", strDoc);
objNewCookie.Values.Add("life", strLife);
Response.Cookies.Add(objNewCookie);
Response.Redirect("default.aspx");
}

Podemos copiar y pegar este cdigo desde el archivo
CS\Starter\life.txt. Este archivo puede encontrarse dentro del
fichero labs12.zip

8. Guardar el archivo life.aspx.vb o life.aspx.cs.

Visual C#
Nota
16

Probar la cookie
1. Generar y examinar la pgina default.aspx.
2. Hacer clic en el enlace a Medical.
3. Rellenar la informacin requerida y hacer clic en Save.
4. Seremos retornados a default.aspx, y la informacin de doctores se ha
cumplimentado.
5. Hacer clic en el enlace a Life Insurance.
6. Rellenar la informacin requerida, seleccionar una o ambas opciones de
periodo de cobertura, y hacer clic en Save.
7. Seremos retornados a default.aspx y la informacin relativa al seguro de
vida se ha cumplimentado.

17

Ejercicio 3
Utilizar variables de aplicacin
En este ejercicio, agregaremos un contador de pginas a la pgina
retirement.aspx.
Deseamos proporcionar una forma rpida y sencilla para que los directivos
puedan ver cuntos empleados acceden al sitio Web Benefits. Para ello, hemos
decidido implementar un contador de pginas en la pgina default.aspx
utilizando una variable de aplicacin. Debemos asegurarnos de que el contador
no se incrementa cuando tiene lugar el postback de una pgina, y que slo
cuenta las visitas nicas a la pgina.
Agregar componentes de la interfaz de usuario (IU)
1. Abrir la pgina retirement.aspx.
2. Agregar dos etiquetas y un cuadro de texto en la parte inferior del
formulario, para que ste tenga un aspecto similar al siguiente.

3. Ponerle el nombre txtVisits al nuevo cuadro de texto.

Escenario
18

Agregar el cdigo
1. En el procedimiento de evento Page_Load, agregar cdigo que incremente
el valor de la variable de aplicacin Visits en una unidad.
2. El cdigo debera bloquear la variable de aplicacin antes de incrementarla,
y debera desbloquearla despus de incrementarla. Insertar el cdigo de
modo que se ejecute nicamente cuando la pgina no enve informacin de
retorno en el postback.
3. Agregar cdigo para establecer la propiedad Text de txtVisits al valor
almacenado en la variable de aplicacin Visits. Este cdigo debera
ejecutarse cada vez que se cargue la pgina.
4. Una vez finalizado, el procedimiento de evento Page_Load debera ser
similar al siguiente:
If Not Page.IsPostBack Then
Dim dsRetirement As New DataSet()
dsRetirement.ReadXml( _
Server.MapPath("mutual_funds.xml"))
dgRetirement.DataSource = dsRetirement
dgRetirement.DataBind()

Application.Lock()
Application("Visits") = CInt(Application("Visits")) + 1
Application.UnLock()
End If

txtVisits.Text = CStr(Application("Visits"))

if (!Page.IsPostBack)
{
DataSet dsRetirement = new DataSet();
dsRetirement.ReadXml(
Server.MapPath["mutual_funds.xml"]);
dgRetirement.DataSource = dsRetirement;
dgRetirement.DataBind();

Application.Lock();
Application["Visits"]
=Convert.ToInt16(Application["Visits"]) + 1;
Application.UnLock();
}

txtVisits.Text = Application["Visits"].ToString();


Probar la variable de aplicacin
1. Generar y examinar la pgina retirement.aspx.
2. Actualizar el navegador.
3. El contador de pginas se incrementa cada vez que actualizamos la pgina.

Visual Basic .NET
Visual C#
19

Ejercicio 4
Almacenar variables de sesin en una base de datos
En este ejercicio, almacenaremos las variables de sesin de nombre de usuario y
fecha de nacimiento en una base de datos SQL Server.
Para preparar nuestro sitio Web a una implantacin en una granja Web, las
variables de sesin se almacenarn en una ubicacin centralizada. Hemos
decidido utilizar una base de datos SQL Server como solucin de
almacenamiento a corto plazo.
Configurar Web.config
1. Abrir el archivo Web.config de la aplicacin Web Benefits.
2. Buscar el elemento sessionState.
3. Cambiar el modo de sessionState por SQLServer, y establecer la cadena de
conexin para utilizar la seguridad integrada para conectarse a localhost.
Una vez finalizado, el elemento sessionState debera ser similar al
siguiente:
<sessionState
mode="SQLServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;
Integrated Security=SSPI"
cookieless="false"
timeout="20"
/>

Debido a que el archivo Web.config es un archivo Extensible
Markup Language (XML), es importante el uso correcto de maysculas de
los nombres de los elementos y los atributos.

4. Guardar el archivo Web.config.

Instalar y configurar las bases de datos
Las variables de sesin estn almacenadas en dos bases de datos
preconfiguradas, denominadas ASPState y tempdb. Para instalar y configurar
las bases de datos, seguir estos pasos:
1. En el men Inicio, seleccionar Todos los programas, seleccionar
Accesorios y hacer clic en Lnea de comandos.
Se abrir una ventana de comandos.
2. En la lnea de comandos, escribir el siguiente comando, siendo version la
ltima versin del .NET Framework instalada en nuestro equipo, y pulsar
ENTER:
cd \WINDOWS\Microsoft.NET\Framework\version\

La lnea de comandos cambia al nuevo directorio.
Escenario
Importante
20

3. En la lnea de comandos, escribir el siguiente comando y pulsar ENTER:
OSQL S localhost E <InstallSqlState.sql

La ventana de comandos muestra una serie de nmeros y mensajes, y
regresa a la lnea de comandos. Las bases de datos ASPState y tempdb se
han restablecido.
4. Cerrar la lnea de comandos, y abrir Windows Explorer.
5. Ir al siguiente directorio:
VB\Starter
CS\Starter
Estas carpetas pueden encontrarse dentro del fichero labs12.zip
6. Hacer doble clic en Lab12.bat.
Este archivo por lotes ejecuta una consulta SQL que configura la seguridad
de las bases de datos ASPState y tempdb.
7. Cerrar Windows Explorer.

Probar la aplicacin Web
1. Generar y examinar la pgina default.aspx para probar la aplicacin Web
Benefits.
2. Hacer clic en el enlace a Medical, introducir la informacin necesaria, y
hacer clic en Save.
3. Hacer clic en el enlace a Life Insurance.
Comprobar que las variables de sesin que contienen nuestro nombre y
fecha de nacimiento funcionan correctamente.



Visual Basic .NET
Visual C#



ndice
Descripcin 1
Leccin: administracin del estado 2
Leccin: variables de aplicacin y de sesin 17
Leccin: cookies y sesiones que no utilizan cookies 29

Administracin del estado
Administracin del estado 1

Descripcin
Administracin del estado
Variables de aplicacin y de sesin
Cookies y sesiones que no utilizan cookies

***
Microsoft ASP.NET permite administrar el estado de una aplicacin Web. El
estado es la capacidad de una aplicacin Web de conservar la informacin del
usuario.
En este mdulo, estudiaremos cmo administrar el estado de una aplicacin
Web ASP.NET.
En este mdulo, aprenderemos a:
Describir la administracin del estado y las distintas opciones disponibles
para administrar el estado en una aplicacin Web ASP.NET.
Utilizar variables de aplicacin y de sesin para administrar el estado en
aplicaciones Web ASP.NET.
Utilizar cookies y sesiones que no utilizan cookies para administrar el
estado en aplicaciones Web ASP.NET.

Introduccin
Objetivos
2 Administracin del estado

Leccin: administracin del estado
Ques la administracindel estado?
Tipos de administracin del estado
Administracin del estado en el lado del servidor
Administracin del estado en el lado del cliente
El archivo Global.asax

***
La conexin que se establece entre un usuario (el equipo cliente) y un servidor
Web se denomina sesin. Las sesiones pueden abarcar mltiples pginas Web y
su seguimiento se realiza mediante la administracin del estado.
La administracin del estado es el proceso por el cual mantenemos la misma
informacin a travs de mltiples peticiones para las mismas o distintas pginas
Web.
En esta leccin, empezaremos a conocer en detalle qu es la administracin del
estado y por qu es importante administrar el estado. Estudiaremos la
administracin del estado en el lado del servidor y la administracin del estado
en el lado del cliente. Tambin estudiaremos el archivo global.asax.
En esta leccin, aprenderemos a:
Describir la administracin del estado.
Identificar los distintos tipos de opciones de administracin del estado.
Describir la administracin del estado en el lado del servidor.
Describir la administracin del estado en el lado del cliente.
Describir los distintos eventos que controla el archivo global.asax.

Introduccin
Objetivos de la leccin
Administracin del estado 3

Qu es la administracin del estado?
Nombre
Apellido
Introduzca su informacin
de iniciodesesin:
John
Enviar
Enviar
Chen
Servidor Web
Servidor Web
Login.aspx Login.aspx
Servidor Web
Servidor Web
HolaJohnChen
Greetings.aspx
Introduzca su informacin
de iniciodesesin:
John
Enviar
Enviar
Chen
Hola
Greetings.aspx
Heolvidado
quineres!!
Heolvidado
quineres!!
Nombre
Apellido
Sin administracin del
estado
Con administracin del
estado

***
Al igual que las tecnologas basadas en Hypertext Transfer Protocol (HTTP),
los formularios Web Forms no tienen estado, lo que significa que no indican
automticamente si las peticiones de una secuencia son todas del mismo cliente
ni si una nica instancia de navegador sigue visualizando de forma activa una
pgina Web o un sitio Web. Adems, las pginas Web se destruyen y vuelven a
crearse a continuacin con cada nueva peticin al servidor Web; por tanto, la
informacin de las pginas no existe ms all del ciclo de vida de una nica
pgina.
ASP.NET ofrece una administracin del estado que guarda informacin en el
servidor entre pginas, que ayuda a mantener la continuidad de la informacin
del usuario (estado) durante una visita a un sitio Web.
Si se mantiene el estado entre pginas, la informacin suministrada
originalmente por los usuarios puede ser reutilizada; por ello, los usuarios no
necesitan volver a introducir la misma informacin varias veces cada vez que se
enva una pgina de retorno al servidor.
Por ejemplo, en la ilustracin anterior, el usuario, J ohn Chen, introduce su
nombre en el formulario login.aspx. Despus de introducir sus datos personales,
esa informacin se enva al servidor y se muestra la pgina siguiente, el
formulario greetings.aspx. Sin administracin del estado, la informacin que el
usuario ha introducido en la primera pgina se ha perdido.
Sin embargo, si se utiliza administracin del estado en la aplicacin Web, puede
mantenerse el estado a travs de varias pginas Web. Por tanto, cuando la
informacin personal del usuario se enva al servidor, la segunda pgina, el
formulario greetings.aspx, da la bienvenida al usuario con su nombre, J ohn
Introduccin
Administracin del
estado
Ejemplo
4 Administracin del estado

Chen, que el usuario introdujo en el formulario login.aspx, la primera pgina de
la aplicacin Web.
Administracin del estado 5

Tipos de administracin del estado
Cadenas deconsulta
Informacinaadidaal final de
una URL
Basededatos
Enalgunos casos, seutilizael
soportedebasededatos para
mantener el estado enel sitio Web
PropiedadViewState
Conservavalores entremltiples
peticiones paralamismapgina
Estado desesin
Lainformacinestdisponible
nicamenteparael usuario deuna
sesinespecfica
Cookies
Archivo detexto quealmacena
informacinparamantener el
estado
Estado delaaplicacin
Lainformacinestdisponible
paratodos los usuarios deuna
aplicacinWeb
Administraci Administraci ndel estado en ndel estado en
el lado del cliente el lado del cliente
Administraci Administraci ndel estado en n del estado en
el lado del servidor el lado del servidor

***
ASP.NET proporciona dos tipos de administracin del estado que pueden
utilizarse para mantener el estado entre envos y respuestas al servidor. La
eleccin de uno de los dos tipos de administracin del estado disponibles en
ASP.NET depende principalmente de la naturaleza de la aplicacin Web.
Los dos tipos de administracin del estado son:
Lado servidor
Las opciones de la administracin del estado en el lado del servidor utilizan
recursos del servidor para almacenar la informacin del estado. La
seguridad de estas opciones es mayor que en el lado del cliente.
Lado cliente
La administracin del estado en el lado del cliente no utiliza recursos del
servidor para almacenar la informacin del estado. Las opciones en el lado
del cliente tienden a tener seguridad mnima, pero ofrecen un rpido
rendimiento del servidor porque no existe demanda en el servidor para
mantener el estado.

La administracin del estado en el lado del servidor contiene diferentes
opciones a escoger, incluyendo:
Estado de aplicacin
En el estado de aplicacin, la informacin est disponible para todos los
usuarios de una aplicacin Web; por ejemplo, almacenar el nmero de
visitantes a una aplicacin Web.
Estado de sesin
Introduccin
Administracin del
estado en el lado del
cliente y en el lado del
servidor
Lado servidor
6 Administracin del estado

En el estado de sesin, la informacin est disponible nicamente para un
usuario de una sesin especfica de una aplicacin Web; por ejemplo,
almacenar el esquema de colores preferido de un usuario.
Administracin del estado 7

Base de datos Microsoft SQL Server

o un servidor de estado
Otra opcin de la administracin del estado en el lado del servidor es utilizar
la tecnologa de bases de datos. Podemos utilizar una base de datos SQL
Server o un servidor de estado para almacenar informacin especfica del
usuario cuando el almacn de informacin es de gran tamao. La base de
datos SQL Server o un servidor de estado pueden utilizarse conjuntamente
con el estado de sesin y cookies.
El objeto Cache
Tambin podemos utilizar el objeto Cache para administrar el estado a nivel
de aplicacin.

La administracin del estado en el lado del cliente tambin ofrece distintas
opciones para mantener el estado. Estas opciones incluyen:
Cookies
Una cookie es un archivo de texto que puede utilizarse para almacenar
pequeas cantidades de informacin necesarias para mantener el estado.
La propiedad ViewState
Los formularios Web Forms proporcionan la propiedad ViewState como
una estructura incluida para conservar automticamente valores entre
mltiples peticiones a la misma pgina. La propiedad ViewState se
mantiene como un campo oculto en la pgina.
Cadenas de consulta
Una cadena de consulta es informacin que se aade al final de una URL
(Uniform Resource Locator). Un ejemplo tpico podra ser el siguiente:
http://www.contoso.com/listwidgets.aspx?category=basic&price=100
En la ruta URL anterior, la cadena de consulta se inicia con un signo de
interrogacin (?) e incluye dos pares atributo-valor, categora y precio.

Este mdulo cubre informacin que pertenece nicamente a cookies.
Para ms informacin sobre ViewState y cadenas de consulta, consultar la
documentacin de Microsoft Visual Studio .NET.

Lado cliente
Nota
8 Administracin del estado

Administracin del estado en el lado del servidor
El estado delaaplicacines unmecanismo dealmacenamiento
global accesibledesdetodas las pginas delaaplicacinWeb
El estado desesinestlimitado alasesindeexplorador
actual
Los valores se conservan mediante el uso de variables de
aplicacin y de sesin
Escalabilidad
LasesinASP.NET seidentificaconlacadenaSessionID
Servidor Web
Servidor Web
Equipocliente
Equipocliente
Variables de
aplicaciny de sesin
SessionID

***
ASP.NET ofrece varias opciones para administrar el estado en el lado del
servidor. Los estados de aplicacin y de sesin son dos de estas opciones. Esta
seccin trata de los estados de aplicacin y de sesin en mayor detalle.
ASP.NET proporciona el estado de aplicacin utilizando una instancia de la
clase HttpApplicationState para cada aplicacin Web activa. El estado de
aplicacin es un mecanismo de almacenamiento global al que se puede acceder
desde todas las pginas de la aplicacin Web, y por tanto es til para almacenar
informacin del usuario que debe preservarse entre transferencias al servidor y
viajes entre pginas.
El estado de la aplicacin es una estructura de diccionario clave-valor que se
crea en cada peticin a una URL especfica. Podemos agregar la informacin
especfica de la aplicacin a esta estructura para almacenarla entre peticiones de
pginas. Despus de agregar la informacin especfica de aplicacin al estado
de la aplicacin, el servidor la gestiona.
ASP.NET proporciona las variables de aplicacin que mantienen el estado de
aplicacin. Los datos ideales para insertar en variables de aplicacin son los
datos compartidos por mltiples sesiones y que no cambian a menudo.
ASP.NET proporciona estado de sesin utilizando una instancia de la clase
HttpSessionState para cada sesin de aplicacin Web activa.
El estado de sesin es similar al estado de aplicacin, salvo en que est limitado
a la sesin actual del navegador. Si distintos usuarios estn utilizando una
aplicacin Web, cada usuario tendr un estado de sesin distinto. Adems, si el
mismo usuario abandona la aplicacin Web y regresa ms tarde, ese usuario
tambin tendr un estado de sesin distinto al que tena antes.
Introduccin
Estado de aplicacin
Variables de aplicacin
Estado de sesin
Administracin del estado 9

El estado de sesin est almacenado como una estructura de diccionario clave-
valor que se utiliza par almacenar informacin especfica de la sesin que debe
mantenerse entre transferencias de pginas al servidor y entre peticiones de
pginas. Tras agregar la informacin especfica de la aplicacin al estado de
sesin, el servidor la gestiona. Podemos configurar ASP.NET para
automticamente serialice y almacene la informacin de sesin en una base de
datos SQL Server o en un servidor de estado.
ASP.NET proporciona las variables de sesin necesarias para mantener el
estado de sesin. Los datos ideales para almacenar en las variables de estado de
sesin son datos fugaces o confidenciales, especficos de una sesin individual.

Los estados de aplicacin y de sesin se implementan como una tabla
hash, y almacenan datos basndose en combinaciones de pares clave/valor. Una
tabla hash es similar al concepto de un objeto dictionary.

Con ASP.NET, el estado de sesin puede utilizarse tanto en configuraciones de
mltiples equipos como de mltiples procesos; optimizando por tanto los
escenarios de escalabilidad de una aplicacin Web.
Cada sesin de aplicacin Web activa est identificada y monitorizada
utilizando una cadena SessionID de 120 bits que nicamente contiene los
caracteres ASCII permitidos en las URLs. Las cadenas SessionID estn
comunicadas a travs de peticiones cliente-servidor, mediante una cookie HTTP
o mediante una URL modificada, con la cadena SessionID embebida,
denominadas normalmente SessionID sin cookies, dependiendo de la
configuracin de la aplicacin Web.
La administracin del estado en el lado del servidor requiere que una cookie
almacene la SessionID en el equipo cliente. Debido a que la vida de una
SessionID es muy breve, slo lo que dura una sesin, el mecanismo que
ASP.NET utiliza para almacenar la informacin de sesin, en una base de datos
SQL Server o en un servidor de estado, tambin se utiliza para permitir que la
aplicacin sea escalable, pero no para un almacenamiento a largo plazo. Si
deseamos implementar el almacenamiento a largo plazo de la informacin de
sesin del usuario, debemos requerir a los usuarios que introduzcan su
informacin personal, y deberemos implementar nuestra propia solucin de
almacenamiento utilizando una base de datos que almacene permanentemente
la informacin personal de usuarios registrados.
Variables de sesin
Nota
Escalabilidad
Identificar y hacer el
seguimiento de una
sesin
10 Administracin del estado

Administracin del estado en el lado del cliente
Utilizacookies paramantener el estado
Cookies persistentes
Cookies temporales/no persistentes
Menos fiablequelas opciones deadministracindel estado enel lado del
servidor
El usuario puede eliminar cookies
Menos seguro quelas opciones deadministracindel estado enel lado
del servidor
Cantidaddeinformacinlimitada
Restricciones en el lado del cliente en el tamao de los archivos
Servidor Web
Servidor Web
Equipo cliente
Equipo cliente
Cookies

***
La mayora de aplicaciones Web utilizan cookies para la administracin del
estado en el lado del cliente.
Una cookie es una pequea cantidad de datos que se almacena en un archivo de
texto en el sistema de archivos del equipo cliente o en memoria en la sesin
cliente-navegador. Una cookie contiene informacin especfica de la pgina que
el servidor enva al cliente, junto con la salida de la pgina.
Podemos utilizar cookies para almacenar informacin sobre un determinado
cliente, sesin o aplicacin. Las cookies se almacenan en el equipo cliente, y
cuando el navegador solicita una pgina, enva la informacin de la cookie,
junto con la informacin solicitada. El servidor est autorizado a leer la cookie
y extraer su valor. Cada cookie contiene la informacin del dominio que invoc
la cookie. Podemos tener varias cookies invocadas para un dominio.
Los dos tipos de cookies son:
Temporales
Las cookies temporales, tambin denominadas cookies de sesin o no
persistentes, existen nicamente en la memoria del navegador. Cuando el
ste se apaga, las cookies temporales que se han aadido se pierden.
Persistentes
Las cookies persistentes son similares a las cookies temporales, excepto en
que las cookies persistentes tienen un periodo de expiracin fijo. Cuando un
navegador solicita una pgina que crea una cookie persistente, ste guarda
esa cookie en el disco duro del usuario. Podemos crear una cookie
persistente que dure meses, o incluso aos, en el equipo cliente. Con
Microsoft Internet Explorer, las cookies persistentes se almacenan en un
Introduccin
Cookies
Tipos de cookies
Administracin del estado 11

archivo denominado nombreusuario@nombredominio.txt, que se crea en el
disco duro del cliente.
12 Administracin del estado

Las cookies pueden expirar cuando finaliza la sesin del explorador (cookies
temporales), o pueden existir indefinidamente en el equipo cliente, dependiendo
de las reglas de expiracin del cliente (cookies persistentes).
Los usuarios tambin pueden decidir eliminar cookies de su equipo antes de que
stas expiren. Por tanto, no existe garanta de que una cookie persistente
permanecer en el equipo de un usuario durante el periodo de tiempo
especificado.
Las cookies son menos seguras si las comparamos con las opciones de
administracin del estado en el lado del servidor. Las cookies tambin estn
sujetas a la manipulacin. Lo usuarios pueden manipular cookies en su equipo,
lo que puede representar potencialmente un compromiso de seguridad o puede
hacer que la aplicacin que depende de la cookie pueda fallar.
Tambin existe un lmite sobre cunta informacin puede almacenarse en una
cookie ya que los equipos cliente tienen restricciones en el tamao de los
archivos. Adems, cada cookie individual puede contener una cantidad limitada
de informacin, no ms de 4 kilobytes (KB).
Vencimiento
Seguridad
Informacin limitada
Administracin del estado 13

El archivo Global.asax
Slo un archivo Global.asaxpor aplicacin Web
Almacenado en la raz del directorio virtual de la
aplicacin Web
Utilizado para gestionar eventos de aplicacin y de
sesin
El archivo Global.asaxes opcional

***
El archivo global.asax es un archivo declarativo que se utiliza para la gestin de
eventos mientras la aplicacin Web se est ejecutando.
Algunas de las caractersticas del archivo global.asax son:
Por cada aplicacin Web ASP.NET se soporta un archivo global.asax.
El archivo global.asax se almacena en la raz del directorio virtual de la
aplicacin Web.
El archivo global.asax puede gestionar eventos de aplicacin y de sesin
(inicio y final) que pueden utilizarse para inicializar variables de aplicacin
y de sesin.
El archivo global.asax es opcional. Si no definimos el archivo, el marco de
trabajo de las pginas ASP.NET asume que no hemos definido ningn
controlador de eventos de aplicacin o sesin.

Introduccin
14 Administracin del estado

El archivo global.asax (continuacin)
ServidorWebASP.NET
Cliente
ASP.NET HTTPRuntime
ASP.NET HTTPRuntime
IIS
IIS
Application_BeginRequest
Application_BeginRequest
Application_AuthenticateRequest
Application_AuthenticateRequest
Application_AuthorizeRequest
Application_AuthorizeRequest
Application_ResolveRequestCache
Application_ResolveRequestCache
Application_AquireRequestState
Application_AquireRequestState
Application_PreRequestHandlerExecute
Application_PreRequestHandlerExecute
Application_EndRequest
Application_EndRequest
Application_UpdateRequestCache
Application_UpdateRequestCache
Application_ReleaseRequestState
Application_ReleaseRequestState
Application_PostRequestHandlerExecute
Application_PostRequestHandlerExecute
Ejecucindelapgina
Ejecucindelapgina
Peticin
Peticin
Respuesta
Respuesta

***
El archivo global.asax es un archivo declarativo que se utiliza para gestionar
eventos mientras la aplicacin Web se est ejecutando.
El archivo global.asax soporta tres categoras de eventos:
Eventos que se invocan cuando se solicita una pgina.
Eventos que se invocan cuando se enva la pgina solicitada.
Eventos de aplicacin condicionales.

La siguiente tabla lista los eventos que se invocan cuando se solicita una
pgina.
Nombre del evento Descripcin

Application_BeginRequest Este evento se invoca cada vez que se
recibe una nueva peticin.
Application_AuthenticateRequest Este evento indica que la peticin est
preparada para ser autenticada.
Application_AuthorizeRequest Este evento indica que la peticin est
preparada para ser autorizada.
Application_ResolveRequestCache Este evento es utilizado por el mdulo de
la cach de salida para detener el
procesamiento de peticiones que han
sido almacenadas en cach.
Application_AcquireRequestState Este evento indica que debera obtenerse
el estado para cada peticin.
Introduccin
Categoras de eventos
Eventos invocados
cuando se solicita una
pgina
Administracin del estado 15

Application_PreRequestHandlerExecute Este evento indica que el gestor de
peticiones est a punto de ejecutarse.

16 Administracin del estado

Global.asax tambin incluye eventos invocados cuando la pgina solicitada se
enva de vuelta al cliente. La siguiente tabla lista estos eventos.
Nombre del evento Descripcin

Application_PostRequestHandlerExecute Este evento es el primero disponible
despus de que el controlador, como
una pgina ASP.NET o un servicio
Web, haya finalizado su trabajo.
Application_ReleaseRequestState Este evento se invoca cuando el estado
de la peticin debe almacenarse, porque
la aplicacin Web ASP.NET finaliza
con l.
Application_UpdateRequestCache Este evento indica que el procesamiento
de cdigo ha finalizado y que el archivo
est preparado para ser agregado a la
cach de ASP.NET.
Application_EndRequest Este evento es el ltimo evento que se
invoca cuando finaliza la aplicacin
Web ASP.NET.

Los eventos de aplicacin condicionales son eventos que pueden o no ser
lanzados durante le procesamiento de una peticin. La siguiente tabla muestra
algunos de los eventos de aplicacin condicionales ms habituales.
Nombre del evento Descripcin

Application_Start Este evento se invoca cuando se inicia
una aplicacin Web ASP.NET.
Application_End Este evento es otro evento de ocurrencia
nica. Es el evento recproco de
Application_Start; se invoca cuando se
cierra la aplicacin Web ASP.NET.
Session_Start Este evento se invoca cuando se inicia la
Session de un usuario en una aplicacin
Web ASP.NET.
Session_End Este evento es un evento reciproco de
Session_Start; este evento se invoca
cuando finaliza la sesin de un usuario.
Application_Error Este evento se invoca cuando ocurre un
error no controlado en una aplicacin
Web ASP.NET.

Eventos invocados
cuando se enva la
pgina solicitada
Eventos de aplicacin
condicionales
Administracin del estado 17

Leccin: variables de aplicacin y de sesin
Inicializar variables de aplicacin y de sesin
Utilizar variables de aplicacin y de sesin
Demostracin: uso de las variables desesin
Duracin de las variables de aplicacin y de sesin
Almacenamiento escalable de variables de aplicacin y
de sesin
Almacenar las variables de aplicacin y de sesin en
una base de datos

***
Podemos utilizar las variables de aplicacin y de sesin para compartir
informacin entre las pginas de una aplicacin Web ASP.NET. En esta
leccin, estudiaremos cmo inicializar y utilizar las variables de aplicacin y de
sesin. Tambin estudiaremos cmo especificar la duracin de las variables de
aplicacin y de sesin y cmo afectan al almacenamiento escalable. Finalmente,
estudiaremos cmo almacenar las variables de aplicacin y de sesin en una
base de datos.
En esta leccin, aprenderemos a:
Inicializar variables de aplicacin y de sesin.
Establecer y leer variables de aplicacin y de sesin.
Modificar la duracin de la variable de aplicacin y de sesin.
Describir los mtodos en el proceso y fuera del proceso utilizados para
almacenar el estado de sesin.
Almacenar variables de aplicacin y de sesin en una base de datos.

Introduccin
Objetivos de la leccin
18 Administracin del estado

Inicializar variables de aplicacin y de sesin
Las variables se inicializan en Global.asax
El objeto Applicationcomparte informacin entre todos
los usuarios de unaaplicacin Web
El objetoSessionalmacena informacin para una
sesin de usuario concreta
Sub Application_Start(s As Object,e As EventArgs)
Application("NumberofVisitors") = 0
End Sub
Sub Application_Start(s As Object,e As EventArgs)
Application("NumberofVisitors") = 0
End Sub
protected void Application_Start(Object sender,EventArgs e)
{
Application["NumberofVisitors"] = 0;
}
protected void Application_Start(Object sender,EventArgs e)
{
Application["NumberofVisitors"] = 0;
}

***
Inicializamos las variables de aplicacin y de sesin en los procedimientos de
eventos Start de los objetos Application y Session del archivo global.asax.
Utilizamos el objeto Session para almacenar la informacin necesaria de una
sesin de usuario concreta. Las variables que se almacenan en el objeto Session
no se desecharn cuando el usuario viaje por las distintas pginas de la
aplicacin Web. En lugar de ello, estas variables persistirn durante toda la
sesin del usuario.
El siguiente cdigo de ejemplo muestra cmo se utilizan las variables de sesin
para almacenar el esquema de colores preferido de una determinada sesin de
usuario:
Sub Session_Start(ByVal Sender As Object, _
ByVal e As EventArgs)
Session("BackColor") = "beige"
Session("ForeColor") = "black"
End Sub

protected void Session_Start(Object sender, EventArgs e)
{
Session["BackColor"] = "beige";
Session["ForeColor"] = "black";
}

Introduccin
Variables de sesin
Visual Basic .NET
C#
Administracin del estado 19

Podemos utilizar el objeto Application para compartir informacin de estado
entre todos los usuarios de una aplicacin Web. Cuando el primer usuario de la
aplicacin Web solicita un archivo .aspx, se crea un objeto Application. El
objeto Application se destruye cuando todos los usuarios han abandonado la
aplicacin Web y, a continuacin, se descarga la aplicacin Web.
Por ejemplo, podramos almacenar el nmero total de visitantes de un sitio Web
en una variable de nivel de aplicacin:
Sub Application_Start(ByVal Sender As Object, _
ByVal e As EventArgs)
Application("NumberofVisitors") = 0
End Sub

protected void Application_Start(Object sender, EventArgs e)
{
Application["NumberofVisitors"] = 0;
}

Variables de aplicacin
Visual Basic .NET
C#
20 Administracin del estado

Utilizar variables de aplicacin y de sesin
Establecer variables de aplicacin y sesin
Leer variables de aplicacin y de sesin
Session("BackColor") = "blue"
Application.Lock()
Application("NumberOfVisitors") += 1
Application.UnLock()
Session("BackColor") = "blue"
Application.Lock()
Application("NumberOfVisitors") += 1
Application.UnLock()
strBgColor = Session("BackColor")
lblNbVisitor.Text = Application("NumberOfVisitors")
strBgColor = Session("BackColor")
lblNbVisitor.Text = Application("NumberOfVisitors")
Session["BackColor"] = "blue";
Application.Lock();
Application["NumberOfVisitors"] =
(int)Application["NumberOfVisitors"] + 1;
Application.UnLock();
Session["BackColor"] = "blue";
Application.Lock();
Application["NumberOfVisitors"] =
(int)Application["NumberOfVisitors"] + 1;
Application.UnLock();
strBgColor = (string)Session["BackColor"];
lblNbVisitor.Text = Application["NumberOfVisitors"].ToString();
strBgColor = (string)Session["BackColor"];
lblNbVisitor.Text = Application["NumberOfVisitors"].ToString();

***
Para utilizar variables de aplicacin y de sesin en ASP.NET, simplemente
utilizamos una clave de cadena y establecemos un valor.
Para establecer la variable de sesin, debemos proporcionar una clave que
identifique el elemento que estamos almacenando, utilizando una instruccin
como la siguiente:
Session("BackColor") = "blue"

La instruccin anterior agrega una clave, denominada BackColor, al estado de
sesin con el valor blue.
Puede accederse a las variables de aplicacin en un entorno de mltiples
usuarios; por ello, cuando se actualicen los datos de Application, debemos
evitar que otros usuarios o aplicaciones actualicen los datos simultneamente.
ASP.NET proporciona un sencillo conjunto de mtodos de bloqueo,
Application.Lock() y Application.UnLock(), que pueden utilizarse para evitar
el acceso mltiple y simultneo de la variable de aplicacin. El siguiente cdigo
muestra el uso de los mtodos Application.Lock() y Application.UnLock():
Application.Lock()
Application("NumberOfVisitors") += 1
Application.UnLock()

Application.Lock();
Application["NumberofVisitors"] =
(int)Application["NumberOfVisitors"] + 1;
Application.UnLock();

Introduccin
Establecer variables de
aplicacin y de sesin
Visual Basic .NET
C#
Administracin del estado 21

Para utilizar una variable de sesin o de aplicacin en una pgina ASP.NET,
simplemente necesitamos leer el valor del objeto Session o Application:
strBgColor = Session("BackColor")
lblNbVisitor.Text = Application("NumberOfVisitors")

strBgColor = (string)Session["BackColor"];
lblNbVistitor.Text =
Application["NumberofVisitors"].ToString();

Leer variables de
aplicacin y de sesin
Visual Basic.NET
C#
22 Administracin del estado

Demostracin: uso de las variables de sesin
Inicializar una variable de sesin (un
nmero) en global.asax
Acceder a la variable desesin desde una
pgina
Acceder a la variable desesin desde otra
pgina y modificarla
Volver a acceder a la variable de sesin
desde la primera pgina

***
En esta demostracin, aprenderemos a utilizar variables de sesin.
El cdigo para esta demostracin se encuentra en los proyectos Demo12VB y
Demo12CS que se pueden encontrar dentro del fichero demos12.zip.
Ejecutar la demostracin
1. Abrir el proyecto Demo12VB o Demo12CS.
2. Abrir la pgina de cdigo subyacente de global.asax.
3. Inicializar una variable de sesin, denominada intNumber a 3, agregando el
siguiente cdigo al procedimiento de evento Session_Start:
Session("intNumber") = 3

Session["intNumber"] = 3;

4. Abrir los archivos UsingSessionVar1.aspx y UsingSessionVar2.aspx.
Se recupera la variable de sesin y se muestra en el procedimiento de evento
Page_Load.
5. Generar y examinar la pgina UsingSessionVar1.aspx.
Se muestra el valor de la variable de sesin, 3.
6. Hacer clic en Next Page.
Se abre la pgina UsingSessionVar2.aspx, incrementa la variable de sesin
en 4, y muestra el nuevo valor, 7.
7. Hacer clic en Previous Page para regresar a UsingSessionVar1.aspx, que
muestra el nuevo valor de la variable de sesin.
Introduccin
Visual Basic .NET
C#
Administracin del estado 23

Duracin de la variable de sesin y de aplicacin
Las variables de sesin tienen una duracin establecida
tras el ltimo acceso
20 minutos es la duracin predeterminada
La duracin de lasesin puede modificarseen
Web.config:
Las variables de aplicacin persisten hastaque se
provoca el evento Application_End
<configuration>
<system.web>
<sessionState timeout="10" />
</system.web>
</configuration>
<configuration>
<system.web>
<sessionState timeout="10" />
</system.web>
</configuration>

***
HTTP es un protocolo sin estado. Un servidor Web no tiene medios para
detectar cuando un usuario abandona un sitio Web. En cambio, el servidor
Web detecta que ha transcurrido un determinado periodo de tiempo sin que el
usuario solicite una pgina. En ese momento, el servidor Web asume que el
usuario ha abandonado el sitio Web y elimina todos los elementos del estado de
sesin asociados a ese usuario.
De forma predeterminada, el tiempo de una sesin finaliza cuando un usuario
no ha solicitado ninguna pgina durante ms de 20 minutos. Si el mismo
usuario solicita una pgina transcurridos 20 minutos, ser tratado como un
nuevo usuario.

Establecer duraciones de sesin ms cortas permite al sitio Web ahorrar
recursos en el servidor Web. En cambio, si nuestra previsin es que el usuario
pase ms de 20 minutos en nuestro sitio Web, deberamos establecer una
duracin de sesin ms larga.

Podemos modificar la duracin de la sesin en el archivo Web.config. Los
archivos Web.config son archivos Extensible Markup Language (XML)
estndares y legibles por parte del usuario que podemos abrir y modificar con
cualquier editor de texto. Por ejemplo, en el siguiente archivo Web.config, la
duracin de la sesin est establecida en 10 minutos:
<configuration>
<system.web>
<sessionState timeout="10" />
</system.web>
</configuration>
Introduccin
Duracin
predeterminada de la
sesin
Nota
Modificar la duracin de
la sesin
24 Administracin del estado


Las variables de aplicacin persisten hasta que se invoca el evento
Application_End. Application_End se invoca inmediatamente antes del final
de todas las instancias de la aplicacin.
Variable de aplicacin
Administracin del estado 25

Almacenamiento escalable de variables de aplicacin y de sesin
y
Por defecto, el estado desesinseadministraenproceso (in process)
Inconvenientedel almacenamiento enproceso:
No escalable
ASP.NET proporcionaalmacenamiento fueradel proceso (out ofprocess)
del estado desesin
El estado puede almacenarse en una base de datos SQL Server o un
servidor de estado
Ventajas del almacenamiento fueradel proceso:
Escalabilidad
SQL
Variables desesin y de aplicacin
Cliente
Granja Web
Variables desesin y de aplicacin
-O-
Servidor deestado

***
Por defecto, el estado de sesin se administra en proceso (in process). En
proceso significa que toda la informacin que se agrega a un estado de sesin se
almacena en el mismo servidor Web que est ejecutando la aplicacin Web
ASP.NET. Sin embargo, el almacenamiento en proceso del estado de sesin
tiene algunos inconvenientes importantes.
Uno de los principales inconvenientes del almacenamiento del estado de sesin
en proceso es que limita la escalabilidad de nuestro sitio Web. No podemos
configurar mltiples servidores para gestionar peticiones.
ASP.NET ofrece dos mtodos que pueden utilizarse para almacenar estado de
sesin fuera de proceso (out of process). Podemos:
Administrar el estado de sesin en una base de datos SQL Server.
Administrar el estado de sesin en un servidor de estado distinto.
Cualquier servidor basado en Microsoft Windows puede ser un servidor de
estado.

Para almacenar el estado de sesin fuera de proceso, debemos modificar el
archivo Web.config para establecer el modo sessionstate con el valor sqlserver
o stateserver, y especificar la ubicacin del servidor. La opcin sqlserver es
similar a la opcin stateserver, salvo en que en la primera la informacin
persiste en SQL Server en lugar de almacenarse en la memoria del equipo.
La principal ventaja de separar el almacenamiento del estado de sesin de la
aplicacin Web es que podemos utilizar un servidor de estado externo o un
equipo que ejecute SQL Server para almacenar el estado de sesin, haciendo
por tanto que la aplicacin Web sea escalable. Para conseguir aplicaciones Web
Introduccin
Inconveniente del
almacenamiento en
proceso
Fuera de proceso
Ventaja del
almacenamiento fuera
de proceso
26 Administracin del estado

ASP.NET escalables, el estado de sesin debe estar compartido por mltiples
servidores que soporten el escenario de granja Web. En un escenario de granja
Web, mltiples servidores estn configurados para gestionar las peticiones de
los usuarios y, en consecuencia, stas pueden ser ruteadas dinmicamente desde
un servidor a otro sin perder las variables de aplicacin y de sesin. Adems,
las variables de sesin pueden recuperarse desde cualquier servidor de la granja
Web, ya que estn almacenadas en un equipo distinto que ejecuta SQL Server o
en un servidor de estado.
Administracin del estado 27

Almacenar variables de aplicacin y de sesin en una base de
datos
Configurar el estado de sesin en Web.config
Modo establecido a sqlservero stateserver
A continuacin, configurar el servidor SQL Server
OSQL crea varios procedimientos almacenados y bases
de datos temporales para almacenar las variables
<sessionState mode="SQLServer"
sqlConnectionString="data source=SQLServerName;
Integrated security=true" />
<sessionState mode="SQLServer"
sqlConnectionString="data source=SQLServerName;
Integrated security=true" />
c:\> OSQL S SQLServerName E <InstallSqlState.sql
c:\> OSQL S SQLServerName E <InstallSqlState.sql
1
1 1
2
2 2

***
Para almacenar variables de aplicacin y de sesin en una base de datos SQL
Server o en un servidor de estado, debemos seguir los siguientes pasos:
1. Configurar el estado de sesin en el archivo Web.config del servidor Web.
2. Configurar el servidor SQL Server o el servidor de estado.

En el archivo Web.config, debemos modificar la configuracin para establecer
el atributo mode desessionstate a sqlserver o stateserver. A confinuacin,
debemos modificar el atributo sqlconnectionstring para identificar el nombre
del equipo que ejecuta SQL Server o el servidor de estado.
Por ejemplo, si se utiliza el modo sqlserver con seguridad integrada, debemos
establecer el estado de sesin en Web.config como muestra el siguiente cdigo:
<sessionState mode="SQLServer"
sqlConnectionString="data source=SQLServerName;
Integrated security=true" />

Para configurar el servidor SQL Server, debemos utilizar la herramienta desde
lnea de comandos que proporciona SQL Server, OSQL.exe.
OSQL.exe instala la base de datos denominada ASPState, que se utiliza para
guardar las variables de aplicacin y de sesin.
Para instalar la base de datos ASPState utilizado seguridad integrada, utilizar la
siguiente sintaxis:
Introduccin
Configura el estado de
sesin en el archivo
Web.config de nuestro
servidor Web ASP.NET
Configurar el servidor
SQL Server
28 Administracin del estado

c:\> OSQL S SQLServerName -E <InstallSqlState.sql

Las opciones del comando OSQL son sensibles a maysculas.

Si se utiliza un servidor de estado en lugar de un servidor SQL Server, se debe
iniciar el servicio ASP.NET de Windows en lugar de instalar una base de datos.
Importante
Administracin del estado 29

Leccin: sesiones con y sin cookies
Utilizar cookies para almacenar datos de sesin
Prctica dirigida por el instructor: utilizar variables y
cookies
Recuperar informacin deuna cookie
Uso de sesiones que no utilizan cookies
Configurar sesiones queno utilizan cookies

***
Las cookies son un medio por el cual la aplicacin Web que se ejecuta en el
servidor Web puede hacer que un cliente devuelva informacin al servidor Web
con cada solicitud HTTP. La devolucin de informacin puede utilizarse para
mantener el estado con el cliente entre mltiples peticiones. Las cookies se
envan al cliente como parte del encabezado HTTP en una solicitud del cliente,
o se envan en una respuesta del servidor.
En esta leccin, estudiaremos cmo utilizar cookies para almacenar datos de
sesin, y cmo recuperar esos datos de una cookie. Tambin estudiaremos las
sesiones que no utilizan cookies y cmo se establecen.
En esta leccin, aprenderemos a:
Utilizar cookies para almacenar datos de sesin.
Recuperar informacin de una cookie.
Describir sesiones que no utilizan cookies.
Establecer una sesin que no utiliza cookies.

Introduccin
Objetivos de la leccin
30 Administracin del estado

Utilizar cookies para almacenar datos de sesin
Crear una cookie:
La cookie contiene informacin sobre el nombre de dominio
HttpCookie objCookie = new HttpCookie("myCookie");
DateTime now = DateTime.Now;
objCookie.Values.Add("Time", now.ToString());
objCookie.Values.Add("ForeColor", "White");
objCookie.Values.Add("BackColor", "Blue");
Response.Cookies.Add(objCookie);
HttpCookie objCookie = new HttpCookie("myCookie");
DateTime now = DateTime.Now;
objCookie.Values.Add("Time", now.ToString());
objCookie.Values.Add("ForeColor", "White");
objCookie.Values.Add("BackColor", "Blue");
Response.Cookies.Add(objCookie);
HttpCookie objCookie = new HttpCookie("myCookie");
DateTime now = DateTime.Now;
objCookie.Values.Add("Time", now.ToString());
objCookie.Values.Add("ForeColor", "White");
objCookie.Values.Add("BackColor", "Blue");
objCookie.Expires = now.AddHours(1);
Response.Cookies.Add(objCookie);
HttpCookie objCookie = new HttpCookie("myCookie");
DateTime now = DateTime.Now;
objCookie.Values.Add("Time", now.ToString());
objCookie.Values.Add("ForeColor", "White");
objCookie.Values.Add("BackColor", "Blue");
objCookie.Expires = now.AddHours(1);
Response.Cookies.Add(objCookie);
Paracrear unacookie
persistente, especificar
el tiempodeexpiracin
Set-Cookie: Username=John+Chen; path=/;
domain=microsoft.com;
Expires=Tuesday, 01-Feb-05 00.00.01 GMT
Set-Cookie: Username=John+Chen; path=/;
domain=microsoft.com;
Expires=Tuesday, 01-Feb-05 00.00.01 GMT

***
Podemos crear cookies utilizando la propiedad Cookies del objeto Response y
la clase Request. La propiedad Cookies representa una coleccin de cookies y
es una instancia de la clase HttpCookieCollection.
El siguiente cdigo crea una nueva cookie denominada myCookie:
Dim objCookie As New HttpCookie("myCookie")
Dim now As DateTime = DateTime.Now

HttpCookie objCookie = new HttpCookie("MyCookie");
DateTime now = DateTime.Now;

El siguiente cdigo agrega un par de claves y valores:
objCookie.Values.Add("Time", now.ToString())
objCookie.Values.Add("ForeColor", "White")
objCookie.Values.Add("BackColor", "Blue")

objCookie.Values.Add("Time", now.ToString());
objCookie.Values.Add("ForeColor", "White");
objCookie.Values.Add("BackColor", "Blue");

El siguiente cdigo establece en una hora el tiempo de expiracin de la cookie:

objCookie.Expires = now.AddHours(1)

Introduccin
Crear una cookie
Visual Basic .NET
C#
Visual Basic .NET
C#
Hacer una cookie
persistente
Visual Basic .NET
C#
Administracin del estado 31

objCookie.Expires = now.AddHours(1);

32 Administracin del estado

Si no agregamos el cdigo anterior cuando creamos una cookie, sta ser una
cookie temporal. La cookie temporal se aade a la memoria del navegador, pero
no se almacenar en un archivo. Cuando el usuario cierra el explorador, la
cookie se elimina de la memoria.
Agregar el cdigo sobre el tiempo de expiracin convierte la cookie temporal
en una cookie persistente. La cookie persistente se guarda en el disco duro. Con
una cookie persistente, si el usuario cierra el explorador y lo abre de nuevo,
puede acceder a la misma pgina Web otra vez hasta que la cookie persistente
expire. La expiracin de la cookie persistente depende del tiempo de expiracin
establecido en el cdigo. En el cdigo anterior, la cookie persistente se
eliminar transcurrida una hora.

Frecuentemente, las cookies persistentes a menudo se utilizan para
almacenar informacin sobre nombres e identificadores de usuario para que el
servidor pueda identificar a los usuarios cuando regresen al sitio Web.

El siguiente cdigo agrega la nueva cookie a la coleccin de cookies del objeto
Response:
Response.Cookies.Add(objCookie)

Response.Cookies.Add(objCookie);

Supongamos que deseamos crear una cookie, denominada Username, que
contiene el nombre de un visitante a nuestro sitio Web. Para crear esta cookie,
el servidor Web enviar un encabezado HTTP como muestra el siguiente
cdigo:
Set-Cookie: Username=John+Chen; path=/; domain=microsoft.com;
Expires=Tuesday, 01-Feb-05 00.00.01 GMT

El encabezado del cdigo de ejemplo anterior manda al navegador que agregue
una entrada a su archivo cookie. El explorador agrega la cookie, denominada
Username, con el valor J ohn Chen.
El atributo domain del cdigo de ejemplo anterior limita el dominio dnde el
navegador puede enviar la cookie. En el cdigo de ejemplo anterior, la cookie
nicamente puede enviarse al sitio Web Microsoft.com. La cookie nunca se
enviar a ningn otro sitio Web de Internet.
Despus de que el servidor Web cree una cookie, el navegador la devuelve en
cada peticin que realiza a ese sitio Web. El explorador devuelve la cookie en
un encabezado similar al siguiente:
Cookie: Username: John+Chen

Las cookies que se almacenan en formato de archivo de texto son las cookies
persistentes. De forma predeterminada, este archivo se almacena en la carpeta
\Documents and Settings\NombreUsuario\Cookies.
Cuando las cookies persistentes se almacenan utilizando Internet Explorer, el
formato del archivo de texto es:
NombreUsuario@NombreDominio.txt

Nota
Visual Basic .NET
C#
Cmo funcionan las
cookies
Administracin del estado 33

Prctica dirigida por el instructor: utilizar variables y cookies
Los estudiantes:
Aprendern a utilizar las variables de
aplicacin y de sesin, y las cookies
persistentes, para almacenar informacin
del usuario
Tiempo: 15Minutos

***
En esta prctica, veremos cmo se utilizan las variables de aplicacin y de
sesin, y las cookies persistentes, para almacenar informacin del usuario.
Iniciar sesin en la aplicacin Web
1. Abrir Internet Explorer e ir a:
http://mquinaprofesor/Mod14VB/default.aspx o
http://mquinaprofesor/Mod14CS/default.aspx.
2. Escribir nuestro nombre en el cuadro de texto, seleccionar un color del
cuadro de lista desplegable y hacer clic en Submit.
Seremos redireccionados a results.aspx, que muestra nuestro nombre, color
seleccionado y la fecha y hora en que accedimos por ltima vez a
default.aspx. results.aspx tambin muestra el nmero de visitantes.
3. Actualizar el explorador varias veces.
Cada actualizacin produce un aumento en el nmero de visitantes, pero
nuestro nombre y seleccin de color permanecen.
4. Cerrar Internet Explorer.
5. Volver a abrir Internet Explorer e ir a:
http://mquinaprofesor/Mod14VB/results.aspx o
http://mquinaprofesor/Mod14CS/results.aspx.
Aparece nuestro nombre, pero el color que escogimos anteriormente no se
muestra. La fecha y hora de nuestro ltimo acceso a default.aspx tambin se
muestra.
Introduccin
Probar la funcionalidad
34 Administracin del estado

6. Cerrar Internet Explorer.
Por qu se recuerda nuestro nombre cuando volvemos a visitar el sitio,
pero no el color seleccionado?
_____________________________________________________________
_____________________________________________________________
Cmo hace la pgina el seguimiento del nmero de visitantes?
_____________________________________________________________
_____________________________________________________________

Visualizar el cdigo
1. En el cuadro de direccin de Windows Explorer, escribir:
\\mquinaprofesor\c$\inetpub\wwwroot\mod14VB o
\\mquinaprofesor\c$\inetpub\wwwroot\mod14CS
Y pulsar ENTER.
2. Abrir la pgina de cdigo subyacente de la pgina Default.aspx.
Qu dos acciones se producen en el procedimiento de evento
btnSubmit_Click?
_____________________________________________________________
_____________________________________________________________
3. En Windows Explorer, hacer doble clic en results.aspx.vb o results.aspx.cs
para abrir el archivo de pgina de cdigo subyacente results.aspx en
Visual Studio .NET.
En el procedimiento de evento Page_Load, cmo se almacena el nmero
de visitas en la pgina almacenada?
_____________________________________________________________
_____________________________________________________________
Por qu el cdigo se ubica en una instruccin If en el procedimiento de
evento Page_Load?
_____________________________________________________________
_____________________________________________________________
4. Cerrar Visual Studio .NET.

Administracin del estado 35

Visualizar la cookie
1. En Windows Explorer, ir al siguiente directorio del equipo:
c:\Documents and Settings\Student\Cookies
<<Note>>
Si se ha iniciado sesin con un nombre de usuario distinto de Student,
ir a la carpeta Cookies de esa cuenta de usuario.

2. Hacer doble clic para abrir la cookie denominada
student@equipoinstructor[n].txt, siendo n un nmero de instancia.
Qu informacin podemos encontrar en esta cookie?
____________________________________________________________
____________________________________________________________
3. Cerrar Notepad y Windows Explorer.

Nota
36 Administracin del estado

Recuperar informacin de una cookie
Leer la cookie
Recuperar valores de la cookie
lblTime.Text = objCookie.Values("Time")
lblTime.ForeColor = System.Drawing.Color.FromName _
(objCookie.Values("ForeColor"))
lblTime.BackColor = System.Drawing.Color.FromName _
(objCookie.Values("BackColor"))
lblTime.Text = objCookie.Values("Time")
lblTime.ForeColor = System.Drawing.Color.FromName _
(objCookie.Values("ForeColor"))
lblTime.BackColor = System.Drawing.Color.FromName _
(objCookie.Values("BackColor"))
Dim objCookie As HttpCookie = Request.Cookies("myCookie")
Dim objCookie As HttpCookie = Request.Cookies("myCookie")
HttpCookie objCookie = Request.Cookies["myCookie"];
HttpCookie objCookie = Request.Cookies["myCookie"];
lblTime.Text = objCookie.Values["Time"];
lblTime.ForeColor = System.Drawing.Color.FromName
(objCookie.Values["ForeColor"]);
lblTime.BackColor = System.Drawing.Color.FromName
(objCookie.Values["BackColor"]);
lblTime.Text = objCookie.Values["Time"];
lblTime.ForeColor = System.Drawing.Color.FromName
(objCookie.Values["ForeColor"]);
lblTime.BackColor = System.Drawing.Color.FromName
(objCookie.Values["BackColor"]);

***
Recuperar informacin de una cookie implica leer una cookie y recuperar los
pares clave/valor de la misma.
El cliente devuelve al servidor una cookie en un encabezado HTTP "Cookie:".
En este encabezado pueden aparecer mltiples cookies, separadas por punto y
coma. Para leer una cookie existente, podemos acceder a la coleccin de
cookies del objeto Request, como muestra el siguiente cdigo:
Dim objCookie As HttpCookie = Request.Cookies("myCookie")

HttpCookie objCookie = Request.Cookies["myCookie"];

El siguiente cdigo muestra los valores que deben recuperarse de una cookie:

lblTime.Text = objCookie.Values("Time")
lblTime.ForeColor = System.Drawing.Color.FromName _
(objCookie.Values("ForeColor"))
lblTime.BackColor = System.Drawing.Color.FromName _
(objCookie.Values("BackColor"))

lblTime.Text = objCookie.Values["Time"];
lblTime.ForeColor = System.Drawing.Color.FromName
(objCookie.Values["ForeColor"]);
lblTime.BackColor = System.Drawing.Color.FromName
(objCookie.Values["BackColor"]);

Introduccin
Leer una cookie
Visual Basic
C#
Recuperar valores de la
cookie
Visual Basic .NET
C#
Administracin del estado 37

Uso de sesiones que no utilizan cookies
Cada sesin activa estidentificada y se realiza su
seguimiento utilizando IDsde sesin
Los IDsde sesin secomunican entre peticiones
cliente-servidor utilizando una cookieHTTP o
incluyndolos en laURL
Sesiones que no utilizan cookies
La informacin de ID de sesin estcodificada en URLs
No pueden utilizar URLsabsolutas
La mayora de navegadores limitan el tamao de la URL
a 255 caracteres, lo cual limita el uso de IDspara las
sesiones que no utilizan cookies
http://server/(h44a1e55c0breu552yrecobl)/page.aspx
http://server/(h44a1e55c0breu552yrecobl)/page.aspx

***
Cada sesin activa est identificada y se realiza su seguimiento utilizando un
identificador de sesin SessionID. El SessionID se comunica entre peticiones
cliente-servidor utilizando una cookie HTTP o incluyndolo en la URL. De
forma predeterminada, SessionID se almacena en cookies.
Sin embargo, los usuarios pueden deshabilitar cookies mediante una
configuracin en sus navegadores. Si la cookie no puede agregarse al navegador
de un usuario, cada peticin que realice el usuario iniciar una nueva sesin de
usuario. Los datos de sesin asociados a ese usuario se pierden cuando se
solicita una nueva pgina.
El marco de trabajo de las pginas ASP.NET incluye una opcin que habilita
sesiones que no utilizan cookies. Las sesiones que no utilizan cookies permiten
aprovechar el estado de sesin incluso con navegadores que tienen
deshabilitado el soporte de cookies.
Cuando un usuario realiza la primera peticin a un sitio Web teniendo
habilitado sesiones que no utilizan cookies, la URL que se utiliza para la
peticin se modifica automticamente para incluir el SessionID del usuario. Por
ejemplo, cuando un usuario solicita http://server/page.aspx, la solicitud se
modifica automticamente a:
http://server/(h44a1e55c0breu552yrecobl)/page.aspx

la parte de la URL que aparece en parntesis es el SessionID del usuario actual.
Despus de que el SessionID se incluya en la URL de la peticin de la primera
pgina, el SessionID hace seguimiento del usuario durante su visita al sitio
Web.
Introduccin
Sesiones que no utilizan
cookies
38 Administracin del estado

Existen algunas limitaciones en el uso sesiones que no utilizan cookies:
Si decidimos utilizar sesiones que no utilizan cookies, no podemos utilizar
URLs absolutas para los enlaces entre pginas. El sitio Web debe disearse
de forma que cada enlace utilice una URL relativa a la pgina actual.
La mayora de navegadores limitan el tamao de la URL a 255 caracteres.
Limitacin de las
sesiones que no utilizan
cookies
Administracin del estado 39

Configuracin de sesiones que no utilizan cookies
El estado de sesin se configura en la seccin
<SessionState>de Web.config
Configurar cookieless=true
<sessionState cookieless="true" />
<sessionState cookieless="true" />

***
Para habilitar sesiones que no utilizan cookies, es necesario modificar un nico
atributo del archivo Web.config.
En la seccin <sessionstate> del archivo Web.config, el atributo cookieless
est establecido al valor true. Para habilitar sesiones que no utilizan cookies, lo
nico que debemos hacer es establecer este valor, como muestra el siguiente
cdigo:
<sessionState cookieless="true" />
Introduccin
Configurar una sesin
que no utiliza cookies


ndice
Descripcin 2
Leccin: uso del objeto Cache 3
Leccin: uso de la cach de resultados de ASP.NET 15
Leccin: configurar una aplicacin Web ASP.NET 25
Leccin: implementar una aplicacin Web ASP.NET 43

Configurar, optimizar e implementar
una aplicacin Web con Microsoft
ASP.NET
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 2


Descripcin
Uso del objeto Cache
Uso de la cachde resultados ASP.NET
Configurar una aplicacin Web ASP.NET
Implementar una aplicacin Web ASP.NET

*****************************
Una vez finalizado el desarrollo de nuestra aplicacin Web con Microsoft
ASP.NET, podemos implementarla en un servidor de produccin. Sin embargo,
antes de la implementacin, podramos optimizar la aplicacin Web para
mejorar su rendimiento.
Podemos optimizar e implementar a continuacin la aplicacin Web:
Configurando el objeto Cache y la cach de resultados para optimizar los
tiempos de respuesta de la aplicacin Web.
Organizando la configuracin de la aplicacin en los archivos
Machine.config y Web.config para soportar y proteger el sitio Web.
Seleccionando los archivos necesarios para ejecutar el sitio Web y
copindolos en el servidor de produccin.

En este mdulo, aprenderemos a:
Utilizar el objeto Cache para almacenar informacin.
Utilizar la cach de resultados ASP.NET para almacenar pginas Web y
fragmentos de pginas Web.
Configurar una aplicacin Web ASP.NET utilizando los archivos
Machine.config y Web.config.
Implementar una aplicacin Web ASP.NET.

Introduccin
Objetivos
3 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


Leccin: uso del objeto Cache
Ques el objeto Cache?
Ventajas de utilizar el objeto Cache
Cmo utilizar el objeto Cache
Eliminar elementos del objeto Cache
Demostracin: utilizar el objeto Cache

*****************************
Una de las formas ms eficaces de incrementar el rendimiento de una aplicacin
Web ASP.NET es utilizar el objeto Cache de ASP.NET. El objeto Cache
permite ubicar elementos en memoria del servidor para que puedan recuperarse
rpidamente. Sin embargo, si se cargan demasiados elementos en el objeto
Cache se pueden retrasar los tiempos de respuesta al reducirse la memoria
disponible en el servidor.
En esta leccin, estudiaremos cmo configurar el objeto Cache para optimizar
los tiempos de respuesta de una aplicacin Web.
En esta leccin, aprenderemos a:
Explicar qu es un objeto Cache.
Explicar las ventajas y los inconvenientes de utilizar un objeto Cache.
Utilizar un objeto Cache para almacenar y recuperar elementos utilizados
por nuestra aplicacin Web.
Eliminar elementos de un objeto Cache transcurrido un periodo de tiempo,
o cuando cambie el elemento, para limitar el uso de memoria.

Introduccin
Objetivos de la leccin
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 4


Qu es el objeto Cache?
Un objeto utilizado para almacenar informacin
Un objeto Cachepor aplicacin Web
Una alternativa a las variables de aplicacin
No se utiliza para almacenar informacin en variables
de sesin
Utiliza pares clave-valor para almacenar y recuperar
elementos
Cache("myKey") = myValue
Cache("myKey") = myValue
Cache["myKey"] = myValue;
Cache["myKey"] = myValue;

*****************************
Un aspecto con el que nos encontraremos cuando generemos aplicaciones Web
de alto rendimiento es la necesidad de evitar duplicidad. Un objeto Cache
permite almacenar en cach elementos en memoria la primera vez que son
solicitados, y utilizar la copia en cach para posteriores peticiones. El uso de la
copia en cach evita volver a crear informacin que satisfizo una solicitud
anterior, especialmente informacin que exige un tiempo significativo del
procesador en el servidor cada vez que se crea.
Adems de almacenar en la cach elementos individuales, como los resultados
computacionales en el objeto Cache, ASP.NET ofrece una cach de resultados
que puede utilizarse para almacenar pginas Web y controles de usuario. El
objeto Cache y la cach de resultados son objetos distintos con roles y
propiedades nicos.
ASP.NET proporciona un motor de cach completo que puede utilizarse para
almacenar y recuperar porciones de informacin. El objeto Cache no tiene
informacin sobre el contenido de los elementos que contiene. El objeto Cache
simplemente guarda una referencia a esos objetos y proporciona un proceso
para realizar el seguimiento de sus dependencias y establecer las polticas de
expiracin.
El objeto Cache tambin proporciona un mtodo para pasar valores entre
pginas de la misma aplicacin Web. Los mtodos de cach implementan un
bloqueo automtico; por tanto, existe seguridad al acceder a los valores
simultneamente desde ms de una pgina.
El proceso para utilizar el objeto Cache es:
Introduccin
Un objeto utilizado para
almacenar informacin
Cmo funciona el objeto
Cache
5 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


1. Una pgina solicita un elemento que se ha identificado como almacenado en
el objeto Cache.
2. ASP.NET comprueba el objeto Cache y utiliza la versin en cach si est
disponible.
3. Si no hay una versin en cach disponible, ASP.NET vuelve a crear el
elemento, lo utiliza y lo almacena en el objeto Cache para utilizarlo en el
futuro.

ASP.NET crea un nico objeto Cache por cada aplicacin Web. Los elementos
almacenados en el objeto Cache son exclusivos para la aplicacin Web y otras
aplicaciones Web ejecutndose en el mismo servidor o en otros servidores no
pueden acceder a ellos. En consecuencia, el uso del objeto Cache para
incrementar el rendimiento de la aplicacin Web no es escalable por encima del
nivel de una nica aplicacin Web.
El ciclo de vida de la cach es el mismo que el de la aplicacin Web. Cuando la
aplicacin Web se reinicia, la cach vuelve a crearse.
El objeto Cache puede utilizarse para almacenar informacin que tambin
podra almacenarse en variables de aplicacin. En lugar de volver a crear el
valor cada vez que lo utilizamos, cualquier pgina de la aplicacin Web puede
acceder a un valor en la cach.
El objeto Cache no puede utilizarse para almacenar informacin que se
encuentra en variables de sesin. Las variables de sesin pueden almacenarse
en cookies, la URL (Uniform Resource Locator) de la pgina, o el control
ViewState oculto.

Para ms informacin sobre las variables de aplicacin y de sesin,
consultar el Mdulo Administracin del estado.

El objeto Cache utiliza pares clave-valor para almacenar y recuperar objetos.
La clave es la cadena de la clave de la cach utilizada para referenciar el objeto.
El valor es el objeto a almacenar en la cach. En el caso ms sencillo, ubicar un
elemento en la cach y recuperarlo es exactamente igual que agregar un
elemento a un diccionario.
Agregar un elemento a un objeto Cache:
Cache("mykey") = myValue

Cache["mykey"] = myValue;

Recuperar un elemento de un objeto Cache:
myValue = Cache("myKey")

myValue = Cache["myKey"];

Un objeto Cache por
aplicacin Web
Almacenar variables
Nota
Utiliza pares clave-valor
Microsoft
Visual Basic .NET
C#
Visual Basic .NET
C#
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 6


Ventajas de utilizar el objeto Cache
Es ms rpido que crear unnuevo objeto paracada
peticin
Soporta el bloqueo interno
Administracin automtica de los recursos de cach
Soporta funciones callback
Soporta el borradobasadoen dependencias

*****************************
El objeto Cache proporciona una sencilla interfaz de diccionario que permite
insertar valores fcilmente y recuperarlos posteriormente. El uso del objeto
Cache para almacenar valores tiene varias ventajas.
Es mucho ms rpido recuperar un elemento almacenado en memoria que
volver a generarlo. Por ejemplo, un DataSet relleno con datos de un equipo
ejecutando Microsoft SQL Server

debe volver a conectarse con el servidor


SQL Server por cada peticin de pgina. Ubicar el DataSet en el objeto Cache
facilita un acceso mucho ms rpido a esos datos.
El objeto Cache proporciona una gestin automtica de bloqueos para los
elementos que se encuentran en la cach; por tanto, las peticiones simultneas
de un mismo elemento no pueden modificar el objeto. La gestin automtica de
bloqueos protege las transacciones en curso cuando se actualizan los elementos.
ASP.NET elimina regularmente y de forma automtica elementos de la cach.
Este borrado automtico constituye una mejora respecto a las versiones de
cach anteriores en las que el desarrollador tena que administrar manualmente
los recursos de la cach.
Las funciones callback son cdigo que se ejecuta cuando se elimina un
elemento de la cach. Por ejemplo, podemos utilizar una funcin callback para
insertar la ltima versin de un objeto en la cach tan pronto como se elimine la
versin antigua.
Si un elemento en una cach tiene una dependencia con otro elemento en la
cach o en un archivo, podemos configurar el objeto Cache para que ese
elemento se elimine cuando la dependencia cumpla determinados
requerimientos. Por ejemplo, si almacenamos datos de un archivo XML en la
cach, podemos eliminarlos cuando cambie el documento XML.
Introduccin
Ms rpido que crear un
nuevo objeto para cada
solicitud
Soporta bloqueo interno
Administra
automticamente los
recursos de cach
Soporte de funciones
callback
Soporta la eliminacin
basada en dependencias
7 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


Cmo utilizar el objeto Cache
Escribir en el objeto Cache:
Recuperar valores del objeto Cache:
myValue = Cache("myKey")
myValue = Cache("myKey")
'Implicit method
Cache("myKey") = myValue
'Explicit method
Cache.Insert("myKey", myValue, Dependency, AbsoluteExpiration, _
SlidingExpiration, CacheItemPriority, CacheItemRemovedCallBack)
'Implicit method
Cache("myKey") = myValue
'Explicit method
Cache.Insert("myKey", myValue, Dependency, AbsoluteExpiration, _
SlidingExpiration, CacheItemPriority, CacheItemRemovedCallBack)
//Implicit method
Cache["myKey"] = myValue;
//Explicit method
Cache.Insert("myKey", myValue, Dependency, AbsoluteExpiration,
SlidingExpiration, CacheItemPriority, CacheItemRemovedCallBack);
//Implicit method
Cache["myKey"] = myValue;
//Explicit method
Cache.Insert("myKey", myValue, Dependency, AbsoluteExpiration,
SlidingExpiration, CacheItemPriority, CacheItemRemovedCallBack);
myValue = Cache["myKey"];
myValue = Cache["myKey"];

*****************************
Para utilizar el objeto Cache, utilizamos pares clave-valor para almacenar y
recuperar elementos. La clave es la cadena de la clave de Cache que se utiliza
para referenciar el elemento. El valor es el elemento que se va a almacenar en la
cach.
Podemos escribir un elemento en un objeto Cache implcitamente, como
muestra el siguiente cdigo:
Cache("mykey") = myValue

Cache["mykey"] = myValue;

Tambin podemos proporcionar parmetros, como un lmite de tiempo para el
almacenamiento en el objeto Cache, cuando insertemos un elemento en el
objeto Cache. El siguiente cdigo muestra el mtodo Insert explcito con
parmetros:
Cache.Insert("myKey", myValue, _
Dependency, AbsoluteExpiration, SlidingExpiration, _
CacheItemPriority, CacheItemRemovedCallBack)

Cache.Insert("myKey", myValue,
Dependency, AbsoluteExpiration, SlidingExpiration,
CacheItemPriority, CacheItemRemovedCallBack);

Introduccin
Escribir en el objeto
Cache
Visual Basic .NET
C#
Visual Basic .NET
C#
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 8


Recuperar valores del objeto Cache es igual de fcil. nicamente debemos
proporcionar la clave correcta para recibir el valor.
El siguiente cdigo utiliza la clave myKey para recuperar el valor myValue y,
a continuacin, muestra myValue si no est vaco:
myValue = Cache("mykey")
If myValue <> Nothing Then
DisplayData(myValue)
End If

myValue = Cache["mykey"];
if (myValue != null)
DisplayData(myValue);

Recuperar valores del
objeto Cache
Visual Basic .NET
C#
9 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


Eliminar elementos del objeto Cache
Tiempo AbsoluteExpiration
Tiempo SlidingExpiration
Depende de un valor modificado
Prioridad del elemento en cach
DateTime.Now.AddMinutes(5)
DateTime.Now.AddMinutes(5)
TimeSpan.FromSeconds(20)
TimeSpan.FromSeconds(20)
AddCacheItemDependency("Variable.Value")
AddCacheItemDependency("Variable.Value")
CacheItemPriority.High
CacheItemPriority.High

*****************************
El objeto Cache de ASP.NET est diseado para garantizar que no utiliza
demasiada memoria del servidor. Por ello, el objeto Cache elimina
automticamente los elementos menos utilizados cuando la memoria disponible
es escasa. Podemos influir en el modo como el objeto Cache almacena y
elimina los elementos, definiendo lmites de tiempo, dependencias y prioridades
para los elementos que se encuentran en el objeto Cache.
Los elementos del objeto Cache se eliminan tan pronto como se genera una
dependencia o un lmite de tiempo. Los intentos de recuperar los elementos
eliminados devolvern un valor null a menos que el elemento se agregue
nuevamente al objeto Cache.
Podemos definir la duracin mxima absoluta de un elemento utilizando el
parmetro AbsoluteExpiration. Este parmetro es un tipo de parmetro
DateTime que permite especificar el tiempo de expiracin del elemento.
El siguiente cdigo especifica que myValue se eliminar del objeto Cache
exactamente cinco minutos despus de su creacin:
Cache.Insert("myKey", myValue, Nothing, _
DateTime.Now.AddMinutes(5), Nothing)

Cache.Insert("myKey", myValue, null, _
DateTime.Now.AddMinutes(5), Cache.NoSlidingExpiration);

Introduccin
AbsoluteExpiration
Visual Basic .NET
C#
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 10


Podemos definir la duracin relativa mxima de un elemento utilizando el
parmetro SlidingExpiration. ste es un parmetro de tipo TimeSpan que
permite especificar el intervalo de tiempo entre el momento en que se accedi
por ltima vez al objeto en cach y el tiempo de expiracin del objeto.
El siguiente cdigo especifica que myValue se eliminar del objeto Cache
exactamente 20 segundos despus del ltimo acceso:
Cache.Insert("myKey", myValue, Nothing, _
Nothing, TimeSpan.FromSeconds(20))

Cache.Insert("myKey", myValue, null, _
null, TimeSpan.FromSeconds(20));

En ocasiones, deseamos que un objeto sea eliminado del objeto Cache porque
un elemento de soporte, como un archivo, ha cambiado. ASP.NET permite
definir la validez de un elemento en cach, basndose en dependencias de
archivos u otro elemento en cach. Las dependencias basadas en directorios y
archivos externos se denominan dependencias de archivo, las dependencias
basadas en otro elemento en cach se denominan dependencias de clave. Si una
dependencia cambia, el elemento en cach se invalida y se elimina del objeto
Cache.
El siguiente cdigo especifica que myValue se eliminar del objeto Cache
cuando cambie el archivo myDoc.xml:
Cache.Insert("myKey", myValue, _
new CacheDependency(Server.MapPath("myDoc.xml")))

Cache.Insert("myKey", myValue, new
CacheDependency(Server.MapPath("myDoc.xml")));

Cuando al servidor Web le queda poca memoria, el objeto Cache elimina, de
forma selectiva, elementos para liberar memoria del sistema. Los elementos que
tengan asignados valores de alta prioridad tienen una menor probabilidad de ser
eliminados de la cach; es ms probable que se eliminen los elementos que
tengan asignados valores de menor prioridad.
El siguiente cdigo especifica que myValue tiene una prioridad alta y debera
ser uno de los ltimos elementos eliminados del objeto Cache cuando la
memoria de servidor es limitada:
Cache.Insert("myKey", myValue, Nothing, Nothing, _
Nothing, CacheItemPriority.High, onRemove)

Cache.Insert("myKey", myValue, null, null,
Cache.NoSlidingExpiration, CacheItemPriority.High, onRemove);

SlidingExpiration
Visual Basic .NET
C#
Dependencias
Visual Basic .NET
C#
Prioridad de elementos
en Cache
Visual Basic .NET
C#
11 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


El siguiente cdigo inserta un valor para MyBook en el objeto Cache con
varios argumentos de parmetros. La dependencia o el evento con tiempo de
expiracin que ocurra antes ser el elemento eliminado del objeto Cache:
Eliminar el elemento 5 minutos despus de ser almacenado.
Eliminar el elemento 30 segundos despus del ltimo acceso.
Eliminar el elemento si cambia el archivo Books.xml.
Configurar una prioridad alta para el elemento para que se elimine el ltimo
en caso de que los recursos del servidor lleguen a ser un problema.
Cuando el elemento se elimine del objeto Cache, se ejecutar la funcin de
callback onRemove.

Cache.Insert("MyBook.CurrentBook", CurrentBook, _
new CacheDependency(Server.MapPath("Books.xml")), _
DateTime.Now.AddMinutes(5), _
TimeSpan.FromSeconds(30), _
CacheItemPriority.High, onRemove)

Cache.Insert("MyBook.CurrentBook", CurrentBook,
new CacheDependency(Server.MapPath("Books.xml")),
DateTime.Now.AddMinutes(5),
TimeSpan.FromSeconds(30),
CacheItemPriority.High, onRemove);


Ejemplo de establecer
los parmetros en
Cache.Insert
Visual Basic .NET
C#
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 12


Demostracin: uso del objeto Cache
Ejecutar la pgina CacheTest.aspx sin el
objeto Cachehabilitado
Ejecutar la pgina CacheTest.aspx conel
objeto Cachehabilitado
Ejecutar la pgina CacheTest.aspx conel
objeto Cachehabilitado y con una
dependencia

*****************************
En esta demostracin, veremos cmo utilizar el objeto Cache con un
DataGrid.
Todos los archivos de esta demostracin se encuentran en el proyecto
Demo13CS o Demo13VB que se pueden encontrar dentro del fichero
demos13.zip.
Ejecutar la demostracin
1. Abrir la pgina CacheTest.aspx.
2. Mostrar la pgina de cdigo subyacente.
Observar que el DataSet lee un archivo XML y que el DataGrid est
relleno con el contenido del archivo XML.
3. Establecer el proyecto Demo13 como proyecto de Inicio, establecer la
pgina CacheTest.aspx como Pgina de inicio del proyecto, e visualizar la
pgina en Microsoft Internet Explorer.

Debido a las diferencias de funcionalidades entre el navegador
incluido en Microsoft Visual Studio .NET e Internet Explorer, es
importante utilizar Internet Explorer en esta demostracin.

4. En CacheTest.aspx.vb o CacheTest.aspx.cs, eliminar el comentario de las
lneas marcadas con el siguiente comentario en los procedimientos de
evento Page_Load y dgXML_PageIndexChanged:
'comment this line for caching
//comment this line for caching

Introduccin
Ejecutar sin
almacenamiento en
cach
Nota
Habilitar el
almacenamiento en
cach
Visual Basic .NET
C#
13 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


5. Eliminar el comentario en el cdigo restante en ambos procedimientos de
evento, Page_Load y dgXML_PageIndexChanged.
Explicar cmo este cdigo adicional crea una nueva clave de cach
dsCache, que coloca el objeto DataSet dsXML en la cach y establecer el
momento de vencimiento absoluto en dos minutos.
6. Hacer clic en Start para generar la pgina CacheTest.aspx y visualizarla en
Internet Explorer.
Verificar que el DataGrid est poblado con los datos XML y que funciona
la funcionalidad de paginacin.
7. Dejar abierto Internet Explorer, y en Visual Studio .NET, abrir el archivo
pubs.xml.
8. Cambiar el ttulo del primer libro listado por un ttulo que los estudiantes
puedan detectar fcilmente y, a continuacin, guardar el archivo.
9. En Internet Explorer, cambiar a la Pgina 1 del DataGrid.
Si ya se est visualizando la Pgina 1, cambiar a otra pgina y regresar a la
Pgina 1.
10. Mostrar a los estudiantes que el ttulo del primer libro listado no ha
cambiado porque la informacin proviene de la cach.
11. Cambiar a otra pgina, esperar al menos dos minutos, y regresar a la primera
pgina.
El DataGrid mostrar ahora el nuevo ttulo para el primer libro.
12. Cerrar Internet Explorer.
13. Abrir la pgina CacheTest.aspx.vb o CacheTest.aspx.cs.
14. Para las dos lneas de cdigo Cache.Insert de las pginas CacheTest.aspx.vb
o CacheTest.aspx.cs, agregar una dependencia en el archivo pubs.xml. El
cdigo debera ser similar al siguiente:
Cache.Insert("dsCache", dsXML, New _
System.Web.Caching.CacheDependency _
(Server.MapPath("pubs.xml")), _
DateTime.Now.AddMinutes(1), Nothing)

Cache.Insert("dsCache", dsXML, new
System.Web.Caching.CacheDependency
(Server.MapPath("pubs.xml")),
DateTime.Now.AddMinutes(1), Cache.NoSlidingExpiration);

Probar el
almacenamiento en
cach
Agregar una
dependencia
Visual Basic .NET
C#
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 14


15. Hacer clic con el botn derecho en el proyecto Demo13VB o Demo13CS
de Explorador de soluciones y hacer clic en Generar.
16. Hacer clic con el botn derecho en CacheTest.aspx, y clic en Examinar
con En el cuadro de dilogo Examinar con, hacer clic en Microsoft
Internet Explorer, y clic en Examinar.
17. Hacer clic en Start para generar la pgina CacheTest.aspx y visualizarla en
Internet Explorer.
18. Dejar abierto Internet Explorer, y en Visual Studio .NET, abrir el archivo
pubs.xml.
19. Cambiar el ttulo del primer libro listado por un ttulo que los estudiantes
puedan detectar fcilmente. Guardar el archivo pubs.xml.
20. En Internet Explorer, cambiar a la Pgina 1 del DataGrid.
Si ya se est visualizando la Pgina 1, cambiar a otra pgina y regresar a la
Pgina 1.
21. Mostrar a los estudiantes que la informacin del DataGrid ha cambiado
para reflejar la modificacin del archivo pubs.xml, puesto que la cach
depende de ese archivo.

15 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


Leccin: uso de la cach de resultados de ASP.NET
Multimedia: cach de resultados
Tipos de cach de resultados
Cmo utilizar la cach de resultados de pginas
Demostracin: cach de resultados de pginas
Cmo utilizar la cach de fragmentos de pginas

*****************************
Un factor que los desarrolladores deben tener en cuenta cuando desarrollan
aplicaciones Web de alto rendimiento es la necesidad de minimizar el tiempo de
respuesta para las peticiones de pginas. Si se almacena en memoria una
pgina, o partes de una pgina, la primera vez que se solicita, y a continuacin
se utiliza esa pgina almacenada, o las partes de la pgina, en posteriores
solicitudes, podemos evitar el tiempo de proceso necesario para crear la pgina
de nuevo.
En esta leccin, estudiaremos cmo configurar la cach de resultados para
minimizar los tiempos de respuesta de las pginas en una aplicacin Web.
En esta leccin, aprenderemos a:
Explicar porqu utilizar la cach de resultados.
Explicar los distintos tipos de cach de resultados.
Utilizar el almacenamiento en la cach de resultados de pginas.
Utilizar almacenamiento en la cach de resultados de fragmentos de
pginas.

Introduccin
Objetivos de la leccin
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 16


Multimedia: almacenamiento en cach de resultados

*****************************
En esta animacin, veremos cmo afecta la cach de resultados de pgina a los
tiempos de respuesta del servidor cuando se solicita un formulario Web Form
ASP.NET ms de una vez. Para iniciar la animacin abrir el fichero
media13.swf.
Introduccin
17 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


Tipos de cach de resultados
Almacenamiento en cach de pginas
Almacenamiento en cach de fragmentos de pginas
como controles de usuario
Almacenamiento en cach de servicios Web XML

*****************************
ASP.NET proporciona almacenamiento en cach de los resultados de pginas,
lo que permite almacenar formularios Web Forms completos y controles de
usuario en la memoria del servidor. Tras la primera peticin, no se ejecuta el
cdigo del formulario Web Form, del control de usuario o del servicio Web
XML; se utilizan los resultados de la cach para satisfacer la peticin.
ASP.NET crea una nica cach de resultados por cada servidor Web. Las
pginas y fragmentos de pgina que estn almacenados en la cach de
resultados son exclusivos del servidor Web y los dems servidores de una
granja de servidores Web no pueden acceder a ellos. Por tanto, el uso de la
cach de resultados para incrementar el rendimiento del servidor no es escalable
por encima del nivel de un nico servidor.
El almacenamiento en la cach de pginas permite almacenar contenido
dinmico en la cach. Cuando se solicita por primera vez un formulario Web
Form, la pgina se compila y se almacena en la cach de resultados, y est
disponible para la prxima peticin. Esta pgina en cach se elimina cuando el
archivo fuente se modifica o se alcanza el tiempo de expiracin de la cach.
En ocasiones, es poco viable almacenar en cach una pgina completa, pues es
posible que algunas partes de la pgina deban crearse dinmicamente para cada
peticin. En estas situaciones, puede resultar til identificar los objetos o datos
asociados a la peticin de pgina que no cambian con frecuencia y que, por
tanto, no requieren recursos significativos del servidor. Tras identificar estos
objetos o datos, podemos aislarlos del resto de la pgina crendolos como
controles de usuario y, a continuacin, almacenar en cach los controles de
usuario con la cach de resultados de la pgina.
Introduccin
Almacenamiento en
cach de pginas
Almacenamiento en
cach de fragmentos de
pginas como un
control de usuario
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 18


Un ejemplo de un fragmento de pgina que sera til almacenar en cach es un
encabezado de pgina que contiene grficos estticos, o un sistema de men en
una barra lateral.
Los servicios Web XML tambin soportan el almacenamiento en cach para
incrementar el rendimiento de sus respuestas. Agregamos la propiedad
CacheDuration al atributo WebMethod, y establecemos el valor en segundos
que los resultados del mtodo del servicio Web XML permanecern en la cach
de resultados.
Por ejemplo, el siguiente cdigo ubica los resultados del WebMethod
CachedInfo en la cach de resultados durante cinco minutos:
<WebMethod(CacheDuration:=300)> _
Public Function CachedInfo() As String
...
End Function

[WebMethod(CacheDuration=300)]
public string CachedInfo()
{
...
}

Crear una cach de resultados para una aplicacin debera ser la
ltima tarea en el desarrollo de una aplicacin Web. De lo contrario, cuando
depursemos las pginas, podramos obtener pginas obsoletas que estuviesen
almacenadas en la cach de resultados en lugar de obtener pginas nuevas y
modificadas.

Almacenamiento en
cach de servicios Web
XML
Visual Basic .NET
C#
Importante
19 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


Cmo utilizar la cach de resultados de pginas
El contenido de la cach se genera desde pginas
dinmicas
Toda la pgina Web est disponible en la cach
Establecer la duracin de la cach en segundos
Establecer la propiedad VaryByParampara controlar el
nmero de variaciones de pgina en la cach
<%@ OutputCache Duration="900"
VaryByParam="none" %>
<%@ OutputCache Duration="900"
VaryByParam="none" %>

*****************************
ASP.NET proporciona almacenamiento en la cach de los resultados de
pginas, lo que nos permite almacenar en la memoria del servidor los
formularios Web Forms solicitados. Tras la primera peticin, el cdigo del
formulario Web Form no se ejecuta, sino que se utilizan los resultados de la
cach para satisfacer la peticin.
Para cargar una pgina en la cach de resultados, debemos agregar la directiva
OutputCache al formulario Web Form. La directiva OutputCache incluye dos
propiedades: una propiedad Duration que establece en segundos el tiempo
mximo de almacenamiento en cach para la pgina, y una propiedad
VaryByParam que determina cundo crear una nueva copia de la pgina en la
cach, basndose en parmetros pasados a la pgina.
El almacenamiento en la cach de resultados permite satisfacer peticiones de
una determinada pgina desde la cach, de forma que no es necesario ejecutar el
cdigo creado inicialmente por la pgina en posteriores peticiones de la pgina.
El uso del almacenamiento en la cach de resultados para almacenar las pginas
del sitio Web accedidas con mayor frecuencia puede reducir considerablemente
el tiempo de respuesta de la pgina del servidor Web.
Podemos especificar el valor de tiempo de expiracin de la cach para una
pgina estableciendo la directiva de pginas OutputCache. Por ejemplo, para
almacenar en cach una pgina ASP.NET durante 15 minutos, agregar la
siguiente directiva de pginas OutputCache a la pgina .aspx:
Introduccin
Contenido de la cach
de pginas dinmicas
Toda la pgina Web est
disponible en cach
Establecer la duracin
de la cach
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 20


<%@ OutputCache Duration="900" VaryByParam="None"%>

La unidad de tiempo para la propiedad Duration es en segundos. El valor
predeterminado son 0 segundos, lo cual significa que la respuesta no est
almacenada en la cach.
La propiedad VaryByParam se utiliza para determinar si ASP.NET debera
crear distintas versiones de la pgina en cach en situaciones en las que las
peticiones de la pgina pasen parmetros especficos. Establecer la propiedad
VaryByParam en "none" significa que nicamente se almacenar en cach
una versin de la pgina. Establecer la propiedad en "*" significa que cualquier
variacin de los parmetros de la pgina generar una nueva versin de la
pgina almacenada en la cach. Identificar uno o ms parmetros significa que
nicamente los cambios a estos parmetros producirn nuevas pginas
almacenadas en la cach.
Por ejemplo, la siguiente directiva de un archivo .aspx establece un vencimiento
de 60 segundos para los resultados almacenados en la cach de cada pgina
generada dinmicamente y, por tanto, requiere la creacin de una nueva pgina
en la cach de resultados por cada nuevo productID:
<%@ OutputCache Duration="60" VaryByParam="productID"%>

Cuando utilizamos la directivaOutputCache, se requieren los
atributos Duration y VaryByParam. Si no incluimos estos atributos, se
produce un error del parseador cuando la pgina se solicita por primera vez. Si
no deseamos utilizar la funcionalidad que proporciona el atributo
VaryByParam, debemos establecer su valor en "none".

Establecer VaryByParam
Precaucin
21 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


Demostracin: cach de resultados de pginas
Mostrar cmo una pgina no almacenada
en la cach cambia con cada actualizacin
Mostrar cmo una pgina almacenada en
la cach no cambia con cada actualizacin
Mostrar cmo cambiar un parmetro puede
provocar que una nueva pgina se
almacene en la cach

*****************************
En esta demostracin, veremos cmo afecta a la experiencia del usuario el
almacenamiento en la cach de resultados de pginas. En primer lugar, veremos
una pgina ejecutando una funcin de reloj que no se almacena en la cach. A
continuacin, veremos la misma pgina con una duracin de 10 segundos de la
cach de resultados. Finalmente, veremos cmo cambiar la propiedad
VaryByParam controla el almacenamiento en cach de distintas versiones de
la pgina.
Todos los archivos para esta demostracin se encuentran en el proyecto
Demo13CS o Demo13VB que se pueden encontrar dentro del fichero
demos13.zip.
Ejecutar la demostracin
1. Abrir la pgina OutputCache.aspx en el proyecto Mod15 en Visual Studio
.NET.
2. Mostrar el cdigo que obtiene la hora y fecha actuales, y muestra el cdigo
en una etiqueta.
3. Generar y examinar la pgina.
4. Volver a cargar la pgina varias veces consecutivamente para mostrar que
los segundos cambian.
5. Agregar la siguiente directiva a la pgina, tras la lnea de cdigo que
contiene la directiva de pgina.
<%@ OutputCache Duration="10" VaryByParam="none"%>

6. Generar y examinar la pgina.
Introduccin
Mostrar cmo una
pgina no almacenada
en cach cambia con
cada actualizacin
Mostrar cmo una
pgina almacenada en
cach no cambia con
cada actualizacin
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 22


7. Volver a cargar la pgina varias veces de forma consecutiva para mostrar
que los segundos cambian nicamente tras un intervalo de 10 segundos.
8. Podemos agregar un parmetro ficticio ?Name=Someone para mostrar que
no afecta al almacenamiento en cach. La pgina se almacena en cach con
independencia del valor del parmetro.
9. Abrir la pgina OutputCacheVaryByParam.aspx.
10. Mostrar la directiva OutputCache con la propiedad VaryByParam.
11. Generar y examinar la pgina.
12. Al final de la URL, agregar el parmetro ?Name=Someone.
13. Mostrar el efecto en la cach de resultados cuando se cambie el valor del
parmetro ?Name=Someone por un parmetro ?Name=Someone2.

Mostrar cmo cambiar
un parmetro puede
hacer que una nueva
pgina se almacene en
cach
23 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


Cmo utilizar la cach de fragmentos de pginas
Convertir el fragmento de pgina en un control de
usuario
Establecer las propiedades Durationy varyByParam
<%@ OutputCache Duration="120"
VaryByParam="none" %>
<%@ OutputCache Duration="120"
VaryByParam="none" %>

*****************************
Para almacenar en cach slo partes de una pgina, debemos aislar esas partes
del resto de la pgina insertndolas en un control de usuario. A continuacin,
almacenaremos en cach el control de usuario durante el periodo de tiempo que
especifiquemos. A este proceso se denomina almacenamiento en la cach de
fragmentos.
El almacenamiento en la cach de fragmentos permite separar las partes de una
pgina (como consultas a bases de datos, que requieren un valioso tiempo de
procesador) del resto de la pgina. Con el almacenamiento en cach de
fragmentos, podemos hacer que nicamente se generen dinmicamente para
cada peticin las partes de la pgina que requieren menos recursos del servidor,
o las partes de una pgina que deben crearse con cada peticin.
Los elementos que son buenos candidatos para el almacenamiento en la cach
de fragmentos incluyen encabezados, pies y listas desplegables que son
utilizados por mltiples pginas.
Tras identificar las partes de la pgina que deseamos almacenar en cach,
debemos crear controles de usuario que encapsulen cada uno de estos
fragmentos.

Para ms informacin sobre la creacin de controles de usuario, consultar
el Mdulo Crear controles de usuario.

Las polticas de almacenamiento en la cach para los controles de usuario,
como la duracin y el nmero de variaciones almacenadas, se establecen del
mismo modo que las polticas del almacenamiento en la cach de resultados de
Introduccin
Convertir el fragmento
en un control de usuario
Nota
Establecer las
propiedades Duration y
VaryByParam
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 24


las pginas. Las polticas de almacenamiento en la cach se establecen de forma
declarativa, utilizando la directivaOutputCache.
Por ejemplo, si incluimos la siguiente directiva en la parte superior de un
control de usuario, una versin del mismo se almacena en la cach de resultados
durante dos minutos, y nicamente una versin se almacenar en la cach del
control de usuario:
<%@ OutputCache Duration="120" VaryByParam="none"%>

25 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


Leccin: configurar una aplicacin Web ASP.NET
Descripcin de los mtodos de configuracin
Configurar un servidor Web utilizando Machine.config
Configurar una aplicacin utilizando Web.config
Descripcin de la herencia de configuracin
Demostracin: herencia de configuracin
Prctica: determinar la herencia de configuracin
Almacenar y recuperar datos en Web.config
Uso de propiedades dinmicas
Demostracin: uso de propiedades dinmicas

*****************************
Antes de poder implementar nuestra aplicacin Web ASP.NET, debemos
organizar la configuracin de la aplicacin Web en los archivos Machine.config
y Web.config. En esta leccin, estudiaremos cmo configurar una aplicacin
Web con ASP.NET.
En esta leccin, aprenderemos a:
Explicar cmo configurar una aplicacin Web.
Configurar un servidor Web utilizando el archivo Machine.config.
Configurar una aplicacin utilizando archivos Web.config.
Explicar cmo los archivos Web.config heredan del archivo Machine.config
y de otros archivos Web.config.
Almacenar y recuperar datos utilizando archivos Web.config.
Utilizar propiedades dinmicas para almacenar valores de propiedades.

Introduccin
Objetivos de la leccin
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 26


Descripcin de los mtodos de configuracin
Archivo Machine.config
Configuracin a nivel de equipo
Archivos Web.config
Configuracin a nivel de aplicacin y directorio
Los archivos Machine.config y Web.configson:
XML con un formato correcto
Maysculas y minsculas Camel
Extensibles

*****************************
La informacin de configuracin para los recursos de ASP.NET est contenida
en una coleccin de archivos de configuracin. Cada archivo de configuracin
contiene una jerarqua anidada de etiquetas y sub-etiquetas XML con atributos
que especifican las opciones de configuracin.
La infraestructura de configuracin de ASP.NET no hace ninguna suposicin
sobre los tipos de datos de configuracin que soporta la infraestructura.
La configuracin a nivel de equipo se almacena en el archivo Machine.config.
Slo hay un archivo Machine.config en cada servidor Web. Por tanto, el
archivo Machine.config puede ser utilizado para almacenar las opciones de
configuracin aplicables a todas las aplicaciones Web ASP.NET que residen en
ese servidor Web.
Las opciones a nivel de aplicacin y directorio se almacenan en archivos
Web.config. Cada aplicacin Web tiene al menos un archivo Web.config. Los
directorios virtuales pueden tener sus propios archivos Web.config que
contienen las opciones de configuracin especficas de ese directorio.
Debido a que las etiquetas de los archivos Machine.config y Web.config deben
estar formateadas en XML con un formato correcto, las etiquetas, sub-etiquetas
y atributos son sensibles a maysculas. Los nombres de las etiquetas y los
nombres de los atributos utilizan la combinacin de maysculas y minsculas
Camel, es decir, la primera letra de un nombre de etiqueta es minscula y la
primera letra de cada palabra subsiguiente concatenada es mayscula. Toda la
informacin de configuracin de un archivo .config se incluye entre las
etiquetas XML raz <configuration> y </configuration>.
Introduccin
Machine.config
Web.config
Atributos del archivo
.config
27 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


Configurar un servidor Web utilizando Machine.config
Las opciones de configuracin en el archivo
Machine.config afectan a todas las aplicaciones Web
del servidor
Un nico archivo Machine.config por servidor Web
La mayora de opciones de configuracin pueden
sobrecargarse a nivel de aplicacin utilizando archivos
Web.config

*****************************
El archivo de configuracin del equipo, Machine.config, contiene las opciones
de configuracin aplicables a todo el equipo. Cada servidor Web dispone de un
nico archivo Machine.config.
El archivo Machine.config est ubicado en el siguiente directorio, siendo
version la versin del .NET Framework instalada en el servidor Web:
C:\Windows\Microsoft .NET \Framework\version\CONFIG\Machine.config
Las opciones de configuracin del archivo Machine.config afectan a todas las
aplicaciones Web ubicadas en el servidor. El sistema de configuracin busca
primero en el archivo Machine.config el elemento <appSettings>, y busca las
principales configuraciones locales en los archivos Web.config de la aplicacin.
Ubicar la configuracin de la aplicacin Web en el archivo Machine.config
tiene ventajas e inconvenientes:
Ventajas del archivo Machine.config
Ubicar las opciones de configuracin en el archivo Machine.config puede
facilitar el mantenimiento de nuestro sistema, ya que nicamente tendr un
archivo de configuracin que buscar, editar y mantener.
Inconvenientes del archivo Machine.config
Cuando implementamos una aplicacin Web en un nuevo servidor, la
configuracin de la aplicacin Web que se encuentra en el archivo
Machine.config no se copiar al nuevo servidor Web.

Introduccin
Las opciones de
configuracin afectan a
todas las aplicaciones
Web
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 28


Configurar una aplicacin utilizando Web.config
Uno o ms archivos Web.config por aplicacin Web
Los archivos Web.configcontienen toda la informacin
de configuracin de la aplicacin
Contienen una seccin por cada categora principal de
funcionalidadASP.NET
Seguridad
Modo
Configuracin general de la aplicacin
Seguimiento

*****************************
En ASP.NET, podemos compartir la informacin y las opciones de
configuracin entre pginas Web almacenando la configuracin de la aplicacin
Web en una ubicacin central denominada archivo Web.config. Tambin
podemos almacenar informacin local y las opciones de configuracin en
directorios virtuales creando archivos Web.config locales adicionales.
La carpeta raz de la aplicacin Web siempre contiene un nico archivo
Web.config. Puede haber archivos Web.config adicionales ubicados en la
carpeta del directorio virtual al que pertenecen.
La presencia de un archivo Web.config en un determinado directorio es
opcional. Si un archivo Web.config no est presente, todas las opciones de
configuracin del directorio se heredan automticamente del directorio
primario, el archivo Web.config.
En un archivo Web.config, hay secciones para cada categora principal de
funcionalidad ASP.NET, como muestra la siguiente tabla.
Nombre de seccin Descripcin

<browserCaps> Responsable de controlar las opciones de configuracin del
componente de capacidades del explorador.
<compilation> Responsable de todas las opciones de compilacin que utiliza
ASP.NET.
<globalization> Responsable de configurar las opciones de globalizacin de una
aplicacin.
Introduccin
Uno o ms archivos
Web.config por
aplicacin Web
Contiene una seccin
para cada categora
principal de
funcionalidad ASP.NET
29 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


(continuacin)
Nombre de seccin Descripcin

<httpModules> Responsable de configurar los mdulos Hypertext Transfer
Protocol (HTTP) en una aplicacin. Los mdulos HTTP
participan en el procesamiento de cada peticin a una aplicacin.
Los usos habituales incluyen seguridad y registro.
<httpHandlers> Responsable de mapear URLs entrantes a clases IHttpHandler.
Los subdirectorios no heredan estas opciones.
<processModel> Responsable de configurar las opciones del modelo de proceso
ASP.NET en servidores Web Internet Informacin Services
(IIS).
<authentication>
<identity>
<authorization>
Responsable de todas las opciones de seguridad que utiliza el
mdulo httpModule de seguridad ASP.NET.
<sessionState> Responsable de configurar el estado de sesin httpModule.
<trace> Responsable de configurar el servicio de seguimiento de
ASP.NET.

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 30


Descripcin de la herencia de configuracin
El archivo Web.configa
nivel deaplicacin
hereda las opciones del
archivo Machine.config
Las opciones en el
archivo Web.configque
estn en conflicto anulan
las opciones heredadas
Directorios individuales
pueden tener archivos
Web.configqueheredan
de(y pueden anular) las
opciones a nivel de
aplicacin
Machine.config
Web.config
Web.config
CONFIG
CONFIG
VirtualDir
VirtualDir
SubDir
SubDir

*****************************
Cuando un servidor Web recibe una peticin para un determinado recurso Web,
ASP.NET determina las opciones de configuracin de ese recurso
jerrquicamente. ASP.NET utiliza todos los archivos de configuracin ubicados
en la ruta del directorio virtual para el recurso solicitado. La opcin de
configuracin de nivel ms bajo puede sobrecargar las opciones que
proporcionan los archivos de configuracin del directorio primario.
Las reglas de herencia para los archivos de configuracin son las siguientes:
Los archivos Web.config a nivel de aplicacin heredan las opciones del
archivo Machine.config.
Las opciones que crean conflicto en un archivo Web.config secundario
sobrecargan las opciones heredadas.
Directorios individuales pueden tener archivos Web.config que heredan de,
y pueden sobrecargar, las opciones del archivo Web.config a nivel de
aplicacin.

El archivo de nivel superior se denomina Machine.config. Las opciones en este
archivo se aplican a todos los directorios y subdirectorios de ASP.NET.
Machine.config se instala con el .NET Framework, y contiene numerosas
opciones ASP.NET predeterminadas.
Por ejemplo, la opcin predeterminada de la seccin de configuracin de
seguridad del archivo Machine.config permite que todos los usuarios accedan a
todos los recursos de URLs. Por tanto, todas las aplicaciones Web permiten el
acceso a todos los recursos URLs a menos que la opcin se sobrecargue en
Web.config.
Introduccin
Machine.config
31 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


Los archivos de configuracin Web.config contienen informacin de
configuracin adicional para una aplicacin Web ASP.NET. Estos archivos
estn ubicados en los mismos directorios que los archivos de la aplicacin. Los
directorios secundarios heredan las opciones de los directorios primarios, salvo
cuando las opciones del directorio primario han sido sobrecargadas por un
archivo Web.config en el directorio secundario.
Por ejemplo, si el archivo Web.config en el directorio raz (VirtualDir) de una
aplicacin Web contiene una seccin de configuracin de seguridad que
permite el acceso nicamente a determinados usuarios, el subdirectorio SubDir
hereda esa opcin de seguridad. Por tanto, todos los usuarios tienen acceso a los
recursos ASP.NET del directorio raz de la aplicacin, VirtualDir, pero slo
determinados usuarios tienen acceso a los recursos ASP.NET de SubDir.
Los archivos Web.config de la aplicacin en VirtualDir y el subdirectorio
SubDir se encuentran en:
C:\Inetpub\wwwroot\VirtualDir\Web.config
C:\Inetpub\wwwroot\VirtualDir\SubDir\Web.config
Web.config
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 32


Demostracin: herencia de configuracin
Crear una subcarpeta que contenga un
archivo Web.config
Mostrar las diferencias entre el archivo
Web.configprincipal y el archivo
Web.configde la subcarpeta
Mostrar cmo el formulario Web Formlee
informacin de los archivos Web.config
Eliminar el archivo Web.configde la
subcarpeta y actualizar el formulario Web
Form

*****************************
En esta demostracin, veremos cmo un segundo archivo Web.config que se
encuentra en un subdirectorio hereda las opciones de configuracin de un
archivo Web.config primario.
Todos los archivos para esta demostracin se encuentran en el proyecto
Demo13CS o Demo13VB que se pueden encontrar dentro del fichero
demos13.zip.
Ejecutar la demostracin
1. En Visual Studio .NET, mostrar el cdigo del archivo Web.config y
GetConfigMainFolder.aspx en la carpeta principal.
Observar el valor almacenado en el archivo Web.config.
2. Mostrar el cdigo del archivo Web.config y GetConfigSubFolder.aspx en la
carpeta SubFolder.
Observar que el valor almacenado en el archivo Web.config es distinto.
3. Generar y examinar la pgina GetConfigMainFolder.aspx, y resaltar el valor
que ha sido recuperado del archivo Web.config.
4. Hacer clic en Siguiente para abrir la pgina GetConfigSubFolder.aspx que
se encuentra en la carpeta SubFolder y destacar el hecho de que el valor
aqu es distinto.
5. En la carpeta SubFolder, cambiar el nombre del archivo Web.config por
oldWeb.config.
6. Generar y examinar la pgina GetConfigMainFolder.aspx, y destacar el
valor que ha sido recuperado del archivo Web.config.
Introduccin
Crear una subcarpeta
que contenga
Web.config
Mostrar las diferencias
entre el Web.config
principal y el Web.config
de la subcarpeta
Eliminar Web.config de
la subcarpeta y
actualizar el formulario
Web Form
33 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


7. Hacer clic en Siguiente para abrir la pgina GetConfigSubFolder.aspx en la
carpeta SubFolder, y observar que el valor es el mismo que el valor del
archivo Web.config del directorio principal.

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 34


Prctica: determinar la herencia de configuracin
Los estudiantes:
Determinar las opciones de configuracin
de una aplicacin Web basndonosen
distintas variables
Tiempo: 5Minutos

*****************************
En esta prctica, examinaremos un archivo Machine.config y dos archivos
Web.config para determinar las opciones de configuracin del servidor Web, la
aplicacin Web y el subdirectorio de la aplicacin Web.
Examinar el siguiente cdigo del archivo Machine.config. A continuacin,
responder las preguntas a continuacin.
Introduccin
35 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


<configuration>
<appSettings>
<add key="Default XML File Name"
value="Default.xml" />
<add key="Default Text File Name"
value="Default.txt" />
</appSettings>
<authentication mode="Windows">
<forms name=".ASPXAUTH"
loginUrl="login.aspx"
protection="All"
timeout="30"
path="/">
</forms>
</authentication>
<system.web>
<trace
enabled="false"
localOnly="true"
pageOutput="false"
requestLimit="10"
traceMode="SortByTime"
/>
</system.web>
</configuration>

A este nivel, cul es la opcin de configuracin para el mecanismo de
autenticacin?
____________________________________________________________
____________________________________________________________
Existe una opcin de configuracin para una cadena de conexin? Si es as,
cul es?
____________________________________________________________
____________________________________________________________
Hay otras opciones de configuracin de aplicacin? Si es as, qu valores
tienen?
____________________________________________________________
____________________________________________________________
Existen una opcin de configuracin que permita el seguimiento de la
aplicacin Web? Si es as, es posible hacer el seguimiento desde un equipo
externo?
____________________________________________________________
____________________________________________________________

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 36


Examinar el cdigo siguiente de un archivo Web.config ubicado en la raz del
directorio virtual de la aplicacin Web. A continuacin, responder a las
preguntas siguientes. Considerar el cdigo del ejemplo anterior al responder a
las preguntas.
<configuration>
<appSettings>
<add key="northwind"
value="data source=localhost;
initial catalog=northwind;
integrated security=true;" />
</appSettings>
<system.web>
<trace
enabled="true"
localOnly="true"
pageOutput="false"
requestLimit="30"
traceMode="SortByCategory"
/>
</system.web>
</configuration>

A este nivel, qu es el mecanismo de autenticacin?
_____________________________________________________________
_____________________________________________________________
Existe una cadena de conexin? Si es as, qu es?
_____________________________________________________________
_____________________________________________________________
Hay otras opciones de aplicacin? Si es as, qu valores tienen?
_____________________________________________________________
_____________________________________________________________
Est habilitado el seguimiento para la aplicacin Web? Si es as, es
posible realizar el seguimiento desde un equipo externo?
_____________________________________________________________
_____________________________________________________________
37 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


Examinar el siguiente cdigo de un archivo Web.config ubicado en una
subcarpeta de la aplicacin Web. A continuacin, responder las preguntas.
Considerar el cdigo de ejemplo anterior al responder.
<configuration>
<appSettings>
<add key="Northwind"
value="data source=SQLServ01;
initial catalog=northwind;
integrated security=true;" />
</appSettings>
<authentication mode="Forms">
<forms name=".ASPXAUTH"
loginUrl="loginPage.aspx"
timeout="30"
path="/">

</forms>
</authentication>
<system.web>
<trace
enabled="true"
localOnly="false"
pageOutput="false"
requestLimit="40"
traceMode="SortByTime"
/>
</system.web>
</configuration>

A este nivel, cul es el mecanismo de autenticacin?
____________________________________________________________
____________________________________________________________
Existe una cadena de conexin? Si es as, cul es?
____________________________________________________________
____________________________________________________________
Hay otras opciones de aplicacin? Si es as, qu valores tienen?
____________________________________________________________
____________________________________________________________
Est habilitado el seguimiento para la aplicacin Web? Si es as, es
posible realizar el seguimiento desde un equipo externo?
____________________________________________________________
____________________________________________________________

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 38


Almacenar y recuperar datos en Web.config
Almacenar la configuracin de la aplicacin en un
archivo Web.config
Recuperar la configuracin de la aplicacin de un
archivo Web.config
<configuration>
<appSettings>
<add key="pubs" value="server=localhost;
integrated security=true; database=pubs"/>
</appSettings>
</configuration>
<configuration>
<appSettings>
<add key="pubs" value="server=localhost;
integrated security=true; database=pubs"/>
</appSettings>
</configuration>
Dim strPubs As String = _
ConfigurationSettings.AppSettings("pubs")
Dim strPubs As String = _
ConfigurationSettings.AppSettings("pubs")
AppSettingsReader App = new AppSettingsReader();
string strPubs = (string)App.GetValue("pubs",
typeof(string));
AppSettingsReader App = new AppSettingsReader();
string strPubs = (string)App.GetValue("pubs",
typeof(string));

*****************************
Podemos utilizar la seccin <appSettings> del archivo Web.config como
repositorio de las opciones de configuracin de la aplicacin. En la seccin
<appSettings>, podemos crear pares clave-valor para los datos que se utilicen
habitualmente en nuestra aplicacin Web. La creacin de pares clave-valor para
los datos resulta muy til, pues nos permite definir todos los datos de
configuracin de la aplicacin en una ubicacin central. Por ejemplo, podemos
almacenar una cadena de conexin a una base de datos para una aplicacin en
una ubicacin centralizada, en lugar de ubicarla en cada pgina ASP.NET.
Para almacenar las opciones de configuracin de la aplicacin, introducimos un
par clave-valor para la informacin que deseamos almacenar. El siguiente
archivo Web.config crea dos pares clave-valor para las cadenas de conexin de
las bases de datos utilizadas en una aplicacin Web:
configuration>
<appSettings>
<add key="pubs"
value="data source=localhost;
initial catalog=pubs;
integrated security=SSPI" />
<add key="northwind"
value="data source=localhost;
initial catalog=northwind;
integrated security=SSPI" />
</appSettings>
</configuration>

Introduccin
Almacenar las opciones
de configuracin de la
aplicacin en
Web.config
39 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


Para recuperar las opciones de configuracin de la aplicacin de los archivos
Web.config, se utiliza la coleccin de cadenas estticas
ConfigurationSettings.AppSettings.
Por ejemplo, el siguiente cdigo de ejemplo lee el valor de la clave pubs en la
seccin <appSettings>:
Dim strPubs As String = _
ConfigurationSettings.AppSettings("pubs")

string strPubs = System.Configuration.
ConfigurationSettings.AppSettings["pubs"];

Recuperar las opciones
de configuracin de la
aplicacin de
Web.config
Visual Basic .NET
C#
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 40


Uso de propiedades dinmicas
Almacenar los valores
de las propiedades en
archivos Web.configen
lugar de almacenarlos en
el cdigo compilado de
la aplicacin
Permite actualizaciones
sencillas sin recompilar
la aplicacin
Habilitar y configurar las
propiedades en el objeto

*****************************
Las propiedades dinmicas permiten configurar la aplicacin de forma que los
valores de sus propiedades se almacenen en un archivo de configuracin
externo, por ejemplo Web.config, en lugar de almacenarse en el cdigo
compilado de la aplicacin. Almacenar en un archivo de configuracin externo
puede reducir el coste total de mantenimiento de una aplicacin, una vez que
haya sido implementada, al proporcionar a los administradores los medios para
actualizar valores de propiedades que pueden cambiar con el tiempo.
Aunque las propiedades de la mayora de componentes y controles de una
aplicacin Web pueden gestionarse dinmicamente, este tipo de gestin es ms
conveniente para algunas propiedades que para otras. Por ejemplo,
probablemente utilizaremos propiedades dinmicas para almacenar y recuperar
las propiedades que estn conectadas a recursos externos que podran cambiar,
como bases de datos.
Por ejemplo, supongamos que estamos generando una aplicacin Web que
utiliza una base de datos de prueba durante el proceso de desarrollo y debemos
trasladar la aplicacin Web a una base de datos en produccin cuando la
implementemos. Si almacenamos los valores de las propiedades en la
aplicacin Web, deberemos cambiar manualmente toda la configuracin de la
base de datos para poder implementar la base de datos, y deberemos recompilar
el cdigo fuente. Si almacenamos los valores de estas propiedades
externamente, podremos realizar un solo cambio en el archivo externo y la
aplicacin Web utilizar los nuevos valores la prxima vez que se ejecute.
Configuramos un objeto para utilizar propiedades dinmicas en la ventana
Propiedades del objeto en Visual Studio .NET. Seleccionar la casilla de
verificacin DynamicProperties en la seccin de configuracin de la ventana
Propiedades, y establecer la propiedad en una clave en Web.config.
Introduccin
Almacenar los valores
de las propiedades en
Web.config
Permite actualizaciones
sencillas
Habilitar y configurar las
propiedades del objeto
41 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


Demostracin: uso de propiedades dinmicas
Configurar un objeto SqlConnection para
utilizar propiedades dinmicas
Mostrar el cdigo que acaba de
generarse en la pgina de cdigo
subyacente
Abrir el archivo Web.configy mostrar la
clave SqlConnection1.ConnectionString
en la seccin appSettings

*****************************
En esta demostracin, veremos cmo habilitar y configurar un objeto
SqlConnection para utilizar propiedades dinmicas.
Todos los archivos para esta demostracin se encuentran en el proyecto
Demo13CS o Demo13VB que se pueden encontrar dentro del fichero
demos13.zip.
Ejecutar la demostracin
1. Abrir la pgina DataAccess.aspx del proyecto Mod15VB o Mod15CS en
Visual Studio .NET.
2. Seleccionar el objeto SqlConnection y visualizar la ventanaPropiedades.
3. Expandir la propiedad DynamicProperties.
Observar que la propiedad ConnectionString puede ser una propiedad
dinmica.
4. Seleccionar la propiedad ConnectionString y hacer clic en el botn ....
5. En el cuadro de dilogo Propiedad dinmica, convertir la propiedad en una
propiedad dinmica con el nombre de clave predeterminado seleccionando
Asignar la propiedad a una clave en el archivo de configuracin, y hacer
clic en Aceptar.
6. En la ventana Propiedades, observar el glifo azul junto a la propiedad
<original> ConnectionString del objeto SqlConnection. El glifo indica
que es una propiedad dinmica.
Introduccin
Configurar un objeto
SqlConnection para
utilizar propiedades
dinmicas
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 42


7. Visualizar el cdigo que acaba de generarse en la pgina de cdigo
subyacente y buscar la lnea de cdigo que establece la propiedad
ConnectionString del objeto SqlConnection:
Me.SqlConnection1.ConnectionString = _
CType(configurationAppSettings.GetValue _
("SqlConnection1.ConnectionString", _
GetType(System.String)), String)

this.SqlConnection1.ConnectionString =
((string)(configurationAppSettings.GetValue("SqlConnection1
.ConnectionString", typeof(string))));

8. Abrir el archivo Web.config y buscar la clave
SqlConnection1.ConnectionString en la seccin appSettings.

Mostrar el cdigo que se
ha generado
Visual Basic .NET
C#
Mostrar la clave
SqlConnection1.
ConnectionString
43 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


Leccin: implementar una aplicacin Web ASP.NET
Implementar una aplicacin Web
Preparar una aplicacin Web para su implementacin
Prctica: seleccionar los archivos necesarios
Compartir ensamblados en la cachde ensamblados
global
Actualizar la aplicacin Web

*****************************
Despus de haber configurado los objetos Cache y la cach de resultados, y de
haber organizado las opciones de configuracin de la aplicacin Web entre los
archivos Machine.config y Web.config, estamos preparados para implementar
la aplicacin Web ASP.NET.
En esta leccin, estudiaremos cmo seleccionar los archivos necesarios para
ejecutar la aplicacin Web y utilizaremos XCOPY o FTP (file transfer
protocol) para copiar estos archivos en el directorio de produccin.
En esta leccin, aprenderemos a:
Implementar una aplicacin Web.
Preparar la aplicacin Web para su implementacin seleccionando
nicamente los archivos necesarios para ejecutar la aplicacin Web.
Compartir los ensamblados en la Cach de Ensamblados Global (Global
Assembly Cache, GAC).
Actualizar una aplicacin Web ASP.NET.

Introduccin
Objetivos de la leccin
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 44


Implementar una aplicacin Web
Copiar archivos localmente o archivos FTP
remotamente
Configurar la carpeta de destino como un directorio
virtual en IIS
Copiar todos los archivos necesarios, incluyendo el
directorio \biny su contenido
No es necesario registrar componentes

*****************************
Para implementar una aplicacin Web ASP.NET en un directorio o servidor en
produccin, debemos copiar todos los archivos necesarios en la ubicacin
adecuada. Normalmente, este proceso de copia se realiza utilizando Windows
Explorer para las copias locales, o FTP para implementaciones remotas. Este
tipo de copia a menudo se denomina implementacin XCOPY, por la utilidad
XCOPY de Microsoft MS-DOS, y copia todos los archivos y carpetas de un
directorio.
Antes de poder implementar una aplicacin Web en un directorio en
produccin, la carpeta en la que se implementar la aplicacin Web debe
configurarse como un directorio virtual en IIS.
Configurar una carpeta como un directorio virtual en IIS
1. En el men Inicio, hacer clic con el botn derecho en Mi PC y clic en
Administrar.
2. Expandir Servicios y aplicaciones, y expandir Internet Information
Services.
3. En el panel izquierdo de la consola IIS, ir a la carpeta que se desea convertir
en un directorio de aplicaciones Web.
4. Hacer clic con el botn derecho en la carpeta y clic en Propiedades.
5. En la ficha Directorio, en la seccin de configuracin de la aplicacin,
hacer clic en Crear.
6. Hacer clic en Aceptar.

Introduccin
Configurar la carpeta de
destino como un
directorio virtual en IIS
45 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


Para ejecutar la aplicacin Web en el directorio de produccin, nicamente se
necesita un subconjunto de los archivos requeridos para generar una aplicacin
Web. El paso final antes de copiar la aplicacin Web sera generar la aplicacin
Web y eliminar todos los archivos innecesarios.
Como las aplicaciones que se ejecutan bajo el CLR son autodescriptivas y no
requieren entradas de registro, no necesitamos registrar componentes antes o
despus de copiar archivos. La aplicacin Web est preparada para aceptar
peticiones despus de ser copiada a una carpeta que se ha configurado en IIS
como un directorio de aplicacin Web.
Copiar todos los
archivos necesarios
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 46


Preparar una aplicacin Web para su implementacin
1. Generar la aplicacin Web
2. No seleccionar archivos innecesarios
Archivos de solucin de Visual Studio .NET (.vbproj,
.vbproj.webinfo, .csproj, .csproj.webinfo, etc.)
Archivos de recursos (.resx)
Pginas de cdigo subyacente (.vb, .cs)
3. Copiar o FTP archivos necesarios en el directorio de
produccin

*****************************
Hay tres pasos importantes que son necesarios para trasladar la aplicacin Web
desde el entorno de desarrollo a un directorio o servidor en produccin:
1. Generar la aplicacin Web.
2. Eliminar todos los archivos innecesarios de la aplicacin Web.
3. Copiar los archivos en el entorno de produccin.

El primer paso es generar, o compilar, la aplicacin Web. Esta compilacin
crea un archivo DLL (dynamic-link library) en el directorio \bin que contiene
todo el cdigo de la aplicacin Web. Se crea un archivo NombreAplicacin.dll
por cada aplicacin Web; este archivo contiene el cdigo de todos los recursos
y archivos de cdigo subyacente.
El segundo paso en la implementacin de una aplicacin Web es seleccionar
nicamente los archivos necesarios del directorio que contiene la aplicacin
Web. Al no copiar archivos innecesarios, se incrementa la seguridad del
entorno de produccin limitando la exposicin de cdigo no compilado.
Introduccin
Generar la aplicacin
No seleccionar archivos
innecesarios
47 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


Los archivos que no son necesarios en el directorio de produccin son:
Archivos de solucin de Visual Studio .NET (.vbproj, .vbproj.webinfo,
.csproj, etc.)
Visual Studio .NET necesita estos archivos nicamente para desarrollar la
aplicacin Web y no son necesarios para ejecutar la aplicacin Web en
produccin.
Archivos de recursos (.resx)
Estos archivos estn compilados en el archivo DLL.
Pginas de cdigo subyacente (.vb, .cs)
Estos archivos estn compilados en el archivo DLL.

Si se utiliza la compilacin dinmica en la aplicacin Web, deben
copiarse las pginas de cdigo subyacente. La compilacin dinmica se
habilita utilizando el atributo src en la directiva@ Page.


Los archivos necesarios en el servidor de produccin incluyen:
El directorio \bin y los archivos DLL que incluye.
Estos archivos son los archivos de recursos compilados y las pginas de
cdigo subyacente.
Todos los archivos de formularios Web Forms, controles de usuario y
servicios XML Web (.aspx, .ascx, .asmx).
stos son los archivos de la interfaz de usuario y de la aplicacin.
Archivos de configuracin, incluyendo Web.config y global.asax.
Si se han modificado las opciones de configuracin en el archivo
Machine.config en el equipo de desarrollo, deben realizarse los mismos
cambios en el archivo Machine.config en el servidor de produccin.
Los archivos de soporte adicionales que existan en el directorio (como
archivos XML).

Una vez compilada la aplicacin Web y eliminados todos los archivos
innecesarios, debemos utilizar FTP o copiar en el directorio de produccin
nicamente los archivos restantes de la aplicacin Web del directorio de
desarrollo.
Nota
Archivos necesarios
Copiar o utilizar FTP
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 48


Prctica: seleccionar los archivos necesarios
Los estudiantes:
Seleccionarn los archivos necesarios
para una implementacin
Tiempo: 5Minutos

*****************************
En esta prctica, seleccionaremos los archivos necesarios que debemos copiar
en el directorio de produccin.
Archivo Visual Basic
.NET
Archivo Microsoft Visual
C#


Conservar Eliminar

.vbproj .csproj
.vbproj.webinfo .csproj.webinfo
.resx .resx
.dll .dll
.aspx .aspx
directorio \bin y contenido directorio \bin y contenido
.aspx.vb .aspx.cs
.csproj .vbproj
Global.asax Global.asax
.exe .exe
.ascx .ascx
.xml .xml
Web.config Web.config



49 Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET


Compartir ensamblados en la cach de ensamblados global
La cach de ensamblados global proporciona el
almacenamiento para los ensamblados que deben
compartirse
Cach para cdigo a nivel de equipo
Los archivos DLL no estn registrados, por ello, no se
comparten fcilmente entre aplicaciones Web

*****************************
Los equipos que tengan instalado el .NET Framework tambin tienen una cach
de cdigo a nivel de equipo denominada Cach de Ensamblados Global (Global
Assembly Cache - GAC). Despus de implementar nuestra aplicacin Web en
un servidor Web en produccin, podemos utilizar la GAC para compartir
cdigo entre las aplicaciones Web en el servidor Web.
Aunque el objeto Cache de ASP.NET se utiliza para el almacenamiento de
informacin a corto plazo de una aplicacin Web, la GAC puede utilizarse para
compartir cdigo en todo el servidor Web. La GAC almacena ensamblados
diseados especficamente para ser compartidos por varias aplicaciones Web en
un servidor. Un ensamblado es una coleccin de recursos en un nico archivo
(por ejemplo, un archivo dll).
Existen varios motivos para instalar un ensamblado en la GAC, incluyendo:
Ubicacin compartida
Los ensamblados utilizados por mltiples aplicaciones pueden incluirse en
la GAC.
Seguridad de archivos
La GAC se encuentra en el directorio WINNT, que normalmente tiene
restricciones de acceso a su contenido.
Versionado lado a lado
Mltiples copias de ensamblados con el mismo nombre, pero con diferente
informacin de versin, pueden mantenerse en la GAC.

Introduccin
Almacenamiento para
ensamblados que deben
compartirse
Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET 50


Actualizar la aplicacin Web
Copiar o FTP archivos para actualizar la aplicacin
Web
No es necesario detener y volver a iniciar IIS
Los archivos .dll pueden actualizarse mientras el sitio
sigue ejecutndose
La cachde resultadosprotege a los usuarios
existentes

*****************************
Una vez que nuestra aplicacin Web se est ejecutando en un directorio en
produccin, podemos actualizar la aplicacin Web en cualquier momento sin
necesidad de volver a iniciar el servidor, IIS o la aplicacin Web.
Con ASP.NET, cuando tenemos una nueva versin de la aplicacin Web,
nicamente necesitamos copiar los nuevos archivos en el directorio,
sobrescribiendo los archivos existentes. Cuando el siguiente usuario se conecta
a nuestra aplicacin Web, recibe los archivos ms actualizados. A diferencia de
versiones anteriores de Active Server Pages (ASP), actualizar un sitio Web
ASP.NET no requiere que detengamos y volvamos a iniciar IIS.
Si deshabilitamos el almacenamiento en cach de resultados de pginas para los
formularios Web Forms, los usuarios seguirn recibiendo las versiones antiguas
de las pginas hasta que venza la cach. Cuando expiren las pginas en cach,
los usuarios recibirn una versin actualizada de esa pgina.

Introduccin
Copiar o FTP archivos
La cach de resultados
protege a los usuarios
existentes


Prctica A: Configurar, optimizar e implementar una
aplicacin Web con Microsoft ASP.NET
Medical
Medical.aspx
Medical
Medical.aspx
Benefits
Home Page
Default.aspx
Benefits
Home Page
Default.aspx
Life Insurance
Life.aspx
Life Insurance
Life.aspx
Retirement
Retirement.aspx
Retirement
Retirement.aspx
Dental
Dental.aspx
Dental
Dental.aspx
Dentists
Doctors
Doctors.aspx
Doctors
Doctors.aspx
Doctors
Logon Page
Login.aspx
Logon Page
Login.aspx
Registration
Register.aspx
Registration
Register.aspx
Coho
Winery
Prospectus
Prospectus.aspx
Prospectus
Prospectus.aspx
XML Web
Service
dentalService1.asmx
XML Web
Service
dentalService1.asmx
Page Header
Header.ascx
Page Header
Header.ascx
ASPState
tempdb
LabWeb
Application
User Control
namedate.ascx
User Control
namedate.ascx
Menu
Component
Class1.vb or Class1.cs
Menu
Component
Class1.vb or Class1.cs
XML
Files
Web.
config

*****************************
En este laboratorio, aprenderemos a:
Utilizar el objeto Cache para almacenar en cach un DataSet.
Utilizar propiedades dinmicas.
Utilizar la cach de resultados de pgina para almacenar en la cach un
formulario Web Form y un control de usuario.
Utilizar la propiedad VaryByParam para manipular la cach de pginas.
Implementar una aplicacin Web Microsoft ASP.NET en un servidor
remoto.

Este laboratorio se centra en los conceptos de este mdulo. Por ello,
podra no cumplir las recomendaciones de seguridad de Microsoft.

Para trabajar en este laboratorio, es necesario tener:
Conocimientos sobre cmo utilizar el objeto Cache.
Conocimientos sobre cmo funciona la cach de resultados de pgina.
Conocimientos sobre el uso de Internet Information Services (IIS).

Objetivos
Nota
Requisitos previos
Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios de
este curso, crearemos un sitio Web que permita a los empleados seleccionar y
configurar los beneficios que elijan.
En este laboratorio,
Utilizaremos el objeto Cache para almacenar en cach un DataSet.
Utilizaremos la cach de resultados para almacenar en cach un formulario
Web Form y un control de usuario.
Utilizaremos propiedades dinmicas para almacenar la URL (Uniform
Resource Locator) de un servicio Web XML.
Implementar el sitio Web LabApplication en un servidor remoto.

Escenario
Tiempo estimado para
completar el laboratorio:
90 minutos


Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList.
Estos proyectos pueden haberse creado utilizando Visual Basic .NET o
Microsoft Visual C#

.NET.
Si no se han creado estos proyectos, realizar los siguientes pasos:
Crear la solucin LabApplication

Realizar este procedimiento nicamente si no se ha creado un
archivo de solucin LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solucin en blanco
denominada LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Solucin en
blanco.
b. En el cuadro de dilogo Nuevo proyecto, escribir LabApplication en el
cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto Benefits, o si se ha eliminado.

1. Crear un nuevo proyecto de aplicacin Web ASP.NET, denominado
BenefitsVB o BenefitsCS, en la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic o Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Aplicacin Web ASP.NET,
establecer la ubicacin en http://localhost/BenefitsVB para el proyecto
Visual Basic .NET o en http://localhost/BenefitsCS para el proyecto
Visual C#.
d. Hacer clic en Agregar a Solucin, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solucin, es importante el
uso de maysculas en el nombre del proyecto. Probablemente, utilizaremos
algunos formularios Web Forms ya generados en ste y en otros
laboratorios, por ello, debemos verificar que hemos escrito con maysculas
el nombre del proyecto Benefits.


Importante
Importante
Precaucin
Actualizar el proyecto Benefits
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente.
3. Buscar los archivos de proyecto:
Ir a la carpeta VB\Starter\BenefitsVB.

Ir a la carpeta CS\Starter\BenefitsCS.
Estas carpetas pueden encontrarse dentro del fichero labs13.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente Benefits, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de sobrescribir o recargar los archivos.

Crear la biblioteca de clases BenefitsList

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto BenefitsList, o si se ha eliminado.

1. Crear un nuevo proyecto de biblioteca de clases.
Crear un nuevo proyecto de biblioteca de clases Visual Basic .NET con el
nombre BenefitsListVB, y agregarlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual Basic.
c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListVB.
d. Hacer clic en Agregar a solucin, y clic en Aceptar.
Crear un nuevo proyecto de biblioteca de clases Visual C#.NET con el
nombre BenefitsListCS, y agregarlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListCS.
a. Hacer clic en Agregar a solucin, y clic en Aceptar.

Verificar que se han escrito correctamente las maysculas del
proyecto BenefitsList.


Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Importante
Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Precaucin


Actualizar el proyecto BenefitsList
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente.
3. Ir al proyecto BenefitsList.
Ir a la carpeta VB\Starter\BenefitsListVB.

Ir a la carpeta CS\Starter\BenefitsListCS.
Estas carpetas pueden encontrarse dentro del fichero labs13.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.

Crear una referencia al componente BenefitsList del proyecto Benefits
1. En el proyecto Benefits de la solucin LabApplication, completar los
siguientes pasos para agregar una referencia al componente BenefitsList
que acabamos de crear:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB o
BenefitsCS en el Explorador de soluciones y hacer clic en Agregar
referencia.
b. En el cuadro de dilogo Agregar referencia, en la pestaa Proyectos,
hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.
c. En la lista Componentes seleccionados, seleccionar el componente
BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar.
El componente se agrega a la carpeta Referencias en el Explorador de
soluciones.

Crear el Servicio Web XML Dental

Realizar este procedimiento nicamente si no se ha creado
anteriormente el proyecto DentalService, o si se ha eliminado.

1. Crear un nuevo proyecto de Servicio Web XML, denominado
DentalServiceVB o DentalServiceCS, y agregarlo a la solucin
LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic.
c. En la lista Plantillas, hacer clic en Servicio Web ASP.NET, y
establecer la ubicacin en http://localhost/DentalServiceVB o en
http://localhost/DentalServiceCS.
d. Hacer clic en Agregar a solucin, y clic en Aceptar.

Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Importante

Verificar que se han utilizado correctamente las maysculas en
el proyecto DentalServiceVB.

Actualizar el proyecto DentalService
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
DentalServiceVB o DentalServiceCS, seleccionar Agregar, y hacer clic en
Agregar elemento existente.
3. Buscar la carpeta DentalService:
Ir a VB\Starter\DentalServiceVB.
Ir a CS\Starter\DentalServiceCS.
Estas carpetas pueden encontrarse dentro del fichero labs13.zip
4. Agregar archivos al proyecto:
En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente DentalServiceVB, hacer clic en Todos los archivos (*.*).
En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente DentalServiceCS, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de esta carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de sobrescribir o recargar los archivos.
7. Generar el servicio Web XML DentalService haciendo clic con el botn
derecho en el proyecto DentalService en el Explorador de soluciones y
hacer clic en Generar.

Agregar una referencia Web en el proyecto Benefits al servicio Web
DentalService
1. En el proyecto Benefits de la solucin LabApplication, realizar los
siguientes pasos para agregar una referencia Web al servicio Web XML
DentalService:
a. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsVB o BenefitsCS y clic en Agregar referencia Web.
b. En el cuadro de texto Direccin, escribir:
http://localhost/DentalServiceVB/DentalService.asmx
http://localhost/DentalServiceCS/DentalService.asmx
Pulsar ENTER. Se mostrar la referencia Web DentalService.
c. Hacer clic en Agregar referencia.
La referencia Web se agrega al proyecto en la carpeta Referencias Web.
2. En el Explorador de soluciones, expandir Referencias Web, hacer clic con
el botn derecho en localhost, y seleccionar Cambiar nombre.
3. Escribir DentalWebRef, y pulsar ENTER.
4. Generar la solucin haciendo clic en Generar solucin en el men
Generar.

Precaucin
Visual Basic .NET
Visual C#
Visual Basic .NET
Visual C#
Visual Basic .NET
Visual C#


Instalar y configurar las bases de datos del estado de sesin
1. En el men Inicio, seleccionar Todos los programas, seleccionar
Accesorios, y hacer clic en Lnea de comandos.
Se abre una ventana de comandos.
2. En la lnea de comandos, escribir el siguiente comando, siendo version la
ltima versin del .NET Framework instalada en el equipo, y pulsar
ENTER:
cd\Windows\Microsoft.NET\Framework\version\

La lnea de comandos cambia al nuevo directorio.
3. En la lnea de comandos, escribir el siguiente comando, y pulsar ENTER:
OSQL S localhost E <InstallSqlState.sql

La ventana de comandos muestra una serie de nmeros y mensajes, y
regresa a la lnea de comandos. Se han restablecido las bases de datos
ASPState y tempdb.
4. Cerrar la lnea de comandos y abrir Windows Explorer.
5. Ir al siguiente directorio:
VB\Starter
CS\Starter
Estas carpetas pueden encontrarse dentro del fichero labs13.zip
6. Hacer doble clic en Lab13.bat.
Este archivo de proceso por lotes ejecuta una consulta SQL que configura la
seguridad para las bases de datos ASPState y tempdb.
7. Cerrar Windows Explorer.

Visual Basic .NET
Visual C#
Ejercicio 1
Utilizar el objeto Cache
En este ejercicio, utilizaremos el objeto Cache para almacenar en la cach el
objeto DataSet doctors. Colocar un DataSet en la cach reduce el nmero de
veces que un formulario Web Form necesita conectar a la fuente de datos, en
este caso Microsoft SQL Server

, para rellenar el DataGrid.


Debido a que el DataGrid utiliza DataViews basados en el nombre de ciudad
seleccionado del cuadro de lista, implementaremos la cach en el procedimiento
de evento Page_Load, y en el procedimiento de evento SelectedIndexCached
del cuadro de lista.
El DataGrid tambin implementa paginado. Para reducir la cantidad de cdigo
que agregaremos en este laboratorio, deshabilitaremos esta caracterstica del
DataGrid.
Cancelar la paginacin
1. Abrir el archivo doctors.aspx.
2. Hacer clic con el botn derecho en el objeto DataGrid dgDoctors, y
seleccionar Property Builder.
3. Seleccionar la ficha Paging, y deseleccionar la casilla de verificacin de
Allow paging.
De esta forma, se deshabilitar el paginado del DataGrid. Se mostrarn
todos los datos que devuelva la fuente de datos.
4. Hacer clic en OK.

Almacenar en la cach el DataSet del procedimiento de evento
Page_Load
1. Abrir el archivo doctors.aspx.vb o doctors.aspx.cs.
2. En el evento Page_Load de doctors.aspx, buscar la siguiente lnea de
cdigo:
If Not Page.IsPostBack Then

if (!Page.IsPostBack)

3. Agregar cdigo, justo antes de esta lnea, que compruebe la cach de una
clave denominada doctors. El cdigo debera comprobar si esta clave est
vaca o no existe.
4. Si la clave doctors de la cach est vaca o no existe, rellenar el objeto
DataSet dsDoctors1 utilizando el objeto DataAdapter existente
sqlDataAdapter1, e insertar una nueva clave doctors en la cach que
contiene el nuevo DataSet. Utilizar la informacin en la siguiente tabla para
escribir el cdigo.
Propiedad
Valor Visual
Basic .NET C#

Key name doctors doctors
Value DsDoctors1 dsDoctors1
Visual Basic .NET
C#


Dependencies Nothing null
Absolute Expiration Four minutes Four minutes
Sliding Expiration Nothing Caching.Cache.NoSlidingExpiration

El cdigo debera ser similar al siguiente:
If (Cache("doctors") Is Nothing) Then
SqlDataAdapter1.Fill(DsDoctors1)
Cache.Insert("doctors", DsDoctors1, Nothing, _
DateTime.Now.AddMinutes(4), Nothing)
End If

if (Cache["doctors"] == null)
{
sqlDataAdapter1.Fill(dsDoctors1);
Cache.Insert("doctors", dsDoctors1, null,
DateTime.Now.AddMinutes(4),
System.Web.Caching.Cache.NoSlidingExpiration);
}

5. En el procedimiento de evento Page_Load, buscar el siguiente comentario:
TODO Lab 9: bind the datagrid to the doctors table

Debajo del comentario, eliminar el comentario de la siguiente lnea de
cdigo:
SqlDataAdapter1.Fill(DsDoctors1)

sqlDataAdapter1.Fill(dsDoctors1);

6. En el procedimiento de evento Page_Load, buscar la siguiente lnea de
cdigo:
dgDoctors.DataSource = DsDoctors1

dgDoctors.DataSource = dsDoctors1;

7. Establecer la propiedad DataSource de dgDoctors en el DataSet
almacenado en la cach.
El cdigo debera ser similar al siguiente:
dgDoctors.DataSource = Cache("doctors")

dgDoctors.DataSource = Cache["doctors"];


Visual Basic .NET
C#
Visual Basic .NET
C#
Visual Basic .NET
C#
Visual Basic .NET
C#
Almacenar en la cach el DataSet del procedimiento de evento
lstCities_SelectedIndexChanged
1. En el procedimiento de evento lstCities_SelectedIndexChanged de
doctors.aspx, buscar la siguiente lnea de cdigo:
SqlDataAdapter1.Fill(DsDoctors1)

sqlDataAdapter1.Fill(DsDoctors1);

2. Eliminar esta lnea de cdigo y sustituirla con el mismo cdigo que hemos
agregado al procedimiento de evento Page_Load. Este cdigo comprueba la
presencia de la clave de cach doctors, y crea una nueva clave si la clave
doctors no existe o est vaca.
3. En el cdigo restante del procedimiento de evento
lstCities_SelectedIndexChanged, cambiar toda ocurrencia de dsDoctors1
a la clave de la cach doctors y convertirla en un tipo DataSet.
Al finalizar, todo el procedimiento de evento
lstCities_SelectedIndexChanged debera ser similar al siguiente:
Dim strCity As String = _
Trim(lstCities.SelectedItem.Value)

If (Cache("doctors") Is Nothing) Then
SqlDataAdapter1.Fill(DsDoctors1)
Cache.Insert("doctors", DsDoctors1, Nothing, _
DateTime.Now.AddMinutes(4), Nothing)
End If

If strCity = "[All]" Then
dgDoctors.DataSource = Cache("doctors")
Else
Dim dvDocs As New DataView(CType(Cache("doctors"), _
DataSet).Tables(0))
dvDocs.RowFilter = "city = '" & strCity & "'"
dgDoctors.DataSource = dvDocs
End If
reset()
dgDoctors.DataBind()

Visual Basic .NET
C#
Visual Basic .NET


string strCity = (lstCities.SelectedItem.Text).Trim();
if (Cache["doctors"] == null)
{
sqlDataAdapter1.Fill(dsDoctors1);
Cache.Insert("doctors",dsDoctors1, null,
DateTime.Now.AddMinutes(4),
System.Web.Caching.Cache.NoSlidingExpiration);
}

if (strCity == "[All]")
dgDoctors.DataSource = Cache["doctors"];
else
{
DataView dvDocs = new
DataView(((DataSet)Cache["doctors"]).Tables[0]);
dvDocs.RowFilter = "city = '" + strCity + "'";
dgDoctors.DataSource = dvDocs;
}
reset();
dgDoctors.DataBind();

Cuando se utiliza una clave de la cach con un objeto DataView,
debemos realizar una conversin de tipo de datos explcita porque el
proyecto Benefits tiene habilitado Option Strict.


Probar la pgina
1. Guardar doctors.aspx.vb o doctors.aspx.cs, y generar y examinar la pgina.
Si recibimos un error de permisos de SQL cuando intentamos explorar el
sitio Web Benefits, cerrar Internet Explorer, abrir Windows Explorer, ir a
VB\Starter o CS\Starter y hacer doble clic en Lab13.bat. Estas carpetas se
pueden encontrar dentro del fichero labs13.zip.
2. Probar el cuadro de lista desplegable de nombres de ciudad seleccionando
distintos nombres.

Si se dispone de tiempo
1. Agregar una nueva fila al objeto DataTable doctors del objeto DataBase
doctors utilizando SQL Server Enterprise Manager. Debemos incluir un
valor para las columnas dr_id, dr_fname y dr_lname.
2. Actualizar doctors.aspx en el navegador.
Observar que el nuevo elemento no aparece en el DataGrid.
3. Seleccionar una ciudad del cuadro de lista desplegable, y seleccionar All.
Observar que el nuevo elemento sigue sin aparecer en el DataGrid.
4. Esperar al menos cuatro minutos y repetir el paso 3.
Observar que ahora la nueva fila se muestra en el DataGrid.
5. En SQL Server Enterprise Manager, eliminar la fila que hemos aadido.
Observar que ele elemento eliminado todava aparece en el DataGrid. Si
esperamos cuatro minutos y actualizamos la pgina, veremos que el
elemento eliminado ya no aparece.
C#
Nota
Ejercicio 2
Utilizar la cach de resultados de pgina
En este ejercicio, almacenaremos en la cach un formulario Web Form
utilizando la directivaOutputCache. Tambin modificaremos el atributo
VaryByParam.
La pgina medical.aspx muestra el nombre del usuario, fecha de nacimiento y el
doctor que el usuario ha seleccionado en la pgina doctors.aspx. Para reducir
los tiempos de respuesta de esta pgina, deberamos almacenar en cach toda la
pgina utilizando la cach de resultados de pgina.
Almacenar en cach la pgina medical.aspx
1. Abrir la pgina medical.aspx y cambiar a la vista Hypertext Markup
Language (HTML).
2. Agregar una directiva OutputCache que habilite la cach de resultados para
toda la pgina. La pgina debera permanecer en la cach durante dos
minutos y no se debera actualizar basndose en los parmetros pasados a la
pgina. El cdigo debera ser similar al siguiente:
<%@ OutputCache Duration="120" VaryByParam="none"%>

3. Guardar y examinar la pgina medical.aspx.
4. Hacer clic en el enlace Select a doctor.
5. En la pgina doctors.aspx, seleccionar un doctor del DataGrid, y hacer clic
en Submit.
Regresamos a la pgina medical.aspx, pero el nombre del doctor
seleccionado no aparece junto a Primary Care Physician. Por qu?
____________________________________________________________
____________________________________________________________

Utilizar el atributo VaryByParam
1. Regresar a la vista HTML de la pgina medical.aspx.
2. Editar la directiva OutputCache que hemos agregado, y cambiar el cdigo
para crear una nueva versin de la pgina en la cach cuando se seleccione
un doctor distinto en la pgina doctors.aspx.
Cul es el nombre del parmetro que se ha pasado de la pgina
doctors.aspx a la pgina medical.aspx?
____________________________________________________________
____________________________________________________________
Escenario


El cdigo debera ser similar al siguiente:
<%@ OutputCache Duration="120" VaryByParam="pcp"%>

3. Guardar la pgina medical.aspx y visualizarla en un navegador.
4. Hacer clic en el enlace Select a doctor.
5. En Doctors.aspx, seleccionar un doctor del DataGrid, y hacer clic en
Submit.
Regresamos a medical.aspx, y el nombre del doctor seleccionado aparece
junto a Primary Care Physician.
6. Hacer clic de nuevo en Select a doctor.
7. Seleccionar otro doctor en el DataGrid, y hacer clic en Submit.
Cuando regresamos a medical.aspx, el cuadro Primary Care Physician
muestra ahora el nombre del doctor que se acaba de seleccionar.

Ejercicio 3
Cach de pgina parcial
En este ejercicio, utilizaremos la cach de resultados de pginas para almacenar
en la cach el control de usuario header.ascx. Agregaremos en primer lugar una
marca de tiempo al encabezado para verificar que la cach funciona
correctamente.
El control de usuario header.ascx muestra un titular en la parte superior de cada
pgina de nuestra aplicacin Web. Normalmente, esta informacin no cambia y
es requerida para cada peticin de pgina, por ello deberamos almacenarla en
cach para una rpida recuperacin.
Agregar un sello de hora al encabezado
1. Abrir el archivo header.ascx.
2. Arrastrar un control label y ubicarlo a la derecha del texto Benefits
Selection Site. Cambiar el nombre del nuevo control label a lblTime.
3. En la pgina de cdigo subyacente de header.ascx, al final del
procedimiento de evento Page_Load, agregar cdigo para que la etiqueta
lblTime muestre la hora actual. El cdigo debera ser similar al siguiente:
lblTime.Text = DateTime.Now.TimeOfDay.ToString()

lblTime.Text = DateTime.Now.TimeOfDay.ToString();

4. Guardar y generar header.ascx.
5. Ir a la pgina doctors.aspx.
Debido a que header.ascx no puede visualizarse en un navegador, debemos
visualizar una pgina que utiliza el control de usuario.
Por qu no podemos ir a header.ascx directamente?
____________________________________________________________
____________________________________________________________
6. Actualizar el navegador varias veces.
Observar que la hora que muestra header.ascx cambia cada vez que
actualizamos la pgina doctors.aspx.

Escenario
Visual Basic .NET
C#


Agregar cach al archivo del encabezado
1. Abrir header.ascx y cambiar a la vista HTML.
2. Agregar una directiva Output Cache a la pgina para habilitar cach de
pginas con una duracin de dos minutos. La cach no debera cambiar
basndose en ninguno de los parmetros que se pasen. El cdigo debera ser
similar al siguiente:
<%@ OutputCache Duration="120" VaryByParam="none"%>

3. Guardar y generar header.ascx.
4. Ir a la pgina doctors.aspx.
No es necesario volver a generar doctors.aspx, ya que no se ha modificado
este archivo.
5. Actualizar el navegador varias veces.
Observar que la hora de header.ascx no cambia en cada actualizacin. Si se
dispone de tiempo, esperar ms de dos minutos y actualizar la pgina una
vez ms. El encabezado mostrar la hora actual.

Ejercicio 4
Utilizar propiedades dinmicas
En este ejercicio, utilizaremos propiedades dinmicas para colocar la URL del
servicio Web XML DentalService en el archivo Web.config.
Un servicio Web XML puede tener una URL que cambie con el tiempo. Si
nuestra aplicacin Web conecta con un servicio Web XML, podemos insertar la
URL de ese servicio Web en el archivo Web.config de nuestra aplicacin Web.
Si la URL del servicio Web XML cambia, nicamente deberemos actualizar el
archivo Web.config, no es necesario cambiar la informacin del proxy y volver
a generar el proyecto. La modificacin del archivo Web.config no requiere
volver a generar la aplicacin Web.
Visualizar la configuracin actual del proxy
1. Abrir el archivo proxy del servicio Web XML DentalService.
El archivo proxy se denomina Reference.vb o Reference.cs, y se encuentra
en el Explorador de soluciones bajo WebReferences\DentalWebRef\
Reference.map.

Si no podemos visualizar el archivo listado bajo del archivo
Reference.map, hacer clic en el icono Mostrar todos los archivos de la
parte superior del Explorador de soluciones o clic en Mostrar todos los
archivos del men Proyecto.

2. En Reference.vb, buscar el constructor denominado New. En Reference.cs,
buscar el constructor denominado DentalService.
Qu hace este mtodo?
____________________________________________________________
____________________________________________________________
3. En el Explorador de soluciones, hacer clic con el botn derecho en
Referencia Web y seleccionar Propiedades.
La referencia Web se denomina DentalWebRef y se encuentra en la carpeta
Web References.
4. En la ventana Propiedades, cambiar la configuracin de la propiedad URL
Behavior de Static a Dynamic.
5. Cuando se abra el cuadro de dilogo notificando que el archivo
Reference.vb o Reference.cs ha sido modificado, hacer clic en S para
volver a cargar el archivo.
6. En Reference.vb o Reference.cs, buscar de nuevo el constructor.
Qu ha cambiado en el constructor? Qu hace el cdigo aadido?
____________________________________________________________
____________________________________________________________
Escenario
Sugerencia


7. En el Explorador de soluciones, abrir el archivo Web.config del proyecto
Benefits.

Asegurmonos de abrir el archivo Web.config del proyecto Benefits,
no el archivo Web.config asociado al servicio Web XML DentalService.

8. Desplazarse hasta el final de Web.config y buscar el elemento appSettings.
Qu informacin se incluye en el elemento appSettings?
_____________________________________________________________
_____________________________________________________________

Nota
Ejercicio 5
Implementar nuestro sitio
En este ejercicio, implementaremos nuestro sitio Web en otro servidor.
Utilizaremos el equipo de un compaero como servidor de implementacin.
Preparar la carpeta para la implementacin
Debemos completar tres pasos en el equipo del compaero.
1. Abrir Windows Explorer e ir al directorio C:\Inetpub\wwwroot.
2. Hacer clic con el botn derecho en LabApplication, y clic en Compartir.
3. En la ventana Propiedades de LabApplication, hacer clic en Compartir
esta carpeta, y clic en Aceptar.

Los permisos de comparticin predeterminados de Microsoft
Windows XP otorgan control total sobre la carpeta compartida al grupo
Todos. En un entrono de laboratorio controlado, utilizado nicamente para
realizar pruebas, sta es una configuracin aceptable. En un servidor de
produccin, no debera concederse acceso a carpetas compartidas al grupo
Todos.


Preparar el proyecto para la implementacin
1. En Visual Studio .NET, en el men de acceso directo a la barra de
herramientas Depurar, , hacer clic en Release.
2. En el men Generar, hacer clic en Generar de nuevo la solucin.
3. Cerrar Visual Studio .NET.

Seleccionar y copiar archivos para la implementacin
1. Abrir Windows Explorer e ir al directorio C:\Inetpub\wwwroot\BenefitsVB
o C:\Inetpub\wwwroot\BenefitsCS.
2. Seleccionar todos los archivos y carpetas de la carpeta Benefits.
3. En el men Edicin, hacer clic en Copiar.
4. En el cuadro de direccin de Windows Explorer, escribir \\partner\
LabApplication, siendo partner el nombre del equipo de nuestro
compaero, y pulsar ENTER.
5. En el men Edicin, hacer clic en Pegar.
Si se recibe un error de Acceso denegado mientras se copian los archivos,
deberemos, junto con nuestro compaero, completar los siguientes pasos:
a. Abrir Windows Explorer e ir a la carpeta C:\Inetpub\wwwroot.
b. Hacer clic con el botn derecho en LabApplication, y seleccionar
Propiedades.
c. Eliminar el atributo Slo lectura, y hacer clic en Aceptar.
d. En el cuadro de dilogo de confirmacin de los cambios de los atributos,
hacer clic en Aplicar cambios a esta carpeta, subcarpeta y archivos, y
hacer clic en Aceptar.
Importante


Una vez nuestro compaero haya completado estos cuatro pasos, repetir el
procedimiento de copia de archivos del paso 5.
6. Abrir la carpeta LabApplication.
La carpeta contiene todos los archivos de nuestro sitio Web.
7. Eliminar los archivos que no son necesarios para la implementacin. Los
archivos que pueden eliminarse incluyen todos los archivos con las
siguientes extensiones:
.resx
.vbproj
.vb
.webinfo
.vsdisco
.csproj
.cs

Normalmente, eliminaramos estos archivos ante de copiarlos al
servidor de produccin. En este laboratorio, se eliminan despus de
copiarlos para no eliminar archivos que podran ser necesarios en otros
laboratorios del curso.

8. Cerrar Windows Explorer.

Probar la implementacin
1. Abrir Internet Explorer.
2. En la barra de direccin, escribir http://partner/ LabApplication, siendo
partner el equipo de nuestro compaero.
Se muestra la pgina Default.aspx.
3. Explorar el sitio para estar seguro de que todas las pginas aparecen y
funcionan segn lo previsto.

La carpeta LabApplication se configur como directorio de
aplicacin durante la configuracin del aula. Generalmente, deberamos
acceder al servidor Web para configurar esta carpeta como una aplicacin
Web.


Nota
Nota
Prctica A: seguridad de una aplicacin Web Microsoft
ASP.NET
Medical
Medical.aspx
Medical
Medical.aspx
Benefits
Home Page
Default.aspx
Benefits
Home Page
Default.aspx
Life Insurance
Life.aspx
Life Insurance
Life.aspx
Retirement
Retirement.aspx
Retirement
Retirement.aspx
Dental
Dental.aspx
Dental
Dental.aspx
Dentists
Doctors
Doctors.aspx
Doctors
Doctors.aspx
Doctors
Logon Page
Login.aspx
Logon Page
Login.aspx
Registration
Register.aspx
Registration
Register.aspx
Coho
Winery
Prospectus
Prospectus.aspx
Prospectus
Prospectus.aspx
XML Web
Service
dentalService1.asmx
XML Web
Service
dentalService1.asmx
Page Header
Header.ascx
Page Header
Header.ascx
ASPState
tempdb
LabWeb
Application
User Control
namedate.ascx
User Control
namedate.ascx
Menu
Component
Class1.vb or Class1.cs
Menu
Component
Class1.vb or Class1.cs
XML
Files
Web.
config


En este laboratorio, aprenderemos a:
Securizar una aplicacin Web MicrosoftASP.NET utilizando la
autenticacin basada en Microsoft Windows.
Securizar una aplicacin Web utilizando la autenticacin basada en
formularios.
Crear pginas de inicio de sesin y de registro.

Para trabajar en este laboratorio, es necesario tener:
Conocimientos sobre cmo est estructurado un archivo.
Conocimientos sobre cmo utilizar procedimientos almacenados para
controles de servidor.
Conocimientos sobre cmo funcionan los controles de validacin.

Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios de
este curso, crearemos un sitio Web que permita a los empleados seleccionar y
configurar los beneficios que elijan.
Ahora que hemos implementado todos los beneficios, deseamos permitir
nicamente a usuarios registrados el acceso a la aplicacin Web. En primer
lugar, securizaremos el sitio utilizando la autenticacin basada en Windows, y a
continuacin la cambiaremos a autenticacin basada en formularios.
Seguidamente, implementaremos la pgina de registro para ofrecer a los nuevos
empleados la oportunidad de registrarse en el sitio Web de beneficios de Coho
Winery. Finalmente, implementaremos la pgina para cerrar sesin.
Objetivos
Requisitos previos
Escenario
Tiempo estimado para
completar el laboratorio:
45 minutos
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList.
Estos proyectos pueden haberse creado utilizando Visual Basic .NET o
Microsoft Visual C#

.NET.
Si no se han creado estos proyectos, realizar los siguientes pasos:
Crear la solucin LabApplication

Realizar este procedimiento nicamente si no se ha creado un
archivo de solucin LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solucin en blanco
denominada LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Solucin en
blanco.
b. En el cuadro de dilogo Nuevo proyecto, escribir LabApplication en el
cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto Benefits, o si se ha eliminado

1. Crear un nuevo proyecto de aplicacin Web ASP.NET, denominado
BenefitsVB o BenefitsCS, en la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic o Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Aplicacin Web ASP.NET,
establecer la ubicacin a http://localhost/BenefitsVB para el proyecto
Visual Basic .NET o a http://localhost/BenefitsCS para el proyecto
Visual C#.
d. Hacer clic en Agregar a Solucin, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solucin, es importante el
uso de maysculas en el nombre del proyecto. Probablemente, utilizaremos
algunos formularios Web Forms ya generados en ste y en otros
laboratorios, por ello, debemos verificar que hemos escrito con maysculas
el nombre del proyecto Benefits.


Importante
Importante
Precaucin
Actualizar el proyecto Benefits
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente.
3. Buscar los archivos de proyecto:
Ir a la carpeta VB\Starter\BenefitsVB .

Ir a la carpeta CS\Starter\BenefitsCS .
Estas carpetas pueden encontrarse dentro del fichero labs14.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente Benefits, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de sobrescribir o recargar los archivos.

Crear la biblioteca de clases BenefitsList

Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto BenefitsList, o si se ha eliminado

1. Crear un nuevo proyecto de biblioteca de clases.
Crear un nuevo proyecto de biblioteca de clases Visual Basic .NET con el
nombre BenefitsListVB, y agregarlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual Basic.
c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListVB.
d. Hacer clic en Agregar a solucin, y clic en Aceptar.
Crear un nuevo proyecto de biblioteca de clases Visual C#.NET con el
nombre BenefitsListCS, y agregarlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la listaTipos de proyecto,
hacer clic en Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el
Nombre de BenefitsListCS.
d. Hacer clic en Agregar a solucin, y clic en Aceptar.

Verificar que se han escrito correctamente las maysculas del
proyecto BenefitsList.


Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Importante
Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Precaucin
Actualizar el proyecto BenefitsList
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en
Agregar elemento existente.
3. Ir al proyecto BenefitsList:
Ir a la carpeta VB\Starter\BenefitsListVB.
Ir a la carpeta CS\Starter\BenefitsListCS.
Estas carpetas pueden encontrarse dentro del fichero labs14.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.

Crear una referencia al componente BenefitsList del proyecto Benefits
1. En el proyecto Benefits de la solucin LabApplication, completar los
siguientes pasos para agregar una referencia al componente BenefitsList
que acabamos de crear:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB o
BenefitsCS en el Explorador de soluciones y hacer clic en Agregar
referencia.
b. En el cuadro de dilogo Agregar referencia, en la pestaa Proyectos,
hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.
c. En la lista Componentes seleccionados, seleccionar el componente
BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar.
El componente se agrega a la carpeta Referencias en el Explorador de
soluciones.

Crear el Servicio Web XML Dental

Realizar este procedimiento nicamente si no se ha creado el
proyecto DentalService, o si se ha eliminado

2. Crear un nuevo proyecto de servicio Web XML.
Crear un nuevo proyecto de Servicio Web XML de Visual Basic .NET
denominado DentalServiceVB, y agregarlo a la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic.
a. En la lista Plantillas, hacer clic en Servicio Web ASP.NET, y
establecer la ubicacin en http://localhost/DentalServiceVB.
b. Hacer clic en Agregar a solucin, y clic en Aceptar.

Verificar que se han utilizado correctamente las maysculas en
Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#
Importante
Para el proyecto Visual
Basic .NET
Precaucin
el proyecto DentalServiceVB.

Crear un nuevo proyecto de Servicio Web XML con Visual C#.NET
denominado DentalServiceCS, y agregarlo a la solucin LabApplication:
c. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto.
d. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual C#.
a. En la lista Plantillas, hacer clic en Servicio Web ASP.NET, y
establecer la ubicacin en http://localhost/DentalServiceCS.
b. Hacer clic en Agregar a solucin, y clic en Aceptar.

Verificar que se han utilizado correctamente las maysculas en
el proyecto DentalServiceVB.


Actualizar el proyecto DentalService
1. En Visual Studio .NET, abrir el archivo de solucin LabApplication.
2. En el Explorador de soluciones, hacer clic con el botn derecho en
DentalServiceVB o DentalServiceCS, seleccionar Agregar, y hacer clic en
Agregar elemento existente.
3. Buscar los archivos de proyecto:
Ir aVB\Starter\DentalServiceVB.

Ir aCS\Starter\DentalServiceCS.
Estas carpetas pueden encontrarse dentro del fichero labs14.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente DentalServiceVB, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de esta carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de sobrescribir o recargar los archivos.
7. Generar el servicio Web XML DentalService haciendo clic con el botn
derecho en el proyecto DentalServiceVB o DentalServiceCS en el
Explorador de soluciones y hacer clic en Generar.

Agregar una referencia Web en el proyecto Benefits al servicio Web
DentalService
1. En el proyecto Benefits de la solucin LabApplication, realizar los
siguientes pasos para agregar una referencia Web al servicio Web XML
DentalService:
a. En el Explorador de soluciones, hacer clic con el botn derecho en
BenefitsVB o BenefitsCS y clic en Agregar referencia Web.
b. En el cuadro de texto Direccin, escribir
http://localhost/DentalServiceVB/DentalService1.asmx

http://localhost/DentalServiceCS/DentalService1.asmx
y pulsar ENTER..
Para el proyecto Visual
C#.NET
Precaucin
Para el proyecto Visual
Basic .NET
Para el proyecto Visual
C#.NET
Proyecto Visual Basic
.NET
Proyecto Visual C#
Se mostrar la referencia Web DentalService1.
c. Hacer clic en Agregar referencia.
La referencia Web se agrega al proyecto en la carpeta Referencias Web.
2. En el Explorador de soluciones, expandir Referencias Web, hacer clic con
el botn derecho en localhost, y seleccionar Cambiar nombre.
3. Escribir DentalWebRef, y pulsar ENTER.
4. Generar la solucin haciendo clic en Generar solucin en el men
Generar.

Instalar y configurar las bases de datos del estado de sesin
1. En el men Inicio, seleccionar Todos los programas, seleccionar
Accesorios, y hacer clic en Lnea de comandos.
Se abre una ventana de comandos.
2. En la lnea de comandos, escribir el siguiente comando, siendo version la
ltima versin del .NET Framework instalada en el equipo, y pulsar
ENTER:
cd \WINDOWS\Microsoft.NET\Framework\version\

La lnea de comandos cambia al nuevo directorio.
3. En la lnea de comandos, escribir el siguiente comando, y pulsar ENTER:
OSQL S localhost E <InstallSqlState.sql

La ventana de comandos muestra una serie de nmeros y mensajes, y
regresa a la lnea de comandos. Se han restablecido las bases de datos
ASPState y tempdb.
4. Cerrar la lnea de comandos y abrir Windows Explorer.
5. Ir al siguiente directorio:
VB\Starter

CS\Starter
Estas carpetas pueden encontrarse dentro del fichero labs14.zip
6. Hacer doble clic en Lab14.bat.
Este archivo de proceso por lotes ejecuta una consulta SQL que configura la
seguridad para las bases de datos ASPState y tempdb.
7. Cerrar Windows Explorer.

Proyecto Visual Basic
.NET
Proyecto Visual C#
Ejercicio 1
Securizar nuestro sitio Web utilizando la autenticacin basada en
Windows
En este ejercicio, configuraremos Internet Information Services (IIS) para que
utilice la autenticacin bsica y obtener acceso a pginas seguras, y la
autenticacin annima para obtener acceso a pginas no seguras. A
continuacin, editaremos el archivo Web.config para denegar el acceso a los
usuarios no autenticados a las pginas medical.aspx y doctors.aspx. Finalmente,
denegaremos el acceso a usuarios no autenticados a cualquier pgina del sitio
Coho Winery Web.
Configurar la autenticacin de IIS
1. En el men Inicio, hacer clic con el botn derecho en Mi PC y clic en
Administrar.
2. En la consola Administracin de equipos, expandir Servicios y
aplicaciones, expandir Servicios de Internet Information Services,
expandir Sitios Web, y expandir Sitio Web predeterminado.
3. Hacer clic con el botn derecho en la aplicacin Web BenefitsVB o
BenefitsCS y clic en Propiedades.
4. En el cuadro de dilogo Propiedades de BenefitsVB o BenefitsCS, en la
ficha Seguridad de directorios, en la seccin Control de autenticacin y
acceso annimo, hacer clic en Modificar.
5. En el cuadro de dilogo Mtodos de autenticacin, comprobar que est
seleccionado Acceso annimo, y que no est seleccionado Autenticacin
integrada de Windows, y seleccionar la casilla de verificacin de
Autenticacin bsica (la contrasea se enva en texto claro).
6. Cuando recibamos el aviso de seguridad sobre la habilitacin de la
autenticacin bsica, hacer clic en S. El aspecto de la configuracin es
como el de la siguiente ilustracin.


Se ha habilitado el acceso annimo, permitindonos
acceder a pginas seguras y no seguras de la misma aplicacin Web.
Para este ejercicio, se ha habilitado la autenticacin bsica sin utilizar
Secure Sockets Layer (SSL), lo cual significa que las contraseas se envan
utilizando texto claro. En un escenario del mundo real, para estar seguro,
debemos obtener un certificado de servidor y utilizar SSL cuando utilicemos
la autenticacin bsica.

7. Hacer clic en Aceptar, clic de nuevo en Aceptar y cerrar la consola
Administracin de equipos.

Nota de seguridad
Agregar una pgina para mostrar los resultados de la informacin
sobre seguridad
1. Abrir el proyecto BenefitsVB o BenefitsCS en la solucin LabApplication
Visual Studio .NET.
2. Agregar el formulario Web Form securitytest.aspx al proyecto Benefits
desde la carpeta
VB\Starter\BenefitsVB.
CS\Starter\BenefitsCS.
Estas carpetas pueden encontrarse dentro del fichero labs14.zip
3. Abrir el archivo securitytest.aspx.vb o securitytest.aspx.cs y examinar su
contenido. cul es la utilidad de las dos lneas de cdigo del procedimiento
de evento Page_Load?
____________________________________________________________
____________________________________________________________

Configurar la seguridad del archivo Web.config para algunas de las
pginas del proyecto Benefits
1. Abrir el archivo Web.config en el proyecto BenefitsVB o BenefitsCS.
2. Buscar la seccin <authentication>y verificar que el modo est establecido
en autenticacin Windows.
La configuracin debera tener lo siguiente:
<authentication mode="Windows" />

3. Para el proyecto Visual Basic .NET, eliminar la seccin <authorization>
existente de Web.config.
4. Denegar el acceso a usuarios annimos para las pginas medical.aspx y
doctors.aspx. Introducir nuestra configuracin al final del archivo
Web.config, despus de la etiqueta </system.web>, pero antes de la etiqueta
</configuration>.
La configuracin debera tener el siguiente aspecto:
<location path="medical.aspx">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>

<location path="doctors.aspx">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>

Visual Basic .NET
Visual C#
Guardar y probar
1. Guardar los cambios.
2. Generar el proyecto BenefitsVB o BenefitsCS.
3. Abrir un nuevo navegador e ir a http://localhost/BenefitsVB/default.aspx o
http://localhost/BenefitsCS/default.aspx.
4. Hacer clic en Life Insurance y comprobar que la pgina life.aspx se abre
sin solicitar ninguna credencial de usuario.
5. Ir a http://localhost/BenefitsVB/SecurityTest.aspx o
http://localhost/BenefitsCS/SecurityTest.aspx.
Esta pgina no muestra ninguna informacin de autenticacin debido a que
no estamos autenticados.
6. Ir a http://localhost/BenefitsVB/Medical.aspx o
http://localhost/BenefitsCS/Medical.aspx. Deberamos ver el cuadro de
dilogo Conectar a localhost.
7. Introducir nuestro nombreequipo\nombreusuario y la contrasea de nuestra
aula.
Ahora podemos explorar la pgina medical.aspx.
8. Ir de nuevo a http://localhost/BenefitsVB/SecurityTest.aspx o
http://localhost/BenefitsCS/SecurityTest.aspx.
La pgina muestra ahora nuestra informacin de autenticacin. Si no se
muestra nuestra informacin de autenticacin, actualizar la pgina.
9. Cerrar el navegador.

Configurar la seguridad de la carpeta del sitio Web BenefitsVB o
BenefitsCS en el archivo Web.config
1. Abrir el archivo Web.config.
2. Denegar el acceso a usuarios annimos a toda la carpeta Benefits. Para ello,
debemos eliminar las dos secciones <location>que se agregaron
anteriormente y crear una nueva seccin para denegar el acceso a usuarios
annimos a toda la carpeta, justo despus del elemento <authentication>en
el archivo Web.config.
La configuracin debera tener el siguiente aspecto:
<authorization>
<deny users="?" />
</authorization>


Guardar y probar
1. Guardar los cambios.
No es necesario volver a generar el proyecto BenefitsVB o BenefitsCS ya
que no ha cambiado el cdigo. Tan pronto como se guarde el archivo
Web.config, los cambios tendrn efecto.
2. Abrir una nueva instancia del navegador e ir a
http://localhost/BenefitsVB/default.aspx o
http://localhost/BenefitsCS/default.aspx.

Debemos asegurarnos de que abrimos un nuevo navegador. Si
continuamos en la sesin autenticada anterior, no podremos probar si la
seguridad funciona.

Esta vez deberamos ver inmediatamente el cuadro de dilogo Conectar a
localhost, ya que todas las pginas estn aseguradas, incluyendo
default.aspx.
3. Introducir nombreequipo\nombreusuario y la contrasea del aula, y hacer
clic en Aceptar.
Ahora podemos ir a todas las pginas que se encuentran en la aplicacin
Web Benefits.

Acceder al sitio Web Coho Winery de un compaero
1. Abrir un nuevo navegador e ir a:
http://Nombreequipocompaero/BenefitsVB/default.aspx o
http://Nombreequipocompaero/BenefitsCS/default.aspx
2. Deberamos ver el cuadro de dilogo Conectar a localhost.
3. Introducir nombre_equipo\nombreusuario y la contrasea del aula, y hacer
clic en Aceptar.
Ahora podemos ir a todas las pginas del sitio Web Coho Winery de nuestro
compaero.

Nota
Ejercicio 2
Securizar el sitio Web utilizando la autenticacin basada en
formularios
En este ejercicio, cambiaremos la configuracin de IIS para utilizar nicamente
la autenticacin annima, y utilizaremos la autenticacin basada en formularios
para administrar el acceso a pginas seguras de la aplicacin Web Benefits.
Configuraremos el archivo Web.config para utilizar la autenticacin basada en
formularios denegando el acceso a usuarios no autenticados a ninguna pgina
de la carpeta del proyecto Benefits. Finalmente, crearemos la pgina login.aspx
y validaremos las credenciales de usuario comparndolas con las incluidas en la
tabla Logins de la base de datos de Coho.
Configurar IIS para utilizar nicamente autenticacin annima
1. En el men Inicio, hacer clic con el botn derecho en Mi PC y hacer clic en
Administrar.
2. En la consola Administracin de equipos, expandir Servicios y
aplicaciones, expandir Internet Information Services, expandir Sitios
Web, y expandir Sitio Web predeterminado.
3. Hacer clic con el botn derecho en la aplicacin Web BenefitsVB o
BenefitsCS y clic en Propiedades.
4. En el cuadro de dilogo Propiedades de BenefitsVB o BenefitsCS, en la
ficha Seguridad de directorios, en la seccin Control de autenticacin y
acceso annimo, hacer clic en Edicin.
5. En el cuadro de dilogo Mtodos de autenticacin, verificar que est
seleccionada la casilla de verificacin de Acceso annimo y desactivar la
casilla de verificacin de Autenticacin bsica (la contrasea se enva en
texto claro).
6. Hacer clic en Aceptar, clic de nuevo en Aceptar, y cerrar la consola
Administracin de equipos.

Configurar la autenticacin basada en formularios en el archivo
Web.config
1. Abrir el archivo Web.config en el proyecto BenefitsVB o BenefitsCS.
2. Buscar la seccin <authentication>y cambiarla para utilizar la autenticacin
basada en formularios. Crearemos una cookie denominada ASPXAUTH, y
redirigiremos al usuario a una pgina denominada login.aspx si no est
autenticado.
La configuracin debera tener el siguiente aspecto:
<authentication mode="Forms">
<forms name=".ASPXAUTH" loginUrl="login.aspx" />
</authentication>


Agregar una cadena de conexin a la base de datos de Coho en el
archivo Web.config
1. En el archivo Web.config, agregar una seccin <appSettings>. Nuestra
configuracin debe colocarse al final del archivo Web.config, tras la
etiqueta </system.web>, pero antes de la etiqueta </configuration>.

Si el archivo Web.config ya tiene una seccin <appSettings>, no
crear otra. Continuar con los pasos siguientes y agregar el nuevo cdigo a la
seccin <appSettings>existente.

2. Agregar una nueva clave denominada conStrCoho con una cadena de
conexin que utilice la seguridad integrada de Windows para acceder a la
base de datos local de Coho. La adicin al archivo Web.config debera ser
como la siguiente:
<appSettings>
<add key="conStrCoho" value="data source=localhost;
initial catalog=Coho; integrated security=true" />
</appSettings>


Agregar un formulario Web Form login.aspx para introducir las
credenciales
Agregar el formulario Web Form login.aspx desde la carpeta
VB\Starter\BenefitsVB o CS\Starter\BenefitsCS al proyecto BenefitsVB o
BenefitsCS. Estas carpetas pueden encontrarse dentro del fichero labs14.zip
Esta pgina contiene un cuadro de texto para introducir la direccin de
correo electrnico, un cuadro de contrasea, un botn Submit, dos etiquetas
y un hiperenlace.
Abrir la pgina de cdigo subyacente del formulario Web Form login.aspx y
localizar el siguiente comentario en la seccin Imports al principio de la
pgina:
TODO Lab 14: add the Imports for forms-based auth

1. Para este ejercicio, utilizaremos la clase FormsAuthentication. Utilizando
los documentos de Ayuda, determinar qu espacio de nombres debemos
importar para utilizar esta clase, y escribir la instruccin de importacin.
El cdigo debera ser como el siguiente:
Imports System.Web.Security

using System.Web.Security;

Nota
Visual Basic .NET
Visual C#
3. Localizar la funcin Login y examinar su contenido.
Cul es el nombre del mtodo que se utiliza para recuperar la cadena de
conexin a la base de datos de Coho desde la seccin <appSettings> del
archivo Web.config?
_____________________________________________________________
_____________________________________________________________
Cul es el nombre del procedimiento almacenado que se utiliza para el
inicio de sesin?
_____________________________________________________________
_____________________________________________________________
4. Localizar el siguiente comentario en el procedimiento de evento
cmdLogin_Click:
TODO Lab 14: Call the Login function

5. Invocar la funcin Login, pasando el valor de la caja de texto txtEmail y el
valor de txtPassword. Almacenar el valor devuelto en la variable
strEmployeeID.
El cdigo debera ser como el siguiente:
strEmployeeId = Login(txtEmail.Text, txtPassword.Text)

strEmployeeId = Login(txtEmail.Text, txtPassword.Text);

6. Localizar el siguiente comentario en el procedimiento de evento
cmdLogin_Click:
TODO Lab 14: Login users and generate an auth. cookie

7. Escribir el cdigo para autenticar usuarios, crear una cookie de
autenticacin temporal (no persistente) y redirigir al usuario a la pgina que
solicit originalmente:
a. Probar si la variable strEmployeeId no es una cadena vaca. Esto
muestra si la direccin electrnica y contrasea del empleado se han
encontrado en la base de datos.
b. Si la variable strEmployeeId no es una cadena vaca, redirigir al usuario
a la pgina solicitada y crear una cookie temporal (no persistente) con la
cadena de identidad strEmployeeId.
c. Si la variable strEmployeeId es una cadena vaca, redirigir, y mostrar el
mensaje Login Failed! en la etiqueta lblInfo de la pgina login.aspx.
Visual Basic .NET
Visual C#
El cdigo debera ser como el siguiente:
If (strEmployeeId <> "") Then
FormsAuthentication.RedirectFromLoginPage _
(strEmployeeId, False)
Else 'Login failed
lblInfo.Text = "Login Failed!"
End If

if (strEmployeeId != "")
{
FormsAuthentication.RedirectFromLoginPage
(strEmployeeId, false);
}
else //Login failed
{
lblInfo.Text = "Login Failed!";
}

En qu se diferencia crear una cookie temporal (no persistente) y una
cookie persistente?
____________________________________________________________
____________________________________________________________
Qu mtodo utilizamos para leer la identidad del usuario autenticado, que
est almacenada en la cookie de autenticacin, desde un formulario Web
Form de la aplicacin Web ASP.NET?
____________________________________________________________
____________________________________________________________

Visual Basic .NET
Visual C#
Guardar y probar
1. Guardar los cambios.
2. Generar el proyecto BenefitsVB o BenefitsCS.
3. Abrir un nuevo navegador e ir a http://localhost/BenefitsVB/default.aspx o
http://localhost/BenefitsCS/default.aspx.
Deberamos ser redirigidos a la pgina login.aspx porque todas las pginas
estn securizadas, incluyendo default.aspx.
4. Examinar la URL (Uniform Resource Locator) en el navegador. Qu
vemos? Por qu?
_____________________________________________________________
_____________________________________________________________
5. Introducir la direccin electrnica y contrasea de un empleado que est
incluido en la tabla Logins de la base de datos Coho (direccin electrnica
someone@cohowinery.com, y contrasea someone), y hacer clic en Sign
In Now.
Ahora podemos navegar por todas las pginas.
6. Hacer clic en el enlace Life Insurance y comprobar que la pgina life.aspx
se abre sin solicitar nuestros credenciales.
7. Ir a http://localhost/BenefitsVB/SecurityTest.aspx o a
http://localhost/BenefitsCS/SecurityTest.aspx. Deberamos ver el ID de
empleado 1, que corresponde a la direccin electrnica
someone@cohowinery.com. Tambin veremos que somos autenticados con
la autenticacin basada en formularios.
8. Cerrar el navegador.

Cuando se utiliza la autenticacin basada en
formularios, la contrasea que se introduce en la pgina de inicio de sesin
se enva en texto claro a travs de la red. En un escenario del mundo real,
para evitar la posibilidad de que alguien obtenga la contrasea, debemos
utilizar una conexin SSL.


Nota de seguridad
Ejercicio 3 (si se dispone de tiempo)
Registrar nuevos usuarios
En este ejercicio, agregaremos cdigo a la pgina register.aspx, que permite a
los usuarios agregar un nuevo empleado a la tabla Logins de la base de datos de
Coho.
Agregar un formulario Web Form register.aspx para introducir nuevos
empleados
1. Abrir el proyecto Benefits en la solucin LabApplication de Visual Studio
.NET.
2. Agregar el formulario Web Form register.aspx desde la carpeta
VB\Starter\BenefitsVB o
CS\Starter\BenefitsCS al proyecto BenefitsVB o BenefitsCS.
Estas carpetas pueden encontrarse dentro del fichero labs14.zip
3. Abrir el formulario Web Form register.aspx y examinar su contenido. Qu
tipos de controles de validacin se utilizan en este formulario Web Form?
____________________________________________________________
____________________________________________________________
4. Abrir la pgina de cdigo subyacente register.aspx.vb o register.aspx.cs. La
pgina de cdigo subyacente contiene una funcin denominada
AddEmployee cuyo aspecto es muy similar al de la funcin Login de la
pgina de inicio, pero invoca otro procedimiento almacenado, denominado
EmployeeAdd, que agrega un nuevo empleado a la tabla Logins de la base
de datos de Coho.
5. Localizar el siguiente comentario en el procedimiento de evento
cmdValidation_Click:
TODO Lab 14: Call the AddEmployee function

6. Invocar la funcin AddEmployee, pasndole el valor de las cajas de texto
txtEmail y de txtPassword. Almacenar el valor devuelto en la variable
strEmployeeID.
El cdigo debera ser parecido al siguiente:
strEmployeeId = _
AddEmployee(txtEmail.Text, txtPassword.Text)

strEmployeeId =
AddEmployee(txtEmail.Text, txtPassword.Text);

7. Localizar el siguiente comentario en el procedimiento de evento
cmdValidation_Click:
TODO Lab 14: Login users and generate an auth. cookie

Visual Basic .NET
Visual C#
8. En la instruccin If, escribir el cdigo para autenticar usuarios, crear una
cookie de autenticacin temporal (no persistente), y redirigir al usuario al
formulario Web Form default.aspx.
El cdigo debera ser como el siguiente:
FormsAuthentication.SetAuthCookie( _
strEmployeeId, False)
Response.Redirect("default.aspx")

FormsAuthentication.SetAuthCookie(
strEmployeeId, false);
Response.Redirect("default.aspx");

9. Por qu se utiliza aqu el mtodo SetAuthCookie y no
RedirectFromLoginPage?
_____________________________________________________________
_____________________________________________________________

Guardar y probar
1. Guardar los cambios.
2. Generar el proyecto BenefitsVB o BenefitsCS.
3. Abrir un nuevo navegador e ir a http://localhost/BenefitsVB/default.aspx o a
http://localhost/BenefitsCS/default.aspx.
Deberamos ser redirigidos rpidamente a la pgina login.aspx puesto que
todas las pginas estn securizadas y, por tanto, default.aspx es una pgina
segura.
4. Hacer clic en Click here! Para abrir el formulario Web Form
registration.aspx para inscribir a un nuevo empleado.
Qu puede observarse? Por qu? Cmo puede solucionarse?
_____________________________________________________________
_____________________________________________________________

Visual Basic .NET
Visual C#
Configurar la seguridad para la pgina register.aspx en el archivo
Web.config
1. Abrir el archivo Web.config del proyecto BenefitsVB o BenefitsCS.
2. Introducir la informacin de configuracin para autorizar a todos los
usuarios a acceder al formulario Web Form register.aspx. Colocar esta
informacin al final del archivo Web.config, justo despus de la etiqueta
</appSettings>, pero antes de la etiqueta </configuration>.
La configuracin debera ser como la siguiente:
<location path="register.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>


Guardar y probar
1. Guardar los cambios.

No es necesario volver a generar el proyecto ya que nicamente
hemos cambiado el archivo Web.config.

2. Abrir un nuevo navegador e ir a http://localhost/BenefitsVB/default.aspx o a
http://localhost/BenefitsCS/default.aspx.
Deberamos ser redirigidos a la pgina login.aspx.
3. Hacer clic en Click here! para abrir el formulario Web Form
registration.aspx e inscribir un nuevo empleado. Deberamos ver ahora el
formulario Web Form register.aspx.
4. Introducir la direccin electrnica y una contrasea para ser agregado a la
base de datos como un nuevo empleado. Hacer clic en Submit.
Seremos redirigidos a la pgina default.aspx, y podremos explorar todas las
pginas.
5. Hacer clic en el enlace Life Insurance y comprobar que la pgina life.aspx
se abre sin solicitar las credenciales.
6. Ir a http://localhost/BenefitsVB/SecurityTest.aspx o a
http://localhost/BenefitsCS/SecurityTest.aspx. Deberamos ver nuestro ID
de empleado y que estamos autenticados con autenticacin basada en
formularios.
7. Cerrar el navegador, abrir un nuevo navegador, e ir a
http://localhost/BenefitsVB/default.aspx o a
http://localhost/BenefitsCS/default.aspx.
8. En la pgina login.aspx, iniciar sesin con las nuevas credenciales.

Nota
Registrarse como empleado nuevo en el sitio Web Coho Winery de un
compaero
1. Abrir un nuevo navegador e ir a
http://Nombreequipocompaero/BenefitsVB/default.aspx o a
http://Nombreequipocompaero/BenefitsCS/default.aspx.
Deberamos ser redirigidos a la pgina login.aspx del sitio Web Coho
Winery del compaero.
2. Hacer clic en Click here! Para abrir el formulario Web Form
registration.aspx y registrarse como nuevo empleado. Deberamos ver el
formulario Web Form register.aspx.
3. Introducir la direccin electrnica y una contrasea para ser agregado a la
base de datos como un nuevo empleado. Hacer clic en Submit.
Ahora, deberamos poder ver todas las pginas del sitio Web Benefits del
compaero.

Ejercicio 4 (si se dispone de tiempo)
Permitir a los usuarios abandonar la sesin
En este ejercicio, agregaremos cdigo a la pgina signout.aspx que permite a
los usuarios abandonar el sitio Web Coho Winery. Cerrar la sesin puede
resultar til cuando un usuario comparte un equipo con otro usuario y desea
asegurarse de que el otro usuario no pueda acceder a informacin privada.
Actualizar el control de usuario header.ascx y agregar el formulario
Web Form signout.aspx
1. Abrir el proyecto BenefitsVB o BenefitsCS en la solucin LabApplication
de Visual Studio .NET.
2. En el Explorador de soluciones, eliminar el control de usuario header.ascx.
Agregar el control de usuario header.ascx y el formulario Web Form
signout.aspx desde la carpeta VB\Starter\BenefitsVB o
CS\Starter\BenefitsCS al proyecto BenefitsVB o BenefitsCS. Estas carpetas
pueden encontrarse dentro del fichero labs14.zip
3. El control de usuario header.ascx actualizado contiene un nuevo enlace
denominado Sign out que abre el formulario signout.aspx.
4. Abrir el formulario signout.aspx. El formulario Web Form contiene
informacin que notifica al usuario que se cerrar su sesin y un botn Sign
Out.
5. Abrir la pgina de cdigo subyacente signout.aspx.vb o signout.aspx.cs y
localizar el siguiente comentario en el procedimiento de evento
cmdSignout_Click:
TODO Lab 14: Implement the signout

6. Escribir el cdigo para cerrar la sesin de los usuarios y redirigirlos al
formulario Web Form login.aspx.
El cdigo debera ser como el siguiente:
FormsAuthentication.SignOut()
Response.Redirect("login.aspx")

FormsAuthentication.SignOut();
Response.Redirect("login.aspx");

Visual Basic .NET
Visual C#
Guardar y probar
1. Guardar los cambios.
2. Generar el proyecto BenefitsVB o BenefitsCS.
3. Abrir un nuevo navegador e ir a http://localhost/BenefitsVB/default.aspx o
http://localhost/BenefitsCS/default.aspx.
Deberamos ser redirigidos a la pgina login.aspx.
4. Introducir la direccin electrnica y una contrasea, y hacer clic en Sign In
Now.
5. Hacer clic en el enlace Life Insurance y comprobar que la pgina life.aspx
se abre sin solicitar nuestras credenciales.
6. Hacer clic en el hiperenlace signout y clic en Sign Out.
Somos redirigidos a la pgina login.aspx.
7. Sin cerrar el navegador, ir de nuevo a
http://localhost/BenefitsVB/default.aspx o a
http://localhost/BenefitsCS/default.aspx. Actualizar el navegador.
Deberamos ser devueltos a la pgina login.aspx.







ndice
Descripcin 1
Leccin: descripcin de la seguridad para aplicaciones Web 2
Leccin: trabajar con autenticacin basada en Windows 14
Leccin: trabajar con autenticacin basada en formularios 25
Leccin: descripcin de la autenticacin mediante Microsoft
Passport 36


Seguridad en aplicaciones Web con
Microsoft ASP.NET
Seguridad en aplicaciones Web con Microsoft ASP.NET 1

Descripcin
Descripcin de la seguridadpara aplicaciones Web
Trabajar con autenticacin basada en Windows
Trabajar con autenticacin basada en formularios
Descripcin de la autenticacin de Microsoft Passport

*****************************
La seguridad de las aplicaciones Web es un tema crtico y complejo para los
desarrolladores Web. Un sistema seguro requiere una cuidadosa planificacin, y
los administradores y desarrolladores de sitios Web deben tener un
conocimiento muy claro de las opciones de que disponen cuando securizan sus
aplicaciones Web.
Microsoft ASP.NET est sincronizado con el .NET Framework e Internet
Information Server (IIS) para proporcionar seguridad a las aplicaciones Web.
Este mdulo trata en detalle los distintos mtodos de seguridad para las
aplicaciones Web.
En este mdulo, aprenderemos a:
Describir los mtodos de autenticacin de ASP.NET e IIS.
Utilizar la autenticacin basada en Windows para asegurar aplicaciones
Web ASP.NET.
Utilizar la autenticacin basada en formularios para asegurar aplicaciones
Web ASP.NET.
Utilizar Microsoft Passport para asegurar aplicaciones Web ASP.NET.

Introduccin
Objetivos
2 Seguridad en aplicaciones Web con Microsoft ASP.NET

Leccin: descripcin de la seguridad para aplicaciones
Web
Autenticacinfrenteaautorizacin
Cules sonlos mtodos deautenticacindeASP.NET?
Multimedia: mtodos deautenticacindeASP.NET
Comparacindelos mtodos deautenticacinde
ASP.NET
Cules sonlos mecanismos deautenticacindeIIS?
Demostracin: uso delos mecanismos deautenticacin
deIIS
Ques SecureSocketsLayer?

*****************************
Por definicin, las aplicaciones Web ofrecen a los usuarios acceso a un recurso
centralizado, el servidor Web, y, a travs de l, acceso a servidores de bases de
datos. Conociendo e implementando medidas de seguridad adecuadas para
nuestra aplicacin Web, podemos proteger nuestros propios recursos, adems
de proporcionar un entorno seguro en el que los usuarios trabajen
cmodamente.
En esta leccin, se describen distintos conceptos de seguridad: autenticacin,
autorizacin y mecanismos de autenticacin de IIS. Tambin estudiaremos el
protocolo Secure Sockets Layer (SSL).
En esta leccin, aprenderemos a:
Describir los dos conceptos fundamentales de seguridad para asegurar una
aplicacin Web.
Describir los tres mtodos de autenticacin de ASP.NET.
Distinguir entre los tres mtodos de autenticacin de ASP.NET.
Describir los cuatro mecanismos de autenticacin de IIS.
Describir SSL.

Introduccin
Objetivos de la leccin
Seguridad en aplicaciones Web con Microsoft ASP.NET 3

Autenticacin frente a autorizacin
Autenticacin
Acepta credenciales de un usuario
Valida las credenciales
Autorizacin
En funcin de las credenciales de autenticacin
suministradas, determina el derecho de acceso a un
recurso
Puede asignarse por nombre de usuario o por rol

*****************************
Para poder empezar a trabajar con temas relacionados con la seguridad,
debemos estar familiarizados con los dos conceptos fundamentales de seguridad
para las aplicaciones Web:
Autenticacin
Autorizacin

La autenticacin es el proceso de obtener las credenciales de identificacin de
un usuario, como un nombre y una contrasea, y validar esas credenciales
consultando a alguna autoridad, como una base de datos. Si las credenciales son
vlidas, la entidad que las ha presentado se considera una identidad autenticada.
Por ejemplo, todos los usuarios deben proporcionar un nombre de usuario y una
contrasea cada vez que inician sesin en una red. Estas credenciales se validan
consultndolas a una autoridad, como una base de datos o un servidor de
dominio basado en Microsoft Windows.
Despus de que una identidad haya sido autenticada, el proceso de autorizacin
determina si esa identidad tiene acceso a un recurso especfico. El proceso de
autorizacin limita los derechos de acceso concediendo o denegando permisos
especficos a una identidad autenticada.
Por ejemplo, podemos autorizar al usuario Ricardo Heras para que acceda a la
impresora de color, pero denegar el acceso al usuario Brbara Gmez. De modo
similar, podemos autorizar nicamente a los usuarios del grupo Multimedia el
acceso a la impresora de color y denegar el acceso al resto de usuarios.
Introduccin
Autenticacin
Autorizacin
4 Seguridad en aplicaciones Web con Microsoft ASP.NET

Cules son los mtodos de autenticacin de ASP.NET?
AutenticacinbasadaenWindows
Depende del sistema operativo Windows y de IIS
El usuario solicita una pgina Web segura y la solicitud pasa por IIS
Una vez IIS verifica las credenciales, se devuelve la pgina Web segura
Autenticacinbasadaenformularios
Las solicitudes no autenticadas son redirigidas a un formulario HTML
El usuario proporciona credenciales y enva el formulario HTML
Una vez verificadas las credenciales, se suministra una cookiede
autenticacin
AutenticacinmedianteMicrosoft Passport
Servicio de autenticacin centralizado que ofrece una nica opcin de inicio
de sesin
Microsoft Passport es un Servicio Web XML

*****************************
ASP.NET implementa la autenticacin mediante mtodos de autenticacin. Los
mtodos de autenticacin de ASP.NET contienen el cdigo necesario para
autenticar las credenciales de usuario.
ASP.NET soporta tres tipos de mtodos de autenticacin:
Autenticacin basada en Windows
Autenticacin basada en formularios
Autenticacin mediante Microsoft Passport

En la autenticacin basada en Windows, la aplicacin Web ASP.NET depende
del sistema operativo Windows para autenticar al usuario. ASP.NET utiliza la
autenticacin basada en Windows conjuntamente con la autenticacin de IIS.
En la autenticacin basada en Windows, el usuario solicita una pgina Web
segura de la aplicacin Web, y la solicitud pasa por IIS. Si las credenciales del
usuario no coinciden con las de un usuario autorizado, IIS rechaza la solicitud.
A continuacin, el usuario debe introducir su nombre y contrasea en el
formulario de inicio de sesin. IIS verifica de nuevo las credenciales. Si son
correctas, IIS dirige la solicitud original a la aplicacin Web y el usuario recibe
la pgina Web segura.
La autenticacin basada en formularios hace referencia a un sistema donde
solicitudes no autenticadas son redirigidas a un formulario Hypertext Markup
Language (HTML) utilizando la redireccin en el lado del cliente Hypertext
Transfer Protocol (HTTP). El usuario proporciona las credenciales y enva el
formulario. Si la aplicacin valida las credenciales en el formulario, el sistema
suministra al usuario una cookie de autenticacin. Las solicitudes subsiguientes
Introduccin
Mtodos de
autenticacin
Autenticacin basada en
Windows
Autenticacin basada en
formularios
Seguridad en aplicaciones Web con Microsoft ASP.NET 5

del usuario se emiten con la cookie de autenticacin en el encabezado de la
solicitud, y el usuario es autenticado en base a dicho encabezado.
La autenticacin mediante Passport consiste en un servicio de autenticacin
centralizado, proporcionado por Microsoft, que ofrece una nica opcin de
inicio de sesin y unos servicios con un perfil bsico a los sitios suscritos. Los
usuarios que se registren utilizando Passport estarn autenticados para acceder a
sitios Web utilizando una nica cuenta Passport. Microsoft Passport es un
Servicio Web XML, y es una parte esencial de Microsoft .NET.

Autenticacin mediante
Microsoft Passport
6 Seguridad en aplicaciones Web con Microsoft ASP.NET

Comparacin de los mtodos de autenticacin de ASP.NET
Inicio de sesin nico para
muchos sitios de Internet
No es necesario mantener una
base de datos para almacenar
informacin del usuario
Permite a los desarrolladores
personalizar el aspecto de la
pgina de inscripcin
Adecuada para aplicaciones de
Internet
Soporta todo tipo de clientes
Utiliza infraestructura Windows
existente
Controla el acceso a
informacin confidencial
Ventajas Ventajas
Basada en cookies
Implica cuota
Autenticacin
mediante
Microsoft
Passport
Basada en cookies
Autenticacin
basadaen
formularios
No apropiado para
la mayora de
aplicaciones de
Internet
Autenticacin
basadaen
Windows
Inconvenientes Inconvenientes M M todo todo

*****************************
Cada uno de los tres mtodos de autenticacin que soporta ASP.NET (basado
en Windows, basado en formularios y Microsoft Passport) es adecuado para
situaciones especficas. Cada mtodo tiene diversas ventajas e inconvenientes.
La autenticacin basada en Windows utiliza la infraestructura de Windows
existente y, por tanto, es ms adecuado en situaciones en las que se dispone de
un nmero fijo de usuarios con cuentas de usuario Windows existentes. Dos
ejemplos de situaciones de este tipo son:
El desarrollo de una intranet para una organizacin. Es muy probable que la
organizacin disponga de cuentas de usuario Windows configuradas para
cada empleado.
El control del acceso a informacin confidencial. Por ejemplo, los usuarios
del grupo de Recursos Humanos de una empresa pueden acceder a
directorios que contienen currculos de empleados e informacin de salarios.
Podemos utilizar la autenticacin basada en Windows para evitar que los
empleados de otros grupos, como el grupo de Desarrolladores, accedan a
estos documentos confidenciales.

El inconveniente de la autenticacin basada en Windows es que no es adecuada
para la mayora de aplicaciones de Internet. Por ejemplo, si estamos generando
un sistema pblico de registro de usuarios y contraseas, la autenticacin
basada en Windows no es una buena opcin de autenticacin. Con la
autenticacin basada en Windows, debe configurarse una cuenta de usuario de
Windows vlida por cada usuario que acceda a una pgina restringida. El
proceso de agregar nuevas cuentas de usuario no puede automatizarse
fcilmente.
Introduccin
Autenticacin basada en
Windows
Seguridad en aplicaciones Web con Microsoft ASP.NET 7

La autenticacin basada en formularios es una buena solucin si se desea
configurar un sistema personalizado de registro de usuarios para un sitio Web.
La ventaja de este tipo de autenticacin es que nos permite almacenar nombres
de usuario y contraseas en el mecanismo de almacenamiento que deseemos, ya
sea el archivo web.config, un archivo Extensible Markup Language (XML) o la
tabla en una base de datos.
La autenticacin basada en formularios depende de cookies para determinar la
identidad del usuario. Una vez habilitada la autenticacin basada en
formularios, el usuario no puede acceder a la pgina solicitada a menos que se
encuentre en el cliente una cookie especfica. Si esta cookie no est, o si no es
vlida, ASP.NET rechaza la solicitud y devuelve una pgina de inicio de sesin.
La autenticacin mediante Microsoft Passport tiene varias ventajas, incluyendo:
Permite a los usuarios utilizar el mismo nombre de usuario y contrasea
para iniciar sesin en numerosos sitios Web; por tanto, es menos probable
que los usuarios olviden sus contraseas. Por ejemplo, tanto Microsoft
Hotmail como Microsoft MSN utilizan Microsoft Passport para autenticar
usuarios.
No es necesario configurar y mantener una base de datos para almacenar la
informacin de registro. Microsoft se encarga de realizar todo el
mantenimiento.
Proporciona opciones para personalizar el aspecto de las pginas de registro
e inicio de sesin mediante plantillas.

El uso de la autenticacin mediante Microsoft Passport tiene dos
inconvenientes. En primer lugar, existe una cuota de suscripcin por utilizar el
servicio Microsoft Passport en desarrollo. En segundo lugar, la autenticacin
Microsoft Passport est basada en cookies.
Autenticacin basada en
formularios
Autenticacin mediante
Microsoft Passport
8 Seguridad en aplicaciones Web con Microsoft ASP.NET

Cules son los mecanismos de autenticacin de IIS?
Alto
Medio
Bajo
(Medio con SSL)
Ninguno
Nivel de Nivel de
seguridad seguridad
Utiliza NTLM o Kerberos
Generalmente adecuado para intranets,
no Internet
No funciona a travs de muchos
cortafuegos
Seguridad
integrada de
Windows
Enva la informacin en un hash(o
digest) codificado
Requiere Internet Explorer 5 o superior
Requiere Active Directory
Autenticacin
implcita
El cliente enva nombre de usuario y
contrasea como texto claro
Puede encriptarse utilizando SSL
Parte de la especificacin HTTP y
soportado por la mayora de
exploradores
Autenticacin
bsica
No se produce autenticacin Acceso annimo
Descripci Descripci n n Mecanismos Mecanismos

*****************************
Para poder utilizar la autenticacin basada en Windows, debemos configurar
antes el servidor Web IIS. Cuando un usuario solicita una pgina que requiere
autorizacin, el usuario debe ser autenticado a travs de IIS.
IIS proporciona varios mecanismos que pueden utilizarse para establecer
autenticacin, incluyendo:
Acceso annimo
Autenticacin bsica
Autenticacin implcita
Seguridad integrada de Windows

Para aplicaciones Web en las que usuarios desconocidos realizan solicitudes,
normalmente aplicaciones Web pblicas, IIS soporta un usuario annimo, un
usuario que no dispone de credenciales de autenticacin. Cuando IIS recibe una
solicitud de un usuario annimo, IIS hace la solicitud a Windows utilizando la
cuenta predeterminada IUSR_nombreequipo.

La cuenta predeterminada IUSR_ nombreequipo puede modificarse
mediante el complemento de administracin de IIS.

IIS tambin soporta un modelo de autenticacin bsica. En la autenticacin
bsica, se solicita a los usuarios sin credenciales que suministren un nombre de
usuario y una contrasea. Esta informacin se devuelve a IIS, y a partir de
entonces est disponible para la aplicacin Web. La ventaja de la autenticacin
bsica es que forma parte de la especificacin HTTP y est soportada por la
mayora de navegadores. La autenticacin bsica proporciona un modo til para
ofrecer acceso restringido a una aplicacin Web pblica.
Sin embargo, debido a que el usuario pasa un nombre de usuario y una
contrasea a IIS en forma de texto claro, la autenticacin bsica no ofrece un
Introduccin
Acceso annimo
Nota
Autenticacin bsica
Seguridad en aplicaciones Web con Microsoft ASP.NET 9

nivel alto de seguridad. Para incrementarlo, se utiliza SSL para encriptar
nombres de usuario y contraseas cuando se transmiten a travs de la red.
La autenticacin implcita es similar a la autenticacin bsica, pero utiliza la
encriptacin para enviar informacin del usuario al servidor. Si el acceso
annimo est deshabilitado, se pide a los usuarios sus credenciales (informacin
de inicio de sesin). El navegador combina esta informacin de inicio de sesin
con el resto de informacin almacenada en el cliente, y enva al servidor un
hash codificado denominado hash MD5 (o Message Digest). El servidor ya
dispone de una copia de esta informacin y recrea los destalles originales desde
su propio hash y autentica el usuario. Este mecanismo nicamente funciona con
Microsoft Internet Explorer 5 y superior, pero pasa a travs de cortafuegos,
servidores proxy e Internet.
Sin embargo, la autenticacin implcita nicamente funciona con cuentas de
dominio dadas de alta en el servicio de directorios Active Directory.

Para ms informacin sobre la configuracin de las cuentas de dominio
de Active Directory para permitir la autenticacin implcita, consultar la
documentacin de IIS.

Si el usuario que realiza la solicitud ya ha sido autenticado en una red basada en
Windows, IIS puede pasar las credenciales del usuario cuando solicite acceso a
un recurso. Las credenciales no incluyen el nombre de usuario y la contrasea,
nicamente un token encriptado que indica el estado de seguridad del usuario.
La seguridad integrada de Windows funciona con Microsoft Windows NTLM
(Windows NT Local Area Network (LAN) Manager) o con Kerberos. La
seguridad integrada de Windows tambin utiliza un algoritmo hash para
codificar y decodificar las credenciales del usuario.
Sin embargo, la seguridad integrada de Windows no resulta prctica en las
aplicaciones Web que deben atravesar cortafuegos. Por tanto, es ms adecuada
en escenarios de intranets corporativas.

Cuando se configura IIS, se pueden utilizar mltiples mecanismos de
autenticacin de IIS. Se puede seleccionar el acceso annimo u otros mtodos,
como la autenticacin bsica, implcita o integrada de Windows. Si se utilizan
mltiples mecanismos de autenticacin de IIS, y si la autenticacin annima
falla, el servidor Web intentar utilizar la autenticacin bsica, implcita o
integrada de Windows, dependiendo de los mtodos que estn seleccionados.

Autenticacin implcita
Nota
Seguridad integrada de
Windows
Nota
10 Seguridad en aplicaciones Web con Microsoft ASP.NET

Demostracin: uso de los mecanismos de autenticacin de IIS
Hacer clic conel botnderecho enMod16y hacer
clic enPropiedades
Hacer clic enlapestaaSeguridaddedirectorios
Hacer clic enModificar
Mostrar los mtodos
deautenticacin

*****************************
En esta demostracin, visualizaremos el cuadro de dilogo que se utiliza par
configurar los mecanismos de autenticacin de IIS.
Ejecutar la demostracin
1. En el men Inicio, hacer clic con el botn derecho en Mi PC y hacer clic en
Administrar.
2. En la consola Administracin de equipos, expandir Servicios y
aplicaciones, expandir Internet Information Services, expandir Sitios
Web, y expandir Sitio Web predeterminado.
3. Hacer clic con el botn derecho en la aplicacin Web Pract14VB o
Pract14CS y hacer clic en Propiedades.
4. En el cuadro de dilogo Pract14VB o Propiedades de Pract14CS, en la
ficha Seguridad de directorios, en la seccin Control de autenticacin y
acceso annimo, hacer clic en Modificar.
5. Mostrar los mtodos de autenticacin disponibles.

Introduccin
Seguridad en aplicaciones Web con Microsoft ASP.NET 11

Qu es Secure Sockets Layer?
SSL es un protocolo que se utiliza para transmitir datos de
forma segura atravs de una red. SSL securizalos datos
mediante:
Encriptacin de datos
- Asegura que los datos enviados son ledos nicamente por un
servidor destinatario seguro
Autenticacin de servidor
- Asegura que los datos se envan al servidor correcto
- Utiliza los certificados de servidor y de cliente
Integridad de los datos
- Protege la integridad de los datos
- Incluye un cdigo de autenticacin de mensajes que detecta si un
mensaje ha sido o no modificado
Utiliza HTTPS (HypertextTransferProtocolSecure) para
recuperar una pgina WebASP.NET

*****************************
IIS proporciona a los usuarios un canal de comunicacin seguro al soportar el
protocolo SSL y la encriptacin RSA Data Security tanto en el servidor como
en el cliente.

RSA son las siglas de Rivest, Shamir y Adleman, los nombres de los
cientficos que crearon este algoritmo.

SSL es un protocolo que se utiliza para transmitir datos de modo seguro a travs
de una red. SSL securiza la comunicacin de datos mediante:
Encriptacin de datos
Autenticacin de servidor
Integridad de datos

Cuando se introduce informacin en un formulario HTML y se enva a un sitio
Web, la informacin se transmite desde el navegador al servidor del sitio Web.
En el proceso de transmisin de la informacin, los datos introducidos en el
formulario pueden ser interceptados y ledos.
SSL encripta la informacin transmitida entre un servidor Web y un navegador
Web. La informacin se encripta utilizando un algoritmo pblicamente
conocido y una clave de sesin. El servidor Web genera una clave pblica que
puede utilizar cualquier cliente. El cliente genera una clave de sesin y utiliza la
clave pblica para encriptarla antes de enviarla al servidor Web. Los datos se
transmiten utilizando esta clave de sesin.
Introduccin
Nota
Qu es SSL?
Encriptacin de datos
12 Seguridad en aplicaciones Web con Microsoft ASP.NET

El nmero de bits de la clave de sesin determina la potencia de la encriptacin.
IIS soporta claves de sesin de 40 bits y claves de sesin ms potentes de 128
bits.
Seguridad en aplicaciones Web con Microsoft ASP.NET 13

La siguiente tabla muestra las ventajas e inconvenientes del uso de claves de
sesin de 40 bits y de 128 bits.
Clave de sesin Ventaja Inconveniente

Clave de sesin de
40 bits
La comunicacin es mucho
ms rpida.
No es muy segura, los mensajes
pueden ser modificados.
Clave de sesin de
128 bits
Muy segura, los mensajes
encriptados con clave de
sesin de 128 bits se
consideran inquebrantables.
La comunicacin es bastante ms
lenta; cuanto ms larga es la clave,
ms trabajo deben realizar el
servidor y el navegador para
encriptar y desencriptar el mensaje.

La autenticacin de servidor garantiza que los datos se envan al servidor
correcto y que ste es seguro.
Por ejemplo, podra ocurrir que visitramos un sitio Web que fuera muy
parecido a un sitio Web de comercio electrnico al que accedisemos
frecuentemente. Podra parecer igual que el sitio Web que conocemos, y
proporcionaramos la informacin de nuestra tarjeta de crdito para adquirir un
artculo. Sin embargo, alguien que deseara engaarnos podra crear un sitio
Web idntico al sitio Web de comercio electrnico autntico y robar la
informacin de nuestra tarjeta de crdito.
Para evitar que un sitio Web se haga pasar por otro, utilizamos SSL para
autenticar sitios Web. Cuando instalamos SSL en nuestro servidor Web,
debemos instalar un certificado de servidor. El certificado de servidor contiene
informacin sobre nuestra organizacin, nuestro sitio Web y el emisor del
certificado.
Para funcionar como un ID digital, un certificado de servidor debe estar
firmado por una autoridad de certificacin. La autoridad de certificacin acta
como un tercero de confianza que verifica la identidad de un sitio Web para sus
usuarios.
SSL tambin soporta certificados de cliente. Los certificados de cliente se
utilizan para autenticar navegadores Web en lugar de servidores Web.
SSL protege la integridad de los datos cuando viajan entre el servidor Web y los
navegadores Web. SSL garantiza que los datos recibidos por el servidor de
destino no han sufrido ninguna modificacin.
Cuando los mensajes se transmiten con SSL, incluyen un cdigo de
autenticacin de mensaje. Este cdigo detecta si el mensaje ha sido modificado.
Despus de configurar nuestro servidor para que utilice SSL, podemos solicitar
cualquier pgina de nuestro sitio Web utilizando una conexin segura. Para
recuperar una pgina Web, SSL utiliza Hypertext Transfer Protocol Secure
(HTTPS). Por ejemplo, una direccin con la forma
https://www.nuestrodominio.com/login.aspx en lugar de http://www.
nuestrodominio.com/pagina.aspx.
Esto funciona para cualquier pgina de nuestro sitio Web.

ASP.NET proporciona la propiedad Request.IsSecureConnection que
nos permite determinar si nos encontramos en una conexin https segura.

Autenticacin de
servidor
Certificado de servidor
Certificado de cliente
Integridad de datos
Uso de SSL en pginas
ASP.NET
Nota
14 Seguridad en aplicaciones Web con Microsoft ASP.NET

Leccin: trabajar con autenticacin basada en Windows
Cmo habilitar la autenticacin basada en Windows
Leer informacin del usuario
Demostracin: uso de la autenticacin basada en
Windows

*****************************
La autenticacin basada en Windows debera utilizarse para securizar las
aplicaciones Web cuando sabemos qu usuarios accedern a nuestro sitio Web.
En esta leccin, estudiaremos el procedimiento para utilizar la autenticacin
basada en Windows para securizar nuestras aplicaciones Web.
En esta leccin, aprenderemos a:
Utilizar la autenticacin basada en Windows para securizar aplicaciones
Web.
Leer la identidad del usuario que est autenticado utilizando la autenticacin
basada en Windows.

Introduccin
Objetivos de la leccin
Seguridad en aplicaciones Web con Microsoft ASP.NET 15

Cmo habilitar la autenticacin basada en Windows
Configurar IIS parautilizar uno o varios de los
siguientes mecanismos de autenticacin :
Bsica
Implcita
Seguridad de Windows integrada
Establecer la autenticacin basada en Windows en
Web.config
1
1 1
2
2 2
<system.web>
<Authentication mode="Windows" />
</system.web>
<system.web>
<Authentication mode="Windows" />
</system.web>

*****************************
El proceso de securizar aplicaciones Web mediante la autenticacin basada en
Windows requiere cuatro pasos:
1. Configurar IIS.
2. Configurar la autenticacin en Web.config.
3. Configurar la autorizacin en Web.config.
4. IIS solicita informacin de inicio de sesin a los usuarios.

El primer paso para securizar aplicaciones Web utilizando la autenticacin
basada en Windows implica configurar IIS utilizando uno o varios de los tres
mecanismos de autenticacin:
Autenticacin bsica
Autenticacin implcita
Seguridad integrada de Windows

Normalmente, se habilita la autenticacin bsica o la seguridad integrada
de Windows. Si deseamos que nuestra aplicacin Web sea compatible con otros
navegadores, deberamos utilizar la autenticacin bsica. Si no estamos
utilizando un cortafuegos o servidor proxy, podemos utilizar la seguridad
integrada de Windows.

Introduccin
Configurar IIS
Nota
16 Seguridad en aplicaciones Web con Microsoft ASP.NET

El segundo paso para securizar aplicaciones Web utilizando la autenticacin
basada en Windows es establecer la seguridad de ASP.NET a autenticacin
basada en Windows en el archivo Web.config. Las opciones de configuracin
de seguridad en Web.config se incluyen en las secciones <authentication>,
<authorization>e <identity>.
Establecer el mtodo de autenticacin a Windows para la aplicacin en una
subseccin <authentication>de la seccin <system.web>en Web.config, como
muestra el siguiente ejemplo:
<system.web>
<authentication mode="Windows" />
</system.web>

Configurar la
autenticacin
Seguridad en aplicaciones Web con Microsoft ASP.NET 17

Cmo habilitar la autenticacin basada en Windows (continuacin)
Establecer la autorizacin en Web.config
Cuando los usuarios
acceden al formulario
Web Form, IIS solicita
informacin de inicio
de sesin
<location path="ShoppingCart.aspx">
<system.web>
<Authorization>
<deny users="?"/>
</Authorization>
</system.web>
</location>
<location path="ShoppingCart.aspx">
<system.web>
<Authorization>
<deny users="?"/>
</Authorization>
</system.web>
</location>
4
4 4
3
3 3

*****************************
Securizar las aplicaciones Web utilizando la autenticacin basada en Windows
es un proceso de cuatro pasos:
1. Configurar IIS.
2. Establecer la autenticacin en Web.config.
3. Establecer la autorizacin en Web.config.
4. IIS solicita informacin de inicio de sesin a los usuarios.

Hemos estudiado los dos primeros pasos en el apartado anterior. Esta seccin
explica los dos ltimos pasos.
Para indicar que slo algunas pginas especficas son seguras, debemos crear
una seccin <location>con subsecciones <system.web>y <authorization>para
cada pgina segura de nuestra aplicacin Web:
<location path="ShoppingCart.aspx">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>

Las opciones de configuracin que contiene la seccin <location>sern
dirigidas al archivo o directorio que se indica en el atributo path. La seccin
<configuration>puede tener mltiples secciones <location>.

La seccin <location>puede ser un formulario Web Form ASP.NET o
una carpeta. Si se especifica un nombre de carpeta, todas las subcarpetas bajo
ella sern seguras. Para asegurar mltiples formularios Web Forms o carpetas,
se utilizarn mltiples secciones <location>.

Introduccin
Configurar la
autorizacin
Nota
18 Seguridad en aplicaciones Web con Microsoft ASP.NET

En la seccin <system.web>, crear una subseccin <authorization>para
especificar qu tipo de autorizacin se impondr. Crear las etiquetas <allow>o
<deny>para permitir o denegar a los usuarios el acceso a una pgina. En estas
etiquetas, ? indica usuarios annimos y * significa todos los usuarios.
Por ejemplo, el siguiente cdigo deniega el acceso a todos los usuarios
annimos:
<authorization>
<deny users="?" />
</authorization>

El siguiente cdigo permite al usuario Mary acceder a una pgina:
<authorization>
<allow users="Mary" />
</authorization>

No es recomendable autorizar a usuarios individualmente, ya que este
proceso puede revelar informacin confidencial en caso de que el archivo
Web.config sea ledo. Adems, codificar directamente nombres de usuario en el
archivo Web.config no es un planteamiento flexible ya que no permite
modificar esta informacin programticamente en tiempo de ejecucin. La
codificacin directa de usuarios en el archivo Web.config resulta adecuado slo
para realizar pruebas.

El siguiente cdigo deniega a todos los usuarios annimos el acceso a la pgina
ShoppingCart.aspx:
<location path="ShoppingCart.aspx">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>

Tras especificar el modo de autenticacin, debemos indicar que toda la
aplicacin Web necesita autorizacin, o especificar qu pginas son seguras y,
por tanto, que requieren autorizacin.
Para indicar que toda la aplicacin es segura, crear una seccin <authorization>
en la seccin <system.web>, como muestra el siguiente cdigo de ejemplo:
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>

Nota
Seguridad en aplicaciones Web con Microsoft ASP.NET 19

Utilizamos el elemento <identity>para habilitar la impersonalizacin. La
impersonalizacin permite al servidor ejecutar cdigo bajo el contexto de
seguridad de una entidad solicitante o como un usuario annimo. En ASP.NET,
la impersonalizacin es opcional, y est deshabilitada de forma predeterminada.
El elemento <identity>debe estar bajo la seccin <system.web>en el archivo
Web.config o Machine.config. El siguiente cdigo muestra la sintaxis que se
utiliza con el elemento <identity>:
<identity impersonate="true|false"
username="username"
password="password" />

En el cdigo anterior, los atributos username y password especifican las
credenciales a utilizar si impersonate est establecido a true.
Se utiliza una cuenta especial de Windows denominada ASPNET si
impersonate est establecido a false, el valor predeterminado.
El ltimo paso del proceso para habilitar la autenticacin basada en Windows se
produce cuando los usuarios intentan acceder a un formulario Web Form desde
nuestra aplicacin Web e IIS solicita informacin de inicio de sesin al usuario.
El usuario debe proporcionar su nombre de usuario y contrasea. Si IIS aprueba
las credenciales del usuario, ste obtiene acceso a la pgina Web segura
solicitada.
IIS solicita informacin
de inicio de sesin a los
usuarios
20 Seguridad en aplicaciones Web con Microsoft ASP.NET

Leer informacin del usuario
Tras la autenticacin, el servidor Webpuede leer la
identidad del usuario
lblAuthUser.Text = User.Identity.Name
lblAuthType.Text = User.Identity.AuthenticationType
lblIsAuth.Text = User.Identity.IsAuthenticated
lblAuthUser.Text = User.Identity.Name
lblAuthType.Text = User.Identity.AuthenticationType
lblIsAuth.Text = User.Identity.IsAuthenticated
lblAuthUser.Text = User.Identity.Name;
lblAuthType.Text = User.Identity.AuthenticationType;
lblIsAuth.Text = User.Identity.IsAuthenticated;
lblAuthUser.Text = User.Identity.Name;
lblAuthType.Text = User.Identity.AuthenticationType;
lblIsAuth.Text = User.Identity.IsAuthenticated;

*****************************
Una vez finalizado el proceso de autenticacin basada en Windows, el servidor
Web puede leer la identidad del usuario desde cualquier pgina de la aplicacin
Web.
El servidor Web puede leer la identidad del usuario utilizando
User.Identity.Name. El servidor Web tambin puede identificar el mecanismo
de autenticacin de IIS que se utiliza para autenticar al usuario utilizando
User.Identity.AuthenticationType. Adems, el servidor Web puede
comprobar si el usuario est autenticado utilizando
User.Identity.IsAuthenticated.
El siguiente cdigo de ejemplo muestra cmo se permite al servidor Web leer la
identidad del usuario:
lblAuthUser.Text = User.Identity.Name
lblAuthType.Text = User.Identity.AuthenticationType
lblIsAuth.Text = User.Identity.IsAuthenticated

lblAuthUser.Text = User.Identity.Name;
lblAuthType.Text = User.Identity.AuthenticationType;
lblIsAuth.Text = User.Identity.IsAuthenticated;

User.Identity es un objeto de la clase WindowsIdentity.

Introduccin
Visual Basic .NET
C#
Nota
Seguridad en aplicaciones Web con Microsoft ASP.NET 21

Demostracin: uso de la autenticacin basada en Windows
Abrir IIS y configurarlo nicamente con
autenticacin annima
Crear un nuevo usuario en el equipo local
Abrir Web.configy configurarlo para
soportar autenticacin y autorizacin
Ejecutar la aplicacin WebASP.NET
segura
Los estudiantes pueden acceder a la
aplicacin Web ASP.NET segura en el
equipo del instructor

*****************************
En esta demostracin, veremos cmo configurar IIS para utilizar la
autenticacin basada en Windows con autenticacin bsica de IIS.
Seguidamente, veremos cmo crear un nuevo usuario en el servidor local, y
cmo configurar la autenticacin y autorizacin en Web.config. A
continuacin, veremos algunas demostraciones de acceso a pginas seguras y
no seguras. Finalmente, aprenderemos a conectarnos a una pgina segura en el
equipo del instructor.
Los archivos para esta demostracin se encuentran en el proyecto Pract14VB o
Pract14CS dentro del fichero demos14.zip.
Ejecutar la demostracin
1. Hacer clic con el botn derecho en Mi PC y hacer clic en Administrar.
2. Expandir Servicios y aplicaciones, expandir Internet Information
Services, y hacer clic en Sitios Web.
3. Hacer clic con el botn derecho en Sitio Web predeterminado y hacer clic
en Propiedades.
4. Hacer clic en la ficha Seguridad de directorios, y clic en Modificar para
abrir el cuadro de dilogo Mtodos de autenticacin de IIS.
5. Seleccionar la casilla de verificacin de autenticacin bsica (la contrasea
se enva en texto claro) y hacer clic en S en el cuadro de dilogo
Administrador de Servicios de Internet.

Comprobar que est seleccionada la casilla de verificacin de Acceso
Introduccin
Configurar IIS con
autenticacin bsica
Nota
22 Seguridad en aplicaciones Web con Microsoft ASP.NET

annimo. Verificar que no estn seleccionadas las casillas de verificacin de
Autenticacin implcita para servidores de dominios Windows y
Autenticacin integrada de Windows.

6. Escribir nombreequipo en el campo Dominio predeterminado, ya que esta
demostracin se realizar con una cuenta local creada en este equipo.
7. Hacer clic en Aceptar para cerrar el cuadro de dilogo Mtodos de
autenticacin de IIS.
8. Hacer clic en Aceptar para cerrar el cuadro de dilogo Propiedades del
sitio Web predeterminado. En el cuadro de dilogo Herencia omitida,
hacer clic en Aceptar.
9. En la consola Administracin de equipos, expandir Herramientas del
sistema, y expandir Usuarios y grupos locales.
10. Hacer clic con el botn derecho en la carpeta Usuarios y clic en Nuevo
usuario:
Introducir la siguiente informacin en el cuadro de dilogo Nuevo usuario.
Campo Valor

Nombre de usuario someone
Nombre completo someone
Descripcin Cuenta de demostracin de someone
Contrasea Secreto1
Confirmar contrasea Secreto1

a. Desactivar la casilla de verificacin de El usuario debe cambiar la
contrasea en el siguiente inicio de sesin.
b. Seleccionar la casilla de verificacin de El usuario no puede cambiar
la contrasea.
c. Hacer clic en Crear y clic en Cerrar.
En el lado derecho de la ventana del cuadro de dilogo Administracin de
equipos, debera aparecer el usuario someone.
11. Abrir el proyecto Pract14VB o Pract14CS y visualizar el archivo
Web.config en Microsoft Visual Studio .NET.
Una seccin <authentication>est configurada con autenticacin basada en
Windows.
Son necesarias dos secciones <location>para securizar dos pginas:
SecurePageDemo1.aspx y SecurePageDemo2.aspx. Con la configuracin
actual de IIS, si un usuario intenta acceder a una de estas pginas, se
utilizar la autenticacin bsica. Si un usuario intenta acceder las otras
pginas, se utilizar la autenticacin annima.
12. Abrir la pgina de cdigo subyacente SecurePageDemo1.aspx y explicar el
cdigo User.Identity.Name y User.Identity.AuthenticationType.

No se requiere ninguna instruccin Imports para utilizar
User.Identity.xxx.

13. Generar el proyecto Pract14VB o Pract14CS en la solucin 2310Demos.
14. Abrir un nuevo navegador e ir a:
Crear un nuevo usuario
en el equipo local
Mostrar la configuracin
de seguridad en el
archivo Web.config
Mostrar el nombre y tipo
de autenticacin en un
formulario Web Form.
Note
Seguridad en aplicaciones Web con Microsoft ASP.NET 23

http://localhost/Pract14VB/NonSecurePageDemo.aspx
http://localhost/Pract14CS/NonSecurePageDemo.aspx
Visual Basic .NET
C#
24 Seguridad en aplicaciones Web con Microsoft ASP.NET

15. Ir a:
http://localhost/Pract14VB/SecurePageDemo1.aspx
http://localhost/Pract14CS/SecurePageDemo1.aspx
Mostrar que aparece el cuadro de dilogo Connect to localhost.
16. Hacer clic en Cancelar y mostrar que se obtiene un error de servidor
porque se deniega el acceso.
17. Ir a:
http://localhost/Pract14VB/SecurePageDemo2.aspx
http://localhost/Pract14CS/SecurePageDemo2.aspx
Mostrar que tambin aparece el cuadro de dilogo Connect to localhost.
18. Escribir las credenciales Nombre de usuario como someone y Contrasea
como Secreto1 y hacer clic en Aceptar.
19. La pgina SecurePageDemo2.aspx debera mostrar el nombre de usuario
someone y el tipo de autenticacin bsica.
Ahora, podemos acceder a cualquier pgina segura, siempre que no
cerremos el navegador. Si cerramos el navegador, deberemos repetir el
proceso de autenticacin.
20. Ir a:
http://localhost/Pract14VB/SecurePageDemo1.aspx
http://localhost/Pract14CS/SecurePageDemo1.aspx
Mostrar que esta vez no se solicitan las credenciales.
21. Indicar a los estudiantes que vayan a:

http://Nombreequipoinstructor/Pract14VB/SecurePageDemo1.aspx
http://Nombreequipoinstructor/Pract14CS/SecurePageDemo1.aspx
Escribir las credenciales someone y Secreto1 cuando se solicite.
Tras introducir las credenciales, los estudiantes deberan poder ver
SecurePageDemo1.aspx y SecurePageDemo2.aspx.

Visual Basic .NET
C#
Visual Basic .NET
C#
Visual Basic .NET
C#
Los estudiantes acceder
al equipo del instructor
Visual Basic .NET
C#
Seguridad en aplicaciones Web con Microsoft ASP.NET 25

Leccin: trabajar con autenticacin basada en
formularios
Descripcin de la autenticacin basada en formularios
Multimedia: autenticacinbasada en formularios
Cmo habilitar la autenticacin basada en formularios
Crear una pgina de inicio de sesin
Demostracin: uso de la autenticacin basada en
formularios

*****************************
El mtodo de autenticacin que ms se utiliza habitualmente para securizar
aplicaciones Web con ASP.NET es la autenticacin basada en formularios.
En esta leccin, estudiaremos la arquitectura basada en formularios, y los pasos
para habilitar la autenticacin basada en formularios. Tambin estudiaremos
cmo configurar la seguridad en Web.config, y crear una pgina de inicio de
sesin.
En esta leccin, aprenderemos a:
Identificar la serie de eventos que tiene lugar durante la autenticacin
basada en formularios.
Identificar los pasos para habilitar la autenticacin basada en formularios.
Configurar autenticacin y autorizacin en un archivo Web.config.
Describir cmo crear una pgina de inicio de sesin.

Introduccin
Objetivos de la leccin
26 Seguridad en aplicaciones Web con Microsoft ASP.NET

Descripcin de la autenticacin basada en formularios
El cliente solicita pgina
Autorizado
Autenticacin
ASP.NET Forms
No
autenticado
Autenticado
Pginadeinicio
(los usuarios
introducen sus
credenciales)
Autenticado
Cookiede
autenticacin
Autorizado
No
autenticado
Acceso denegado
Pginasegura
solicitada

IIS
Nombre usuario
Contrasea
Alguien
***********
Enviar
Enviar
1
1 1
2
2 2
3
3 3
4
4 4
6
6 6
5
5 5
7
7 7

*****************************
Cuando un usuario solicita una pgina Web que est protegida por
autenticacin basada en formularios, la solicitud debe pasar primero por IIS.
Por ello, debemos establecer la autenticacin de IIS a acceso annimo.
Establecer IIS a annimo requiere que todas las solicitudes pasen por ASP.NET
antes de ser autenticadas.
En la autenticacin basada en formularios, se produce la siguiente serie de
eventos:
1. Un cliente genera una solicitud de una pgina .aspx protegida.
2. IIS recibe la solicitud y la pasa a ASP.NET. El modo de autenticacin est
establecido en acceso annimo y, por ello, la solicitud pasa directamente por
IIS.
3. ASP.NET comprueba si la solicitud dispone de una cookie de autenticacin
vlida anexa. Si es as, significa que las credenciales del usuario ya han sido
confirmadas y que la solicitud se ha examinado para su autorizacin.
ASP.NET realiza la verificacin de autorizacin comparando las
credenciales que contiene la cookie de autorizacin de la solicitud con las
opciones de configuracin de autorizacin del archivo Web.config. Si el
usuario es autorizado, se concede el acceso a la pgina segura solicitada.
4. Si la solicitud no tiene ninguna cookie anexa, ASP.NET redirecciona la
solicitud a una pgina de inicio de sesin (cuya ruta reside en el archivo de
configuracin de la aplicacin), donde el usuario introduce las credenciales
requeridas, normalmente un nombre y una contrasea.
Introduccin
Serie de eventos que
tienen lugar durante la
autenticacin basada en
formularios
Seguridad en aplicaciones Web con Microsoft ASP.NET 27

5. El cdigo de la aplicacin en la pgina de inicio de sesin comprueba las
credenciales para confirmar su autenticidad y, si son autenticadas, adjunta a
la solicitud una cookie que contiene las credenciales.
6. Si la autenticacin falla, la solicitud se devuelve con un mensaje de Acceso
denegado.
7. Si el usuario es autenticado, ASP.NET comprueba la autorizacin, como en
el paso 3, y puede permitir el acceso a la pgina segura solicitada
originalmente o redireccionar la solicitud a otra pgina, dependiendo del
diseo de la aplicacin.
Por otra parte, ASP.NET puede dirigir la solicitud a un formulario de
autorizacin personalizado donde se examinan las credenciales para la
autorizacin a la pgina protegida. Normalmente, si la autorizacin falla, la
solicitud se devuelve con un mensaje de Acceso denegado.

28 Seguridad en aplicaciones Web con Microsoft ASP.NET

Cmo habilitar la autenticacin basada en formularios
Configurar IIS parautilizar autenticacin annima
Establecer la autenticacin basada en formularios en
Web.config
Establecer la autorizacin
Generar un formulario Web
Formde inicio de sesin
1
1 1
2
2 2
3
3 3
4
4 4
<Authentication mode="Forms" >
<forms name=".namesuffix"
loginUrl="login.aspx" />
</Authentication>
<Authentication mode="Forms" >
<forms name=".namesuffix"
loginUrl="login.aspx" />
</Authentication>

*****************************
Para habilitar la autenticacin basada en formularios para nuestra aplicacin
Web, debemos realizar los cuatro pasos siguientes:
1. Configurar IIS para utilizar la autenticacin annima, para que el usuario
sea autenticado por ASP.NET y no por IIS.
2. Configurar el mtodo de autenticacin basado en formularios (Forms) para
la aplicacin en una subseccin <authentication>de la seccin
<system.web>en Web.config, como muestra el siguiente ejemplo:
<system.web>
<authentication mode="Forms">
<forms name=".namesuffix" loginUrl="login.aspx" />
</authentication>
</system.web>

Si se establece el modo de autenticacin en Forms, se debe agregar un
elemento <forms>a la seccin <authentication>, como muestra el ejemplo
anterior.
En la seccin <forms>, se configura la cookie. Establecer el atributo name
con el sufijo que utilizarn las cookies y el atributo loginUrl con la URL
(Uniform Resource Locator) de la pgina a la que se redirigen las
solicitudes no autenticadas.
3. Configurar la seccin <authorization>de Web.config. El proceso de
configurar la autorizacin para autenticacin basada en formularios es
idntico al proceso de la autenticacin basada en Windows.
Al configurar la seccin <authorization>en Web.config, podemos denegar
o permitir a los usuarios el acceso a nuestra aplicacin Web. Tambin
Introduccin
Habilitar la autenticacin
basada en formularios
Configurar la
autenticacin
Configurar la
autorizacin
Seguridad en aplicaciones Web con Microsoft ASP.NET 29

podemos indicar que toda la aplicacin Web requiere autorizacin o
especificar qu pginas son seguras y, por tanto, requieren autorizacin.
4. Generar un formulario Web Form de inicio de sesin, login.aspx.
Login.aspx puede ser una pgina sencilla con dos campos, uno para el
nombre de usuario y otro para la contrasea. Login.aspx requiere que los
usuarios introduzcan su nombre de usuario y contrasea para establecer
autenticacin y poder acceder a nuestra aplicacin Web.

Generar un formulario
Web Formde inicio de
sesin
30 Seguridad en aplicaciones Web con Microsoft ASP.NET

Crear una pgina de inicio de sesin
Aadir unareferenciaaSystem.Web.Security
Lapginadeinicio desesinverificay examinalas credenciales deun
usuario
Leer las credenciales del usuario desdeunacookie
User.Identity.Namedevuelve el valor guardado por
FormsAuthentication.RedirectFromLoginPage
Sub cmdLogin_Click(s As Object, e As eventArgs)
If (login(txtEmail.Text, txtPassword.Text))
FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, False)
End If
End Sub
Sub cmdLogin_Click(s As Object, e As eventArgs)
If (login(txtEmail.Text, txtPassword.Text))
FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, False)
End If
End Sub
private void cmdLogin_Click(object sender, EventArgs e)
{
if (login(txtEmail.Text, txtPassword.Text))
FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, false);
}
private void cmdLogin_Click(object sender, EventArgs e)
{
if (login(txtEmail.Text, txtPassword.Text))
FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, false);
}

*****************************
Durante la autenticacin, todas las solicitudes son redirigidas a la pgina de
inicio de sesin especificada en el atributo loginUrl de la etiqueta <forms>. La
pgina de inicio de sesin verifica y examina las credenciales de un usuario.
Si el modo de autenticacin est establecido a Forms, ASP.NET busca una
cookie de autenticacin adjunta a la solicitud de una pgina segura. Si
ASP.NET no encuentra la cookie de autenticacin, redirecciona la solicitud a la
pgina de inicio de sesin especificada.
En la pgina de inicio de sesin, el usuario introduce las credenciales
requeridas. La pgina las examina, bien a travs de cdigo especfico de la
aplicacin o invocando a FormsAuthentication.Authenticate. Si las
credenciales con vlidas, se genera una cookie y el usuario es redirigido a la
pgina solicitada originalmente invocando a
FormsAuthentication.RedirectFromLoginPage. Sin embargo, si las
credenciales no son vlidas, el usuario permanece en la pgina de inicio de
sesin y recibe un mensaje que indica que las credenciales de inicio de sesin
no son vlidas.
El mtodo RedirectFromLoginPage toma dos parmetros: userName, que
especifica el nombre del usuario para la autenticacin basada en formularios, y
createPersistentCookie. Si el valor de createPersistentCookie es true, una
cookie de autenticacin persistente, una cookie escrita en el sistema de archivos
cliente, se crea en el equipo del usuario. De lo contrario, se crea una cookie de
autenticacin temporal (no persistente).
Introduccin
Cmo funciona una
pgina de inicio de
sesin?
Seguridad en aplicaciones Web con Microsoft ASP.NET 31

La siguiente tabla muestra una lista todos los mtodos del objeto
FormsAuthentication, que pueden utilizarse en el proceso de autenticacin.
Mtodo Funcin

Authenticate Dadas las credenciales suministradas, este mtodo intenta
validar las credenciales comparndolas con las que
contiene el almacn de credenciales configurado.
GetAuthCookie Crea una cookie de autenticacin para un determinado
nombre de usuario. La cookie no se establece como parte
de la respuesta saliente; por tanto, una aplicacin puede
tener un mayor control sobre cmo se emite la cookie.
GetRedirectUrl Devuelve la URL redirigida para la solicitud original que
ha provocado la redireccin a la pgina de inicio de
sesin.
RedirectFromLoginPage Redirige a los usuarios autenticados a la URL solicitada
originalmente.
SetAuthCookie Crea un ticket de autenticacin para el userName dado y
lo adjunta a la coleccin de cookies de la respuesta
saliente. No realiza una redireccin.
SignOut Dado un usuario autenticado, invocar SignOut elimina el
ticket de autenticacin estableciendo un SetCookie con
un valor vaco. De este modo, se eliminan las cookies
duraderas y las cookies por sesin.

Para poder utilizar la clase FormsAuthentication, deberamos referenciar la
biblioteca System.Web.Security utilizando Imports o using.
Una pgina de inicio de sesin es simplemente una pgina ASP.NET con un
formulario HTML, un botn Submit y un procedimiento de evento Click para
el botn Submit.
El siguiente es un ejemplo de un formulario en una pgina de inicio de sesin:
<form id="Login" method="post" runat="server">
<P>Email: <asp:TextBox id="txtEmail" runat="server">
</asp:TextBox></P>
<P>Password<asp:TextBox id="txtPassword" TextMode="password"
runat="server">
</asp:TextBox></P>
<P><asp:Button id="cmdLogin" Text="Sign In Now"
OnClick="cmdLogin_Click"
runat="server">
</asp:Button></P>
<P><asp:Label id="lblInfo" runat="server">
</asp:Label></P>
</form>

En el procedimiento de evento Click del botn Submit, se valida la
informacin que se introduce en el formulario, y si sta es vlida, invocar
FormsAuthentication.RedirectFromLoginPage. El mtodo
RedirectFromLoginPage emite la cookie y, a continuacin, redirige al usuario
a la pgina solicitada originalmente.
Crear una pgina de
inicio de sesin
32 Seguridad en aplicaciones Web con Microsoft ASP.NET

El siguiente cdigo de ejemplo utiliza una funcin personalizada denominada
Login para validar el nombre de usuario y la contrasea, e invoca
RedirectFromLoginPage si el nombre de usuario y la contrasea son vlidos:
Private Sub cmdLogin_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles cmdLogin.Click

Dim strCustomerId As String
'Validate User Credenciales
strCustomerId = Login(txtEmail.Text, txtPassword.Text)

If (strCustomerId <> "") Then
FormsAuthentication.RedirectFromLoginPage _
(strCustomerId, False)
Else
lblInfo.Text = "Invalid Credenciales: Please try again"
End If

End Sub

private void cmdLogin_Click(object sender, EventArgs e)
{
string strCustomerId;
//Validate User Credenciales
strCustomerId = Login(txtEmail.Text, txtPassword.Text);

if (strCustomerId != "")
{
FormsAuthentication.RedirectFromLoginPage
(strCustomerId, false);
}
else
{
lblInfo.Text = "Invalid Credenciales: Please try again";
}
}

Despus de que un usuario haya sido autenticado, podemos obtener su nombre
de usuario programticamente utilizando la propiedad User.Identity.Name.
Esta propiedad resulta til para generar una aplicacin que utilice el nombre del
usuario como una clave para guardar informacin en una tabla de una base de
datos o un recurso del directorio.
Tambin podemos identificar dinmicamente el mecanismo de autenticacin
(Forms en este caso) utilizando User.Identity.AuthenticationType y ver si el
usuario est autenticado utilizando User.Identity.IsAuthenticated.
Con la autenticacin basada en formularios, User.Identity es un objeto de la
clase FormsIdentity.

Cuando se utiliza la autenticacin basada en formularios, la contrasea
que un usuario introduce en la pgina de inicio de sesin se enva a travs de la
red en texto claro. Es importante utilizar SSL para encriptar estas contraseas.

Visual Basic .NET
C#
Leer credenciales desde
cookies
Nota
Seguridad en aplicaciones Web con Microsoft ASP.NET 33

Demostracin: uso de la autenticacin basada en formularios
Abrir IIS y configurar paraautenticacin
annima
Abrir Web.configy configurarlo para
autenticacin y autorizacin
Abrir la pgina de inicio de sesin y
mostrar el cdigo
Ejecutar la aplicacin WebASP.NET
Los estudiantes pueden acceder a la
aplicacin Web ASP.NET segura en el
equipo del instructor

*****************************
En esta demostracin, veremos cmo configurar IIS para utilizar la
autenticacin basada en formularios con autenticacin annima; a continuacin,
veremos cmo configurar la autenticacin y autorizacin en el archivo
Web.config. Veremos cmo funciona la pgina de inicio de sesin, y algunas
demostraciones de acceso a pginas seguras y a pginas no seguras. Finalmente,
aprenderemos a conectar a una pgina segura en el equipo del instructor.
Los archivos para demostracin se encuentran en el proyecto Pract14VB o
Mob16CS de la solucin 2310Demos.
Ejecutar la demostracin
1. Hacer clic con el botn derecho en Mi PC y clic en Administrar.
2. Ir a Servicios y aplicaciones, expandir Internet Information Services, y
hacer clic en Sitios Web.
3. Hacer clic con el botn derecho en Sitio Web predeterminado y hacer clic
en Propiedades.
4. Hacer clic en la ficha Seguridad de directorios y clic en Modificar para
abrir el cuadro de dilogo Mtodos de autenticacin de IIS.
5. Desactivar la casilla de verificacin de Autenticacin bsica (la contrasea
se enva en texto claro).

Verificar que las casillas de verificacin Autenticacin implcita para
servidores de dominios Windows y Autenticacin integrada de Windows
estn desactivadas y que la casilla de verificacin Acceso annimo est
seleccionada.

Introduccin
Configurar IIS para
acceso annimo
Nota
34 Seguridad en aplicaciones Web con Microsoft ASP.NET

6. Hacer clic en Aceptar.
7. Hacer clic en Aceptar.
8. Hacer clic en Aceptar en el cuadro de dilogo Herencia omitida.
9. Abrir el archivo Web.config.
Utilizando los comentarios <!-- y -->, comentar la seccin <system.web>
que contiene el modo de autenticacin Windows y quitar los comentarios
de la seccin <system.web>que contiene el modo de autenticacin
Forms.
Explicar la nueva seccin <authentication>que redirige todas las solicitudes
no autenticadas a la pgina LoginDemo.aspx.
Las mismas dos pginas (SecurePageDemo1.aspx y
SecurePageDemo2.aspx) se han configurado como pginas seguras.
10. Guardar los cambios.
11. Abrir la pgina de cdigo subyacente LoginDemo.aspx.vb o
LoginDemo.asox.cs.
Mostrar lo siguiente:
El procedimiento de evento cmdLogin_Click que valida el nombre de
usuario y contrasea invocando la funcin Login, e invocar
RedirectFromLoginPage, si las credenciales son vlidas.
El primer parmetro de RedirectFromLoginPage es la identidad de
usuario que deseamos guardar se encuentra en la cookie. A
continuacin, durante la sesin, esta identidad puede ser leda desde
cualquier pgina utilizando User.Identity.Name.
RedirectFromLoginPage crea una cookie de autenticacin temporal
(no persistente) (segundo parmetro establecido a false).
Para utilizar RedirectFromLoginPage, debemos importar
System.Web.Security.
El cdigo de la funcin Login. Mostrar cmo la funcin Login invoca el
procedimiento almacenado EmployeeLogin para verificar las
credenciales introducidas consultndolas a la base de datos.
Abrir Microsoft SQL Server

Enterprise Manager, y, a continuacin,


abrir la base de datos de Coho y mostrar el registro en la tabla Logins.
Finalmente, mostrar el procedimiento almacenado EmployeeLogin.

Cuando veamos la base de datos Coho, observar que en la
autenticacin basada en formularios, a diferencia de la autenticacin basada
en Windows, depende de nosotros como desarrolladores el disear y
gestionar una base de datos de usuarios.

12. Generar el proyecto.
13. Abrir un nuevo navegador e ir a
http://localhost/Pract14VB/NonSecurePageDemo.aspx
http://localhost/Pract14CS/NonSecurePageDemo.aspx
14. Ir a:
http://localhost/Pract14VB/SecurePageDemo1.aspx
http://localhost/Pract14CS/SecurePageDemo1.aspx
Configurar la seguridad
en el archivo Web.config
Mostrar la pgina
LoginDemo.aspx
Importante
Visual Basic .NET
C#
Visual Basic .NET
C#
Seguridad en aplicaciones Web con Microsoft ASP.NET 35

Mostrar que somos redirigidos automticamente a la pgina
LoginDemo.aspx.
Mostrar que la URL, que contiene la pgina SecurePageDemo1.aspx, es la
pgina necesaria para redirigir al usuario a la pgina solicitada, si las
credenciales son correctas.
15. Escribir las credenciales someone@cohowinery.com en Nombre de
usuario (Email), introducir una contrasea no vlida y hacer clic en Sign In
Now.
El inicio de sesin fallar porque la contrasea no es vlida.
16. Introducir las credenciales someone@cohowinery.com en Nombre de
usuario (Email), someone en Contrasea, y hacer clic de nuevo en Sign
In Now. Seremos redirigidos a la pgina SecurePageDemo1.aspx.
17. La pgina SecurePageDemo1.aspx debera mostrar el nombre de usuario 1
(que es la identidad que est almacenada en la cookie en LoginDemo.aspx)
y el tipo de autenticacin Forms.
Ahora podemos acceder a cualquier pgina segura, siempre que no cerremos
el navegador. Si cerramos el navegador, deberemos pasar de nuevo por el
proceso de autenticacin debido a que la cookie es temporal (no
persistente).
18. Ir a:
http://localhost/Pract14VB/SecurePageDemo2.aspx
http://localhost/Pract14CS/SecurePageDemo2.aspx
Mostrar que esta vez no se nos pide que introduzcamos nuestras
credenciales.
19. Indicar a los estudiantes que vayan a:

http://Nombreequipoinstructor/Pract14VB/SecurePageDemo1.aspx
http://Nombreequipoinstructor/Pract14CS/SecurePageDemo1.aspx
Escribir las siguientes credenciales, nombre: someone@cohowinery.com, y
contrasea: someone, cuando se soliciten.
Despus de introducir las credenciales, los estudiantes deberan poder ver
SecurePageDemo1.aspx y SecurePageDemo2.aspx.

Visual Basic .NET
C#
Los estudiantes
acceden al equipo del
instructor
Visual Basic .NET
C#
36 Seguridad en aplicaciones Web con Microsoft ASP.NET

Leccin: descripcin de la autenticacin mediante
Microsoft Passport
Cmo funcionaMicrosoft Passport
Otros recursos deMicrosoft Passport

*****************************
La ventaja de Microsoft Passport es que los usuarios pueden presentar las
mismas credenciales en cualquier sitio Web participante, y nicamente deben
iniciar sesin una vez. Cuando los usuarios cierran su navegador o indican que
desean finalizar la sesin, la cookie se destruye y el usuario debe iniciar sesin
de nuevo para acceder a los recursos de alguno de los sitios participantes.
En esta leccin, estudiaremos el conjunto de eventos que tiene lugar durante la
autenticacin mediante Microsoft Passport. Tambin estudiaremos cmo
implementar la autenticacin con Microsoft Passport.
En esta leccin, aprenderemos a:
Describir el conjunto de eventos que tiene lugar durante la autenticacin con
Microsoft Passport.
Identificar otros recursos de Microsoft Passport.

Introduccin
Objetivos de la leccin
Seguridad en aplicaciones Web con Microsoft ASP.NET 37

Cmo funciona Microsoft Passport
sitioweb.msft
sitioweb.msft
Cliente
Cliente
Passport.com
Passport.com
El clientesolicitaunapginaal host
1
1 1
2
2 2
3
3 3
4
4 4
5
5 5
El sitio redirigeal clienteaPassport.com
El clientees redirigido einiciasesinen
Passport.com
Passportdevuelveunacookie
conlainformacindel
ticket
6
6 6
El clienteaccedeal host, esta
vez conlainformacin
del ticket
El hostdevuelveunformulario
WebFormy posiblemente
unanuevacookieque
puedeleer y escribir

*****************************
Durante la autenticacin de usuarios utilizando Microsoft Passport, se producen
una serie de eventos.
1. Cuando el cliente solicita una pgina segura del sitio Web (host), la solicitud
se enva primero a IIS. IIS autentica al usuario como annimo y pasa la
solicitud a ASP.NET.
2. ASP.NET comprueba si existe una cookie especial en el cliente. Si la cookie
no est presente, la solicitud es rechazada y el cliente es redirigido al sitio
Web Passport.com para ser autenticado.
3. Passport genera un formulario de inicio de sesin que enva al cliente. El
usuario proporciona la informacin adecuada de inicio de sesin y la enva
al sitio de Passport.
4. Si las credenciales suministradas coinciden con las de la base de datos de
Passport, ste autentica al usuario y devuelve al cliente una cookie con un
ticket de autenticacin.
5. El cliente enva la solicitud inicial, esta vez con la informacin del ticket de
autenticacin, a la aplicacin Web ASP.NET.
6. De nuevo, IIS autentica al usuario como annimo. ASP.NET autentica al
usuario basndose en el ticket de autenticacin, y devuelve al cliente el
formulario Web Form seguro.

Una vez el usuario ha sido autenticado con Passport, es posible que se le
conceda acceso a otros sitios Web que tambin utilicen la autenticacin
mediante Microsoft Passport.
Introduccin
Serie de eventos que
tienen lugar en la
autenticacin de
Microsoft Passport
38 Seguridad en aplicaciones Web con Microsoft ASP.NET

Otros recursos de Microsoft Passport
Sitios Web
http://www.passport.com
http://msdn.microsoft.com

*****************************
Es posible que, cuando estudiemos de Microsoft Passport, necesitemos acceder
a recursos para encontrar respuestas a preguntas especficas. Los dos sitios Web
siguientes pretenden ofrecer un punto de partida para encontrar ms
informacin sobre Microsoft Passport.
Podemos encontrar informacin sobre Microsoft Passport en los siguientes
sitios:
El enlace de informacin para desarrolladores en http://www.passport.com
Los recursos de http://msdn.microsoft.com
Introduccin
Sitios Web

También podría gustarte