Sie sind auf Seite 1von 705

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

NET

Gua de instalacin de las bases de datos

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

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 Microsoft Windows XP con Service Pack 1 o superior Microsoft SQL Server 2000 Microsoft SQL Server 2000 Service Pack 2 o superior Microsoft Visual Studio .NET 2003 Macromedia Flash Player Versin probada y notas Professional Edition Developer Edition Visual Studio .NET CDs No aplicable Enterprise Developer Edition Versin 5.0 Trainer Compact Disk o http://www.macromedia.com

1. Instalar y configurar las bases de datos SQL Server


Resumen de la tarea
Instalar las bases de datos del laboratorio ejecutando el script SQL restoreDB.sql.

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.

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. Precaucin 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. Precaucin 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.

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. Precaucin 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.

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. Precaucin 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.

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. Precaucin 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

ubicacin en http://localhost/DentalServiceCS, hacer clic en Agregar a solucin, y clic en Aceptar. Precaucin 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.

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

Nota 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.

Introduccin a la plataforma Microsoft .NET

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

Introduccin a la plataforma Microsoft .NET

Descripcin
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.

Qu es la plataforma Microsoft .NET? Qu es el .NET Framework? Cules son los componentes del .NET Framework? Cules son las mejoras de 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.

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. 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.

Introduccin a la plataforma Microsoft .NET

Qu es la plataforma Microsoft .NET?


Objetivo
Presentar los principales servicios y caractersticas que proporciona la plataforma .NET.

Qu es la plataforma Microsoft .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.

Visual Studio .NET Orquestacin .NET Framework Internet COM+ .NET Enterprise Servers

Internet

Servicios Building Block

Windows
Disponible en la actualidad Con mejoras .NET Nuevas capacidades

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

Tecnologas intrnsecas de la Plataforma .NET


Las tecnologas intrnsecas que integran la plataforma .NET incluyen: .NET Framework
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.

Sugerencia

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. 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. Nota 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. 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.

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 Microsoft SQL Server 2000 Descripcin 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. 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. 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. 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. Ofrece una herramienta para implantar y administrar aplicaciones Web de alta disponibilidad. 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. Proporciona un marco de trabajo de aplicacin, sofisticados mecanismos de realimentacin y capacidades de anlisis.

Microsoft BizTalk Server 2000

Microsoft Host Integration Server 2000

Microsoft Exchange 2000 Enterprise Server

Microsoft Application Center 2000 Microsoft Internet Security and Acceleration Server 2000

Microsoft Commerce Server 2000

Introduccin a la plataforma Microsoft .NET

Qu es 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.

Descripcin del .NET Framework Beneficios del .NET Framework Lenguajes en el .NET Framework

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.

Introduccin a la plataforma Microsoft .NET

Descripcin del .NET Framework


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.

Visual Basic

C++

C#

J#

Visual Studio .NET

Common Language Specification

.NET Framework

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

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.

Introduccin a la plataforma Microsoft .NET

Beneficios del .NET Framework


Objetivo
Explicar cmo los objetivos de diseo del marco de trabajo facilitan el desarrollo de aplicaciones.

Basado en estndares y prcticas Web Extensible Fcil de utilizar por los desarrolladores Diseado utilizando modelos de aplicaciones unificados
.NET Framework

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.

Formularios VB

MFC/ATL

ASP

API de Windows

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. Sugerencia 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 multilenguaje. 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
Comente que las clases de .NET Framework que estn selladas no pueden ser extendidas.

Introduccin a la plataforma Microsoft .NET

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


Objetivo
Presentar los lenguajes soportados en el .NET Framework.

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

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 Microsoft Visual Basic .NET Descripcin 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. 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). 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. J# .NET es un lenguaje para los desarrolladores que utilicen el lenguaje Java 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

Microsoft Visual C#

Extensiones gestionadas C++

Microsoft Visual J# .NET

Introduccin a la plataforma Microsoft .NET al mximo el .NET Framework. Lenguajes de terceros

11

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?


Objetivo
Describir los temas que se tratan en esta seccin.

Presentacin

En esta seccin, estudiaremos los diferentes componentes que integran el .NET Framework.

Los componentes del .NET Framework 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

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


Objetivo
Ofrecer una descripcin de los componentes del .NET Framework.

Presentacin

Visual Basic .NET utiliza los componentes que proporciona el .NET Framework.

ASP .NET Formularios y Servicios Web

Interfaz de usuario

ADO.NET: Datos y XML


Biblioteca de clases del .NET Framework

Common Language Runtime

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


Objetivo
Destacar algunos de los principales componentes del Common Language Runtime.

Soporte de la biblioteca de clases base

Presentacin

Soporte de hilos

COM marshaler

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.

Verificador de tipos

Gestor de excepciones

Motor de seguridad
MSIL a compiladores nativos

Motor de depuracin
Recolector de basura

Gestor de cdigo

Cargador de clases

Sugerencia

Muchos de estos temas son interesantes para los desarrolladores de Visual Basic .NET y se tratan en diversas partes del curso.

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.

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 Cargador de clases Microsoft Intermediate Language (MSIL) a compilador nativo Gestor de cdigo Recolector de basura Motor de seguridad Motor de depuracin Verificador de tipos Gestor de excepciones Descripcin Carga la implementacin de un tipo en memoria y lo prepara para su ejecucin. Convierte lenguaje intermedio MSIL a cdigo nativo (just-intime). Gestiona la ejecucin de cdigo. Gestiona automticamente la vida de todos sus objetos. Es un recolector de basura multiprocesador y escalable. Proporciona seguridad basada en evidencias en funcin del origen del cdigo y del usuario. Le permite depurar su aplicacin y trazar la ejecucin de cdigo. No permitir casts inseguros ni variables no inicializadas. Es posible verificar IL para garantizar la seguridad de tipos. Proporciona una gestin de excepciones estructurada e integrada con Windows Structured Exception Handling (SEH). Se han mejorado los informes de errores. Proporciona clases e interfaces que permiten programacin multi-hilo. Proporciona marshaling hacia y desde COM. 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.

Soporte de hilos (threads) COM marshaler Soporte de la biblioteca de clases del .NET Framework

16

Introduccin a la plataforma Microsoft .NET

Biblioteca de clases del .NET Framework


Describir la biblioteca de clases del .NET Framework y el espacio de nombres principal: System.

Objetivo

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.

System
System.Net
System.Reflection
System.IO

System.Security
System.Text
System.Threading
System.Diagnostics

System.Runtime. InteropServices
System.Globalization

System.Configuration

System.Collections

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 Threading tambin 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.

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.

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


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.

System.Data

System.Xml

System.Xml.Schema
DataSet

DataRow

DataTable

DataView

System.Xml.Serialization

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 Recordset a 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.

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.

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


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
System.Web
Servicios

IU

Descripcin

HtmlControls

Descubrimiento

WebControls

Protocolos
Cach
Configuracin

Seguridad
Estado de Sesin

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. Sugerencia 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.

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
Explicar cmo el .NET Framework gestiona el interfaz de usuario para las aplicaciones Windows tradicionales.

Objetivo

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.

System.Windows.Forms
System.Drawing

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?


Objetivo
Presentar algunas de las principales 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

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. Sugerencia

Explique cada uno de los puntos de la diapositiva y sus ventajas para los desarrolladores.

Importantes mejoras de lenguaje


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


Objetivo
Describir los espacios de nombres en el .NET Framework.

Descripcin de los espacios de nombres

Presentacin

En esta seccin, estudiaremos los espacios de nombres del .NET Framework.

Espacios de nombres Espacios de nombres utilizados en mdulos obligatorios Espacios de nombres utilizados en mdulos opcionales

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
Entender el modo en que los espacios de nombres proporcionan una jerarqua de tipos y funcionalidades fciles de utilizar.

Objetivo

Espacios de nombres

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.

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

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


Objetivo
Explicar qu espacios de nombres se ensean en este curso, y qu espacios de nombres no.

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 Mdulo 10 System.IO Mdulo 11 System.Net System.Net.Sockets Mdulo 12 System.Runtime.Serialization Mdulo 13 System.Runtime.Remoting.Channels System.Web.Services

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.Data y 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


Objetivo
Completar la informacin sobre los espacios de nombres presentados en la seccin anterior.

Espacios de nombres utilizados en mdulos opcionales


Mdulo 14 System.Threading Mdulo 16 System.Data Mdulo 17 System.Reflection

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.

Descripcin del Microsoft .NET Framework

ndice Descripcin Leccin: introduccin al .NET Framework Leccin: descripcin de ASP.NET Leccin: Recursos 1 2 14 26

Leccin: descripcin de la aplicacin del laboratorio 20

Descripcin del Microsoft .NET Framework

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

*****************************use******************************

Introduccin

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.

Objetivos

Descripcin del Microsoft .NET Framework

Leccin: Introduccin al .NET Framework


Qu es el .NET Framework? Qu problemas soluciona .NET? Componentes del .NET Framework Beneficios de usar el .NET Framework Visual Studio .NET: la herramienta para el desarrollo .NET

*****************************use******************************

Introduccin

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.

Objetivos de la leccin

Descripcin del Microsoft .NET Framework

Qu es el .NET Framework?

Herramientas del desarrollador

Clientes

Bases de datos Servicios

Aplicaciones Web ASP.NET

Web XML .NET Framework

Experiencias del usuario

*****************************use******************************

Introduccin

.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.

Qu es la plataforma .NET?

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. Qu es el .NET Framework? 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.

Descripcin del Microsoft .NET Framework

Qu problemas soluciona .NET?


Incluso con Internet, la mayora de aplicaciones y dispositivos tienen problemas comunicndose entre s Los programadores terminan por escribir infraestructura en lugar de aplicaciones Los programadores han tenido que limitar su alcance o aprender continuamente nuevos lenguajes

*****************************use******************************

Introduccin

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

Aspectos previos a .NET

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

Componentes del .NET Framework


Visual C++ Basic

C#

Perl

Python

Servicios Web XML Interfaz de usuario ASP.NET ADO.NET y XML Biblioteca de clases de .NET Framework Common Language Runtime
Message Queuing COM+ (Transacciones, Particiones, Agrupacin de objetos) Agrupaci objetos) IIS WMI

Win32

*****************************use******************************

Introduccin

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.

El .NET Framework

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. Nota 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. Nota 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 JScript .NET. Terceras partes pueden proporcionar lenguajes adicionales. Nota Para ms informacin sobre los lenguajes basados en .NET, consultar

Descripcin del Microsoft .NET Framework

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 funcionalidad de las clases .NET est disponible de forma universal El cdigo est organizado en clases y espacios de nombres jerrquicos Independiente del lenguaje
MFC/ATL Windows API
1980s

Visual Basic ASP


1990s

.NET Framework
2000s

*****************************use******************************

Introduccin

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.

Ventajas

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.

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


Herramientas Web Forms Herramientas Windows Forms

Mltiples Lenguajes

Visual Studio .NET

Proceso de errores

Herramientas Servicios Web

Acceso a datos

Disear
*****************************use******************************

Desarrollar

Depurar

Implantar

Introduccin

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. Nota 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.

Caractersticas de Visual Studio .NET

Descripcin del Microsoft .NET Framework

13

Prctica opcional

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. Nota 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.

14

Descripcin del Microsoft .NET Framework

Leccin: descripcin de ASP.NET


Qu es ASP.NET? Aplicacin Web ASP.NET Multimedia: modelo de ejecucin ASP.NET

*****************************use******************************

Introduccin

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.

Objetivos de la leccin

Descripcin del Microsoft .NET Framework

15

Qu es ASP.NET?
El sucesor y evolucin de Active Server Pages, ms flexible Pginas Web dinmicas que pueden acceder a recursos del servidor Procesamiento de formularios Web Forms en el lado servidor Los Servicios Web XML permiten crear aplicaciones Web distribuidas Independiente del navegador Independiente del lenguaje

*****************************use***********

Introduccin

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.

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. Nota Aprenderemos cmo consumir y crear servicios Web XML en el Mdulo Consumir y crear Servicios Web XML.

Descripcin del Microsoft .NET Framework

17

Aplicacin Web ASP.NET


Servidor Web ASP.NET
Clientes
Web Forms Page1. aspx Page2. aspx Pginas cdigo trasero global. asax Web. config machine. config

Internet Internet

Servicios Web

Cach de Salida

Datos XML

Base de datos

Componentes Componentes

*****************************

Introduccin

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.

Partes de una aplicacin Web 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.

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******************************

Introduccin

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).

Primera solicitud

Segunda solicitud

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.

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******************************

Introduccin

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.

Objetivo de la leccin

Descripcin del Microsoft .NET Framework

21

Instalacin de la aplicacin de laboratorio


3 proyectos Aplicacin Web Biblioteca de Clases Servicio Web XML 12 formularios Web Forms 3 bases de datos Doctors Dentists Coho

*****************************use******************************

Introduccin

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. Nota En este curso, podremos escoger entre desarrollar soluciones de laboratorio utilizando Visual Basic .NET o C#.

Detalles

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

4, 5, 14

13 9, 10, 11, 15 9 12

12 8, 14

12 12

12 16 12, 14 16

Descripcin del Microsoft .NET Framework (continuacin) Pgina Visual Basic .NET signout.aspx signout.aspx.vb Web.config Proyecto componente BenefitsListVB Proyecto servicio Web DentalService Pgina C# signout.aspx signout.aspx.cs Web.config Proyecto componente BenefitsListCS Proyecto servicio Web DentalService Archivo de configuracin. 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. 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. 14, 15, 16 3 Descripcin Permite al usuario cerrar sesin y salir del sistema.

23

Laboratorios

16

13

24

Descripcin del Microsoft .NET Framework

Demostracin: solucin del laboratorio


Pgina inicio
Login.aspx Login.aspx Coho Winery

Pgina inicio Benefits


Default.aspx Default.aspx

Registro

Register.aspx Register.aspx

Componente Men

Encabezado pgina
Header.ascx Header.ascx

ASPState

Class1.vb or Class1.cs Class1.vb or Class1.cs

Web. config

tempdb

Life Insurance
Life.aspx Life.aspx

Retirement
Retirement.aspx Retirement.aspx

Medical

Medical.aspx Medical.aspx

Dentists
Dental.aspx Dental.aspx

Aplicacin Web Prospectus.aspx Prospectus.aspx Laboratorio Arch. XML

Prospectus

Doctors

Control usuario
namedate.ascx namedate.ascx

Doctors.aspx Doctors.aspx

Servicio Web XML

dentalService1.asmx dentalService1.asmx

Doctors

Dentists

*****************************use******************************

Introduccin

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.

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******************************

Introduccin Objetivo de la leccin

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.

Descripcin del Microsoft .NET Framework

27

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

*****************************use******************************

Recursos

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.

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.

Uso de Microsoft Visual Studio .NET

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

Uso de Microsoft Visual Studio .NET

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

*****************************use******************************

Introduccin

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.

Objetivos

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.

Uso de Microsoft Visual Studio .NET

Leccin: Descripcin de Visual Studio .NET


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

*****************************use******************************

Introduccin

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.

Objetivos de la leccin

Uso de Microsoft Visual Studio .NET

Por qu Visual Studio .NET?


Por qu Visual 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******************************

Introduccin

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++

Un IDE

Mltiples lenguajes

Uso de Microsoft Visual Studio .NET

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

Uso de Microsoft Visual Studio .NET

Mltiples tipos de proyectos

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.

Navegador integrado

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).

Soporte de depuracin

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. Nota Para ms informacin sobre la depuracin, consultar el Mdulo Seguimiento en las aplicaciones Web Microsoft ASP.NET.

Interfaz personalizable

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.

Uso de Microsoft Visual Studio .NET

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

*****************************use******************************

Introduccin

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.

Introduccin

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 mshelp://MS.VSCC.

Novedades

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. Comunidad en lnea Titulares 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.

Bsqueda en lnea Descargas Servicios Web XML

Alojamiento Web Mi perfil

Uso de Microsoft Visual Studio .NET

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******************************

Introduccin

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.

Soluciones y proyectos

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.

Uso de Microsoft Visual Studio .NET

Uso de Microsoft Visual Studio .NET

10

Plantillas de proyectos

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 Aplicacin para Windows Descripcin 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. La plantilla Biblioteca de clases se utiliza para crear clases y componentes reutilizables que pueden compartirse con otros proyectos. La plantilla Biblioteca de controles de Windows se utiliza para crear controles personalizados para usarlos en formularios Windows Forms. 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. 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. 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. 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. 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.

Biblioteca de clases

Biblioteca de controles de Windows Aplicacin Web ASP.NET

Servicio Web ASP.NET

Aplicacin de consola

Servicio de Windows

Proyecto vaco

11

Uso de Microsoft Visual Studio .NET (continuacin) Plantillas de proyecto Proyecto Web vaco Descripcin La plantilla Proyecto Web vaco es para usuarios avanzados que deseen empezar con un proyecto vaco. La plantilla crea la estructura de 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. 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.

Nuevo proyecto en carpeta existente

La siguiente tabla muestra una lista de plantillas de proyectos adicionales disponibles en Visual Studio .NET.
Grupo de plantillas Proyectos Visual C++ Descripcin 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. Las plantillas incluyen: Proyectos de bases de datos Proyectos empresariales Proyectos de extensibilidad Proyectos de aplicacin Application Center Test

Otros proyectos

Nota 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.

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 Editor/Navegador Examinador de objetos Explorador de soluciones

Explorador de servidores

Propiedades

Lista de tareas

Ayuda dinmica

*****************************use******************************

Introduccin

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.

Editor/navegador

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.

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. Examinador de objetos El Examinador de objetos es una herramienta que proporciona informacin sobre los objetos y sus mtodos, propiedades, eventos y constantes.

Explorador de soluciones

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.

17

Uso de Microsoft Visual Studio .NET

Ayuda dinmica

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.

Propiedades

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.

Uso de Microsoft Visual Studio .NET

18

Lista de tareas

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.

19

Uso de Microsoft Visual Studio .NET

Explorador de servidores

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.

Cuadro de herramientas

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.

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. Crear una solucin Visual Studio .NET 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. Crear un proyecto de aplicacin Web ASP.NET como parte de la solucin Visual Basic .NET 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 lista Tipos de proyecto, hacer clic en Proyectos Visual Basic. En la lista de Plantillas, hacer clic en Aplicacin Web ASP.NET, establecer la Ubicacin en http://localhost/

Uso de Microsoft Visual Studio .NET

22

MyFirstWebApplicationVB, hacer clic en Agregar a solucin, y clic en Aceptar. C# En la lista Tipos de proyecto, hacer clic en Proyectos Visual C#. En la lista de Plantillas, 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. Visualizar las propiedades del formulario Web Form 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. Ayuda dinmica 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. Explorador de servidores 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. Lista de tareas 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.

Examinar la ubicacin de los nuevos archivos

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******************************

Introduccin Objetivos de la leccin

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.

27

Uso de Microsoft Visual Studio .NET

El proceso de desarrollo
El proceso de desarrollo
Crear una especificacin Crear una especificacin de diseo de diseo

Crear un Crear un nuevo proyecto nuevo proyecto

Crear la interfaz Crear la interfaz yyescribir cdigo escribir cdigo

Probar yy Probar depurar depurar Generar Generar

Visual Studio .NET

Implementar Implementar

*****************************use******************************

Introduccin

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

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. Nota 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. Nota 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. Nota Para ms informacin sobre implementar una aplicacin Web ASP.NET, consultar el Mdulo Configuracin, optimizacin y distribucin de aplicaciones Web ASP.NET.

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 Forms ASP.NET(.aspx) Servicios Web ASP.NET (.asmx) Clases, pginas de cdigo subyacente (.vb o .cs) Clases de aplicaciones globales (.asax) Archivo Web.config Ensamblado del proyecto (.dll)

*****************************use******************************

Introduccin

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.

Archivos de solucin

Archivos de proyecto

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.

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. Archivos de aplicaciones Web 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. Nota 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.

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. Otros archivos 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. Nota Para ms informacin sobre archivos que soportan aplicaciones Web ASP.NET, consultar la documentacin de Visual Studio .NET.

Ensamblado de proyecto

Uso de Microsoft Visual Studio .NET

32

Estructura de los archivos de una aplicacin Web


Estructura de los archivos de una aplicacin Web
Mis Documentos Mis Documentos Visual Studio Visual Studio projects projects Solution Solution Inetpub Inetpub

wwwroot wwwroot ProjectA ProjectA

Solution.sln

ProjectA.vbproj WebForm1.aspx WebForm1.aspx.vb


(pgina de cdigo subyacente)
Bin Bin

Archivos de desarrollo Archivos de ensamblado Generar

ProjectA.dll

*****************************use******************************

Introduccin

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.

Mis documentos

Inetpub

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.

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. El Ensamblado 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.

Uso de Microsoft Visual Studio .NET

34

Demostracin: creacin de un proyecto de aplicacin Web aplicacin Web


Poblar el formulario Web Form ASP.NET Agregar un nuevo formulario Web Form 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. Poblar un formulario Web Form ASP.NET 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: Visual Basic .NET C#
'TODO: Write Hello World //TODO: Write Hello World

Se agrega automticamente una nueva tarea a la Lista de tareas debido al smbolo TODO. Agregar un nuevo formulario Web Form ASP.NET 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.

35

Uso de Microsoft Visual Studio .NET

Nota 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. Agregar un nuevo proyecto Visual Basic .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. Escribir cdigo para un control button 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: Visual Basic .NET C#
lblMessage.Txt = "Hello World!" lblMessage.Txt = "Hello World!";

C#

Nota 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. Generar y ejecutar la solucin 15. Verificar que MyFirstWebApplicationVB o MyFirstWebApplicationCS es el proyecto de inicio. En el Explorador de soluciones, MyFirstWebApplicationVB o MyFirstWebApplicationCS deberan aparecer en negrita. Nota 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.

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: Visual Basic .NET C#
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

Ver el resultado

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. Nota 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.

Crear formularios Web Forms con Microsoft ASP.NET

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

Crear formularios Web Forms con Microsoft ASP.NET

Descripcin
Crear formularios Web Forms Uso de controles de servidor

***************************** use******************************

Introduccin

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.

Objetivos

Crear formularios Web Forms con Microsoft ASP.NET

Leccin: crear formularios Web Forms


Qu es un formulario Web Form? Crear un formulario Web Form con Visual Studio .NET Demostracin: convertir una pgina HTML en un formulario Web Form

***************************** use******************************

Introduccin

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.

Objetivos de la leccin

Crear formularios Web Forms con Microsoft ASP.NET

Qu es un formulario Web Form?


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

Introduccin

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.

Extensin .aspx

Crear formularios Web Forms con Microsoft ASP.NET

Atributos de la pgina

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:

Visual Basic .NET C#

<%@ 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. Nota 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.

Crear formularios Web Forms con Microsoft ASP.NET

Atributos del cuerpo

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 para pageLayout: 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>

Atributos del formulario

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>

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. Ejemplo con Visual Basic .NET 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>

Crear formularios Web Forms con Microsoft ASP.NET

Ejemplo de C#

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>

Crear formularios Web Forms con Microsoft ASP.NET

Crear un formulario Web Form con Visual Studio .NET


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

***************************** use******************************

Introduccin Aplicaciones Web nuevas

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.

Crear formularios Web Forms adicionales

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.

Crear formularios Web Forms con Microsoft ASP.NET

Actualizar pginas HTML

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.

10

Crear formularios Web Forms con Microsoft ASP.NET

Demostracin: convertir una pgina HTML en un formulario Web Form


Cambiar la extensin .htm por 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


Qu es un control de servidor? Tipos de controles de servidor Guardar View State 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******************************

Introduccin

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.

Objetivos de la leccin

Crear formularios Web Forms con Microsoft ASP.NET

13

Qu es un control de servidor?
<asp:Button id="Button1" runat="server" <asp:Button id="Button1" runat="server" Text="Submit"/> Text="Submit"/>

Runat="server" Los eventos ocurren en el servidor View state saved Have built-in functionality Common object model Todos tiene atributos Id y Text Crear browser-specific HTML

***************************** use******************************

Introduccin

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" />

Runat=server

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.

Funcionalidad incluida

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.

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

14

Crear formularios Web Forms con Microsoft ASP.NET

Modelo de objetos comn

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>

Crear cdigo HTML especfico del navegador

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.

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******************************

Introduccin

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.

Controles de servidor HTML

Controles de servidor Web

Nota Para ms informacin sobre los controles de validacin, consultar el

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.

Nota 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.

Ejemplo de controles equivalentes

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"/>

Crear formularios Web Forms con Microsoft ASP.NET

17

Guardar el estado de la vista


Control oculto ViewState de pares de nombre y valor almacenados en el formulario Web Form
<input type="hidden" name="__VIEWSTATE" <input type="hidden" name="__VIEWSTATE" value="dDwtMTA4MzE0MjEwNTs7Pg==" /> value="dDwtMTA4MzE0MjEwNTs7Pg==" />

De forma predeterminada, ajustable a nivel de formulario Web Form y control


<%@ Page EnableViewState="False" %> <%@ Page EnableViewState="False" %> <asp:ListBox id="ListName" <asp:ListBox id="ListName" EnableViewState="true" runat="server"> EnableViewState="true" runat="server"> </asp:ListBox> </asp:ListBox>

***************************** use******************************

Introduccin

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.

18

Crear formularios Web Forms con Microsoft ASP.NET

Control oculto

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>

Deshabilitar y habilitar ViewState

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>

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

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

Agregar una etiqueta al formulario Web Form

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.

Uso de SmartNavigation

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:

Visual Basic .NET

<%@ 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" %>

C#

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.

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" <input type="text" id="txtName" runat="server" /> runat="server" />

***************************** use******************************

Introduccin

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.

Ejemplo

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" />

22

Crear formularios Web Forms con Microsoft ASP.NET

Controles de servidor Web


Controles de servidor W eb
Existen en el espacio de nom bres System .W eb.UI.W ebControls Sintaxis del control
<asp:TextBox id="TextBox1" <asp:TextBox id="TextBox1" runat="server">Text_to_Display runat="server">Text_to_Display </asp:TextBox> </asp:TextBox>

HTML generado por el control


<input name="TextBox1" type="text" <input name="TextBox1" type="text" value="Text_to_Display" value="Text_to_Display" Id="TextBox1"/> Id="TextBox1"/>

***************************** use******************************

Introduccin

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.

Controles de servidor Web intrnsecos

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 <asp:button> <asp:checkbox> Control HTML equivalente <input type=submit> <input type=checkbox> Funcin del control de servidor Web Crea un botn que enva una peticin al servidor. Crea una casilla de verificacin que puede seleccionarse haciendo clic. Crea un hiperenlace a una etiqueta anchor HTML. Crea un rea que se utiliza para mostrar una imagen. Crea un botn que incorpora la visualizacin de una imagen en lugar de texto. Crea un botn que tiene el aspecto de un hiperenlace.

<asp:hyperlink> <asp:image> <asp:imagebutton>

<a href=""> </a> <img src=""> <input type=image>

<asp linkButton>

Ninguno

Crear formularios Web Forms con Microsoft ASP.NET (continuacin) Control de servidor Web <asp:label> <asp:listbox> <asp:panel> Control HTML equivalente <span> </span> <select size="5"> </select> <div> </div>

23

Funcin del control de servidor Web Crea texto que los usuarios no pueden modificar. Crea una lista de opciones. Permite mltiples selecciones. Crea una divisin sin bordes en el formulario que se utiliza como contenedor para otros controles. Crea un nico control de botn de opcin. Crea una tabla. Crea un control de cuadro de texto.

<asp:radiobutton> <asp:table> <asp:textbox>

<input type=radiobutton> <table> </table> <input type=text>

Controles de validacin

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

RequiredFieldValidator ValidationSummary

Nota Para ms informacin sobre los controles de validacin, consultar el Mdulo Validar la entrada de datos del usuario. Controles ricos estndares
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 AdRotator Calendar Funcin Muestra una secuencia (predefinida o aleatoria) de imgenes. Muestra un calendario grfico en el que los usuarios pueden seleccionar fechas.

24

Crear formularios Web Forms con Microsoft ASP.NET

Controles enlazados a listas

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 CheckBoxList Repeater Funcin Muestra datos como una columna de casillas de verificacin. 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. 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. Muestra informacin, normalmente enlazada a datos en forma tabular, con columnas. Tambin proporciona mecanismos para permitir editar y clasificar. Muestra datos en un men desplegable. Muestra datos en una ventana. Muestra datos en una columna de botones de opcin.

DataList

DataGrid

DropDownList Listbox RadioButtonList

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

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: 5 minutos

***************************** 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 asp:textbox asp:button asp:label HTML enviado al cliente

26

Crear formularios Web Forms con Microsoft ASP.NET asp:listbox asp:image asp:hyperlink asp:calendar

Seleccionar el control adecuado


Utilizar controles de servidor HTML si:
Se prefiere un modelo de objetos como HTML Se est trabajando con pginas HTML existentes y se desea agregar funcionalidades de pgina ASP.NET Web El control interactuar con scripts cliente y servidor El ancho de banda es limitado

Utilizar controles de servidor Web si:


Se prefiere un modelo de programacin Visual Basic Se est escribiendo una pgina que puede ser utilizada por varios navegadores Se necesitan funcionalidades especficas como un calendario o rotacin de publicidad El ancho de banda no es un problema

***************************** use******************************

Introduccin

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.

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.

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.

Controles de servidor Web

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.

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, Button y Label Agregar un control Calendar

***************************** use******************************

En esta demostracin, veremos cmo agregar controles de servidor Web a un formulario Web Form. Ejecutar esta demostracin

Agregar sencillos controles de servidor Web

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 TextBox Button Label ID txtName cmdSubmit lblMessage Text Name Submit 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.

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.

Cambiar el navegador de destino

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.

Cambiar la presentacin de la pgina

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.

Agregar un control Calendar

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.

Prctica A: Crear un formulario Web Form con Microsoft ASP.NET


Logon Page Logon Page
Login.aspx Login.aspx Coho Winery

Benefits Benefits Home Page Home Page


Default.aspx Default.aspx

Registration Registration
Register.aspx Register.aspx

Menu Menu Component Component

Page Header Page Header


Header.ascx Header.ascx

ASPState

Class1.vb or Class1.cs Class1.vb or Class1.cs

Web. config

tempdb

Life Insurance Life Insurance


Life.aspx Life.aspx

Retirement Retirement
Retirement.aspx Retirement.aspx

Medical Medical

Medical.aspx Medical.aspx

Dental Dental

Dental.aspx Dental.aspx

Lab Web Application

Prospectus Prospectus
Prospectus.aspx Prospectus.aspx

Doctors Doctors

Doctors.aspx Doctors.aspx

User Control User


namedate.ascx namedate.ascx

XML Web XML Web Service Service

dentalService1.asmx dentalService1.asmx

XML Files
******************************

Doctors

Dentists

Objetivos

En este laboratorio, aprenderemos a: Crear un formulario Web Form con Microsoft ASP.NET y poblarlo con controles Web. Establecer propiedades de los controles Web en un formulario Web Form ASP.NET. Nota Este laboratorio se centra en los conceptos de este mdulo y, por ello, podra no cumplir las recomendaciones de seguridad de Microsoft.

Requisitos previos Escenario

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.

Tiempo estimado para realizar este laboratorio: 30 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 Importante 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 Importante 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. Precaucin 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.

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 Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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 Importante 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 Para un proyecto Visual Basic .NET 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 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. Para un proyecto Visual C# 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 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 clic en Aceptar. Precaucin Verificar que se han escrito correctamente las maysculas del proyecto BenefitsList.

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: Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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.

Ejercicio 1 Crear el formulario Web Form Default.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. Nota 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 CheckBoxList Button Label ID chkListBenefits cmdSubmit lblSelections Text Ninguno Submit 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.

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. Nota 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 First Item Second Item Third Item Valor First Item Second 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).

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.

Ejercicio 2 Crear el formulario Web Form Life.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.

6. Establecer las propiedades ID y Text de cada control como se muestra en la siguiente tabla.
Control Cuadro de texto Name Cuadro de texto Birth date Cuadro de texto Coverage Casilla de verificacin Short-term disability Casilla de verificacin Long-term disability Botn Save Label1 Label2 Label3 Label4 Label5 ID txtName txtBirth txtCoverage chkShortTerm chkLongTerm cmdSave default default default default default Texto ninguno ninguno ninguno Short-term disability Long-term disability Save Life Insurance Application Proof of good health appointment Name: Birth Date: Coverage:

Nota 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.

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

ndice Descripcin Leccin: uso de las pginas de cdigo subyacente 1 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

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

***************************** use******************************

Introduccin

En este mdulo, estudiaremos los distintos mtodos que pueden utilizarse para agregar cdigo a nuestra aplicacin Web con Microsoft ASP.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.

Objetivos

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

Leccin: uso de las pginas de cdigo subyacente


Cmo implementar cdigo Escribir cdigo en lnea Qu son las pginas de cdigo subyacente? Entender cmo funcionan las pginas de cdigo subyacente

***************************** use******************************

Introduccin

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.

Objetivos de la leccin

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

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******************************

Implementar cdigo

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.

Agregar cdigo a un formulario Web Form con 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> <HTML> <asp:Button id="btn" runat="server"/> <asp:Button id="btn" runat="server"/> </HTML> </HTML> <SCRIPT Language="vb" runat="server"> <SCRIPT Language="vb" runat="server"> Sub btn_Click(s As Object, ee As EventArgs) Handles btn.Click Sub btn_Click(s As Object, As EventArgs) Handles btn.Click ... ... End Sub End Sub </SCRIPT> </SCRIPT> <HTML> <HTML> <asp:Button id="btn" runat="server"/> <asp:Button id="btn" runat="server"/> </HTML> </HTML> <SCRIPT Language="c#" runat="server"> <SCRIPT Language="c#" runat="server"> private void btn_Click(object sender, System.EventArgs e) private void btn_Click(object sender, System.EventArgs e) {{ .. .. .. }} </SCRIPT> </SCRIPT>
***************************** use******************************

Introduccin

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:

Cdigo en lnea

Visual Basic .NET

<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>

C#

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


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

Agregar cdigo a un formulario Web Form con 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
Un archivo Archivos distintos

cdigo <tags> <tags>


Form1.aspx Form1.aspx

cdigo

Form1.aspx.vb o Form1.aspx.cs

***************************** use******************************

Introduccin

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. Nota 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.

Poner nombre a las pginas de cdigo subyacente

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

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******************************

Introduccin

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 (JIT) la primera vez que un usuario accede a la pgina.

Enlazar los dos archivos

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. Nota El atributo Inherits es sensible a maysculas.

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

El siguiente cdigo muestra un ejemplo de directiva @ Page para un archivo denominado Page1.aspx: Visual Basic .NET C# Compilacin JIT
<%@ 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 JIT, 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 JIT para una pgina, debera utilizarse el atributo Src de la directiva @ Page. Nota La compilacin JIT mantendr el tamao del proyecto pequeo y permitir actualizaciones de cdigo sin recompilar todo el sitio.

Ejecucin

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. Nota Para ms informacin sobre la implementacin de sitios Web, consultar el Mdulo Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET.

Precompilacin

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

Leccin: agregar procedimientos de evento a controles de servidor Web


Qu son 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******************************

Introduccin

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.

Objetivos de la leccin

10

Agregar cdigo a un formulario Web Form con 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******************************

Introduccin

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.

Definicin

Ejemplo de un procedimiento de evento

Agregar cdigo a un formulario Web Form con 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******************************

Introduccin

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.

12

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

Procedimientos de evento en el lado del cliente


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"> Internet

Pginas .HTM

***************************** use******************************

Introduccin Procedimientos de evento en el lado del cliente

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.

Usos de los procedimientos de evento en el lado del cliente

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">

Especificar procedimientos de evento en el lado del cliente

Agregar cdigo a un formulario Web Form con 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******************************

Introduccin

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:

Procedimientos de evento en el lado del servidor

Visual Basic .NET C# Soporte de eventos

<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.

14

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

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


del servidor

***************************** use******************************

Introduccin

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.

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

15

Crear procedimientos de evento


Visual Studio .NET declara variables y crea una plantilla de procedimiento de evento
Protected WithEvents cmd1 As System.Web.UI.WebControls.Button Protected WithEvents cmd1 As System.Web.UI.WebControls.Button Private Sub cmd1_Click(ByVal s As System.Object, _ Private Sub cmd1_Click(ByVal s As System.Object, _ ByVal e As System.EventArgs) Handles cmd1.Click ByVal e As System.EventArgs) Handles cmd1.Click

protected System.Web.UI.WebControls.Button cmd1; protected System.Web.UI.WebControls.Button cmd1; private void InitializeComponent() private void InitializeComponent() { { this.cmd1.Click += new System.EventHandler(this.cmd1_Click); this.cmd1.Click += new System.EventHandler(this.cmd1_Click); this.Load += new System.EventHandler(this.Page_Load); this.Load += new System.EventHandler(this.Page_Load); } } private void cmd1_Click(object s, System.EventArgs e) private void cmd1_Click(object s, System.EventArgs e)

El uso de la palabra clave Handles agrega a un evento varios procedimientos de evento


***************************** use******************************

Introduccin

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. Nota 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>

Crear un procedimiento de evento en el lado del servidor

16

Agregar cdigo a un formulario Web Form con 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

Argumentos del evento

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

Crear un procedimiento de evento en el lado del servidor in C#

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>

Agregar cdigo a un formulario Web Form con 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 Form con Microsoft ASP.NET

Prctica dirigida por el profesor: crear un procedimiento de evento


Crear un formulario Web Form utilizando 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******************************

Introduccin

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:

Visual Basic .NET C# Visual Basic .NET C#

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.

Agregar cdigo a un formulario Web Form con 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. Visual Basic .NET C# Visual Basic .NET 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

C#

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.

20

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

Interactuar con controles en procedimientos de evento


Leer las propiedades de los controles de servidor Web
strGreeting = "Hello " & txtName.Text strGreeting = "Hello " & txtName.Text strGreeting = "Hello " + txtName.Text; strGreeting = "Hello " + txtName.Text;

Respuestas de salida a otros controles de servidor Web


lblGreeting.Text = "new text" lblGreeting.Text = "new text" lblGreeting.Text = "new text"; lblGreeting.Text = "new text";

***************************** use******************************

Introduccin

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>

Leer las propiedades de un control de servidor

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: Visual Basic .NET C#
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".

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

21

Envo de informacin de un control de servidor Web

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: Visual Basic .NET C#
lblGreeting.Text = "new text" lblGreeting.Text = "new text";

Sugerencia 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.

22

Agregar cdigo a un formulario Web Form con 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******************************

Introduccin

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.

Objetivos de la leccin

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

23

Ciclo de vida de los eventos de pgina


Page_Init Page_Init
Eventos control Eventos de cambio Eventos de accin acci

Page_Load Page_Load Textbox1_Changed Textbox1_Changed Button1_Click Button1_Click Page_Unload Page_Unload


La pgina se gestiona

***************************** use******************************

Introduccin

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. Nota Para ms informacin sobre los eventos de pgina, ver Pgina (miembros

Ciclo de vida de los eventos de pgina

24

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

de) y Ciclo de vida de ejecucin de un control en la documentacin en lnea de Visual Studio .NET. Postbacks 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: Visual Basic .NET


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; }

C#

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

25

Multimedia: el proceso de postback

***************************** use******************************

Introduccin

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.

26

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

Demostracin: Gestionar eventos

***************************** use******************************

Introduccin

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:

Visual Basic .NET C#

Demo04VB\eventorderFinal.aspx. Demo04CS\eventorderFinal.aspx. Estas pginas y sus correspondientes proyectos se pueden encontrar dentro del fichero demos04.zip.

Agregar cdigo a un formulario Web Form con 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"/>

Nota 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.

28

Agregar cdigo a un formulario Web Form con 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: Visual Basic .NET
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, "; } }

C#

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.

Agregar cdigo a un formulario Web Form con 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******************************

Introduccin

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.

____________________________________________________________ ____________________________________________________________

30

Agregar cdigo a un formulario Web Form con 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 Form con Microsoft ASP.NET

31

Gestin de los eventos Page.IsPostback


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

Page.IsPostBack evita la recarga en cada postback

***************************** use******************************

Introduccin Uso de Page.IsPostBack

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 }

Visual Basic .NET

C#

32

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

Vnculo entre dos controles


Vincular un control con otro resulta til para obtener valores de cuadros de lista o listas desplegables
<asp:DropDownList id="lstOccupation" <asp:DropDownList id="lstOccupation" autoPostBack="True" runat="server" > autoPostBack="True" runat="server" > You selected: <asp:Label id="lblSelectedValue" You selected: <asp:Label id="lblSelectedValue" Text="<%# lstOccupation.SelectedItem.Text %>" Text="<%# lstOccupation.SelectedItem.Text %>" runat="server" /> runat="server" />

Enlace de datos
private void Page_Load(object sender, System.EventArgs e) private void Page_Load(object sender, System.EventArgs e) { { lblSelectedValue.DataBind(); lblSelectedValue.DataBind(); } } Sub Page_Load(s As Object, e As EventArgs) Handles MyBase.Load Sub Page_Load(s As Object, e As EventArgs) Handles MyBase.Load lblSelectedValue.DataBind() lblSelectedValue.DataBind() End Sub End Sub
***************************** use******************************

Introduccin

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.

Agregar cdigo a un formulario Web Form con 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: Visual Basic .NET
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(); }

C#

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.

34

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

Demostracin: vincular controles


Vincular un control Label a un control ListBox

***************************** use******************************

Introduccin

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:

Visual Basic .NET C#

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"/>

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

35

3. Crear un procedimiento de evento Page_Load e invocar lblListValue.DataBind(), como muestra el siguiente cdigo de ejemplo: Visual Basic .NET
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(); }

C#

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.

Prctica A: agregar funcionalidades a una aplicacin Web


Logon Page Logon Page
Login.aspx Login.aspx Coho Winery

Benefits Benefits Home Page Home Page


Default.aspx Default.aspx

Registration Registration
Register.aspx Register.aspx

Menu Menu Component Component

Page Header Page Header


Header.ascx Header.ascx

ASPState

Class1.vb or Class1.cs Class1.vb or Class1.cs

Web. config

tempdb

Life Insurance Life Insurance


Life.aspx Life.aspx

Retirement Retirement
Retirement.aspx Retirement.aspx

Medical Medical

Medical.aspx Medical.aspx

Dental Dental

Dental.aspx Dental.aspx

Lab Web Application

Prospectus Prospectus
Prospectus.aspx Prospectus.aspx

Doctors Doctors

Doctors.aspx Doctors.aspx

User Control User


namedate.ascx namedate.ascx

XML Web XML Web Service Service

dentalService1.asmx dentalService1.asmx

XML Files
***************************** ******************************

Doctors

Dentists

Objetivos

En este laboratorio, aprenderemos a: Crear un procedimiento de evento Page_Load para una pgina Web Microsoft ASP.NET. Crear procedimientos de evento Click para controles Web en una pgina Web ASP.NET. Nota Este laboratorio se centra en los conceptos de este mdulo. Por ello, podra no cumplir las recomendaciones de seguridad de Microsoft.

Requisitos previos

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.

Escenario

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.

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 Importante 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 Importante 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. Precaucin 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.

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. Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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 Importante 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. Para el proyecto Visual Basic .NET 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 lista Tipos 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. Para el proyecto Visual C# 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 lista Tipos 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. Precaucin Verificar que se han escrito correctamente las maysculas del proyecto BenefitsList.

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. Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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.

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: Visual Basic .NET
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 }

C#

4. Crear una nueva instancia de la clase BenefitsList.Benefits y guardarla en una variable denominada clBenefits. El cdigo debera ser similar al siguiente: Visual Basic .NET C#
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: Visual Basic .NET C#
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.

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: Visual Basic .NET
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>"); }

C#

9. Hacer clic con el botn derecho en la pgina default.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.

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): Visual Basic .NET
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

C#

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? ____________________________________________________________ ____________________________________________________________

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: Visual Basic .NET
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; } }

C#

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.

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: Nota 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.

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: Visual Basic .NET
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

C#

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.

Prctica A: seguimiento en aplicaciones Web Microsoft ASP.NET


Logon Page Logon Page
Login.aspx Login.aspx Coho Winery

Benefits Benefits Home Page Home Page


Default.aspx Default.aspx

Registration Registration
Register.aspx Register.aspx

Menu Menu Component Component

Page Header Page Header


Header.ascx Header.ascx

ASPState

Class1.vb or Class1.cs Class1.vb or Class1.cs

Web. config

tempdb

Life Insurance Life Insurance


Life.aspx Life.aspx

Retirement Retirement
Retirement.aspx Retirement.aspx

Medical Medical

Medical.aspx Medical.aspx

Dental Dental

Dental.aspx Dental.aspx

Lab Web Application

Prospectus Prospectus
Prospectus.aspx Prospectus.aspx

Doctors Doctors

Doctors.aspx Doctors.aspx

User Control User


namedate.ascx namedate.ascx

XML Web XML Web Service Service

dentalService1.asmx dentalService1.asmx

XML Files
***************************** use******************************

Doctors

Dentists

Objetivos

En este laboratorio, aprenderemos a: Agregar instrucciones de seguimiento a un formulario Web Form Microsoft ASP.NET. Habilitar y deshabilitar el seguimiento (Trace) a nivel de pgina y de aplicacin. Utilizar el seguimiento en un componente. Nota Este laboratorio se centra en los conceptos de este mdulo. Por ello, podra no cumplir las recomendaciones de seguridad de Microsoft.

Requisitos previos

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.

Escenario

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.

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 Importante 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 Importante 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. Precaucin 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#.

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. En el proyecto Microsoft Visual Basic .NET 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. En el proyecto Visual C# 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 Importante 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 proyecto Visual Basic .NET En el cuadro de dilogo Nuevo proyecto, 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. En el proyecto Visual C#

En el cuadro de dilogo Nuevo proyecto, 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 clic en Aceptar. Precaucin Verificar que se han escrito correctamente las maysculas del proyecto BenefitsListVB o BenefitsListCS.

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: En el proyecto Visual Basic .NET En el proyecto Visual C# 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.

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: Visual Basic .NET
<%@ 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" %>

C#

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: Visual Basic .NET C#
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: Visual Basic .NET C#
Trace.Warn("2310", "IsPostBack=" & Page.IsPostBack) Trace.Warn("2310", "IsPostBack=" + Page.IsPostBack);

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 Visual Basic .NET En el proyecto Visual C# 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:

Visual Basic .NET C#

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

Nota 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: Visual Basic .NET
System.Web.HttpContext.Current.Trace.Warn _ ("BenefitsList component", _ "Beginning of GetBenefitsList") System.Web.HttpContext.Current.Trace.Warn ("BenefitsList component", "Beginning of GetBenefitsList");

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: Visual Basic .NET
System.Web.HttpContext.Current.Trace.Warn _ ("BenefitsList component", _ "End of GetBenefitsList") System.Web.HttpContext.Current.Trace.Warn ("BenefitsList component", "End of GetBenefitsList");

C#

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? _____________________________________________________________ _____________________________________________________________

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: Visual Basic .NET
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");

C#

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? ____________________________________________________________ ____________________________________________________________

5. Eliminar o comentar los mensajes de seguimiento que hemos agregado en este laboratorio, de acuerdo con la siguiente tabla.
Pgina default.aspx.vb o default.aspx.cs life.aspx.vb o life.aspx.cs header.ascx.vb o header.ascx.cs Class1.vb o Class1.cs Cdigo a eliminar Dos lneas en el procedimiento de evento Page_Load. Una lnea en el procedimiento de evento Page_Load. Una lnea al inicio del procedimiento de evento Page_Load, y una lnea al final. 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.

Seguimiento en aplicaciones Web con Microsoft ASP.NET

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

Seguimiento en aplicaciones Web con Microsoft ASP.NET

Introduccin
Descripcin del seguimiento Depuracin remota

***************************** use******************************

Introduccin

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 Microsoft Visual 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.

Objetivos

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 del seguimiento a nivel de aplicacin Demostracin: seguimiento en una aplicacin Web Seguimiento en un componente

***************************** use******************************

Introduccin

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.

Objetivos de la leccin

Seguimiento en aplicaciones Web con Microsoft ASP.NET

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******************************

Introduccin

Podemos recopilar informacin mientras nuestra aplicacin Web se est ejecutando utilizando los objetos Debug y Trace. Nota Para actualizar los conocimientos sobre depuracin, consultar el Apndice B, Depuracin con Microsoft Visual Studio .NET al final del libro de ejercicios.

Tipos de informacin

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.

Objetos de tiempo de ejecucin

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.

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. Nota Para utilizar el objeto Debug, necesitamos importar el espacio de nombres System.Diagnostics.

Seguimiento en aplicaciones Web con Microsoft ASP.NET

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
<%@ Page Language="vb" Trace="true" %> <%@ Page Language="vb" Trace="true" %> <%@ Page Language="c#" Trace="true" %> <%@ Page Language="c#" Trace="true" %>

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
<trace enabled="true" pageOutput="true" <trace enabled="true" pageOutput="true" localOnly="true"/> localOnly="true"/>

Prctica: comprobar la configuracin predeterminada

***************************** use******************************

Introduccin Seguimiento a nivel de pgina

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. Seguimiento a nivel de aplicacin 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.

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"/>

Prctica (opcional)

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? ________________________________________________________________ ________________________________________________________________

Seguimiento en aplicaciones Web con Microsoft ASP.NET

Uso del objeto Trace


Insertar mensajes de seguimiento
Trace.Write ("category", "message") Trace.Write ("category", "message") Trace.Warn ("category", "message") Trace.Warn ("category", "message")

Ejecucin condicional con Trace.IsEnabled


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

Cambiar dinmicamente el estado del seguimiento


Trace.IsEnabled = False Trace.IsEnabled = False

***************************** use******************************

Introduccin

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 y Trace.Warn

Visual Basic .NET C#

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

Nota 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.

Seguimiento en aplicaciones Web con Microsoft ASP.NET

Ejemplo de uso de Write y Warn Visual Basic .NET C#

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:

Trace.IsEnabled

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); }

Visual Basic .NET

C#

Tambin podemos utilizar la propiedad IsEnabled para cambiar dinmicamente el estado del seguimiento de una pgina, como muestra el siguiente cdigo: Visual Basic .NET C#
Trace.IsEnabled = False Trace.IsEnabled = false;

Seguimiento en aplicaciones Web con Microsoft ASP.NET

Visualizar los resultados de seguimiento

***************************** use******************************

Introduccin

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 Detalles de la peticin Informacin de seguimiento Descripcin Informacin sobre la peticin: identificacin de sesin (ID), hora de la solicitud, tipo de peticin y estado de la peticin. Resultado de las instrucciones de seguimiento estndares y personalizadas. La columna From First(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. Lista todos los elementos que se encuentran en la pgina, junto con el tamao de cada uno. Lista las cookies que se estn utilizando. Lista los elementos en la cabecera Hypertext Transfer Protocol (HTTP). Lista los controles, y sus valores, en el formulario que se est transmitiendo. Lista todas las variables de servidor y sus valores.

Categoras de seguimiento

rbol de control Coleccin Cookies Coleccin Headers Coleccin Form Variables de servidor

10

Seguimiento en aplicaciones Web con Microsoft ASP.NET

Uso del seguimiento a nivel de aplicacin


Pgina Pgina Aplicacin Aplicacin Resultado Resultado
Los resultados de seguimiento Los resultados de seguimiento se muestran en la pgina se muestran en la pgina Los resultados de seguimiento Los resultados de seguimiento no se muestran no se muestran Los resultados de seguimiento Los resultados de seguimiento se muestran en la pgina se muestran en la pgina

Trace=True Trace=True Trace=False Trace=False

Trace=True o Trace=True o Trace=False Trace=False Trace=True o Trace=True o Trace=False Trace=False

Trace not set Trace=True Trace not set Trace=True

Las instrucciones de seguimiento a nivel de aplicacin se muestran en pginas individuales Si pageOutput=false en el archivo Web.config, el visor de seguimiento puede visualizar los resultados de seguimiento
http://servidor/proyecto/trace.axd http://servidor/proyecto/trace.axd

***************************** use******************************

Introduccin

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 Trace=True Configuracin de la aplicacin Trace=True o Trace=False Trace=False Trace=True o Trace=False Trace no establecido Trace=True Resultado para la pgina Los resultados de seguimiento se muestran en la pgina. Los resultados de seguimiento no se muestran en la pgina. Los resultados de seguimiento se muestran en la pgina.

Configuracin del seguimiento

Seguimiento en aplicaciones Web con Microsoft ASP.NET

11

Mostrar mensajes de seguimiento

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="").

Sugerencia 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.

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" %>

Nota 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.

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.

Nota 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.

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" %>

Nota 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.

Nota 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.

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
Imports System.Web Imports System.Web using System.Web; using System.Web;

Habilitar el seguimiento
HttpContext.Current.Trace.IsEnabled = True HttpContext.Current.Trace.IsEnabled = True HttpContext.Current.Trace.IsEnabled = true; HttpContext.Current.Trace.IsEnabled = true;

Invocar los mtodos Trace


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

***************************** use******************************

Introduccin

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:

Seguimiento en un componente

Visual Basic .NET C#

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:

Visual Basic .NET C#

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.

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:

Visual Basic .NET C#

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 El seguimiento est habilitado en el constructor El seguimiento est habilitado en un mtodo El seguimiento est deshabilitado en el constructor El seguimiento no est establecido en el componente Configuracin de la pgina Seguimiento deshabilitado Seguimiento deshabilitado Seguimiento habilitado Resultado El seguimiento est habilitado cuando se invocan todos los mtodos del componente. El seguimiento est habilitado cuando slo se invoca ese nico mtodo. El seguimiento est deshabilitado cuando se invocan los mtodos del componente. El seguimiento est habilitado cuando se invocan los mtodos del componente.

Seguimiento habilitado

Importante 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.

18

Seguimiento en aplicaciones Web con Microsoft ASP.NET

Leccin: depuracin remota


Cmo depurar remotamente

***************************** use******************************

Introduccin

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.

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******************************

Introduccin

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.

Requerimientos para la depuracin remota

20

Seguimiento en aplicaciones Web con Microsoft ASP.NET

Procedimiento de depuracin remota

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.

Nota 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.

Prctica A: Validar la entrada de datos del usuario


Logon Page Logon Page
Login.aspx Login.aspx Coho Winery

Benefits Benefits Home Page Home Page


Default.aspx Default.aspx

Registration Registration
Register.aspx Register.aspx

Menu Menu Component Component

Page Header Page Header


Header.ascx Header.ascx

ASPState

Class1.vb or Class1.cs Class1.vb or Class1.cs

Web. config

tempdb

Life Insurance Life Insurance


Life.aspx Life.aspx

Retirement Retirement
Retirement.aspx Retirement.aspx

Medical Medical

Medical.aspx Medical.aspx

Dental Dental

Dental.aspx Dental.aspx

Lab Web Application

Prospectus Prospectus
Prospectus.aspx Prospectus.aspx

Doctors Doctors

Doctors.aspx Doctors.aspx

User Control User


namedate.ascx namedate.ascx

XML Web XML Web Service Service

dentalService1.asmx dentalService1.asmx

XML Files
***************************** use******************************

Doctors

Dentists

Objetivos

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. Nota Este laboratorio se centra en los conceptos de este mdulo. Por ello, podra no cumplir las recomendaciones de seguridad de Microsoft.

Requisitos previos

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.

Escenario

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.

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 Importante 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 Importante 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. Precaucin 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.

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. Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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 Importante 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. Para el proyecto Visual Basic .NET 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 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. Para el proyecto Visual C# 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 lista Tipos 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. Importante Verificar que se han escrito correctamente las maysculas del proyecto BenefitsList.

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. Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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.

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 vldName vldBirth vldCoverage Mensaje de error El Nombre no puede dejarse en blanco La Fecha de nacimiento no puede dejarse en blanco La cobertura no puede dejarse en blanco Texto * * * ControlToValidate txtName txtBirth 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: Visual Basic .NET
If Page.IsValid Then lblMessage.Text = "La pgina es vlida" End If if (Page.IsValid) { lblMessage.Text = "La pgina es vlida"; }

C#

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.

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 ErrorMessage Text ControlToValidate Operator Type ID Valor El valor de Fecha de nacimiento no es vlido * txtBirth DataTypeCheck Date 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 ErrorMessage Text ControlToValidate ValidationExpression ID Valor La Cobertura debe tener un valor de tipo moneda * txtCoverage \d+(\.\d{2})? 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.

Validacin de entrada de datos de usuario

ndice Descripcin Leccin: Descripcin de la validacin de entrada de datos del usuario Leccin: validacin de pginas 1 2 30

Leccin: uso de los controles de validacin 8

Validacin de entrada de datos de

usuario

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

***************************** use******************************

Introduccin

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 Microsoft ASP.NET. Tambin estudiaremos cmo aplicar de forma eficaz estos controles a un formulario Web Form con ASP.NET utilizando Microsoft Visual Studio .NET.

Objetivos

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.

Validacin de entrada de datos de

usuario

Leccin: validacin de entrada de datos del usuario


Qu es es la validacin de entrada de datos? Validacin del lado del cliente y del lado del servidor Controles de validacin ASP.NET

***************************** use******************************

Introduccin

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.

Objetivos de la leccin

Validacin de entrada de datos de

usuario

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******************************

Introduccin

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.

Verificar valores de control

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.

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. Procesamiento de bloque de errores 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.

Spoofing y cdigo mal intencionado

Validacin de entrada de datos de

usuario

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 Vlido? El usuario introduce datos

Mensaje de error No

Cliente Servidor

S
Vlido?

Validacin del lado del servidor


Repite toda la validacin del lado del cliente Puede validar contra datos almacenados

No

S
Aplicacin Web procesada

***************************** use******************************

Introduccin

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 JavaScript 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.

Validacin del lado del cliente

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

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. Validacin del lado del servidor 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 de entrada de datos de

usuario

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******************************

Controles de validacin

ASP.NET incluye los controles de validacin que se muestran en la siguiente tabla.


Control de validacin CompareValidator Funcin 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. 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. 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. 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. 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. 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.

CustomValidator

RangeValidator

RegularExpression Validator

RequiredFieldValidator

ValidationSummary

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******************************

Introduccin

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.

Objetivos de la leccin

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.

Validacin de entrada de datos de

usuario

Agregar controles de validacin a un formulario Web Form


1 1. Agregar un control de validacin 1 2 2. Seleccionar el control de entrada de datos para validar 2 3 3. Establecer propiedades de validacin 3

<asp:TextBox id="txtName" runat="server" /> <asp:TextBox id="txtName" runat="server" /> <asp:Type_of_Validator <asp:Type_of_Validator id="Validator_id" id="Validator_id" runat="server" runat="server" ControlToValidate="txtName" ControlToValidate="txtName" ErrorMessage="Message_for_error_summary" ErrorMessage="Message_for_error_summary" Display="static|dynamic|none" Display="static|dynamic|none" Text="Text_to_display_by_input_control"> Text="Text_to_display_by_input_control"> </asp:Type_of_Validator> </asp:Type_of_Validator>
***************************** use******************************

Introduccin

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>

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 JScript .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******************************

Introduccin

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>

Mensajes de error

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.

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>

Establecer la propiedad Display

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 Static Descripcin 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. Bloquea la visualizacin de mensajes de error en la ubicacin del control de validacin.

None

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 RequiredFieldValidator comprueba los controles vacos

***************************** use******************************

Introduccin

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.

Mltiples controles de validacin en un nico control de entrada Ejemplo

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>

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 ValueToComparar o ControlToComparar Type Operator RangeValidator MinimumValue MaximumValue Type Cdigo de ejemplo
***************************** use******************************

Introduccin

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:

Control RequiredFieldValidator

16

Validacin de entrada de datos de


<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>

usuario

Nota 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. Uso del control CompareValidator 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.

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>

Uso del control RangeValidator

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:

18

Validacin de entrada de datos de


<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>

usuario

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 <asp:RegularExpressionValidator ControlToValidate="US_PhoneNumber" ControlToValidate="US_PhoneNumber" ValidationExpression="((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4} " ValidationExpression="((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4} " >*</asp:RegularExpressionValidator > >*</asp:RegularExpressionValidator >

Cdigo de ejemplo
***************************** use******************************

Introduccin

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 ventana Propiedades, 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.

20

Validacin de entrada de datos de

usuario

Caracteres de expresiones habituales

Generamos nuestras propias expresiones habituales personalizadas utilizando el conjunto de caracteres de control que se muestran en la siguiente tabla.
Carcter a Definicin 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. 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). Intervalo de valores enteros de 0 a n. La longitud debe ser n caracteres. Separa mltiples modelos vlidos. El siguiente carcter es un carcter comando. Debe tener un carcter. Debe tener un dgito. Debe tener un periodo.

? * + [0-n] {n} | \ \w \d \.

Nota Para ms informacin sobre los caracteres de control, leer la Introduccin a las expresiones regulares, en la documentacin en lnea de Referencia de JScript. Ejemplo de una expresin simple 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>

Validacin de entrada de datos de

usuario

21

Este control de validacin RegularExpression comprueba un modelo especfico, como muestra la siguiente tabla.
Caracteres \w+ @ \w+ \. \w+ Definicin Una cadena de un carcter como mnimo. Un signo (@). Una cadena de un carcter como mnimo. Un periodo. 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. Ejemplo de una expresin compleja 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 \w+ ([-+.]\w+)* @ \w+ ([-.]\w+)* \. \w+ ([-.]\w+)* Definicin Una cadena de un carcter como mnimo. Puede tener uno o ms guiones o un punto, y una cadena de un carcter como mnimo. Un signo (@). Una cadena de un carcter como mnimo. Puede tener un guin o un punto, y una cadena de un carcter como mnimo. Un punto. Una cadena de un carcter como mnimo. Puede tener un guin o un punto, y una cadena de un carcter como mnimo.

Una direccin electrnica vlida para este control es: alguien@ejemplo.empresa.com. Una direccin electrnica no vlida para este control es: algu,ien@ejemplo..empresa.com.

22

Validacin de entrada de datos de

usuario

Demostracin: uso de los controles de validacin


Crear un formulario Web Form ASP.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 Crear un formulario Web Form ASP.NET con controles TextBox y Button Agregar un control RequiredFieldValidator 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 ControlToValidate ErrorMessage Text Valor TextBox1 Texto del mensaje de error 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.

Validacin de entrada de datos de

usuario

23

Agregar un control RangeValidator

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 ControlToValidate ErrorMessage Text MaximumValue MinimumValue Type Valor TextBox1 Texto del mensaje de error Fuera del intervalo 100 16 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). Agregar un segundo control TextBox y un control Regular ExpressionValidator 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.

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******************************

Introduccin

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.

Validacin del lado del cliente y del lado del servidor

26

Validacin de entrada de datos de

usuario

Ejemplo

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 JScript 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: Visual Basic .NET
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; } }

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 script en el lado del cliente Probar el resultado

***************************** use******************************

Introduccin

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.

Agregar un control CustomValidator

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 If intValue mod args.IsValid Else args.IsValid End If Integer = args.Value 2 = 0 Then = True = False

Escribir el cdigo del lado del servidor Visual Basic .NET

28

Validacin de entrada de datos de


int intValue = Convert.ToInt16(args.Value); if (intValue % 2 == 0) { args.IsValid = true; } else { args.IsValid = false; }

usuario

C#

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). Escribir el script del lado del cliente 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 JScript:
function MyClientValidation(source, arguments) { alert("Ejecucin en el cliente"); var intValue = arguments.Value; if (intValue % 2 == 0) { arguments.IsValid = true; } else { arguments.IsValid = false; } }

Probar el resultado

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.

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.IsValid y del control ValidationSummary

***************************** use******************************

Introduccin

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.

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) Sub cmdSubmit_Click(s As Object, e As EventArgs) If Page.IsValid Then If Page.IsValid Then Message.Text = "Page is valid!" Message.Text = "Page is valid!" ' Perform database updates or other logic here ' Perform database updates or other logic here End If End If End Sub End Sub private void cmdSubmit_Click(object s, System.EventArgs e) private void cmdSubmit_Click(object s, System.EventArgs e) { if (Page.IsValid) { if (Page.IsValid) { { } } } } Message.Text = "Page is Valid!"; Message.Text = "Page is Valid!"; // Perform database updates or other logic here // Perform database updates or other logic here

***************************** use******************************

Introduccin

.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. Nota 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.

Uso de la propiedad Page.IsValid

32

Validacin de entrada de datos de

usuario

Ejemplo

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 } }

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" <asp:ValidationSummary id="valSummary" runat="server" runat="server" HeaderText="These errors were found:" HeaderText="These errors were found:" ShowSummary="True" ShowSummary="True" DisplayMode="List"/> DisplayMode="List"/>

***************************** use******************************

Introduccin

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" />

Muestra mensajes de texto y de error

Uso de * para localizar errores

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.

34

Validacin de entrada de datos de

usuario

Ejemplo

La siguiente ilustracin muestra un par de campos de contrasea con varios controles de validacin de entrada de datos y un control ValidationSummary.

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 script que utilice la propiedad Page.IsValid

***************************** use******************************

Introduccin

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

Abrir una pgina ASP.NET

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.

Agregar un control Validation Summary Agregar cdigo para probar la validez de la pgina Visual Basic .NET

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

C#

36

Validacin de entrada de datos de


if (Page.IsValid) { lblMessage.Text = "Page is valid!"; }

usuario

4. Guardar, generar y examinar la pgina ValidationSummary.aspx. Deberamos ver el mensaje Page is valid! cuando toda la pgina sea vlida.

Creacin de controles de usuario

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

Descripcin
Agregar controles de usuario a un formulario Web FormASP.NET Crear controles de usuario

***************************** ******************************

Introduccin

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 Microsoft ASP.NET. Crear un control de usuario.

Objetivos

Creacin de controles de usuario

Leccin: agregar controles de usuario a un formulario Web Form ASP.NET


Qu es un control de usuario? Por qu utilizar controles de usuario? Prctica: hacer una lista de controles de usuario Agregar un control de usuario Demostracin: Crear un control de usuario

***************************** ******************************

Introduccin

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.

Objetivos de la leccin

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.

Creacin de controles de usuario

Qu es un control de usuario?
Los controles de usuario simplifican la reutilizacin de cdigo y componentes de la IU en 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>
<%@ Control Language="vb" %> <%@ Control Language="vb" %>

<%@ Control Language="c#" %> <%@ Control Language="c#" %>

Contiene cdigo para gestionar sus propios eventos

***************************** ******************************

Introduccin

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. Nota 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.

Definicin

Qu hay en un control de usuario?

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

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. Nota 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. Controles de usuario y sus pginas asociados de cdigo subyacente 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" %>

Visual Basic .NET C#

Nota 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. Control de usuario frente a control de servidor Web 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. Nota Para ms informacin sobre los controles de servidor Web, ver el Mdulo Crear un formulario Web Form con Microsoft ASP.NET.

Creacin de controles de usuario

Por qu utilizar controles de usuario?


Reutilizar interfaz de usuario y cdigo
Control1.ascx

Aplicacin A

Aplicacin B
Page3.aspx

Page1.aspx

Page2.aspx

***************************** ******************************

Introduccin

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. Nota 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.

Ventajas de utilizar controles de usuario

Creacin de controles de usuario

Compartir 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. Nota 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.

Creacin de controles de usuario

Prctica: hacer una lista de controles de usuario


Los estudiantes: Crearn una lista de ejemplos sobre cundo resulta apropiado el uso de controles de usuario Tiempo: 5 minutos

***************************** ******************************

Introduccin

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 ________________________________________________________________ ________________________________________________________________

Creacin de controles de usuario

Agregar un control de usuario


Utilizar la directiva @ Register para incluir un control de usuario en una pgina ASP.NET
<%@ Register TagPrefix="demo" <%@ Register TagPrefix="demo" TagName="validNum" Src="numberbox.ascx" %> TagName="validNum" Src="numberbox.ascx" %>

Insertar el control de usuario en un formulario Web Form


<demo:validNum id="num1" runat="server"/> <demo:validNum id="num1" runat="server"/>

Utilizar las propiedades Get y Set del control de usuario o


num1.pNum = 5 'uses Set num1.pNum = 5 'uses Set x = num1.pNum 'uses Get x = num1.pNum 'uses Get num1.pNum = 5; //uses Set num1.pNum = 5; //uses Set x = num1.pNum; //uses Get x = num1.pNum; //uses Get

***************************** ******************************

Introduccin

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" %>

Incluir controles de usuario

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. Uso 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.

Creacin de controles de usuario

Uso de las propiedades Get y Set

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;

Visual Basic .NET C#

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: Visual Basic .NET C#
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: Visual Basic .NET C#
num1.pNum = 5 num2.pNum = 7 num1.pNum = 5; num2.pNum = 7;

10

Creacin de controles de usuario

Demostracin: crear un control de usuario


Crear un nuevo control de usuario Crear una propiedad

***************************** ******************************

Introduccin

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.

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

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.

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: Para el proyecto Visual Basic .NET
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. Para el proyecto Visual C#
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.

12

Creacin de controles de usuario

Leccin: crear controles de usuario


Crear un control de usuario Demostracin: utilizar un control de usuario

***************************** ******************************

Introduccin

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.

Objetivos de la leccin

Creacin de controles de usuario

13

Crear un control de usuario


Dos mtodos para la creacin de controles de usuario: Crear un nuevo control de usuario utilizando Visual Studio .NET Convertir una pgina ASP.NET existente en un control de usuario La pagina host interacta con el control utilizando propiedades La pgina host debera utilizar el flujo de presentacin
Public Property pNum() As Integer Public Property pNum() As Integer Get Get Return Convert.ToInt32(txtNum.Text) Return Convert.ToInt32(txtNum.Text) End Get End Get Set (ByVal value As Integer) Set (ByVal value As Integer) txtNum.Text = CStr(value) txtNum.Text = CStr(value) End Set End Set End Property End Property public int pNum public int pNum { { get get { { return return Convert.ToInt32(txtNum.Text); Convert.ToInt32(txtNum.Text); } } set set { { txtNum.Text = txtNum.Text = Convert.ToString(value); Convert.ToString(value); } } } }

***************************** ******************************

Introduccin Crear un nuevo control de usuario

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. Nota 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. Nota 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.

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 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. Nota 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. Pgina host 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:

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: Visual Basic .NET
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); } }

C#

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.

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

***************************** ******************************

Introduccin

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. Nota 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:

Creacin de controles de usuario


<%@ Register TagPrefix="uc1" TagName="numberbox" Src="numberbox.ascx" %> ... <uc1:numberbox id=Numberbox1 runat="server"> </uc1:numberbox> ...

17

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: Visual Basic .NET Visual C#
Protected Numberbox1 As numberbox Protected Numberbox2 As numberbox protected numberbox Numberbox1; protected numberbox Numberbox2;

Nota 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: Visual Basic .NET
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); }

C#:

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:

18

Creacin de controles de usuario


If Not Page.IsPostBack Then txtNum1.Text = "0" End If if (!Page.IsPostBack) txtNum1.Text = "0";

Visual Basic .NET

C#

12. Generar y examinar la pgina beforeuser.aspx. 13. Ahora, el control de usuario tiene un valor inicial de 0.

Prctica A: Crear controles de usuario


Logon Page Logon Page
Login.aspx Login.aspx Coho Winery

Benefits Benefits Home Page Home Page


Default.aspx Default.aspx

Registration Registration
Register.aspx Register.aspx

Menu Menu Component Component

Page Header Page Header


Header.ascx Header.ascx

ASPState

Class1.vb or Class1.cs Class1.vb or Class1.cs

Web. config

tempdb

Life Insurance Life Insurance


Life.aspx Life.aspx

Retirement Retirement
Retirement.aspx Retirement.aspx

Medical Medical

Medical.aspx Medical.aspx

Dental Dental

Dental.aspx Dental.aspx

Lab Web Application

Prospectus Prospectus
Prospectus.aspx Prospectus.aspx

Doctors Doctors

Doctors.aspx Doctors.aspx

User Control User


namedate.ascx namedate.ascx

XML Web XML Web Service Service

dentalService1.asmx dentalService1.asmx

XML Files
*****************************illegal for non-trainer use******************************

Doctors

Dentists

Objetivos

En este laboratorio, aprenderemos a: Crear un control de usuario. Utilizar un control de usuario en un formulario Web Form con Microsoft ASP.NET. Nota Este laboratorio se centra en los conceptos de este mdulo. Por ello, podra no cumplir las recomendaciones de seguridad de Microsoft.

Requisitos previos

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#.

Escenario

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.

Tiempo estimado para completar el laboratorio: 30 minutos

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 Importante 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 Importante 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. Precaucin 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#.

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: Para el proyecto Visual Basic .NET 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. Para el proyecto Visual C# 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 Importante 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. Para el proyecto Visual Basic .NET 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. Precaucin Verificar que se han escrito correctamente las maysculas del proyecto BenefitsList.

Para el proyecto Visual C#

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. Para el proyecto Visual Basic .NET: Para el proyecto Visual C#: 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 Para el proyecto Visual Basic .NET: 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. Para el proyecto Visual C#: 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.

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.

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: Visual Basic .NET
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; } }

C#

Precaucin 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. Visual Basic .NET C# 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.

El cdigo debera ser similar al siguiente: Visual Basic .NET


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(); } }

C#

4. Guardar los cambios. Visual Basic .NET C# 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.

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.

5. Declarar una variable Protected denominada Namedate1 de tipo de datos namedate. Visual Basic .NET C#
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: Visual Basic .NET
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

C#

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.

Acceso a datos con Microsoft ADO.NET

ndice Descripcin Leccin: introduccin al uso de ADO.NET Leccin: conectar a una base de datos Leccin: acceso a datos con DataSets Leccin: utilizar mltiples tablas Leccin: acceder a datos con DataReaders 1 2 6 14 34 44

Acceso a datos con Microsoft ADO.NET

Descripcin
Introduccin a ADO.NET Conectar a una base de datos Acceder a datos con DataSets Utilizar mltiples tablas Acceder a datos con DataReaders

*****************************

Introduccin

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. Microsoft ADO.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.

Objetivos de la leccin

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.

Acceso a datos con Microsoft ADO.NET

Leccin: introduccin al uso de ADO.NET


Multimedia: modelo de objetos ADO.NET Utilizar DataSets frente a DataReaders Prctica: cundo utilizar DataSets o DataReaders

*****************************

Introduccin

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.

Objetivos de la leccin

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.

Acceso a datos con Microsoft ADO.NET

Uso de DataSets frente a DataReaders


DataSet Acceso lectura/escritura a datos Incluye mltiples tablas de distintas bases de datos Desconectado Vinculado a mltiples controles Bsqueda de datos hacia delante y hacia atrs Acceso ms lento Soportado por las herramientas de Visual Studio .NET DataReader Slo lectura Basado en una instruccin SQL de una base de datos Conectado Vinculado a un nico control Slo hacia delante Acceso ms rpido Codificacin manual

*****************************

Introduccin

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.

Uso de DataSets y DataReaders

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

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

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. ____________________________________________________________ ____________________________________________________________

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

*****************************

Introduccin

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.

Objetivos de la leccin

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.

Acceso a datos con Microsoft ADO.NET

Seguridad SQL Server


Servidor Web Servidor Web Configuracin ASP.NET Configuracin ASP.NET predeterminada predeterminada Aqu est el nombre de usuario y la contrasea o o Cliente Cliente Enviar el nombre de usuario y contrasea en texto claro. Servidor SQL Servidor SQL Cada cuenta de usuario se Cada cuenta de usuario se agrega a grupo login de SQL Server agrega a grupo login de SQL Server No enviar el nombre de usuario y contrasea. Enviar slo que el usuario ha sido autenticado. Servidor SQL Servidor SQL Slo la cuenta ASPNET Slo la cuenta ASPNET tiene concedido acceso tiene concedido acceso

Autenticacin Autenticacin modo mixto modo mixto

Autenticacin Autenticacin slo Windows slo Windows Servidor Web Servidor Web Autenticacin Windows Autenticacin Windows

*****************************

Introduccin

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:

Autenticacin En modo mixto

Visual Basic .NET

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);

C#

Acceso a datos con Microsoft ADO.NET

Aviso 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. Autenticacin slo Windows 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: Visual Basic .NET
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);

C#

Acceso a datos con Microsoft ADO.NET

Configurar el SQL Server para ejecutar autenticacin en modo mixto o slo Windows

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. Nota Para ms informacin sobre securizar una aplicacin Web, ver el Mdulo Securizar una aplicacin Web con Microsoft ASP.NET.

10

Acceso a datos con Microsoft ADO.NET

Crear la conexin
Uso de SqlConnection
Dim strConn As String = "data source=localhost; " & _ Dim strConn As String = "data source=localhost; " & _ "initial catalog=northwind; integrated security=true" "initial catalog=northwind; integrated security=true" Dim conn As New SqlConnection(strConn) Dim conn As New SqlConnection(strConn) string strConn = "data source=localhost; " + string strConn = "data source=localhost; " + "initial catalog=northwind; integrated security=true"; "initial catalog=northwind; integrated security=true"; SqlConnection conn = new SqlConnection(strConn); SqlConnection conn = new SqlConnection(strConn);

Establecer los parmetros de la cadena de conexin Timeout de conexin Fuente de datos Catlogo inicial Seguridad integrada
*****************************

Contrasea Persistir informacin seguridad Proveedor ID de usuario

Introduccin

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.

Crear una cadena de conexin

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:

Visual Basic .NET

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);

C#

Acceso a datos con Microsoft ADO.NET

11

Parmetros de la cadena de conexin

La siguiente tabla describe algunos de los parmetros ms habituales de un objeto de conexin:


Parmetro Connection Timeout Descripcin 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. 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. El nombre de la base de datos. 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. La contrasea de inicio de sesin en la base de datos SQL Server. 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. La propiedad que se utiliza para establecer o devolver el nombre del proveedor de la conexin; este parmetro se utiliza nicamente para objetos OleDbConnection. El nombre de cuenta de inicio de sesin de SQL Server.

Data Source

Initial Catalog Integrated Security

Password Persist Security Info

Provider

User ID

12

Acceso a datos con Microsoft ADO.NET

Demostracin: establecer la seguridad de SQL Server


Abrir SQL Server Enterprise Manager Establecer el modo de autenticacin Probar con seguridad integrada Probar con seguridad en modo mixto

*****************************

Introduccin

En esta demostracin, veremos cmo establecer y probar una conexin de seguridad integrada entre una aplicacin Web y un SQL Server. Ejecutar esta demostracin

Abrir SQL Server Enterprise Manager

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.

Establecer el modo de autenticacin

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.

Prueba con seguridad integrada

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.

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. Prueba con seguridad en modo mixto 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.

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 DataSet a un control enlazado a lista Prctica dirigida por el instructor: visualizar un DataSet Gestin de errores

*****************************

Introduccin

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.

Objetivos de la leccin

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.

Acceso a datos con Microsoft ADO.NET

15

Crear un DataAdapter
Almacenar la consulta en un DataAdapter
Dim da As New SqlDataAdapter _ Dim da As New SqlDataAdapter _ ("select * from Authors", conn) ("select * from Authors", conn) SqlDataAdapter da = new SqlDataAdapter SqlDataAdapter da = new SqlDataAdapter ("select * from Authors",conn); ("select * from Authors",conn);

El constructor DataAdapter establece la propiedad SelectCommand


da.SelectCommand.CommandText da.SelectCommand.CommandText da.SelectCommand.Connection da.SelectCommand.Connection da.SelectCommand.CommandText; da.SelectCommand.CommandText; da.SelectCommand.Connection; da.SelectCommand.Connection;

Establecer las propiedades InsertCommand, UpdateCommand y DeleteCommand si fuera necesario


*****************************

Introduccin

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: Clase OleDbDataAdapter Esta clase es adecuada para utilizarse con cualquier fuente de datos expuesta por un OLE DB Data Provider. Clase SqlDataAdapter 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.

DataAdapter

16

Acceso a datos con Microsoft ADO.NET

Propiedades del DataAdapter

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 SelectCommand InsertCommand UpdateCommand DeleteCommand Funcin La propiedad SelectCommand recupera filas de la fuente de datos. La propiedad InsertCommand escribe filas insertadas del DataSet a la fuente de datos. La propiedad UpdateCommand escribe filas modificadas del DataSet a la fuente de datos. La propiedad DeleteCommand elimina filas en la fuente de datos.

Ejemplo de SqlDataAdapter Visual Basic .NET

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)

C#

//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);

Acceso a datos con Microsoft ADO.NET

17

Crear un DataSet
Crear y poblar un DataSet con DataTables El mtodo Fill ejecuta el SelectCommand
DataSet ds = new DataSet(); DataSet ds = new DataSet(); da.Fill(ds, "Authors"); da.Fill(ds, "Authors"); Dim ds As New DataSet() Dim ds As New DataSet() da.Fill(ds, "Authors") da.Fill(ds, "Authors")

Acceder a DataTable
ds.Tables["Authors"].Rows.Count; ds.Tables["Authors"].Rows.Count; string str=""; string str=""; foreach(DataRow r in foreach(DataRow r in ds.Tables["Authors"].Rows) ds.Tables["Authors"].Rows) { { str += r[2]; str += r[2]; str += r["au_lname"]; str += r["au_lname"]; } }
*****************************

ds.Tables("Authors").Rows.Count ds.Tables("Authors").Rows.Count Dim r As DataRow Dim r As DataRow Dim str As String Dim str As String For Each r in _ For Each r in _ ds.Tables("Authors").Rows ds.Tables("Authors").Rows str &= r(2) str &= r(2) str &= r("au_lname") str &= r("au_lname") Next Next

Introduccin Crear a DataSet Visual Basic .NET C# Rellenar el DataSet

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");

Visual Basic .NET C#

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.

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. Visual Basic .NET
'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")

C#

//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. Acceder a DataTable 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") -ods.Tables(0) ds.Tables["Authors"]; -ods.Tables[0];

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: Visual Basic .NET
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); }

C#

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: Visual Basic .NET C#
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: Visual Basic .NET C#
DataSet.Tables(0).Rows(x)(1) DataSet.Tables(0).Rows(x)("fieldname") ds.Tables["Authors"].Rows[x][1]; ds.Tables["Authors"].Rows[x]["fieldname"];

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: Visual Basic .NET
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"]; }

C#

Acceso a datos con Microsoft ADO.NET

21

Demostracin: utilizar programticamente un DataSet


Crear una conexin Crear DataAdapter Crear DataSet Leer los datos del DataSet programticamente

*****************************

Introduccin

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.

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 DataView puede personalizarse para presentar un subconjunto de datos de un DataTable La propiedad DefaultView devuelve el DataView predeterminado de la tabla
Dim dv As DataView = ds.Tables("Authors").DefaultView Dim dv As DataView = ds.Tables("Authors").DefaultView DataView dv = ds.Tables["Authors"].DefaultView; DataView dv = ds.Tables["Authors"].DefaultView;

Establecer una vista distinta de un DataSet


Dim dv As New DataView (ds.Tables("Authors")) Dim dv As New DataView (ds.Tables("Authors")) dv.RowFilter = "state = 'CA'" dv.RowFilter = "state = 'CA'" DataView dv = new DataView(ds.Tables["Authors"]); DataView dv = new DataView(ds.Tables["Authors"]); dv.RowFilter = "state = 'CA'"; dv.RowFilter = "state = 'CA'";

*****************************

Introduccin

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;

DataViews como subconjunto de un DataTable

DefaultView

Visual Basic .NET C#

24

Acceso a datos con Microsoft ADO.NET

DataView personalizado

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:

Visual Basic .NET

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";

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. Nota Hay varias respuestas correctas para esta prctica.

26

Acceso a datos con Microsoft ADO.NET

Vincular un DataSet a un control enlazado a lista


Crear el control
<asp:DataGrid id="dg" runat="server" /> <asp:DataGrid id="dg" runat="server" />

Vincular a un DataSet o un DataView


dg.DataSource = ds dg.DataSource = ds dg.DataMember = "Authors" dg.DataMember = "Authors" dg.DataBind() dg.DataBind() dg.DataSource = ds; dg.DataSource = ds; dg.DataMember = "Authors"; dg.DataMember = "Authors"; dg.DataBind(); dg.DataBind();

*****************************

Introduccin

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" />

Crear el control

Vincular a un Dataset o DataView

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 tabla Authors, del objeto DataSet ds, a un control DataGrid denominado dg:

Visual Basic .NET

dg.DataSource = ds dg.DataMember = "Authors" dg.DataBind() dg.DataSource = ds; dg.DataMember = "Authors"; dg.DataBind();

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: Visual Basic .NET C#
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. Ejemplo de uso de una vista personalizada Visual Basic .NET 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();

C#

La siguiente ilustracin muestra el formato predeterminado del control DataGrid, mostrando datos de autores que viven en el estado de California.

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 Vincular DataSet y DataView a controles DataGrid

*****************************

Introduccin

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.

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 DataAdapter no puede crear un DataSet Sintaxis SQL no vlida Nombre de tabla o campo no vlido

Cdigo de ejemplo
*****************************

Introduccin

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:

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

C#

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 + ". "); }

32

Acceso a datos con Microsoft ADO.NET

El DataAdapter no puede crear un DataSet

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:

Visual Basic .NET

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>"; }

C#

Errores de SQL Server

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 Class LineNumber Descripcin Obtiene el nivel de gravedad del error devuelto por SQL Server. Obtiene el nmero de lnea del archivo de proceso por lotes con comandos Transact-SQL o el procedimiento almacenado que contiene el error. Obtiene el texto que describe el error. Obtiene un nmero que identifica el tipo de error.

Message Number

Nota Para una lista completa de las propiedades de la clase SqlError, consultar la documentacin de Visual Studio .NET.

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 17 4060 18456 Descripcin Nombre de servidor no vlido Nombre de base de datos no vlido 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 11-16 17-19 Descripcin Generado por usuario Errores de software o hardware Accin Puede ser corregido por el usuario. Podemos seguir trabajando, pero es posible que no podamos ejecutar una instruccin determinada. SqlConnection permanece abierto. El servidor cierra SqlConnection. El usuario puede volver a abrir la conexin.

20-25

Errores de software o hardware

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

*****************************

Introduccin

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.

Objetivos de la leccin

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.

Acceso a datos con Microsoft ADO.NET

35

Almacenar mltiples tablas


Agregar la primera tabla
daCustomers = New SqlDataAdapter _ daCustomers = New SqlDataAdapter _ ("select * from Customers", conn1) ("select * from Customers", conn1) daCustomers.Fill(ds, "Customers") daCustomers.Fill(ds, "Customers")

Agregar la(s) siguiente(s) tabla(s)


daOrders = New SqlDataAdapter _ daOrders = New SqlDataAdapter _ ("select * from Orders", conn2) ("select * from Orders", conn2) daOrders.Fill(ds, "Orders") daOrders.Fill(ds, "Orders")
Customers

conn1
DataSet
*****************************

conn2
Orders

Introduccin

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.

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: Visual Basic .NET
Dim Dim Dim Dim conn As SqlConnection daCustomers As SqlDataAdapter daOrders As SqlDataAdapter 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")

C#

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");

Agregar tablas subsiguientes

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:

Visual Basic .NET

'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");

C#

Nota Deberamos utilizar un nuevo objeto DataAdapter para cada objeto DataTable de un objeto DataSet.

Acceso a datos con Microsoft ADO.NET

37

Crear relaciones
Identificar la columna primaria
Dim parentCol As DataColumn = _ Dim parentCol As DataColumn = _ ds.Tables("Customers").Columns("CustomerID") ds.Tables("Customers").Columns("CustomerID")

Identificar la columna secundaria


Dim childCol As DataColumn = _ Dim childCol As DataColumn = _ ds.Tables("Orders").Columns("CustomerID") ds.Tables("Orders").Columns("CustomerID")

Crear DataRelation

parentCol

Tabla Customers

DataRelation

Dim dr As New DataRelation _ Dim dr As New DataRelation _ ("name", parentCol, _ ("name", parentCol, _ childCol) childCol) ds.DataRelations.Add(dr) ds.DataRelations.Add(dr)

DataSet

childCol Tabla Orders

Cdigo de ejemplo C#
*****************************

Introduccin

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.

38

Acceso a datos con Microsoft ADO.NET

Ejemplo de objeto DataRelation Visual Basic .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)

C#

// 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);

Nota Para ms informacin sobre relaciones de datos, ver Explorar una relacin entre tablas, en la documentacin de Visual Studio .NET.

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).GetChildRows("relation") ds.Tables(index).Rows(index).GetParentRow("relation") ds.Tables(index).Rows(index).GetParentRow("relation") ds.Tables[index].Rows[index].GetChildRows("relation"); ds.Tables[index].Rows[index].GetChildRows("relation"); ds.Tables[index].Rows[index].GetParentRow("relation"); ds.Tables[index].Rows[index].GetParentRow("relation");

Customers GetChildRows

Orders

DataSet

GetParentRow

*****************************

Introduccin

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.

Navegar programticamente

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.

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: Visual Basic .NET
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"] + ","; }

C#

Acceso a datos con Microsoft ADO.NET

41

Navegar visualmente entre tablas utilizando relaciones


Dim tableView As DataView Dim tableView As DataView Dim currentRowView As DataRowView Dim currentRowView As DataRowView tableView = New DataView(ds.Tables("Customers")) tableView = New DataView(ds.Tables("Customers")) currentRowView = tableView(dgCustomers.SelectedIndex) currentRowView = tableView(dgCustomers.SelectedIndex) dgChild.DataSource = currentRowView.CreateChildView("CustOrders") dgChild.DataSource = currentRowView.CreateChildView("CustOrders") DataView tableView; DataView tableView; DataRowView currentRowView; DataRowView currentRowView; tableView = new DataView(ds.Tables["Customers"]); tableView = new DataView(ds.Tables["Customers"]); currentRowView = tableView[dgCustomers.SelectedIndex]; currentRowView = tableView[dgCustomers.SelectedIndex]; dgChild.DataSource = currentRowView.CreateChildView("CustOrders"); dgChild.DataSource = currentRowView.CreateChildView("CustOrders"); Customers DataRowView Orders

DataView

CreateChildView

DataSet
*****************************

Navegar visualmente

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:

Visual Basic .NET

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();

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 Bienvenido Escoger el DataSet que deseamos utilizar Escoger una conexin de datos Hacer lo siguiente Hacer clic en Siguiente. Hacer clic en Crear un nuevo DataSet denominado, escribir dsCustOrders en el campo y hacer clic en Siguiente. Seleccionar una conexin existente a la base de datos Northwind o crear una nueva, y hacer clic en Siguiente. Agregar las tablas Customers y Orders a la lista Elemento(s) seleccionado(s) y hacer clic en Siguiente. 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. Mantener los valores predeterminados para mostrar todas las columnas en las tablas Principal y Detalle, y hacer clic en Finalizar.

Escoger tablas o vistas

Crear una relacin entre tablas

Escoger las tablas y columnas a mostrar

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


Qu es un DataReader? Crear un DataReader Leer datos de un DataReader Vincular un DataReader a un control enlazado a lista Prctica: organizar cdigo para crear un DataReader Demostracin: mostrar datos utilizando DataReaders

*****************************

Introduccin

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.

Objetivos de la leccin

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.

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 del servidor

*****************************

Introduccin

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.

Slo hacia delante, slo lectura

Acceso rpido a datos

Conexin a la fuente de datos

46

Acceso a datos con Microsoft ADO.NET

Gestin de la conexin por s mismo

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 los datos uno mismo Utiliza menos recursos del servidor

Acceso a datos con Microsoft ADO.NET

47

Crear un DataReader
Para utilizar un DataReader:
1 1. Crear y abrir la conexin a la base de datos 1 2 2. Crear un objeto Command 2 3 3. Crear un DataReader desde el objeto Command 3 4 4. Invocar el mtodo ExecuteReader 4 5 5. Utilizar el objeto DataReader 5 6 6 6. Cerrar el objeto DataReader 7 7 7. Cerrar el objeto Connection

Utilizar el controlador de errores TryCatchFinally Cdigo de ejemplo


*****************************

Introduccin

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.

Utilizar un DataReader

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.

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: Visual Basic .NET
'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()

C#

// 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();

Acceso a datos con Microsoft ADO.NET

49

Utilizar el controlador de eventos TryCatchFinally

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:

Visual Basic .NET

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(); }

C#

50

Acceso a datos con Microsoft ADO.NET

Leer datos desde un DataReader


Invocar Read para cada registro Devuelve false cuando no hay ms registros Acceso a campos Parmetro es la posicin ordinal o nombre del campo Las funciones Get ofrecen un mejor rendimiento
Do While myReader.Read() Do While myReader.Read() str &= myReader(1) str &= myReader(1) str &= myReader("field") str &= myReader("field") str &= myReader.GetDateTime(2) str &= myReader.GetDateTime(2) Loop Loop while (myReader.Read()) while (myReader.Read()) { { str += myReader[1]; str += myReader[1]; str += myReader["field"]; str += myReader["field"]; str += myReader.GetDateTime(2); str += myReader.GetDateTime(2); } }

Cerrar el DataReader Cerrar la conexin


*****************************

Invocar Read para cada registro

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:

Visual Basic .NET

Do While dr.Read() lblName.Text &= dr("au_fname") Loop while (dr.Read()) { lblName.Text += dr["au_name"]; }

C#

Acceso a datos con Microsoft ADO.NET

51

Acceso a campos

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. Sugerencia 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():

Visual Basic .NET

dr.Read() lblName.Text = dr.GetString(1) + ", " + _ dr.GetString(2) dr.Read(); lblName.Text = dr.GetString(1) + ", " + dr.GetString(2);

C#

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: Visual Basic .NET C# Cerrar el DataReader
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();

Visual Basic .NET C# Cerrar la conexin

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();

Visual Basic .NET C#

52

Acceso a datos con Microsoft ADO.NET

Vincular un DataReader a un control enlazado a lista


Crear el control
<asp:DataGrid id="dgAuthors" runat="server" /> <asp:DataGrid id="dgAuthors" runat="server" />

Vincular a un DataReader
dgAuthors.DataSource = dr dgAuthors.DataSource = dr dgAuthors.DataBind() dgAuthors.DataBind() dgAuthors.DataSource = dr; dgAuthors.DataSource = dr; dgAuthors.DataBind(); dgAuthors.DataBind();

*****************************

Introduccin

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:

Visual Basic .NET

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()

Acceso a datos con Microsoft ADO.NET

53

C#

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();

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. Nota Hay varias respuestas correctas para esta prctica.

Acceso a datos con Microsoft ADO.NET

55

Demostracin: mostrar datos utilizando DataReaders


Crear un objeto SqlConnection Crear un objeto DataReader Vincular el DataReader a un Cuadro de lista Generar los elementos del Cuadro de lista a partir de datos proporcionados por el DataReader

*****************************

Introduccin

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.

Prctica A: Acceso a datos con Microsoft ADO.NET


Logon Page Logon Page
Login.aspx Login.aspx Coho Winery

Benefits Benefits Home Page Home Page


Default.aspx Default.aspx

Registration Registration
Register.aspx Register.aspx

Menu Menu Component Component

Page Header Page Header


Header.ascx Header.ascx

ASPState

Class1.vb or Class1.cs Class1.vb or Class1.cs

Web. config

tempdb

Life Insurance Life Insurance


Life.aspx Life.aspx

Retirement Retirement
Retirement.aspx Retirement.aspx

Medical Medical

Medical.aspx Medical.aspx

Dental Dental

Dental.aspx Dental.aspx

Lab Web Application

Prospectus Prospectus
Prospectus.aspx Prospectus.aspx

Doctors Doctors

Doctors.aspx Doctors.aspx

User Control User


namedate.ascx namedate.ascx

XML Web XML Web Service Service

dentalService1.asmx dentalService1.asmx

XML Files

Doctors

Dentists

Objetivos

En este laboratorio, aprenderemos a: Recuperar datos de una base de datos Microsoft SQL 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. Nota 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.

Requisitos previos

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.

Escenario

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.

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 Importante 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 Importante 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. Precaucin 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.

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. Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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 Importante 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. Para el proyecto Visual Basic .NET 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 lista Tipos 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. Para el proyecto Visual C# 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 lista Tipos 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. Precaucin Verificar que se han escrito correctamente las maysculas del proyecto BenefitsList.

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. Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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.

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. Visual C# 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: Visual Basic .NET C#


'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.

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 DataSource DataTextField Valor Objeto SqlDataReader "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: Visual Basic .NET
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();

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? ____________________________________________________________ ____________________________________________________________ Nota 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 desplegable lstCities. 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 desplegable lstCities. 7. Establecer la propiedad DataSource del control DataGrid al nuevo DataView.

8. Invocar el mtodo DataBind del control DataGrid. El cdigo debera ser similar al siguiente: Visual Basic .NET
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();

C#

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. Nota 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: Visual Basic .NET
SqlDataAdapter1.Fill(DsDoctors1) dgDoctors.DataSource = DsDoctors1 dgDoctors.DataBind() sqlDataAdapter1.Fill(dsDoctors1); dgDoctors.DataSource = dsDoctors1; dgDoctors.DataBind();

C#

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.

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: Visual Basic .NET C#
'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: Visual Basic .NET C#
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 desplegable lstCities, 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.

El procedimiento de evento lstCities_SelectedIndexChanged debera ser similar al siguiente: Visual Basic .NET
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

C#

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 desplegable City. Deberamos ver nicamente los doctores de esa ciudad. 8. Hacer clic en [All] en el cuadro de lista desplegable City. 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.

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 desplegable lstCities, 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: Visual Basic .NET
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

C#

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.

Invocar procedimientos almacenados con Microsoft ADO.NET

NDICE Descripcin Leccin: descripcin de los procedimientos almacenados Leccin: invocar procedimientos almacenados 1 2 9

Invocar procedimientos almacenados con Microsoft ADO.NET

Descripcin
Descripcin de los procedimientos almacenados Invocar procedimientos almacenados

*****************************

Introduccin

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 Microsoft ADO.NET para acceder a procedimientos almacenados.

Objetivos

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.

Invocar procedimientos almacenados con Microsoft ADO.NET

Leccin: descripcin de los procedimientos almacenados


Qu es un procedimiento almacenado? Por qu utilizar procedimientos almacenados? Prctica: seleccionar el procedimiento almacenado correcto

*****************************

Introduccin

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.

Objetivos de la leccin

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.

Invocar procedimientos almacenados con Microsoft ADO.NET

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
Formulario Web Form Cliente Cliente Servidor Web Servidor Web
*****************************

Procedimiento Procedimiento almacenado almacenado Base datos SQL Server SQL Server

Introduccin

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.

Acceso programtico a una base de datos

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

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

*****************************

Introduccin

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.

Programacin modular

Distribucin del trabajo

Incremento de la seguridad de la base de datos

Invocar procedimientos almacenados con Microsoft ADO.NET

Ejecucin ms rpida

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.

Reduccin del trfico de red

En ocasiones, una operacin que requiere cientos de lneas de cdigo TransactSQL 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.

Proporciona flexibilidad

Invocar procedimientos almacenados con Microsoft ADO.NET

Prctica: seleccionar el procedimiento almacenado correcto


Los estudiantes: Decidirn, en determinados escenarios, qu tipo 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. ____________________________________________________________ ____________________________________________________________

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

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

*****************************

Introduccin

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.

Objetivos de la leccin

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.

10

Invocar procedimientos almacenados con Microsoft ADO.NET

Invocar procedimientos almacenados


Identificar el procedimiento almacenado Configurar la propiedad SelectCommand del DataAdapter
Dim daCategory As New SqlDataAdapter() Dim daCategory As New SqlDataAdapter() daCategory.SelectCommand = New SqlCommand() daCategory.SelectCommand = New SqlCommand() daCategory.SelectCommand.Connection = conn daCategory.SelectCommand.Connection = conn daCategory.SelectCommand.CommandText = "ProductCategoryList" daCategory.SelectCommand.CommandText = "ProductCategoryList" daCategory.SelectCommand.CommandType = CommandType.StoredProcedure daCategory.SelectCommand.CommandType = CommandType.StoredProcedure SqlDataAdapter daCategory = new SqlDataAdapter(); SqlDataAdapter daCategory = new SqlDataAdapter(); daCategory.SelectCommand = new SqlCommand(); daCategory.SelectCommand = new SqlCommand(); daCategory.SelectCommand.Connection = conn; daCategory.SelectCommand.Connection = conn; daCategory.SelectCommand.CommandText = "ProductCategoryList"; daCategory.SelectCommand.CommandText = "ProductCategoryList"; daCategory.SelectCommand.CommandType = CommandType.StoredProcedure; daCategory.SelectCommand.CommandType = CommandType.StoredProcedure;

Ejecutar el procedimiento almacenado y almacenar los registros devueltos


daCategory.Fill(ds, "Categories") daCategory.Fill(ds, "Categories") daCategory.Fill(ds, "Categories"); daCategory.Fill(ds, "Categories");
*****************************

Introduccin

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.

Identificar el procedimiento almacenado

Invocar procedimientos almacenados con Microsoft ADO.NET

11

Establecer la propiedad SelectCommand

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: Visual Basic .NET
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;

C#

Nota 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: Visual Basic .NET
Dim daCategory As New SqlDataAdapter _ ("ProductCategoryList", conn) daCategory.SelectCommand.CommandType = _ CommandType.StoredProcedure SqlDataAdapter daCategory = new SqlDataAdapter ("ProductCategoryList", conn); daCategory.SelectCommand.CommandType = CommandType.StoredProcedure;

C#

12

Invocar procedimientos almacenados con Microsoft ADO.NET

Ejecutar el procedimiento almacenado

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:

Visual Basic .NET C#

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.

Invocar procedimientos almacenados con Microsoft ADO.NET

13

Demostracin: invocar un procedimiento almacenado

*****************************

Introduccin

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.

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 Form ASP.NET Crearn un objeto DataReader para leer los datos del procedimiento almacenado Vincularn un DataGrid al DataReader Tiempo: 15 minutos

*****************************

Introduccin

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

Visual Basic .NET C#

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.

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: Visual Basic .NET
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();

C#

C#

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.

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

*****************************

Introduccin

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. Nota 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 Input Output InputOutput Uso Utilizado por la aplicacin Web para enviar valores de datos especficos a un procedimiento almacenado. Utilizado por un procedimiento almacenado para enviar valores especficos de retorno a la aplicacin Web que lo invoca. 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. Utilizado por un procedimiento almacenado para enviar un valor de retorno a la aplicacin Web que lo invoca.

ReturnValue

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
SqlParameter param = new SqlParameter SqlParameter param = new SqlParameter param = New SqlParameter _ param = New SqlParameter _ ("@Beginning_Date", SqlDbType.DateTime); ("@Beginning_Date", SqlDbType.DateTime); ("@Beginning_Date", SQLDbType.DateTime) ("@Beginning_Date", SQLDbType.DateTime) param.Direction = ParameterDirection.Input; param.Direction = ParameterDirection.Input = ParameterDirection.Input; param.Direction = ParameterDirection.Input param.Direction param.Value = Convert.ToDateTime param.Value = CDate(txtStartDate.Text) = Convert.ToDateTime param.Value = CDate(txtStartDate.Text) param.Value (txtStartDate.Text); (txtStartDate.Text); da.SelectCommand.parmetros.Add(param) da.SelectCommand.parmetros.Add(param) da.SelectCommand.parmetros.Add(param); da.SelectCommand.parmetros.Add(param);

Ejecutar el procedimiento almacenado y almacenar los registros devueltos


ds = New DataSet(); ds = New DataSet() DataSet(); DataSet() da.Fill(ds, "Products"); da.Fill(ds, "Products") "Products"); "Products")

Cdigos de ejemplo
*****************************

Introduccin

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

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: Visual Basic .NET
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);

C#

Nota 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: Visual Basic .NET
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);

C#

Ejecutar un procedimiento almacenado Visual Basic .NET C#

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");

Invocar procedimientos almacenados con Microsoft ADO.NET

19

Utilizar parmetros de salida


Crear el parmetro, establecer direccin y aadir a la coleccin Parameters
param = New SqlParameter("@ItemCount", SQLDbType.Int) param = New SqlParameter("@ItemCount", SQLDbType.Int) param.Direction = ParameterDirection.Output param.Direction = ParameterDirection.Output da.SelectCommand.parameters.Add(param) da.SelectCommand.parameters.Add(param) param = new SqlParameter("@ItemCount", SqlDbType.Int); param = new SqlParameter("@ItemCount", SqlDbType.Int); param.Direction = ParameterDirection.Output; param.Direction = ParameterDirection.Output; da.SelectCommand.parameters.Add(param); da.SelectCommand.parameters.Add(param);

Ejecutar el procedimiento almacenado y almacenar los registros devueltos


ds = new DataSet() ds = new DataSet() da.Fill(ds) da.Fill(ds) ds = new DataSet(); ds = new DataSet(); da.Fill(ds); da.Fill(ds);

Leer = parmetros de salida iTotal losda.parameters("@ItemCount").Value iTotal = da.parameters("@ItemCount").Value


iTotal = da.parameters("@ItemCount").Value; iTotal = da.parameters("@ItemCount").Value;
*****************************

Introduccin

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

Ejemplo de uso de parmetros de salida

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. Invocar un procedimiento almacenado que devuelve un valor 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:

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)

Visual Basic .NET

C#

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);

Ejecutar el procedimiento almacenado Visual Basic .NET

El siguiente cdigo ejecuta el procedimiento almacenado MyCmd:

conn.Open() myCmd.ExecuteNonQuery() conn.Close() conn.Open(); myCmd.ExecuteNonQuery(); conn.Close();

C#

Leer parmetros de salida

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#

Invocar procedimientos almacenados con Microsoft ADO.NET

21

Demostracin: pasar parmetros

*****************************

Introduccin

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.

Prctica A: invocar procedimientos almacenados con Microsoft ADO.NET


Logon Page Logon Page
Login.aspx Login.aspx Coho Winery

Benefits Benefits Home Page Home Page


Default.aspx Default.aspx

Registration Registration
Register.aspx Register.aspx

Menu Menu Component Component

Page Header Page Header


Header.ascx Header.ascx

ASPState

Class1.vb or Class1.cs Class1.vb or Class1.cs

Web. config

tempdb

Life Insurance Life Insurance


Life.aspx Life.aspx

Retirement Retirement
Retirement.aspx Retirement.aspx

Medical Medical

Medical.aspx Medical.aspx

Dental Dental

Dental.aspx Dental.aspx

Lab Web Application

Prospectus Prospectus
Prospectus.aspx Prospectus.aspx

Doctors Doctors

Doctors.aspx Doctors.aspx

User Control User


namedate.ascx namedate.ascx

XML Web XML Web Service Service

dentalService1.asmx dentalService1.asmx

XML Files

Doctors

Dentists

Objetivos

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. Nota Este laboratorio se centra en los conceptos de este mdulo. Por ello, podra no cumplir las recomendaciones de seguridad de Microsoft.

Requisitos previos

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.

Escenario

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.

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 Importante 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 Importante 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. Precaucin 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.

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: Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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 Importante 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 Para el proyecto Visual Basic .NET 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 lista Tipos 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. Para el proyecto Visual C# 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 lista Tipos 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. Precaucin Verificar que se han escrito correctamente las maysculas del proyecto BenefitsList.

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. Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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.

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: Visual Basic .NET
'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();

C#

3. Comentar este cdigo seleccionando todas las lneas del cdigo y haciendo clic en el icono Comentario de la Barra de herramientas.

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 DataSource DataTextField Valor drCities "City"

7. Invocar el mtodo DataBind del cuadro de lista desplegable lstCities. 8. Cerrar los objetos DataReader y Connection. El cdigo debera ser similar al siguiente: Visual Basic .NET
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();

C#

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.

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 lista lstSpecialties. Invocar el procedimiento almacenado getDrSpecialty 1. Crear el procedimiento de evento SelectedIndexChanged. Visual Basic .NET 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 desplegable Nombre de clase, hacer clic en dgDoctors. b. En la lista desplegable Nombre de mtodo, hacer clic en SelectedIndexChanged. C# 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: Visual Basic .NET C#
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: Visual Basic .NET
Dim cmdSpecialty As New _ SqlCommand("getDrSpecialty", SqlConnection1) cmdSpecialty.CommandType = CommandType.StoredProcedure SqlCommand cmdSpecialty = new SqlCommand( "getDrSpecialty", sqlConnection1); cmdSpecialty.CommandType = CommandType.StoredProcedure;

C#

6. Crear un objeto SqlParameter denominado paramSpecialty utilizando el parmetro que se muestra en la siguiente tabla.

Nombre de parmetro @dr_id

Tipo de datos SqlDbType.Char

Tamao 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: Visual Basic .NET
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);

C#

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: Visual Basic .NET
SqlConnection1.Open() Dim drSpecialty As SqlDataReader drSpecialty = cmdSpecialty.ExecuteReader() sqlConnection1.Open(); sqlDataReader drSpecialty; drSpecialty = cmdSpecialty.ExecuteReader();

C#

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 DataSource DataTextField Valor drSpecialty "Specialty"

2. Invocar el mtodo DataBind del cuadro de lista.

3. Cerrar los objetos SqlDataReader y SqlConnection. El cdigo debera ser similar al siguiente: Visual Basic .NET
lstSpecialties.DataSource = drSpecialty lstSpecialties.DataTextField = "Specialty" lstSpecialties.DataBind() drSpecialty.Close() SqlConnection1.Close() lstSpecialties.DataSource = drSpecialty; lstSpecialties.DataTextField = "Specialty"; lstSpecialties.DataBind(); drSpecialty.Close(); sqlConnection1.Close();

C#

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: Visual Basic .NET
If Not IsDBNull(drSpecialty) Then lstSpecialties.Visible = True lblSpecialties.Visible = True End If if (drSpecialty != null) { lstSpecialties.Visible = true; lblSpecialties.Visible = true; }

C#

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 desplegable City 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.

Leer y escribir datos XML

ndice Descripcin Leccin: XML y el objeto DataSet Leccin: trabajar con datos XML Leccin: uso del control de servidor Web XML 1 10 25 35

Leccin: Descripcin de la arquitectura XML en ASP.NET 2

Leer y escribir datos XML

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

*****************************

Introduccin

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.

Objetivos

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.

Leer y escribir datos XML

Leccin: descripcin de la arquitectura XML en ASP.NET


Qu es XML? Principales tecnologas XML

*****************************

Introduccin

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.

Objetivos de la leccin

En esta leccin, aprenderemos a: Distinguir entre XML vlido y XML con un formato correcto. Describir las principales tecnologas XML.

Leer y escribir datos XML

Qu es XML?
Proporciona un mtodo uniforme para describir e intercambiar datos estructurados Podemos definir nuestros propios elementos y atributos Los elementos pueden anidarse
Instruccin de Instruccin de procesamiento procesamiento Atributos Atributos

Elementos Elementos

<?xml version="1.0"?> <?xml version="1.0"?> <authors> <authors> <author ID="1"> <author ID="1"> <name>Jay</name> <name>Jay</name> </author> </author> <!-- There are more authors. --> <!-- There are more authors. --> </authors> </authors>

Comentarios Comentarios

XML vlido frente a XML con un formato correcto


*****************************

Introduccin

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.

Definicin

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.

Partes de un documento XML

Las partes de un documento XML incluyen: Instrucciones de procesamiento Elementos Atributos Comentarios

Leer y escribir datos XML

Instruccin de procesamiento Elementos

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.

Atributos

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.

Comentarios XML de formato correcto

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>.

Leer y escribir datos XML

XML vlido

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 Document Type Definition (DTD) Descripcin 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. XDR es una tecnologa de esquema provisional desarrollada por Microsoft. XDR es similar a XSD, pero los esquemas XDR estn escritos en XML. 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.

XML-Data Reduced (XDR schema) XML Schema Definition language (XSD)

XSD es el esquema utilizado ms frecuentemente en el .NET Framework.

Leer y escribir datos XML

Principales tecnologas XML


Definicin de esquemas XML (XSD) Define la estructura requerida de un documento XML vlido Extensible Stylesheet Language Transformation (XSLT) Transforma el contenido de un documento XML fuente en otro documento que es diferente en formato o estructura Lenguaje XML Path (XPath) Direcciona partes de un documento XML Document Object Model (DOM) Modelo de objetos para trabajar programticamente con documentos XML en memoria XML Query (XQuery) Lenguaje de fcil implementacin en el que las consultas son concisas y se entienden fcilmente
*****************************

Introduccin

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

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">

Definicin de esquema

Leer y escribir datos XML

Declaraciones de elemento y atributo

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>

XSLT

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>

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

XPath

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

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.

XQuery

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. Nota Para ms informacin sobre las principales tecnologas XML, acceder al sitio Web del W3C en http://www.w3c.org.

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

*****************************

Introduccin

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.

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 Datasets serializan datos en forma de XML XML proporciona un formato cmodo para transferir el contenido de un Dataset a/desde clientes remotos Los objetos XML sincronizan y transforman datos
Cortafuegos Cortafuegos Servidor Web Servidor Web Legible por una persona Legible por una persona

Archivo XML o Flujo

Legible por el navegador Legible por el navegador

DataSet

Legible por un mainframe Legible por un mainframe

*****************************

Introduccin

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.

12

Leer y escribir datos XML

Descripcin de XML y DataSets


WriteXML WriteXML DataAdapter DataAdapter

Archivo XML

Archivo XML
Doc.Save Doc.Save

Base de datos

Objeto Objeto DataSet DataSet

Objeto Objeto XmlDataDocument XmlDataDocument Objeto Objeto XslTransform XslTransform

ReadXML ReadXML

Archivo XML

Archivo XML o HTML

Archivo XSLT

*****************************

Introduccin

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.

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. Nota 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.

14

Leer y escribir datos XML

Los mtodos basados en XML del objeto DataSet


Utilizan ReadXml para cargar datos de un archivo o flujo
DataSet ds = new DataSet(); DataSet ds = new DataSet(); ds.ReadXml(Server.MapPath("filename.xml")); ds.ReadXml(Server.MapPath("filename.xml"));

Utilizan WriteXml para escribir datos XML a un archivo o flujo


DataSet ds = new DataSet(); DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter("select * from SqlDataAdapter da = new SqlDataAdapter("select * from Authors", conn); Authors", conn); da.Fill(ds); da.Fill(ds); ds.WriteXml(Server.MapPath("filename.xml")); ds.WriteXml(Server.MapPath("filename.xml"));

Utilizan GetXml para escribir datos a una variable de cadena


string strXmlDS = ds.GetXml(); string strXmlDS = ds.GetXml();

Cdigo de ejemplo de Visual Basic .NET


*****************************

Introduccin

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:

ReadXML

Microsoft Visual Basic .NET C#

Dim ds As New DataSet() ds.ReadXml(Server.MapPath("filename.xml")) DataSet ds = new DataSet(); ds.ReadXml(Server.MapPath("filename.xml"));

Nota El mtodo Server.MapPath devuelve la ruta de archivo fsica que corresponde a la ruta virtual especificada en el servidor Web. WriteXML 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.

Leer y escribir datos XML

15

El siguiente cdigo es un ejemplo de cmo escribir un DataSet: Visual Basic .NET


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"));

C#

GetXML

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();

Visual Basic .NET C#

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.

16

Leer y escribir datos XML

Demostracin: leer y escribir XML a y desde un DataSet


Leer XML Crear un DataSet Cargar un DataSet desde un archivo XML Mostrar en un DataGrid Escribir XML Crear un DataSet desde la base de datos Crear un archivo XML desde un DataSet

*****************************

Introduccin

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

Leer datos XML

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.

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. Nota 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. Escribir datos XML 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.

18

Leer y escribir datos XML

Prctica: uso del mtodo ReadXml


Los estudiantes:

Crearn un DataSet Cargarn un DataSet desde un archivo XML Lo mostrarn en un DataGrid


Tiempo: 5 Minutos

*****************************

Introduccin

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:

Visual Basic .NET

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();

C#

5. Generar y examinar la pgina.

Leer y escribir datos XML

19

Crear datos XML anidados


De forma predeterminada, la salida de DataTable es secuencial Para anidar XML, anidar DataRelation
Dim dr As New DataRelation _ Dim dr As New DataRelation _ ("name", parentCol, childCol) ("name", parentCol, childCol) dr.Nested = True dr.Nested = True ds.Relations.Add(dr) ds.Relations.Add(dr) DataRelation dr = new DataRelation dr = new DataRelation("name", DataRelation("name", parentCol, parentCol, childCol); childCol); dr.Nested = true; dr.Nested = true; ds.Relations.Add(dr); ds.Relations.Add(dr);

Secuencial
<Title name="title1" /> <Title name="title1" /> <Title name="title2" /> <Title name="title2" /> <Title name="title3" /> <Title name="title3" /> <Publisher name="pub1" /> <Publisher name="pub1" /> <Publisher name="pub2" /> <Publisher name="pub2" />
*****************************

Anidado
<Publisher name="pub1" > <Publisher name="pub1" > <Title name="title1" /> <Title name="title1" /> <Title name="title3" /> <Title name="title3" /> </Publisher> </Publisher> <Publisher name="pub2" > <Publisher name="pub2" > <Title name="title2" /> <Title name="title2" /> </Publisher> </Publisher>

Introduccin

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. Nota 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.

DataRelation

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 DataTable Titles title title1 title2 title3 Secundaria pub_id 1 2 1 price 40,00 60,00 30,00 pub_id 1 2 DataTable Publishers pub_name pub1 pub2 Primaria

El siguiente cdigo muestra cmo establecer la propiedad Nested de DataRelation a false: Visual Basic .NET
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);

C#

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.

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: Visual Basic .NET
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);

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 DataSet sin anidacin Visualizar el archivo XML resultante WriteXml fuera de un DataSet con anidacin Visualizar el archivo XML resultante

*****************************

Introduccin

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.

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 DataSet con un XmlDataDocument Cmo sincronizar un DataSet con un XmlDataDocument Trabajar con un XmlDataDocument Transformar datos XML con XSLT Demostracin: transformar datos con XSLT

*****************************

Introduccin

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.

Objetivos de la leccin

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.

26

Leer y escribir datos XML

Sincronizacin de un DataSet con un XmlDataDocument


System.Data
Base de datos DataAdapter DataSet Tablas

System.Xml
Transformaciones XML Otros tipos de documentos XML Navegacin por documentos XML XmlDataDocument

Sincronizado

*****************************

Introduccin

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.

Un nico conjunto de datos

Leer y escribir datos XML

27

Cmo sincronizar un DataSet con un XmlDataDocument


Almacenar datos XML en un XmlDataDocument
Dim objXmlDataDoc As New XmlDataDocument() Dim objXmlDataDoc As New XmlDataDocument() objXmlDataDoc.Load(Server.MapPath ("file.xml")) objXmlDataDoc.Load(Server.MapPath ("file.xml")) -or-orobjXmlDataDoc.DataSet.ReadXml(Server.MapPath ("file.xml")) objXmlDataDoc.DataSet.ReadXml(Server.MapPath ("file.xml")) XmlDataDocument objXmlDataDoc = new XmlDataDocument(); XmlDataDocument objXmlDataDoc = new XmlDataDocument(); objXmlDataDoc.Load(Server.MapPath ("file.xml")); objXmlDataDoc.Load(Server.MapPath ("file.xml")); -or-orobjXmlDataDoc.DataSet.ReadXml(Server.MapPath ("file.xml")); objXmlDataDoc.DataSet.ReadXml(Server.MapPath ("file.xml"));

Almacenar un DataSet en un XmlDataDocument


Dim ds As New DataSet() Dim ds As New DataSet() 'fill in ds 'fill in ds Dim objXmlDataDoc As New XmlDataDocument(ds) Dim objXmlDataDoc As New XmlDataDocument(ds) DataSet ds = new DataSet(); DataSet ds = new DataSet(); //fill in ds //fill in ds objXmlDataDoc = new XmlDataDocument(ds); objXmlDataDoc = new XmlDataDocument(ds);
*****************************

Introduccin

Existen dos modos de sincronizar un DataSet con un XmlDataDocument. Podemos: Almacenar datos XML en un XmlDataDocument. Almacenar un DataSet en un XmlDataDocument.

Almacenar datos XML en un XmlDataDocument Visual Basic .NET C#

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: Visual Basic .NET C#
objXmlDataDoc.DataSet.ReadXml(Server.MapPath("file.xml")) objXmlDataDoc.DataSet.ReadXml(Server.MapPath("file.xml"));

28

Leer y escribir datos XML

Almacenar un DataSet en un XmlDataDocument Visual Basic .NET

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);

C#

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.

Leer y escribir datos XML

29

Trabajar con un XmlDataDocument


Mostrar datos en un control enlazado a lista
dg.DataSource = objXmlDataDoc.DataSet dg.DataSource = objXmlDataDoc.DataSet dg.DataSource = objXmlDataDoc.DataSet; dg.DataSource = objXmlDataDoc.DataSet;

Extraer filas del Dataset como XML


Dim elem As XmlElement Dim elem As XmlElement elem = objXmlDataDoc.GetElementFromRow _ elem = objXmlDataDoc.GetElementFromRow _ (ds.Tables(0).Rows(1)) (ds.Tables(0).Rows(1)) XmlElement elem; XmlElement elem; elem = objXmlDataDoc.GetElementFromRow(ds.Tables[0].Rows[1]); Utilizar mtodos XML DOM elem = objXmlDataDoc.GetElementFromRow(ds.Tables[0].Rows[1]);

XmlDataDocument hereda de XmlDocument Aplicar una transformacin XSLT

Objeto XslTransform

*****************************

Introduccin

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;

Mostrar datos en un control enlazado a lista Visual Basic .NET C# Extraer filas del 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]);

Visual Basic .NET

C#

30

Leer y escribir datos XML

Utilizar mtodos XML DOM

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.

Aplicar una transformacin XSLT

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.

Leer y escribir datos XML

31

Transformar datos XML con XSLT


Crear un XmlDataDocument
Dim ds As New DataSet() Dim ds As New DataSet() 'fill in DataSet 'fill in DataSet ... ... Dim xmlDoc As New XmlDataDocument(ds) Dim xmlDoc As New XmlDataDocument(ds)

Crear el objeto XSLTransform e invocar el mtodo Transform


Dim xslTran As New XslTransform() Dim xslTran As New XslTransform() xslTran.Load(Server.MapPath("PubTitles.xsl")) xslTran.Load(Server.MapPath("PubTitles.xsl")) Dim writer As New XmlTextWriter _ Dim writer As New XmlTextWriter _ (Server.MapPath("PubTitles_output.html"), _ (Server.MapPath("PubTitles_output.html"), _ System.Text.Encoding.UTF8) System.Text.Encoding.UTF8) xslTran.Transform(xmlDoc, Nothing, writer) xslTran.Transform(xmlDoc, Nothing, writer) writer.Close() writer.Close()

Cdigo de ejemplo de #
*****************************

Introduccin

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.

Crear XmlDataDocument Visual Basic .NET

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);

C#

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.

32

Leer y escribir datos XML

Crear el objeto XslTransform e invocar el mtodo Transform Visual Basic .NET C#

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: Visual Basic .NET C#
xslTran.Load(Server.MapPath("PubTitles.xsl")) xslTran.Load(Server.MapPath("PubTitles.xsl"));

3. Crear un objeto XmlTextWriter para la salida del documento: Visual Basic .NET
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);

C#

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: Visual Basic .NET C#
xslTran.Transform(xmlDoc, Nothing, writer) xslTran.Transform(xmlDoc, null, writer);

5. Cerrar XmlTextWriter: Visual Basic .NET C#


writer.Close() writer.Close();

Nota El proceso de transformacin est especificado por la Recomendacin XSLT versin 1.0 del W3C. Para ms informacin, ver www.w3c.org/TR/xslt.

Leer y escribir datos XML

33

Demostracin: transformar datos con XSLT


Crear un DataSet con dos DataTables Crear XslTransform Transformar el documento DataSet en HTML

*****************************

Introduccin

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. Nota El mtodo Transform nicamente puede enviar la salida a un XmlReader, un TextReader o a objetos XmlWriter.

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 Servidor Web XML

*****************************

Introduccin

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.

Objetivos de la leccin

En esta leccin, aprenderemos a: Describir el control de Servidor Web XML. Cargar y guardar datos XML.

36

Leer y escribir datos XML

Qu es el control de Servidor Web XML?


Escribe a un documento XML Escribe el resultado de una transformacin XSLT a una pgina Web
<asp:Xml id="Xml1" <asp:Xml id="Xml1" Document="XmlDocument object to display" Document="XmlDocument object to display" DocumentContent="String of XML" DocumentContent="String of XML" DocumentSource="Path to XML Document" DocumentSource="Path to XML Document" Transform="XslTransform object" Transform="XslTransform object" TransformSource="Path to XSL Document" TransformSource="Path to XSL Document" runat="server"/> runat="server"/>

*****************************

Introduccin

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:

Lenguaje de transformacin XSLT

Utilizar el control de Servidor Web XML para escribir un documento XML

Leer y escribir datos 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 Transform Document" runat="server">

37

38

Leer y escribir datos XML

Cargar y guardar datos XML


Control de Servidor Web XML (en el formulario Web Form)
<asp:Xml id="xmlCtl" runat="server" /> <asp:Xml id="xmlCtl" runat="server" />

Cargar datos dinmicamente (en la pgina de cdigo subyacente)


xmlCtl.Document.Load(Server.MapPath("text.xml")) xmlCtl.Document.Load(Server.MapPath("text.xml")) xmlCtl.Document.Load(Server.MapPath("text.xml")); xmlCtl.Document.Load(Server.MapPath("text.xml"));

Guardar datos (en la pgina de cdigo subyacente)


xmlCtl.Document.Save(Server.MapPath("text.xml")) xmlCtl.Document.Save(Server.MapPath("text.xml")) xmlCtl.Document.Save(Server.MapPath("text.xml"));; xmlCtl.Document.Save(Server.MapPath("text.xml"))
*****************************

Introduccin

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.

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" />

Cargar datos XML en el control de Servidor Web XML

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.

Proporcionar una ruta a un documento XML externo

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>

Cargar un documento XML como un objeto y pasarlo al control

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:

Visual Basic .NET

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

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; }

C#

Incluir el contenido XML en lnea

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>

Guardar datos XML Visual Basic .NET C#

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"));

Leer y escribir datos XML

41

Demostracin: uso del control de servidor Web XML


Agregar el control de Servidor Web 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

*****************************

Introduccin

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.

Prctica A: Leer datos XML


Logon Page Logon Page
Login.aspx Login.aspx Coho Winery

Benefits Benefits Home Page Home Page


Default.aspx Default.aspx

Registration Registration
Register.aspx Register.aspx

Menu Menu Component Component

Page Header Page Header


Header.ascx Header.ascx

ASPState

Class1.vb or Class1.cs Class1.vb or Class1.cs

Web. config

tempdb

Life Insurance Life Insurance


Life.aspx Life.aspx

Retirement Retirement
Retirement.aspx Retirement.aspx

Medical Medical

Medical.aspx Medical.aspx

Dental Dental

Dental.aspx Dental.aspx

Lab Web Application

Prospectus Prospectus
Prospectus.aspx Prospectus.aspx

Doctors Doctors

Doctors.aspx Doctors.aspx

User Control User


namedate.ascx namedate.ascx

XML Web XML Web Service Service

dentalService1.asmx dentalService1.asmx

XML Files
*****************************

Doctors

Dentists

Objetivos

En este laboratorio, aprenderemos a: Leer un archivo Extensible Markup Language (XML) y almacenarlo en un DataSet. Aplicar una transformacin a un archivo XML.

Requisitos previos

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.

Escenario

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.

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 Importante 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 Importante 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. Precaucin 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.

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: Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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 Importante 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: Para el proyecto Visual Basic .NET 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 lista Tipos 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. Para el proyecto Visual C# 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 lista Tipos 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. Precaucin Verificar que se han escrito correctamente las maysculas del proyecto BenefitsList.

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. Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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.

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: Visual Basic .NET C# 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.

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: Visual Basic .NET C#
'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: Visual Basic .NET
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();

C#

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.

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 ID DocumentSource Valor xmlProspectus 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. Visual Basic .NET 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

C#

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: Visual Basic .NET C#
Dim strProspID As String = Request.Params("ProspID") string strProspID = Request.Params["ProspID"];

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: Visual Basic .NET C#
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.

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: Visual Basic .NET C# 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: Visual Basic .NET C#
'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

6. Quitar el comentario de la siguiente lnea de cdigo para crear una relacin anidada entre los objetos DataTable doctors y drspecialties: Visual Basic .NET C#
'dr1.Nested = True //dr1.Nested = true;

7. Generar, examinar nestedData.aspx y analizar el XML creado. Sugerencia 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: Visual Basic .NET C#
'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: Visual Basic .NET C#
'dr2.Nested = True //dr2.Nested = true;

11. Generar y examinar la pgina nestedData.aspx y analizar el XML creado. Sugerencia 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? _____________________________________________________________ _____________________________________________________________

Nota 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.

Crear y consumir servicios Web XML

ndice Descripcin Leccin: descripcin del uso de servicios Web XML 1 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

Descripcin
Introduccin al uso de servicios Web XML Invocar un servicio Web XML utilizando HTTP Utilizar un proxy para invocar un servicio Web XML Crear un servicio Web XML

*****************************

Introduccin

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 Microsoft Visual Studio .NET.

Objetivos

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.

Crear y consumir servicios Web XML

Leccin: descripcin del uso de servicios Web XML


Qu es un servicio Web XML? Por qu utilizar servicios Web XML? Buscar un servicio Web XML Multimedia: modelo de ejecucin del servicio Web XML

*****************************

Introduccin

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.

Objetivos de la leccin

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.

Crear y consumir servicios Web XML

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

*****************************

Introduccin

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.

Comunicacin aplicacin a aplicacin a travs de Internet

Independencia del lenguaje Independencia del protocolo

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.

Independencia de la plataforma

Crear y consumir servicios Web XML

Arquitectura sin estado

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. Nota Para ms informacin sobre el estndar del servicio Web XML del W3C, ver el sitio Web oficial de W3C en http://www.w3c.org.

Asncrono

Basado en W3C

Crear y consumir servicios Web XML

Por qu utilizar los servicios Web XML?


Sitio de viajes Northwind Traders
Seleccionar destino: Redmond La previsin meteorolgica es:

Servicio Web XML meteorolgico

Lluvia

Internet
El tipo de cambio es: $1.56 El billete de avin slo cuesta: $1,999.98

Servicio Web XML tipo de cambio

Servicio Web XML precio del billete

Base de datos de precios de billetes

*****************************

Introduccin

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.

Agregar servicios Web XML a aplicaciones Web

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 Servicios de autenticacin Informes meteorolgicos Caractersticas Proporciona autenticacin de usuarios. Por ejemplo, Microsoft Passport. 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.

Crear y consumir servicios Web XML (continuacin) Servicio Web XML Precios de billetes de avin Caractersticas 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.

Ejemplo de servicio Web XML

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.

Crear y consumir servicios Web XML

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.

Crear y consumir servicios Web XML

Buscar un servicio Web XML


1 Publicar la URL del servicio Web 1

XML y su descripcin
2 Descubrir el servicio Web XML 2 3 Localizar la URL del servicio Web XML 3 4 Leer la descripcin .wsdl 4 5 Vincular el servicio Web XML al proxy 5 6 6 2 2 3 3 4 4 5 5 6 6 1 1

UDDI

Invocar el servicio Web XML desde el formulario Web Form Mediante el proxy

Web Form Proxy

.disco .wsdl Servicio Web

*****************************

Introduccin

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.

Buscar un servicio Web XML

Crear y consumir servicios Web XML

UDDI

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.

Nota 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. Archivos DISCO
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.

Precaucin 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.

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:schemasdynamicdiscovery: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>

Archivos WSDL

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.

Nota Para ms informacin sobre los archivos DISCO y WSDL, ver Descubrimiento de servicios Web XML en la documentacin de Visual Studio .NET.

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

*****************************

Introduccin

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.

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 1 1
2 2. Seleccionar un 2 mtodo del servicio Web XML 3 3. Invocar el 3 mtodo del servicio Web XML 4 4. Ver la respuesta 4 XML

*****************************

Introduccin

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.

Navegar hasta la URL del servicio Web XML

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.

Crear y consumir servicios Web XML

13

Seleccionar un mtodo del servicio Web XML

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.

Invocar el mtodo Web

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.

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

*****************************

Introduccin

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.

Invocar el mtodo Web WeatherByCity

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.

Crear y consumir servicios Web XML

15

Invocar el mtodo Web TemperatureByCity

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.

Invocar el mtodo Web TravelAdviceByCity

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.

16

Crear y consumir servicios Web XML

Leccin: utilizar un proxy para invocar un servicio Web XML


Utilizar proxies para invocar servicios Web XML Cmo utilizar un proxy para 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

*****************************

Introduccin

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.

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 Web Form Proxy
*****************************

Internet
SOAP

Servicio Web XML

Introduccin

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.

Qu es un proxy?

Interactuar con SOAP

Los proxies y los servicios Web XML interactan utilizando SOAP, que es un protocolo XML utilizado para intercambiar informacin estructurada y tipada.

Nota 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:

18

Crear y consumir servicios Web XML


<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" 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/XMLSchemainstance" 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.

Creado desde el archivo .asmx.wsdl

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.

Crear y consumir servicios Web XML

19

Agregar miembros para gestionar las interacciones con el servicio Web XML y soportar llamadas asncronas

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.

Nota 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 de SoapHttpClientProtocol 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.

Note Para ms informacin sobre los miembros SoapHttpClientProtocol, ver SoapHttpClientProtocol (Miembros de), en la documentacin de Visual Studio .NET.

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 1 1
2 2. Crear una instancia del servicio Web XML 2 3 3. Invocar los mtodos Web del servicio Web XML 3 4 4. Generar la aplicacin Web ASP.NET 4 Sub Button1_Click(s As Object, e As EventArgs)... Sub Button1_Click(s As Object, e As EventArgs)... Dim ProxyGetStocks As New _ Dim ProxyGetStocks As New _ GetStocks.localhost.Service1() GetStocks.localhost.Service1() lblResults.Text = _ lblResults.Text = _ ProxyGetStocks.GetRating("Contoso") ProxyGetStocks.GetRating("Contoso") End Sub End Sub

Cdigo de ejemplo en C#
*****************************

Introduccin

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.

Nota 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.

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:

Visual Basic .NET C#

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:

Visual Basic .NET C#

Label1.Text = ProxyGetStocks.GetRating("Contoso") Label1.Text = ProxyGetStocks.GetRating("Contoso");

El cdigo completo en un procedimiento de evento button_Click sera similar al siguiente:

Visual Basic .NET

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"); }

C#

4. Generar el proyecto de aplicacin Web ASP.NET. Compilar la aplicacin Web haciendo clic en Generar en el men Generar.

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

*****************************

Introduccin

En esta prctica, utilizaremos un proxy para invocar un servicio Web XML. Ejecutar la prctica dirigida por el instructor

Crear un nuevo proyecto Crear un proxy

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.

Crear y consumir servicios Web XML

23

6. Crear un procedimiento de evento Click para el botn Button1 y agregar el siguiente cdigo:

Visual Basic .NET

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); }

C#

Probar con un explorador

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.

Visualizar el archivo de referencia

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.

24

Crear y consumir servicios Web XML

Control de errores del servicio Web XML


Servicio no disponible
GetStocks.StockWebRef.Service1 ProxyGetStocks = new GetStocks.StockWebRef.Service1 ProxyGetStocks = new GetStocks.StockWebRef.Service1(); GetStocks.StockWebRef.Service1(); ProxyGetStocks.Timeout = 10000; ProxyGetStocks.Timeout = 10000; try try { { lblMessage.Text = lblMessage.Text = ProxyGetStocks.GetRating(TextBox1.Text); ProxyGetStocks.GetRating(TextBox1.Text); } } catch (Exception err) catch (Exception err) { { lblMessage.Text = err.Message; lblMessage.Text = err.Message; } }

Excepciones SOAP de servicios Web XML

Cdigo de ejemplo en Visual Basic .NET


*****************************

Introduccin

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

Servicio Web XML no disponible

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:

Visual Basic .NET

Try 'call the XML Web service Catch err As Exception Label1.Text = err.Message End Try

Crear y consumir servicios Web XML

25

C#

try { //call the XML Web service } catch (Exception err) { Label1.Text = err.Message; }

Excepciones SOAP de servicios Web XML

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:

Visual Basic .NET

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#

26

Crear y consumir servicios Web XML

Demostracin: probar la disponibilidad de un servicio Web XML


Establecer una instruccin TryCatch para el control de errores del tiempo de espera Ralentizar el servicio Web Evaluar la excepcin

*****************************

Introduccin

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:

Visual Basic .NET

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

Crear y consumir servicios Web XML

27

C#

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.

Ralentizar el servicio Web XML

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:

Visual Basic .NET C#

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:

Visual Basic .NET C#

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.

Probar la excepcin

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.

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

*****************************

Introduccin

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.

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 1 1 XML en Visual Studio .NET
2 2. Declarar las funciones WebMethod 2 3 3 3. Generar el proyecto de servicio Web XML 4 4. Probar 4 con un navegador

*****************************

Introduccin

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.

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
<%@ WebService Language="vb" <%@ WebService Language="vb" Codebehind="Service1.asmx.vb" Codebehind="Service1.asmx.vb" Class="XMLWebServiceName.Service1" %> Class="XMLWebServiceName.Service1" %>

Pgina .asmx.vb
Imports System Imports System Imports System.Web.Services Imports System.Web.Services Class Service1 Class Service1 <WebMethod()> Public Function function1() As type <WebMethod()> Public Function function1() As type 'function_here 'function_here End Function End Function End Class End Class

Cdigo de ejemplo en C#
*****************************

Introduccin

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:

Pgina .asmx

Visual Basic .NET C#

<%@ 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.

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:

Visual Basic .NET C# Pgina de cdigo subyacente

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:

Visual Basic .NET

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

Crear y consumir servicios Web XML

33

C#

using using using using using using using

System; System.Collections; System.ComponentModel; System.Data; System.Diagnostics; System.Web; 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

Visual Basic .NET

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.

34

Crear y consumir servicios Web XML

C#

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:

Visual Basic .NET

<WebMethod()> Public Function HelloWorld() As String HelloWorld = "Hello World" End Function [WebMethod] public string HelloWorld() { return "Hello World"; }

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

*****************************

Introduccin

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

Crear un servicio Web XML Visual Basic .NET C#

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.

36

Crear y consumir servicios Web XML

3. Crear una funcin GetRating como sigue:

Visual Basic .NET

<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"; }

C#

4. Guardar el archivo.

Probar el servicio Web XML Visual Basic .NET C#

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.

Cambiar o agregar el espacio de nombres

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/")> _

Visual Basic .NET

C#

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):

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

Visual Basic .NET C# Agregar una descripcin para la clase y el mtodo Web Visual Basic .NET

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...")]

C#

12. Agregar una descripcin a la directiva WebMethod. El cdigo debera ser similar al siguiente:

Visual Basic .NET C#

<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

Visual Basic .NET C#

http://localhost/StocksVB/Service1.asmx. http://localhost/StocksCS/Service1.asmx. Verificar que aparecen las descripciones.

Prctica A: Crear y consumir servicios Web XML


Logon Page Logon Page
Login.aspx Login.aspx Coho Winery

Benefits Benefits Home Page Home Page


Default.aspx Default.aspx

Registration Registration
Register.aspx Register.aspx

Menu Menu Component Component

Page Header Page Header


Header.ascx Header.ascx

ASPState

Class1.vb or Class1.cs Class1.vb or Class1.cs

Web. config

tempdb

Life Insurance Life Insurance


Life.aspx Life.aspx

Retirement Retirement
Retirement.aspx Retirement.aspx

Medical Medical

Medical.aspx Medical.aspx

Dental Dental

Dental.aspx Dental.aspx

Lab Web Application

Prospectus Prospectus
Prospectus.aspx Prospectus.aspx

Doctors Doctors

Doctors.aspx Doctors.aspx

User Control User


namedate.ascx namedate.ascx

XML Web XML Web Service Service

dentalService1.asmx dentalService1.asmx

XML Files
*****************************

Doctors

Dentists

Objetivos

En este laboratorio, aprenderemos a: Crear un servicio Web XML que devuelva tipos de datos complejos. Probar un servicio Web XML utilizando un explorador.

Requisitos previos

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.

Escenario

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.

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 Importante 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 Importante 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. Precaucin 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.

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: Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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 Importante 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 Para el proyecto Visual Basic .NET 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 lista Tipos 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. Para el proyecto Visual C# 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 lista Tipos 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. Precaucin Verificar que se han escrito correctamente las maysculas del proyecto BenefitsList.

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: Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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.

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: Visual Basic .NET C# 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. Visual Basic .NET C# 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.

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. Nota 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: Visual Basic .NET
<WebMethod()> _ Public Function GetAllDentists() As DataSet SqlDataAdapter1.Fill(DsDentists1) Return DsDentists1 End Function [WebMethod()] public DataSet GetAllDentists() { sqlDataAdapter1.Fill(dsDentists1); return dsDentists1; }

C#

3. Guardar los cambios.

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? _____________________________________________________________ _____________________________________________________________ Nota 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 Namespace Description Valor http://microsoft.com/webservices/ Este servicio Web XML contiene informacin sobre los dentistas

El cdigo debera ser similar al siguiente: Visual Basic .NET


<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

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: Visual Basic .NET
<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()

C#

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 Nota Tambin puede utilizarse el equipo del instructor, denominado London. 2. Invocar el mtodo de servicio Web XML GetAllDentists.

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: Visual Basic .NET C#
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: Visual Basic .NET
<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

C#

[WebMethod(Description= "This XML Web service method returns the " + "dentists from a supplied postal code.")] public DataSet GetDentistsByPostalCode( String strPostalCode) { }

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: Nota 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 Visual Basic .NET
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

C#

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.

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. Nota 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 soluciones. del Explorador de

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.

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: Visual Basic .NET C#
'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.

El cdigo debera ser similar al siguiente: Visual Basic .NET


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();

C#

Nota 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.

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: Visual Basic .NET C#
'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: Visual Basic .NET
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();

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

Prctica A: Almacenar datos de aplicacin y sesin


Logon Page Logon Page
Login.aspx Login.aspx Coho Winery

Benefits Benefits Home Page Home Page


Default.aspx Default.aspx

Registration Registration
Register.aspx Register.aspx

Menu Menu Component Component

Page Header Page Header


Header.ascx Header.ascx

ASPState

Class1.vb or Class1.cs Class1.vb or Class1.cs

Web. config

tempdb

Life Insurance Life Insurance


Life.aspx Life.aspx

Retirement Retirement
Retirement.aspx Retirement.aspx

Medical Medical

Medical.aspx Medical.aspx

Dental Dental

Dental.aspx Dental.aspx

Lab Web Application

Prospectus Prospectus
Prospectus.aspx Prospectus.aspx

Doctors Doctors

Doctors.aspx Doctors.aspx

User Control User


namedate.ascx namedate.ascx

XML Web XML Web Service Service

dentalService1.asmx dentalService1.asmx

XML Files
*****************************

Doctors

Dentists

Objetivos

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. Nota Este laboratorio se centra en los conceptos de este mdulo. Por ello, podra no cumplir las recomendaciones de seguridad de Microsoft.

Requisitos previos

Para trabajar en este laboratorio, es necesario tener: Conocimientos sobre cmo crear variables de sesin y de aplicacin. Conocimientos sobre cmo crear cookies.

Escenario

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.

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 Importante 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 Importante 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. Precaucin 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.

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: Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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 Importante 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. Para el proyecto Visual Basic .NET 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 lista Tipos 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. Para el proyecto Visual C# 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 lista Tipos 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. Precaucin Verificar que se han escrito correctamente las maysculas del proyecto BenefitsList.

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. Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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 Importante 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. Para el proyecto Visual Basic .NET 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.

Precaucin Verificar que se han utilizado correctamente las maysculas en el proyecto DentalServiceVB. Para el proyecto Visual C# .NET 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. Precaucin 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: Para el proyecto Visual Basic .NET Para el proyecto Visual C# .NET 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.

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.

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. Escenario 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: Visual Basic .NET
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 C#

5. En el procedimiento de evento cmdSave_Click, buscar el siguiente comentario: Visual Basic .NET Visual C#
'TODO Lab 14: Set Session variables //TODO Lab 14: Set Session variables

Nota 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

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: Visual Basic .NET Visual C#
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: Visual Basic .NET
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 C#

5. En la instruccin Get de la propiedad pblica strName, 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: Visual Basic .NET
Get Session("Name") = txtName.Text Return txtName.Text End Get get { Session["Name"] = txtName.Text; return txtName.Text; }

Visual C#

6. En la instruccin Get de la propiedad pblica dtDate, 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: Visual Basic .NET
Get Session("Birth") = txtBirth.Text Return CDate(txtBirth.Text) End Get get { Session["Birth"] = txtBirth.Text; return Convert.ToDateTime(txtBirth.Text); }

Visual C#

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.

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. Escenario 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.

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 cookie Benefits. 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: Visual Basic .NET
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

Visual C#

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.

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: Visual Basic .NET
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

Visual C#

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 cookie objNewCookie.

13

El cdigo debera ser similar al siguiente: Visual Basic .NET


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);

Visual C#

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: Visual Basic .NET Visual C#
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: Visual Basic .NET Visual C#
'TODO Lab 14: Build the string //TODO Lab 14: Build the string

Note 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.

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: Visual Basic .NET
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

Nota Podemos copiar y pegar este cdigo desde el archivo VB\Starter\life.txt. Este archivo puede encontrarse dentro del fichero labs12.zip

15

Visual C#

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"); }

Nota 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.

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. Escenario 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.

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: Visual Basic .NET
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"))

Visual C#

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.

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. Escenario 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" />

Importante 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.

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: Visual Basic .NET Visual C# 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.

Administracin del estado

ndice Descripcin Leccin: administracin del estado Leccin: variables de aplicacin y de sesin 1 2 17

Leccin: cookies y sesiones que no utilizan cookies 29

Administracin del estado

Descripcin
Administracin del estado Variables de aplicacin y de sesin Cookies y sesiones que no utilizan cookies

***

Introduccin

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.

Objetivos

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.

Administracin del estado

Leccin: administracin del estado


Qu es la administracin del 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

***

Introduccin

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.

Objetivos de la leccin

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.

Administracin del estado

Qu es la administracin del estado?


Sin administracin del estado
Login.aspx
Introduzca su informacin de inicio de sesin: Nombre John Apellido Chen

Con administracin del estado


Login.aspx
Introduzca su informacin de inicio de sesin: Nombre John Apellido Chen

Enviar Enviar Greetings.aspx Hola


He olvidado He olvidado quin eres!! quin eres!!

Servidor Web

Enviar Enviar Greetings.aspx Hola John Chen

Servidor Web

***

Introduccin

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.

Administracin del estado

Ejemplo

Por ejemplo, en la ilustracin anterior, el usuario, John 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, John

Administracin del estado

Chen, que el usuario introdujo en el formulario login.aspx, la primera pgina de la aplicacin Web.

Administracin del estado

Tipos de administracin del estado


Administracin del estado en Administraci el lado del servidor
Estado de la aplicacin
La informacin est disponible para todos los usuarios de una aplicacin Web

Administracin del estado en Administraci el lado del cliente


Cookies
Archivo de texto que almacena informacin para mantener el estado

Estado de sesin
La informacin est disponible nicamente para el usuario de una sesin especfica

Propiedad ViewState
Conserva valores entre mltiples peticiones para la misma pgina

Base de datos
En algunos casos, se utiliza el soporte de base de datos para mantener el estado en el sitio Web

Cadenas de consulta
Informacin aadida al final de una URL

***

Introduccin

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.

Administracin del estado en el lado del cliente y en el lado del servidor

Lado servidor

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

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

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. Lado cliente 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. Nota 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.

Administracin del estado

Administracin del estado en el lado del servidor


El estado de la aplicacin es un mecanismo de almacenamiento global accesible desde todas las pginas de la aplicacin Web El estado de sesin est limitado a la sesin de explorador actual Los valores se conservan mediante el uso de variables de aplicacin y de sesin Escalabilidad La sesin ASP.NET se identifica con la cadena SessionID
Servidor Web Equipo cliente Variables de aplicacin y de sesin SessionID

***

Introduccin

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.

Estado de aplicacin

Variables de aplicacin

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.

Estado de sesin

Administracin del estado

El estado de sesin est almacenado como una estructura de diccionario clavevalor 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. Variables de sesin 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. Nota 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. Escalabilidad 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.

Identificar y hacer el seguimiento de una sesin

10

Administracin del estado

Administracin del estado en el lado del cliente


Utiliza cookies para mantener el estado Cookies persistentes Cookies temporales/no persistentes Menos fiable que las opciones de administracin del estado en el lado del servidor El usuario puede eliminar cookies Menos seguro que las opciones de administracin del estado en el lado del servidor Cantidad de informacin limitada Restricciones en el lado del cliente en el tamao de los archivos Equipo cliente Servidor Web

Cookies

***

Introduccin 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.

Tipos de cookies

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

Administracin del estado

11

archivo denominado nombreusuario@nombredominio.txt, que se crea en el disco duro del cliente.

12

Administracin del estado

Vencimiento

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.

Seguridad

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).

Informacin limitada

Administracin del estado

13

El archivo Global.asax
Slo un archivo Global.asax por 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.asax es opcional

***

Introduccin

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.

14

Administracin del estado

El archivo global.asax (continuacin)


Cliente Peticin Peticin Respuesta Respuesta

Servidor Web ASP.NET IIS IIS ASP.NET HTTP Runtime ASP.NET HTTP Runtime 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

Ejecucin de la pgina Ejecucin de la pgina

***

Introduccin Categoras de eventos

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.

Eventos invocados cuando se solicita una pgina

La siguiente tabla lista los eventos que se invocan cuando se solicita una pgina.
Nombre del evento Application_BeginRequest Application_AuthenticateRequest Application_AuthorizeRequest Application_ResolveRequestCache Descripcin Este evento se invoca cada vez que se recibe una nueva peticin. Este evento indica que la peticin est preparada para ser autenticada. Este evento indica que la peticin est preparada para ser autorizada. Este evento es utilizado por el mdulo de la cach de salida para detener el procesamiento de peticiones que han sido almacenadas en cach. Este evento indica que debera obtenerse el estado para cada peticin.

Application_AcquireRequestState

Administracin del estado Application_PreRequestHandlerExecute Este evento indica que el gestor de peticiones est a punto de ejecutarse.

15

16

Administracin del estado

Eventos invocados cuando se enva la pgina solicitada

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 Application_PostRequestHandlerExecute Descripcin Este evento es el primero disponible despus de que el controlador, como una pgina ASP.NET o un servicio Web, haya finalizado su trabajo. Este evento se invoca cuando el estado de la peticin debe almacenarse, porque la aplicacin Web ASP.NET finaliza con l. 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. Este evento es el ltimo evento que se invoca cuando finaliza la aplicacin Web ASP.NET.

Application_ReleaseRequestState

Application_UpdateRequestCache

Application_EndRequest

Eventos de aplicacin condicionales

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 Application_Start Application_End Descripcin Este evento se invoca cuando se inicia una aplicacin Web ASP.NET. 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. Este evento se invoca cuando se inicia la Session de un usuario en una aplicacin Web ASP.NET. Este evento es un evento reciproco de Session_Start; este evento se invoca cuando finaliza la sesin de un usuario. Este evento se invoca cuando ocurre un error no controlado en una aplicacin Web ASP.NET.

Session_Start

Session_End

Application_Error

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 de sesin 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

***

Introduccin

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.

Objetivos de la leccin

18

Administracin del estado

Inicializar variables de aplicacin y de sesin


Las variables se inicializan en Global.asax El objeto Application comparte informacin entre todos los usuarios de una aplicacin Web
Sub Application_Start(s As Object,e As EventArgs) Sub Application_Start(s As Object,e As EventArgs) Application("NumberofVisitors") = 0 Application("NumberofVisitors") = 0 End Sub End Sub protected void Application_Start(Object sender,EventArgs e) protected void Application_Start(Object sender,EventArgs e) { { Application["NumberofVisitors"] = 0; Application["NumberofVisitors"] = 0; } }

El objeto Session almacena informacin para una sesin de usuario concreta

***

Introduccin Variables de sesin

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:

Visual Basic .NET

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"; }

C#

Administracin del estado

19

Variables de aplicacin

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:

Visual Basic .NET

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; }

C#

20

Administracin del estado

Utilizar variables de aplicacin y de sesin


Establecer variables de aplicacin y sesin
Session("BackColor") = "blue" Session("BackColor") = "blue" Application.Lock() Application.Lock() Application("NumberOfVisitors") += 1 Application("NumberOfVisitors") += 1 Application.UnLock() Application.UnLock() Session["BackColor"] = "blue"; Session["BackColor"] = "blue"; Application.Lock(); Application.Lock(); Application["NumberOfVisitors"] = Application["NumberOfVisitors"] = (int)Application["NumberOfVisitors"] + 1; (int)Application["NumberOfVisitors"] + 1; Application.UnLock(); Application.UnLock();

Leer variables de aplicacin y de sesin


strBgColor = Session("BackColor") strBgColor = Session("BackColor") lblNbVisitor.Text = Application("NumberOfVisitors") lblNbVisitor.Text = Application("NumberOfVisitors") strBgColor = (string)Session["BackColor"]; strBgColor = (string)Session["BackColor"]; lblNbVisitor.Text = Application["NumberOfVisitors"].ToString(); lblNbVisitor.Text = Application["NumberOfVisitors"].ToString();

***

Introduccin Establecer variables de aplicacin y de sesin

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(): Visual Basic .NET
Application.Lock() Application("NumberOfVisitors") += 1 Application.UnLock() Application.Lock(); Application["NumberofVisitors"] = (int)Application["NumberOfVisitors"] + 1; Application.UnLock();

C#

Administracin del estado

21

Leer variables de aplicacin y de sesin Visual Basic.NET C#

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();

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 de sesin desde una pgina Acceder a la variable de sesin desde otra pgina y modificarla Volver a acceder a la variable de sesin desde la primera pgina

***

Introduccin

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:

Visual Basic .NET C#

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.

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 la sesin puede modificarse en Web.config:
<configuration> <configuration> <system.web> <system.web> <sessionState timeout="10" /> <sessionState timeout="10" /> </system.web> </system.web> </configuration> </configuration>

Las variables de aplicacin persisten hasta que se provoca el evento Application_End

***

Introduccin

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. Nota 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.

Duracin predeterminada de la sesin

Modificar la duracin de la sesin

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>

24

Administracin del estado

Variable de aplicacin

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.

Administracin del estado

25

Almacenamiento escalable de variables de aplicacin y de sesin y


Por defecto, el estado de sesin se administra en proceso (in process) Inconveniente del almacenamiento en proceso: No escalable ASP.NET proporciona almacenamiento fuera del proceso (out of process) del estado de sesin El estado puede almacenarse en una base de datos SQL Server o un servidor de estado Ventajas del almacenamiento fuera del proceso: Escalabilidad
Granja Web Variables de sesin y de aplicacin Servidor de estado

-OSQL Cliente Variables de sesin y de aplicacin

***

Introduccin

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.

Inconveniente del almacenamiento en proceso Fuera de proceso

Ventaja del almacenamiento fuera de proceso

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

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


1 1

Configurar el estado de sesin en Web.config Modo establecido a sqlserver o stateserver

<sessionState mode="SQLServer" <sessionState mode="SQLServer" sqlConnectionString="data source=SQLServerName; sqlConnectionString="data source=SQLServerName; Integrated security=true" /> Integrated security=true" />

2 2

A continuacin, configurar el servidor SQL Server

c:\> OSQL S SQLServerName E <InstallSqlState.sql c:\> OSQL S SQLServerName E <InstallSqlState.sql

OSQL crea varios procedimientos almacenados y bases de datos temporales para almacenar las variables

***

Introduccin

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.

Configura el estado de sesin en el archivo Web.config de nuestro servidor Web ASP.NET

En el archivo Web.config, debemos modificar la configuracin para establecer el atributo mode de sessionstate 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" />

Configurar el servidor SQL Server

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:

28

Administracin del estado


c:\> OSQL S SQLServerName -E <InstallSqlState.sql

Importante 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.

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 de una cookie Uso de sesiones que no utilizan cookies Configurar sesiones que no utilizan cookies

***

Introduccin

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.

Objetivos de la leccin

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.

30

Administracin del estado

Utilizar cookies para almacenar datos de sesin


Crear una cookie:
HttpCookie objCookie = new HttpCookie("myCookie"); HttpCookie objCookie = new HttpCookie("myCookie"); HttpCookie objCookie = new HttpCookie("myCookie"); DateTime now = DateTime.Now; DateTime now = DateTime.Now; HttpCookie objCookie = new HttpCookie("myCookie"); DateTime now = DateTime.Now; DateTime now = DateTime.Now; objCookie.Values.Add("Time", now.ToString()); objCookie.Values.Add("Time", now.ToString()); objCookie.Values.Add("Time", now.ToString()); objCookie.Values.Add("ForeColor", "White"); objCookie.Values.Add("ForeColor", "White"); objCookie.Values.Add("Time", now.ToString()); objCookie.Values.Add("ForeColor", "White"); objCookie.Values.Add("BackColor", "Blue"); objCookie.Values.Add("BackColor", "Blue"); objCookie.Values.Add("ForeColor", "White"); objCookie.Values.Add("BackColor", "Blue"); objCookie.Values.Add("BackColor", "Blue"); objCookie.Expires = now.AddHours(1); objCookie.Expires = now.AddHours(1); Response.Cookies.Add(objCookie); Response.Cookies.Add(objCookie); Para crear una cookie Response.Cookies.Add(objCookie); Response.Cookies.Add(objCookie);

persistente, especificar el tiempo de expiracin

La cookie contiene informacin sobre el nombre de dominio


Set-Cookie: Username=John+Chen; path=/; Set-Cookie: Username=John+Chen; path=/; domain=microsoft.com; domain=microsoft.com; Expires=Tuesday, 01-Feb-05 00.00.01 GMT Expires=Tuesday, 01-Feb-05 00.00.01 GMT

***

Introduccin

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;

Crear una cookie Visual Basic .NET C#

El siguiente cdigo agrega un par de claves y valores: Visual Basic .NET


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");

C#

Hacer una cookie persistente Visual Basic .NET C#

El siguiente cdigo establece en una hora el tiempo de expiracin de la cookie:

objCookie.Expires = now.AddHours(1)

Administracin del estado


objCookie.Expires = now.AddHours(1);

31

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. Nota 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: Visual Basic .NET C# Cmo funcionan las cookies
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 John 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

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: 15 Minutos

***

Introduccin Probar la funcionalidad

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.

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>>

Nota 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.

36

Administracin del estado

Recuperar informacin de una cookie


Leer la cookie
Dim objCookie As HttpCookie = Request.Cookies("myCookie") Dim objCookie As HttpCookie = Request.Cookies("myCookie") HttpCookie objCookie = Request.Cookies["myCookie"]; HttpCookie objCookie = Request.Cookies["myCookie"];

Recuperar valores de la cookie


lblTime.Text = objCookie.Values("Time") lblTime.Text = objCookie.Values("Time") lblTime.ForeColor = System.Drawing.Color.FromName _ lblTime.ForeColor = System.Drawing.Color.FromName _ (objCookie.Values("ForeColor")) (objCookie.Values("ForeColor")) lblTime.BackColor = System.Drawing.Color.FromName _ lblTime.BackColor = System.Drawing.Color.FromName _ (objCookie.Values("BackColor")) (objCookie.Values("BackColor")) lblTime.Text = objCookie.Values["Time"]; lblTime.Text = objCookie.Values["Time"]; lblTime.ForeColor = System.Drawing.Color.FromName lblTime.ForeColor = System.Drawing.Color.FromName (objCookie.Values["ForeColor"]); (objCookie.Values["ForeColor"]); lblTime.BackColor = System.Drawing.Color.FromName lblTime.BackColor = System.Drawing.Color.FromName (objCookie.Values["BackColor"]); (objCookie.Values["BackColor"]);

***

Introduccin Leer una cookie

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"];

Visual Basic C# Recuperar valores de la cookie Visual Basic .NET

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"]);

C#

Administracin del estado

37

Uso de sesiones que no utilizan cookies


Cada sesin activa est identificada y se realiza su seguimiento utilizando IDs de sesin Los IDs de sesin se comunican entre peticiones cliente-servidor utilizando una cookie HTTP o incluyndolos en la URL Sesiones que no utilizan cookies La informacin de ID de sesin est codificada en URLs
http://server/(h44a1e55c0breu552yrecobl)/page.aspx http://server/(h44a1e55c0breu552yrecobl)/page.aspx

No pueden utilizar URLs absolutas La mayora de navegadores limitan el tamao de la URL a 255 caracteres, lo cual limita el uso de IDs para las sesiones que no utilizan cookies
***

Introduccin

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.

Sesiones que no utilizan cookies

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.

38

Administracin del estado

Limitacin de las sesiones que no utilizan cookies

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.

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" />

***

Introduccin Configurar una sesin que no utiliza cookies

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" />

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET

ndice Descripcin Leccin: uso del objeto Cache Leccin: uso de la cach de resultados de ASP.NET Leccin: configurar una aplicacin Web ASP.NET Leccin: implementar una aplicacin Web ASP.NET 2 3 15 25 43

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET

Descripcin
Uso del objeto Cache Uso de la cach de resultados ASP.NET Configurar una aplicacin Web ASP.NET Implementar una aplicacin Web ASP.NET

*****************************

Introduccin

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.

Objetivos

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.

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET

Leccin: uso del objeto Cache


Qu es el objeto Cache? Ventajas de utilizar el objeto Cache Cmo utilizar el objeto Cache Eliminar elementos del objeto Cache Demostracin: utilizar el objeto Cache

*****************************

Introduccin

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.

Objetivos de la leccin

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.

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET

Qu es el objeto Cache?
Un objeto utilizado para almacenar informacin Un objeto Cache por 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;

*****************************

Introduccin

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.

Un objeto utilizado para almacenar informacin

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.

Cmo funciona el objeto Cache

El proceso para utilizar el objeto Cache es:

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. Un objeto Cache por aplicacin Web 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. Almacenar variables 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. Nota Para ms informacin sobre las variables de aplicacin y de sesin, consultar el Mdulo Administracin del estado. Utiliza pares clave-valor 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: Microsoft Visual Basic .NET C#
Cache("mykey") = myValue Cache["mykey"] = myValue;

Recuperar un elemento de un objeto Cache: Visual Basic .NET C#


myValue = Cache("myKey") myValue = Cache["myKey"];

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET

Ventajas de utilizar el objeto Cache


Es ms rpido que crear un nuevo objeto para cada peticin Soporta el bloqueo interno Administracin automtica de los recursos de cach Soporta funciones callback Soporta el borrado basado en dependencias

*****************************

Introduccin

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.

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

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET

Cmo utilizar el objeto Cache


Escribir en el objeto Cache:
'Implicit method 'Implicit method Cache("myKey") = myValue Cache("myKey") = myValue 'Explicit method 'Explicit method Cache.Insert("myKey", myValue, Dependency, AbsoluteExpiration, _ Cache.Insert("myKey", myValue, Dependency, AbsoluteExpiration, _ SlidingExpiration, CacheItemPriority, CacheItemRemovedCallBack) SlidingExpiration, CacheItemPriority, CacheItemRemovedCallBack) //Implicit method //Implicit method Cache["myKey"] = myValue; Cache["myKey"] = myValue; //Explicit method //Explicit method Cache.Insert("myKey", myValue, Dependency, AbsoluteExpiration, Cache.Insert("myKey", myValue, Dependency, AbsoluteExpiration, SlidingExpiration, CacheItemPriority, CacheItemRemovedCallBack); SlidingExpiration, CacheItemPriority, CacheItemRemovedCallBack);

Recuperar valores del objeto Cache:


myValue = Cache("myKey") myValue = Cache("myKey") myValue = Cache["myKey"]; myValue = Cache["myKey"];

*****************************

Introduccin

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;

Escribir en el objeto Cache Visual Basic .NET C#

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: Visual Basic .NET
Cache.Insert("myKey", myValue, _ Dependency, AbsoluteExpiration, SlidingExpiration, _ CacheItemPriority, CacheItemRemovedCallBack) Cache.Insert("myKey", myValue, Dependency, AbsoluteExpiration, SlidingExpiration, CacheItemPriority, CacheItemRemovedCallBack);

C#

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET

Recuperar valores del objeto Cache

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:

Visual Basic .NET

myValue = Cache("mykey") If myValue <> Nothing Then DisplayData(myValue) End If myValue = Cache["mykey"]; if (myValue != null) DisplayData(myValue);

C#

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET

Eliminar elementos del objeto Cache


Tiempo AbsoluteExpiration
DateTime.Now.AddMinutes(5) DateTime.Now.AddMinutes(5)

Tiempo SlidingExpiration
TimeSpan.FromSeconds(20) TimeSpan.FromSeconds(20)

Depende de un valor modificado


AddCacheItemDependency("Variable.Value") AddCacheItemDependency("Variable.Value")

Prioridad del elemento en cach


CacheItemPriority.High CacheItemPriority.High

*****************************

Introduccin

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.

AbsoluteExpiration

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:

Visual Basic .NET C#

Cache.Insert("myKey", myValue, Nothing, _ DateTime.Now.AddMinutes(5), Nothing) Cache.Insert("myKey", myValue, null, _ DateTime.Now.AddMinutes(5), Cache.NoSlidingExpiration);

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET

10

SlidingExpiration

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:

Visual Basic .NET C# Dependencias

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:

Visual Basic .NET C# Prioridad de elementos en Cache

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:

Visual Basic .NET C#

Cache.Insert("myKey", myValue, Nothing, Nothing, _ Nothing, CacheItemPriority.High, onRemove) Cache.Insert("myKey", myValue, null, null, Cache.NoSlidingExpiration, CacheItemPriority.High, onRemove);

11

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET

Ejemplo de establecer los parmetros en Cache.Insert

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.

Visual Basic .NET

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);

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 Cache habilitado Ejecutar la pgina CacheTest.aspx con el objeto Cache habilitado Ejecutar la pgina CacheTest.aspx con el objeto Cache habilitado y con una dependencia

*****************************

Introduccin

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

Ejecutar sin almacenamiento en cach

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. Nota 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.

Habilitar el almacenamiento en cach Visual Basic .NET C#

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

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. Probar el almacenamiento en cach 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. Agregar una dependencia 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);

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

*****************************

Introduccin

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.

Objetivos de la leccin

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.

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET

16

Multimedia: almacenamiento en cach de resultados

*****************************

Introduccin

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.

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

*****************************

Introduccin

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.

Almacenamiento en cach de pginas

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.

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. Almacenamiento en cach de servicios Web XML 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: Visual Basic .NET
<WebMethod(CacheDuration:=300)> _ Public Function CachedInfo() As String ... End Function [WebMethod(CacheDuration=300)] public string CachedInfo() { ... }

C#

Importante 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.

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" <%@ OutputCache Duration="900" VaryByParam="none" %> VaryByParam="none" %>

*****************************

Introduccin

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:

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


<%@ OutputCache Duration="900" VaryByParam="None"%>

20

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. Establecer VaryByParam 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"%>

Precaucin Cuando utilizamos la directiva OutputCache, 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".

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

*****************************

Introduccin

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

Mostrar cmo una pgina no almacenada en cach cambia con cada actualizacin

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.

Mostrar cmo una pgina almacenada en cach no cambia con cada actualizacin

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.

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. Mostrar cmo cambiar un parmetro puede hacer que una nueva pgina se almacene en cach 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.

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 Duration y varyByParam
<%@ OutputCache Duration="120" <%@ OutputCache Duration="120" VaryByParam="none" %> VaryByParam="none" %>

*****************************

Introduccin

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.

Convertir el fragmento en un control de usuario

Tras identificar las partes de la pgina que deseamos almacenar en cach, debemos crear controles de usuario que encapsulen cada uno de estos fragmentos. Nota Para ms informacin sobre la creacin de controles de usuario, consultar el Mdulo Crear controles de usuario.

Establecer las propiedades Duration y VaryByParam

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

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 directiva OutputCache. 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

*****************************

Introduccin

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.

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.config son:


XML con un formato correcto Maysculas y minsculas Camel Extensibles

*****************************

Introduccin

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.

Machine.config

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>.

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

*****************************

Introduccin

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 afectan a todas las aplicaciones Web

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.

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.config contienen toda la informacin de configuracin de la aplicacin Contienen una seccin por cada categora principal de funcionalidad ASP.NET
Seguridad Modo Configuracin general de la aplicacin Seguimiento

*****************************

Introduccin

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.

Uno o ms archivos Web.config por aplicacin Web Contiene una seccin para cada categora principal de funcionalidad ASP.NET

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 <browserCaps> <compilation> <globalization> Descripcin Responsable de controlar las opciones de configuracin del componente de capacidades del explorador. Responsable de todas las opciones de compilacin que utiliza ASP.NET. Responsable de configurar las opciones de globalizacin de una aplicacin.

29

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET (continuacin) Nombre de seccin <httpModules> Descripcin 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. Responsable de mapear URLs entrantes a clases IHttpHandler. Los subdirectorios no heredan estas opciones. Responsable de configurar las opciones del modelo de proceso ASP.NET en servidores Web Internet Informacin Services (IIS). Responsable de todas las opciones de seguridad que utiliza el mdulo httpModule de seguridad ASP.NET. Responsable de configurar el estado de sesin httpModule. Responsable de configurar el servicio de seguimiento de ASP.NET.

<httpHandlers> <processModel>

<authentication> <identity> <authorization> <sessionState> <trace>

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET

30

Descripcin de la herencia de configuracin


CONFIG CONFIG Machine.config

El archivo Web.config a nivel de aplicacin hereda las opciones del archivo Machine.config Las opciones en el archivo Web.config que estn en conflicto anulan las opciones heredadas Directorios individuales pueden tener archivos Web.config que heredan de (y pueden anular) las opciones a nivel de aplicacin

VirtualDir VirtualDir

Web.config

SubDir SubDir Web.config

*****************************

Introduccin

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.

Machine.config

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.

31

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET

Web.config

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

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.config principal y el archivo Web.config de la subcarpeta Mostrar cmo el formulario Web Form lee informacin de los archivos Web.config Eliminar el archivo Web.config de la subcarpeta y actualizar el formulario Web Form

*****************************

Introduccin

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

Crear una subcarpeta que contenga Web.config Mostrar las diferencias entre el Web.config principal y el Web.config de la subcarpeta

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.

Eliminar Web.config de la subcarpeta y actualizar el formulario Web Form

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.

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 basndonos en distintas variables

Tiempo: 5 Minutos

*****************************

Introduccin

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.

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
<configuration> <configuration> <appSettings> <appSettings> <add key="pubs" value="server=localhost; <add key="pubs" value="server=localhost; integrated security=true; database=pubs"/> integrated security=true; database=pubs"/> </appSettings> </appSettings> </configuration> </configuration>

Recuperar la configuracin de la aplicacin de un archivo Web.config


Dim strPubs As String = _ Dim strPubs As String = _ ConfigurationSettings.AppSettings("pubs") ConfigurationSettings.AppSettings("pubs") AppSettingsReader App = new AppSettingsReader(); AppSettingsReader App = new AppSettingsReader(); string strPubs = (string)App.GetValue("pubs", string strPubs = (string)App.GetValue("pubs", typeof(string)); typeof(string));

*****************************

Introduccin

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>

Almacenar las opciones de configuracin de la aplicacin en Web.config

39

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET

Recuperar las opciones de configuracin de la aplicacin de Web.config

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>:

Visual Basic .NET C#

Dim strPubs As String = _ ConfigurationSettings.AppSettings("pubs") string strPubs = System.Configuration. ConfigurationSettings.AppSettings["pubs"];

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.config en 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

*****************************

Introduccin

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.

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.config y mostrar la clave SqlConnection1.ConnectionString en la seccin appSettings

*****************************

Introduccin

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

Configurar un objeto SqlConnection para utilizar propiedades dinmicas

1. Abrir la pgina DataAccess.aspx del proyecto Mod15VB o Mod15CS en Visual Studio .NET. 2. Seleccionar el objeto SqlConnection y visualizar la ventana Propiedades. 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.

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET

42

Mostrar el cdigo que se ha generado Visual Basic .NET

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))));

C#

Mostrar la clave SqlConnection1. ConnectionString

8. Abrir el archivo Web.config y buscar la clave SqlConnection1.ConnectionString en la seccin appSettings.

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 cach de ensamblados global Actualizar la aplicacin Web

*****************************

Introduccin

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.

Objetivos de la leccin

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.

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 \bin y su contenido
No es necesario registrar componentes

*****************************

Introduccin

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.

Configurar la carpeta de destino como un directorio virtual en IIS

45

Configurar, optimizar e implementar una aplicacin Web con Microsoft ASP.NET

Copiar todos los archivos necesarios

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.

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

*****************************

Introduccin

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.

Generar la aplicacin

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.

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. Nota 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. Archivos necesarios

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).

Copiar o utilizar FTP

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.

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: 5 Minutos

*****************************

En esta prctica, seleccionaremos los archivos necesarios que debemos copiar en el directorio de produccin.
Archivo Visual Basic .NET .vbproj .vbproj.webinfo .resx .dll .aspx directorio \bin y contenido .aspx.vb .csproj Global.asax .exe .ascx .xml Web.config Archivo Microsoft Visual C# .csproj .csproj.webinfo .resx .dll .aspx directorio \bin y contenido .aspx.cs .vbproj Global.asax .exe .ascx .xml Web.config Conservar Eliminar

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

*****************************

Introduccin

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.

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 cach de resultados protege a los usuarios existentes

*****************************

Introduccin

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.

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
Logon Page Logon Page
Login.aspx Login.aspx Coho Winery

Benefits Benefits Home Page Home Page


Default.aspx Default.aspx

Registration Registration
Register.aspx Register.aspx

Menu Menu Component Component

Page Header Page Header


Header.ascx Header.ascx

ASPState

Class1.vb or Class1.cs Class1.vb or Class1.cs

Web. config

tempdb

Life Insurance Life Insurance


Life.aspx Life.aspx

Retirement Retirement
Retirement.aspx Retirement.aspx

Medical Medical

Medical.aspx Medical.aspx

Dental Dental

Dental.aspx Dental.aspx

Lab Web Application

Prospectus Prospectus
Prospectus.aspx Prospectus.aspx

Doctors Doctors

Doctors.aspx Doctors.aspx

User Control User


namedate.ascx namedate.ascx

XML Web XML Web Service Service

dentalService1.asmx dentalService1.asmx

XML Files
*****************************

Doctors

Dentists

Objetivos

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. Nota Este laboratorio se centra en los conceptos de este mdulo. Por ello, podra no cumplir las recomendaciones de seguridad de Microsoft.

Requisitos previos

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).

Escenario

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.

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 Importante 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 Importante 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. Precaucin 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.

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: Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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 Importante 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. Para el proyecto Visual Basic .NET 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 lista Tipos 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. Para el proyecto Visual C# 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 lista Tipos 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. Precaucin Verificar que se han escrito correctamente las maysculas del proyecto BenefitsList.

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. Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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 Importante 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.

Precaucin 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: Visual Basic .NET Visual C# Ir a VB\Starter\DentalServiceVB. Ir a CS\Starter\DentalServiceCS. Estas carpetas pueden encontrarse dentro del fichero labs13.zip 4. Agregar archivos al proyecto: Visual Basic .NET Visual C# 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: Visual Basic .NET Visual C# 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.

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: Visual Basic .NET Visual C# 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.

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: Visual Basic .NET C#
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 Key name Value Valor Visual Basic .NET doctors DsDoctors1 C# doctors dsDoctors1

Dependencies Absolute Expiration Sliding Expiration

Nothing Four minutes Nothing

null Four minutes Caching.Cache.NoSlidingExpiration

El cdigo debera ser similar al siguiente: Visual Basic .NET


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); }

C#

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: Visual Basic .NET C#
SqlDataAdapter1.Fill(DsDoctors1) sqlDataAdapter1.Fill(dsDoctors1);

6. En el procedimiento de evento Page_Load, buscar la siguiente lnea de cdigo: Visual Basic .NET C#
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: Visual Basic .NET C#
dgDoctors.DataSource = Cache("doctors") dgDoctors.DataSource = Cache["doctors"];

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: Visual Basic .NET C#
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: Visual Basic .NET
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()

C#

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();

Nota 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.

Ejercicio 2 Utilizar la cach de resultados de pgina


En este ejercicio, almacenaremos en la cach un formulario Web Form utilizando la directiva OutputCache. Tambin modificaremos el atributo VaryByParam. Escenario 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? ____________________________________________________________ ____________________________________________________________

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. Escenario 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: Visual Basic .NET C#
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.

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. Escenario 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. Sugerencia 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? ____________________________________________________________ ____________________________________________________________

7. En el Explorador de soluciones, abrir el archivo Web.config del proyecto Benefits. Nota 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? _____________________________________________________________ _____________________________________________________________

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. Importante 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, 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. , hacer clic en Release.

2. En el men Generar, hacer clic en Generar de nuevo la solucin.

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 Nota 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. Nota 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.

Prctica A: seguridad de una aplicacin Web Microsoft ASP.NET


Logon Page Logon Page
Login.aspx Login.aspx Coho Winery

Benefits Benefits Home Page Home Page


Default.aspx Default.aspx

Registration Registration
Register.aspx Register.aspx

Menu Menu Component Component

Page Header Page Header


Header.ascx Header.ascx

ASPState

Class1.vb or Class1.cs Class1.vb or Class1.cs

Web. config

tempdb

Life Insurance Life Insurance


Life.aspx Life.aspx

Retirement Retirement
Retirement.aspx Retirement.aspx

Medical Medical

Medical.aspx Medical.aspx

Dental Dental

Dental.aspx Dental.aspx

Lab Web Application

Prospectus Prospectus
Prospectus.aspx Prospectus.aspx

Doctors Doctors

Doctors.aspx Doctors.aspx

User Control User


namedate.ascx namedate.ascx

XML Web XML Web Service Service

dentalService1.asmx dentalService1.asmx

XML Files

Doctors

Dentists

Objetivos

En este laboratorio, aprenderemos a: Securizar una aplicacin Web Microsoft ASP.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.

Requisitos previos

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.

Escenario

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.

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 Importante 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 Importante 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. Precaucin 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.

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: Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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 Importante 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. Para el proyecto Visual Basic .NET 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 lista Tipos 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. Para el proyecto Visual C# 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 lista Tipos 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. Precaucin Verificar que se han escrito correctamente las maysculas del proyecto BenefitsList.

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: Para el proyecto Visual Basic .NET Para el proyecto Visual C# 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 Importante 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. Para el proyecto Visual Basic .NET 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. Precaucin Verificar que se han utilizado correctamente las maysculas en

el proyecto DentalServiceVB. Para el proyecto Visual C# .NET 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. Precaucin 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: Para el proyecto Visual Basic .NET Para el proyecto Visual C# .NET Ir a VB\Starter\DentalServiceVB. Ir a CS\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 Proyecto Visual Basic .NET Proyecto Visual C# http://localhost/DentalServiceVB/DentalService1.asmx 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. 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: Proyecto Visual Basic .NET Proyecto Visual C# 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.

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.

Nota de seguridad 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.

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 Visual Basic .NET Visual C# 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>

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. Nota 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.

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>. Nota 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: Visual Basic .NET Visual C#
Imports System.Web.Security using System.Web.Security;

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: Visual Basic .NET Visual C#
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.

El cdigo debera ser como el siguiente: Visual Basic .NET


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!"; }

Visual C#

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? ____________________________________________________________ ____________________________________________________________

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. Nota de seguridad 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.

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: Visual Basic .NET Visual C#
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

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: Visual Basic .NET
FormsAuthentication.SetAuthCookie( _ strEmployeeId, False) Response.Redirect("default.aspx") FormsAuthentication.SetAuthCookie( strEmployeeId, false); Response.Redirect("default.aspx");

Visual C#

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? _____________________________________________________________ _____________________________________________________________

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. Nota 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.

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: Visual Basic .NET Visual C#
FormsAuthentication.SignOut() Response.Redirect("login.aspx") FormsAuthentication.SignOut(); Response.Redirect("login.aspx");

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.

Seguridad en aplicaciones Web con Microsoft ASP.NET

ndice Descripcin Leccin: descripcin de la seguridad para aplicaciones Web Leccin: trabajar con autenticacin basada en Windows Leccin: trabajar con autenticacin basada en formularios Leccin: descripcin de la autenticacin mediante Microsoft Passport 1 2 14 25 36

Seguridad en aplicaciones Web con Microsoft ASP.NET

Descripcin
Descripcin de la seguridad para aplicaciones Web Trabajar con autenticacin basada en Windows Trabajar con autenticacin basada en formularios Descripcin de la autenticacin de Microsoft Passport

*****************************

Introduccin

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.

Objetivos

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.

Seguridad en aplicaciones Web con Microsoft ASP.NET

Leccin: descripcin de la seguridad para aplicaciones Web


Autenticacin frente a autorizacin Cules son los mtodos de autenticacin de ASP.NET? Multimedia: mtodos de autenticacin de ASP.NET Comparacin de los mtodos de autenticacin de ASP.NET Cules son los mecanismos de autenticacin de IIS? Demostracin: uso de los mecanismos de autenticacin de IIS Qu es Secure Sockets Layer?

*****************************

Introduccin

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).

Objetivos de la leccin

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.

Seguridad en aplicaciones Web con Microsoft ASP.NET

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

*****************************

Introduccin

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

Autenticacin

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.

Autorizacin

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.

Seguridad en aplicaciones Web con Microsoft ASP.NET

Cules son los mtodos de autenticacin de ASP.NET?


Autenticacin basada en Windows 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 Autenticacin basada en formularios 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 cookie de autenticacin Autenticacin mediante Microsoft Passport Servicio de autenticacin centralizado que ofrece una nica opcin de inicio de sesin Microsoft Passport es un Servicio Web XML

*****************************

Introduccin

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

Mtodos de autenticacin

Autenticacin basada en Windows

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.

Autenticacin basada en formularios

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

Seguridad en aplicaciones Web con Microsoft ASP.NET

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. Autenticacin mediante Microsoft Passport 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.

Seguridad en aplicaciones Web con Microsoft ASP.NET

Comparacin de los mtodos de autenticacin de ASP.NET


Mtodo
Autenticacin basada en Windows Autenticacin basada en formularios

Ventajas
Utiliza infraestructura Windows existente Controla el acceso a informacin confidencial Adecuada para aplicaciones de Internet Soporta todo tipo de clientes 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

Inconvenientes
No apropiado para la mayora de aplicaciones de Internet Basada en cookies

Autenticacin mediante Microsoft Passport

Basada en cookies Implica cuota

*****************************

Introduccin

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.

Autenticacin basada en Windows

Seguridad en aplicaciones Web con Microsoft ASP.NET

Autenticacin basada en formularios

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.

Autenticacin mediante Microsoft Passport

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.

Seguridad en aplicaciones Web con Microsoft ASP.NET

Cules son los mecanismos de autenticacin de IIS?


Mecanismos
Acceso annimo

Nivel de seguridad
Ninguno Bajo (Medio con SSL)

Descripcin Descripci
No se produce autenticacin 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 Enva la informacin en un hash (o digest) codificado Requiere Internet Explorer 5 o superior Requiere Active Directory Utiliza NTLM o Kerberos Generalmente adecuado para intranets, no Internet No funciona a travs de muchos cortafuegos

Autenticacin bsica

Autenticacin implcita Seguridad integrada de Windows


*****************************

Medio

Alto

Introduccin

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

Acceso annimo

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.

Nota La cuenta predeterminada IUSR_ nombreequipo puede modificarse mediante el complemento de administracin de IIS. Autenticacin bsica
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

Seguridad en aplicaciones Web con Microsoft ASP.NET

nivel alto de seguridad. Para incrementarlo, se utiliza SSL para encriptar nombres de usuario y contraseas cuando se transmiten a travs de la red.

Autenticacin implcita

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.

Nota Para ms informacin sobre la configuracin de las cuentas de dominio de Active Directory para permitir la autenticacin implcita, consultar la documentacin de IIS. Seguridad integrada de Windows
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.

Nota 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.

10

Seguridad en aplicaciones Web con Microsoft ASP.NET

Demostracin: uso de los mecanismos de autenticacin de IIS


Hacer clic con el botn derecho en Mod16 y hacer clic en Propiedades Hacer clic en la pestaa Seguridad de directorios Hacer clic en Modificar Mostrar los mtodos de autenticacin

*****************************

Introduccin

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.

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 a travs de una red. SSL securiza los datos mediante: Encriptacin de datos
- Asegura que los datos enviados son ledos nicamente por un servidor destinatario seguro - Asegura que los datos se envan al servidor correcto - Utiliza los certificados de servidor y de cliente - Protege la integridad de los datos - Incluye un cdigo de autenticacin de mensajes que detecta si un mensaje ha sido o no modificado

Autenticacin de servidor Integridad de los datos

Utiliza HTTPS (Hypertext Transfer Protocol Secure) para recuperar una pgina Web ASP.NET

*****************************

Introduccin

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.

Nota RSA son las siglas de Rivest, Shamir y Adleman, los nombres de los cientficos que crearon este algoritmo. Qu es SSL?
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

Encriptacin 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.

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 Clave de sesin de 40 bits Clave de sesin de 128 bits Ventaja La comunicacin es mucho ms rpida. Muy segura, los mensajes encriptados con clave de sesin de 128 bits se consideran inquebrantables. Inconveniente No es muy segura, los mensajes pueden ser modificados. 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.

Autenticacin de servidor

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.

Certificado de servidor

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.

Certificado de cliente Integridad de datos

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.

Uso de SSL en pginas ASP.NET

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.

Nota ASP.NET proporciona la propiedad Request.IsSecureConnection que nos permite determinar si nos encontramos en una conexin https segura.

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

*****************************

Introduccin

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.

Objetivos de la leccin

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.

Seguridad en aplicaciones Web con Microsoft ASP.NET

15

Cmo habilitar la autenticacin basada en Windows


1 1

Configurar IIS para utilizar uno o varios de los siguientes mecanismos de autenticacin : Bsica Implcita Seguridad de Windows integrada Establecer la autenticacin basada en Windows en Web.config

2 2

<system.web> <system.web> <Authentication mode="Windows" /> <Authentication mode="Windows" /> </system.web> </system.web>

*****************************

Introduccin

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.

Configurar IIS

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

Nota 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.

16

Seguridad en aplicaciones Web con Microsoft ASP.NET

Configurar la autenticacin

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>

Seguridad en aplicaciones Web con Microsoft ASP.NET

17

Cmo habilitar la autenticacin basada en Windows (continuacin)


3 3

Establecer la autorizacin en Web.config

<location path="ShoppingCart.aspx"> <location path="ShoppingCart.aspx"> <system.web> <system.web> <Authorization> <Authorization> <deny users="?"/> <deny users="?"/> </Authorization> </Authorization> </system.web> </system.web> </location> </location>
4 4

Cuando los usuarios acceden al formulario Web Form, IIS solicita informacin de inicio de sesin

*****************************

Introduccin

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.

Configurar la autorizacin

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>.

Nota 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>.

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>

Nota 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>

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.

IIS solicita informacin de inicio de sesin a los usuarios

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.

20

Seguridad en aplicaciones Web con Microsoft ASP.NET

Leer informacin del usuario


Tras la autenticacin, el servidor Web puede leer la identidad del usuario
lblAuthUser.Text = User.Identity.Name lblAuthUser.Text = User.Identity.Name lblAuthType.Text = User.Identity.AuthenticationType lblAuthType.Text = User.Identity.AuthenticationType lblIsAuth.Text = User.Identity.IsAuthenticated lblIsAuth.Text = User.Identity.IsAuthenticated

lblAuthUser.Text = User.Identity.Name; lblAuthUser.Text = User.Identity.Name; lblAuthType.Text = User.Identity.AuthenticationType; lblAuthType.Text = User.Identity.AuthenticationType; lblIsAuth.Text = User.Identity.IsAuthenticated; lblIsAuth.Text = User.Identity.IsAuthenticated;

*****************************

Introduccin

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:

Visual Basic .NET

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;

C#

Nota User.Identity es un objeto de la clase WindowsIdentity.

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.config y configurarlo para soportar autenticacin y autorizacin Ejecutar la aplicacin Web ASP.NET segura Los estudiantes pueden acceder a la aplicacin Web ASP.NET segura en el equipo del instructor

*****************************

Introduccin

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

Configurar IIS con autenticacin bsica

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.

Nota Comprobar que est seleccionada la casilla de verificacin de Acceso

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.

Crear un nuevo usuario en el equipo local

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 Nombre de usuario Nombre completo Descripcin Contrasea Confirmar contrasea Valor someone someone Cuenta de demostracin de someone Secreto1 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.

Mostrar la configuracin de seguridad en el archivo Web.config

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.

Mostrar el nombre y tipo de autenticacin en un formulario Web Form.

12. Abrir la pgina de cdigo subyacente SecurePageDemo1.aspx y explicar el cdigo User.Identity.Name y User.Identity.AuthenticationType.

Note 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:

Seguridad en aplicaciones Web con Microsoft ASP.NET

23

Visual Basic .NET C#

http://localhost/Pract14VB/NonSecurePageDemo.aspx http://localhost/Pract14CS/NonSecurePageDemo.aspx

24

Seguridad en aplicaciones Web con Microsoft ASP.NET

15. Ir a:

Visual Basic .NET C#

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:

Visual Basic .NET C#

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:

Visual Basic .NET C# Los estudiantes acceder al equipo del instructor Visual Basic .NET C#

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.

Seguridad en aplicaciones Web con Microsoft ASP.NET

25

Leccin: trabajar con autenticacin basada en formularios


Descripcin de la autenticacin basada en formularios Multimedia: autenticacin basada en formularios Cmo habilitar la autenticacin basada en formularios Crear una pgina de inicio de sesin Demostracin: uso de la autenticacin basada en formularios

*****************************

Introduccin

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.

Objetivos de la leccin

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.

26

Seguridad en aplicaciones Web con Microsoft ASP.NET

Descripcin de la autenticacin basada en formularios


1 1

IIS
No autenticado

2 2

Autenticacin ASP.NET Forms

Autenticado

El cliente solicita pgina

6 6 Acceso denegado
No autenticado

Nombre usuario Alguien Contrasea ***********

4 4 Pgina de inicio
(los usuarios introducen sus credenciales) Autenticado

Autorizado

Enviar Enviar

3 3

Cookie de autenticacin

Autorizado

5 5

7 7

Pgina segura solicitada

*****************************

Introduccin

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.

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


1 Configurar IIS para utilizar autenticacin annima 1 2 Establecer la autenticacin basada en formularios en 2

Web.config

<Authentication mode="Forms" > <Authentication mode="Forms" > <forms name=".namesuffix" <forms name=".namesuffix" loginUrl="login.aspx" /> loginUrl="login.aspx" /> </Authentication> </Authentication>
3 Establecer la autorizacin 3 4 Generar un formulario Web 4

Form de inicio de sesin

*****************************

Introduccin Habilitar la autenticacin basada en formularios Configurar la autenticacin

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.

Configurar la autorizacin

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

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.

Generar un formulario Web Form de inicio de sesin

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.

30

Seguridad en aplicaciones Web con Microsoft ASP.NET

Crear una pgina de inicio de sesin


Aadir una referencia a System.Web.Security La pgina de inicio de sesin verifica y examina las credenciales de un usuario
private void cmdLogin_Click(object sender, EventArgs e) private void cmdLogin_Click(object sender, EventArgs e) { { if (login(txtEmail.Text, txtPassword.Text)) if (login(txtEmail.Text, txtPassword.Text)) FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, false); FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, false); } } Sub cmdLogin_Click(s As Object, e As eventArgs) Sub cmdLogin_Click(s As Object, e As eventArgs) If (login(txtEmail.Text, txtPassword.Text)) If (login(txtEmail.Text, txtPassword.Text)) FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, False) FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, False) End If End If End Sub End Sub

Leer las credenciales del usuario desde una cookie User.Identity.Name devuelve el valor guardado por FormsAuthentication.RedirectFromLoginPage

*****************************

Introduccin

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).

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 Authenticate Funcin Dadas las credenciales suministradas, este mtodo intenta validar las credenciales comparndolas con las que contiene el almacn de credenciales configurado. 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. Devuelve la URL redirigida para la solicitud original que ha provocado la redireccin a la pgina de inicio de sesin. Redirige a los usuarios autenticados a la URL solicitada originalmente. 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. 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.

GetAuthCookie

GetRedirectUrl

RedirectFromLoginPage SetAuthCookie

SignOut

Crear una pgina de inicio de 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.

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:

Visual Basic .NET

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

C#

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"; } }

Leer credenciales desde cookies

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.

Nota 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.

Seguridad en aplicaciones Web con Microsoft ASP.NET

33

Demostracin: uso de la autenticacin basada en formularios


Abrir IIS y configurar para autenticacin annima Abrir Web.config y configurarlo para autenticacin y autorizacin Abrir la pgina de inicio de sesin y mostrar el cdigo Ejecutar la aplicacin Web ASP.NET Los estudiantes pueden acceder a la aplicacin Web ASP.NET segura en el equipo del instructor

*****************************

Introduccin

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

Configurar IIS para acceso annimo

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).

Nota 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.

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.

Configurar la seguridad en el archivo Web.config

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.

Mostrar la pgina LoginDemo.aspx

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.

Importante 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

Visual Basic .NET C# Visual Basic .NET C#

http://localhost/Pract14VB/NonSecurePageDemo.aspx http://localhost/Pract14CS/NonSecurePageDemo.aspx 14. Ir a: http://localhost/Pract14VB/SecurePageDemo1.aspx http://localhost/Pract14CS/SecurePageDemo1.aspx

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:

Visual Basic .NET C#

http://localhost/Pract14VB/SecurePageDemo2.aspx http://localhost/Pract14CS/SecurePageDemo2.aspx Mostrar que esta vez no se nos pide que introduzcamos nuestras credenciales.

Los estudiantes acceden al equipo del instructor Visual Basic .NET C#

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.

36

Seguridad en aplicaciones Web con Microsoft ASP.NET

Leccin: descripcin de la autenticacin mediante Microsoft Passport


Cmo funciona Microsoft Passport Otros recursos de Microsoft Passport

*****************************

Introduccin

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.

Objetivos de la leccin

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.

Seguridad en aplicaciones Web con Microsoft ASP.NET

37

Cmo funciona Microsoft Passport

1 El cliente solicita una pgina al host 1 2 El sitio redirige al cliente a Passport.com 2 3 El cliente es redirigido e inicia sesin en 3 Passport.com 4 Passport devuelve una cookie 4 con la informacin del ticket 5 El cliente accede al host, esta 5 vez con la informacin del ticket 6 El host devuelve un formulario 6 Web Form y posiblemente una nueva cookie que puede leer y escribir Cliente

sitioweb.msft

Passport.com

*****************************

Introduccin Serie de eventos que tienen lugar en la autenticacin de Microsoft Passport

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.

38

Seguridad en aplicaciones Web con Microsoft ASP.NET

Otros recursos de Microsoft Passport


Sitios Web http://www.passport.com http://msdn.microsoft.com

*****************************

Introduccin

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

Sitios Web

Das könnte Ihnen auch gefallen