Microsoft ASP.net - Curso Completo - Espa Ol

705
Índice Soporte de versiones de software ............................................................................ 2 Requerimientos del aula .......................................................................................... 2 1. Instalar y configurar bases de datos SQL Server ................................................. 3 2. Configurar la solución final ................................................................................. 3 Desarrollo de aplicaciones Web con Microsoft ASP.NET utilizando Visual Studio .NET Guía de instalación de las bases de datos

Transcript of Microsoft ASP.net - Curso Completo - Espa Ol

Page 1: Microsoft ASP.net - Curso Completo - Espa Ol

Índice Soporte de versiones de software ............................................................................ 2 Requerimientos del aula .......................................................................................... 2 1. Instalar y configurar bases de datos SQL Server................................................. 3 2. Configurar la solución final ................................................................................. 3

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

Guía de instalación de las bases de datos

Page 2: Microsoft ASP.net - Curso Completo - Espa Ol

Soporte de las versiones de software Las guías de instalación 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 técnico para la instalación 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 información e instrucciones de esta guía de instalación. 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 apéndice de esta guía de instalación.

Cuando finalicemos la configuración del aula, los equipos del instructor y de los estudiantes deberían 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 versión que se ha probado con el curso y dónde puede encontrarse el software.

Software Versión probada y notas Microsoft Windows XP con Service Pack 1 o superior

Professional Edition

Microsoft SQL Server™ 2000 Developer Edition Visual Studio .NET CDs

Microsoft SQL Server 2000 Service Pack 2 o superior

No aplicable

Microsoft Visual Studio® .NET 2003 Enterprise Developer Edition

Macromedia Flash Player Versión 5.0

Trainer Compact Disk o http://www.macromedia.com

Page 3: Microsoft ASP.net - Curso Completo - Espa Ol

1. Instalar y configurar las bases de datos SQL Server En los laboratorios de este curso, se utilizan tres bases de datos. Las tres bases de datos pueden restaurarse ejecutando un script SQL.

1. En el menú Inicio, hacer clic en Todos los programas, clic en Microsoft SQL Server, y clic en Enterprise Manager.

2. En la barra de herramientas, hacer clic en Herramientas, y clic en SQL Query Analyzer.

3. En el cuadro de diálogo Conectar a SQL Server, escribir (local) en el cuadro SQL Server, hacer clic en Iniciar SQL Server si está detenido, hacer clic en Autenticación Windows, y clic en Aceptar.

4. En la barra de herramientas, hacer clic en Archivo, y clic en Abrir. 5. En el cuadro de diálogo 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 opción de consulta y hacer clic en Ejecutar.

7. Cerrar SQL Query Analyzer. 8. Cerrar SQL Server Enterprise Manager.

2. Configurar la solución final Crear la solución de laboratorio de Visual Studio .NET

1. Utilizando Visual Studio .NET, crear una nueva solución en blanco denominada LabApplication: a. En el menú Archivo, hacer clic en Nuevo y clic en Solución en blanco. b. En el cuadro de diálogo Nuevo proyecto, introducir LabApplication en

el cuadro de texto Nombre y hacer clic en Aceptar.

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

Page 4: Microsoft ASP.net - Curso Completo - Espa Ol

Crear la aplicación Web Benefits de Visual Basic .NET

1. Crear un nuevo proyecto de Aplicación Web ASP.NET con el nombre BenefitsVB, en la solución 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 Aplicación Web ASP.NET. Establecer la ubicación en http://localhost/BenefitsVB, hacer clic en Agregar a solución, y clic en Aceptar.

Verificar que se han escrito correctamente las mayúsculas 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 diálogo 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 solución 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 solución, y clic en Aceptar.

Verificar que se han escrito correctamente las mayúsculas del proyecto BenefitsList.

Actualizar el proyecto BenefitsListVB

1. En el Explorador de soluciones, hacer clic con el botón 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 diálogo Agregar elemento existente – BenefitsListVB, hacer clic en Todos los archivos (*.*).

4. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.

Precaución

Precaución

Page 5: Microsoft ASP.net - Curso Completo - Espa Ol

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 solución LabApplication, completar los siguientes pasos para agregar una referencia al componente BenefitsListVB que acabamos de crear: a. Hacer clic con el botón derecho en el proyecto BenefitsVB en el

Explorador de soluciones y hacer clic en Agregar referencia. b. En el cuadro de diálogo Agregar referencia, en la pestaña 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 solución 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 ubicación en http://localhost/DentalServiceVB, hacer clic en Agregar a Solución, y clic en Aceptar.

Verificar que se han utilizado correctamente las mayúsculas en el proyecto DentalServiceVB.

Actualizar el proyecto DentalServiceVB

1. En el Explorador de soluciones, hacer clic con el botón 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 diálogo 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 botón

derecho en el proyecto DentalServiceVB en el Explorador de soluciones y haciendo clic en Generar.

Precaución

Page 6: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar una referencia Web en el proyecto BenefitsVB al servicio Web DentalServiceVB

1. En el proyecto BenefitsVB de la solución 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 botón derecho en

BenefitsVB y clic en Agregar referencia Web. b. En el cuadro de texto Dirección, 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 botón derecho en localhost, y seleccionar Cambiar nombre.

3. Escribir DentalWebRef y pulsar ENTER. 4. Generar la solución haciendo clic en Generar solución en el menú

Generar.

Crear la aplicación Web C# Benefits

1. Crear un nuevo proyecto de aplicación Web ASP.NET, con el nombre BenefitsCS, en la solución 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 Aplicación Web ASP.NET. Establecer la ubicación en http://localhost/BenefitsCS, hacer clic en Agregar a Solución, y hacer clic en Aceptar.

Verificar que se han escrito correctamente las mayúsculas del proyecto BenefitsCS.

Actualizar el proyecto BenefitsCS

1. En el Explorador de soluciones, hacer clic con el botón 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 diálogo 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.

Precaución

Page 7: Microsoft ASP.net - Curso Completo - Espa Ol

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 solución 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 Solución, y hacer clic en Aceptar.

Verificar que se han escrito correctamente las mayúsculas del proyecto BenefitsListCS.

Actualizar el proyecto BenefitsListCS

1. En el Explorador de soluciones, hacer clic con el botón 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 diálogo 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 solución LabApplication, completar los siguientes pasos para agregar una referencia al componente BenefitsListCS que acabamos de crear: a. Hacer clic con el botón derecho en el proyecto BenefitsCS en el

Explorador de soluciones y hacer clic en Agregar referencia. b. En el cuadro de diálogo Agregar referencia, en la pestaña 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 solución 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

Precaución

Page 8: Microsoft ASP.net - Curso Completo - Espa Ol

ubicación en http://localhost/DentalServiceCS, hacer clic en Agregar a solución, y clic en Aceptar.

Verificar que se han utilizado correctamente las mayúsculas en el proyecto DentalServiceCS.

Actualizar el proyecto DentalServiceCS

1. En el Explorador de soluciones, hacer clic con el botón 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 diálogo 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 botón 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 solución 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 botón derecho en

BenefitsCS y hacer clic en Agregar referencia Web. b. En el cuadro de texto Dirección, 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 botón derecho en localhost, y seleccionar Cambiar nombre.

3. Escribir DentalWebRef y pulsar ENTER. 4. Generar la solución haciendo clic en Generar solución en el menú

Generar. 5. Cerrar Visual Studio .NET

Instalar y configurar las bases de datos del estado de sesión

1. En el menú Inicio, seleccionar Todos los programas, seleccionar Accesorios, y hacer clic en Línea de comandos.

Precaución

Page 9: Microsoft ASP.net - Curso Completo - Espa Ol

Se abrirá una ventana de Comandos. 2. En la línea de comandos, escribir el siguiente comando, siendo version la

última versión del .NET Framework instalada en nuestro equipo, y pulsar ENTER: cd c:\Windows\Microsoft.NET\Framework\version\ La línea de comandos cambia con el nuevo directorio.

3. En la línea de comandos, escribir el siguiente comando, y pulsar ENTER: OSQL –S localhost –E <InstallSqlState.sql

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

La ventana de comandos muestra una serie de números y mensajes, y regresa a la línea de comandos. Se han restablecido las bases de datos ASPState y tempdb.

4. Cerrar la línea de comandos y abrir Windows Explorer. 5. Ir al directorio LabSetup que se puede encontrar dentro del fichero

labSetup.zip 6. Hacer doble clic en Lab16.bat.

Este archivo por lotes ejecuta una consulta SQL que configura la seguridad para las bases de datos ASPState y tempdb.

7. Cerrar Windows Explorer.

Nota

Page 10: Microsoft ASP.net - Curso Completo - Espa Ol

Introducción a la plataforma Microsoft .NET

Índice

Descripción 1

¿Qué es la plataforma Microsoft .NET? 2

¿Qué es el .NET Framework? 5

¿Cuáles son los componentes del .NET Framework? 12

¿Cuáles son las mejoras de Visual Basic .NET? 21

Descripción de los espacios de nombres 23

Page 11: Microsoft ASP.net - Curso Completo - Espa Ol
Page 12: Microsoft ASP.net - Curso Completo - Espa Ol

Introducción a la plataforma Microsoft .NET 1

Descripción

¿Qué es la plataforma Microsoft .NET?

¿Qué es el .NET Framework?

¿Cuáles son los componentes del .NET Framework?¿Cuáles son las mejoras de Visual Basic .NET?

Objetivo Describir los temas y objetivos del módulo.

Presentación En este módulo, presentamos la plataforma .NET. Hablaremos sobre el .NET Framework y sobre el soporte de lenguajes que proporciona el .NET Framework a la plataforma.

Microsoft® Visual Basic® .NET constituye una importante mejora a la línea de productos de Visual Basic. Como desarrollador de Visual Basic, le será útil entender la razón lógica y las características que forman la base de la Plataforma Microsoft .NET antes de estudiar en profundidad Visual Basic .NET.

Sugerencia Este modulo proporciona una descripción de los sistemas .NET para los desarrolladores de Visual Basic. Asegúrese de destacar las ventajas de .NET respecto de versiones anteriores de las arquitecturas de desarrollo Windows y Visual Basic siempre que sea posible.

En este módulo, 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.

Page 13: Microsoft ASP.net - Curso Completo - Espa Ol

2 Introducción a la plataforma Microsoft .NET

¿Qué es la plataforma Microsoft .NET?

.NET.NETFramework Framework

InternetInternet

COM+COM+

OrquestaciOrquestacióónn

Windows

.NET Enterprise

Servers

ServiciosServiciosBuildingBuilding

BlockBlock

Visual Studio .NET

Con Con mejorasmejoras.NET.NET

NuevasNuevascapacidadescapacidades

DisponibleDisponibleen la en la actualidadactualidad

InternetInternet

¿Qué es la plataforma Microsoft .NET?

Objetivo Presentar los principales servicios y características que proporciona la plataforma .NET.

Presentación La plataforma .NET está formada por varios servicios y características básicos, como se muestra en esta diapositiva. Uno de los objetivos de esta nueva plataforma es simplificar el desarrollo Web. Esta sección describe la arquitectura de la plataforma .NET.

Esta sección 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 tecnologías necesarias para desarrollar aplicaciones Web distribuidas.

La plataforma .NET proporciona:

Un modelo de programación coherente e independiente del lenguaje para todas las capas o niveles de una aplicación.

Una interoperabilidad transparente entre tecnologías. Una fácil migración desde tecnologías existentes. Un completo soporte de tecnologías de Internet independientes de la

plataforma y basadas en estándares, 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 tecnologías diseñadas para transformar Internet en una plataforma informática 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.

Page 14: Microsoft ASP.net - Curso Completo - Espa Ol

Introducción a la plataforma Microsoft .NET 3

Tecnologías intrínsecas de la Plataforma .NET Las tecnologías intrínsecas que integran la plataforma .NET incluyen:

.NET Framework El .NET Framework se basa en un nuevo entorno de ejecución de lenguaje común (CLR - Common Language Runtime). Este motor de ejecución proporciona un conjunto de servicios comunes para los proyectos generados en Visual Studio .NET, con independencia del lenguaje. Estos servicios proporcionan bloques de desarrollo fundamentales para aplicaciones de cualquier tipo, para todas las capas y niveles de la arquitectura de aplicaciones.

Sugerencia Debido al CLR, todos los lenguajes compatibles con .NET utilizarán los mismos archivos del entorno de ejecución. Esto constituye una gran ayuda para los desarrolladores de Visual Basic, puesto que ya no necesitarán librerías de entorno de ejecución específicas para Visual Basic. Estos archivos se instalarán automáticamente en futuras versiones de Windows.

Microsoft Visual Basic, Microsoft Visual C++®, y otros lenguajes de programación Microsoft se han mejorado para beneficiarse de estos servicios. Otros lenguajes de terceros escritos para la plataforma .NET también tienen acceso a los mismos servicios.

Gracias al CLR, todos los lenguajes .NET utilizarán los mismos archivos del entorno de ejecución. Esto significa que no es necesario distribuir librerías de entorno de ejecución específicas para Visual Basic ya que los archivos del entorno de ejecución de .NET se instalarán automáticamente en las futuras versiones de Microsoft Windows®.

Nota

Servicios .NET Building Blocks Los servicios .NET Building Block son servicios programables distribuidos que están 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 través de Internet. Los servicios .NET Building Blocks pueden utilizarse desde cualquier plataforma que soporte el protocolo SOAP. Los servicios pueden incluir identidad, notificación y mensajería, personalización, almacenamiento esquematizado, calendario, directorio, búsqueda y distribución 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 tecnologías fundamentales para simplificar la creación, implantación y evolución constante de aplicaciones y Servicios Web seguros, escalables y de alta disponibilidad. También permite crear una nueva generación de aplicaciones basadas en Windows con numerosas y nuevas características disponibles gracias al .NET Framework.

Page 15: Microsoft ASP.net - Curso Completo - Espa Ol

4 Introducción a la plataforma Microsoft .NET

Servidores .NET Enterprise Servers Los servidores .NET Enterprise Servers proporcionan escalabilidad, fiabilidad, gestión e integración dentro de la empresa y entre organizaciones, y muchas otras características descritas en la siguiente tabla.

Servidor Descripción Microsoft SQL Server™ 2000

Incorpora funcionalidad basada en XML, soporte de estándares Worldwide Web Consortium (W3C), la capacidad de manipular datos XML utilizando Transact SQL (T-SQL), un análisis flexible y potente basado en Web y un acceso seguro a los datos a través de la Web utilizando HTTP.

Microsoft BizTalk™ Server 2000

Proporciona servicios de integración de aplicaciones empresariales (EAI - enterprise aplicación integration), integración negocio a negocio (business-to-business) y tecnología avanzada de orquestación BizTalk Orchestration para crear procesos de negocio dinámicos que abarcan aplicaciones, plataformas y organizaciones a través de Internet.

Microsoft Host Integration Server 2000

Proporciona la mejor forma de integrar Internet, intranet y las tecnologías cliente/servidor, manteniendo al mismo tiempo las inversiones realizadas en los sistemas existentes. Microsoft Host Integration Server 2000 sustituye a Microsoft SNA Server.

Microsoft Exchange 2000 Enterprise Server

Está basado en la potente tecnología de mensajería y colaboración de Exchange e incorpora nuevas funcionalidades importantes, además de mejorar la fiabilidad, la escalabilidad y el rendimiento de su arquitectura básica. Otras características mejoran la integración de Exchange 2000 con Microsoft Windows 2000, Microsoft Office 2000 e Internet.

Microsoft Application Center 2000

Ofrece una herramienta para implantar y administrar aplicaciones Web de alta disponibilidad.

Microsoft Internet Security and Acceleration Server 2000

Proporciona conectividad a Internet segura, rápida 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 directoriode Windows 2000 para obtener seguridad basada en políticas, aceleración y gestión en redes distribuidas.

Microsoft Commerce Server 2000

Proporciona un marco de trabajo de aplicación, sofisticados mecanismos de realimentación y capacidades de análisis.

Page 16: Microsoft ASP.net - Curso Completo - Espa Ol

Introducción a la plataforma Microsoft .NET 5

¿Qué es el .NET Framework?

Descripción del .NET Framework

Beneficios del .NET Framework

Lenguajes en el .NET Framework

Objetivo Describir los temas que se tratan en esta sección.

Presentación El .NET Framework proporciona todos los servicios comunes necesarios para la ejecución de aplicaciones.

En esta sección, veremos cómo 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 través de la especificación Common Language Specification (CLS). También estudiaremos qué lenguajes están soportados en el .NET Framework.

Page 17: Microsoft ASP.net - Curso Completo - Espa Ol

6 Introducción a la plataforma Microsoft .NET

Descripción del .NET Framework

Visual Studio .NETVisual Studio .NET

Common Language SpecificationCommon Language Specification

Visual Visual BasicBasic C++C++ C#C# J#J# ……

.NET Framework.NET Framework

Objetivo Explicar cómo encajan los diversos componentes del .NET Framework.

Presentación El .NET Framework proporciona todos los servicios comunes necesarios para ejecutar las aplicaciones Visual Basic .NET. Estos servicios están disponibles en cualquier lenguaje compatible con .NET gracias a la espeficicación Common Language Specification.

El .NET Framework proporciona todos los servicios comunes necesarios para ejecutar las aplicaciones Visual Basic .NET.

Crear componentes en el .NET Framework Antes del modelo COM, las aplicaciones estaban formadas por entidades totalmente separadas con poca o ninguna integración. Al utilizar COM, es posible integrar componentes dentro de una aplicación y entre aplicaciones exponiendo una serie de interfaces comunes. Sin embargo, todavía es necesario que los desarrolladores escriban el código para envolver, gestionar e integrar componentes y objetos.

En el .NET Framework, los componentes se construyen sobre una base común. Ya no es necesario escribir código para permitir que los objetos interactúen 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 están acostumbrados utilizando lenguajes orientados a objetos. El .NET Framework soporta totalmente clases, herencia, métodos, propiedades, eventos, polimorfismo, constructores y otras construcciones orientadas a objetos.

Common Language Specification La especificación Common Language Specification (CLS) define los mínimos estándares que deben satisfacer los lenguajes y desarrolladores si desean que sus componentes y aplicaciones sean ampliamente utilizados por otros lenguajes compatibles con .NET. La especificación CLS permite a los desarrolladores de Visual Basic .NET crear aplicaciones como parte de un

Page 18: Microsoft ASP.net - Curso Completo - Espa Ol

Introducción a la plataforma Microsoft .NET 7

equipo que utiliza múltiples lenguajes con la seguridad de que no habrá problemas con la integración de los diferentes lenguajes. La especificación CLS también 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 rápido de aplicaciones.

Page 19: Microsoft ASP.net - Curso Completo - Espa Ol

8 Introducción a la plataforma Microsoft .NET

Beneficios del .NET Framework

Basado en estándares y prácticas WebExtensible

Fácil de utilizar por los desarrolladores

Diseñado utilizando modelos de aplicaciones unificados

API de WindowsAPI de Windows

FormulariosFormularios VBVB MFC/ATLMFC/ATL ASPASP

.NET Framework.NET Framework

Objetivo Explicar cómo los objetivos de diseño del marco de trabajo facilitan el desarrollo de aplicaciones.

Presentación Antes de estudiar los diversos componentes del .NET Framework, resulta útil entender los objetivos de diseño del .NET Framework. Ello nos ayudará a ver cómo el .NET Framework simplifica el desarrollo de software.

En esta sección, veremos algunos de los beneficios del .NET Framework.

Objetivos del .NET Framework El .NET Framework fue diseñado para satisfacer los siguientes objetivos:

Basado en estándares y prácticas Web El .NET Framework soporta totalmente las tecnologías existentes de Internet, incluyendo Hypertext Markup Language (HTML), XML, SOAP, Extensible Stylesheet Language for Transformations (XSLT), Xpath y otros estándares Web. El .NET Framework promueve la creación de servicios Web débilmente conectados y sin estado.

Extensible La jerarquía del .NET Framework no queda oculta al desarrollador. Podemos acceder y extender clases .NET (a menos que estén selladas) utilizando herencia. También podemos implementar herencia multi-lenguaje.

Sugerencia Comente que las clases de .NET Framework que estén selladas no pueden ser extendidas.

Fácil de usar por los desarrolladores En el .NET Framework, el código está organizado en espacios de nombres jerárquicos y clases. El Framework proporciona un sistema de tipos común, 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, sólo hay un tipo de cadena (string), y todos los datos de la cadena son Unicode.

Diseñado utilizando modelos de aplicaciones unificados

Page 20: Microsoft ASP.net - Curso Completo - Espa Ol

Introducción a la plataforma Microsoft .NET 9

La funcionalidad de una clase .NET está disponible desde cualquier modelo de programación o lenguaje compatible con .NET.

Page 21: Microsoft ASP.net - Curso Completo - Espa Ol

10 Introducción a la plataforma Microsoft .NET

Lenguajes del .NET Framework

Visual Basic .NET

Nueva versión de Visual Basic, con importantes innovaciones del lenguaje

C#–diseñado 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

Objetivo Presentar los lenguajes soportados en el .NET Framework.

Presentación En esta sección, estudiaremos los lenguajes que Microsoft proporciona para el .NET Framework con Visual Studio .NET. También 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 ejecución de los programas). El .NET Framework ofrece soporte para numerosos lenguajes de programación, incluyendo lenguajes de Microsoft y de terceros.

Lenguaje Descripción Microsoft Visual Basic .NET

Visual Basic .NET ofrece importantes innovaciones del lenguaje respecto a versiones anteriores de Visual Basic. Visual Basic .NET soporta herencia, constructores, polimorfismo, sobrecarga, excepciones estructuradas, estricta verificación de tipos, free threading, y muchas otras características. En esta versión, Visual Basic Scripting Edition proporciona funcionalidad completa Visual Basic.

Microsoft Visual C#™ C# ha sido diseñado específicamente para la plataforma .NET y es el primer lenguaje moderno orientado a componentes de la familia de C y C++. Puede incrustarse en páginas ASP.NET. Algunas de las principales características de este lenguaje incluyen clases, interfaces, delegados, boxing y unboxing, espacios de nombres, propiedades, indexadores, eventos, sobrecarga de operadores, versionado, atributos, código inseguro, y la creación de documentación en formato XML. No son necesarios archivos de cabecera ni archivos IDL (Interface Definition Language).

Extensiones gestionadas C++

La actualización de Visual C++ es una mínima extensión gestionada del lenguaje C++. Esta extensión proporciona acceso al .NET Framework incluyendo el recolector de basura, herencia de implementación simple y herencia de interfaz múltiple. Esta actualización también elimina la necesidad de escribir código de fontanería para los componentes. Ofrece acceso a bajo nivel donde sea necesario.

Microsoft Visual J#™ .NET

J# .NET es un lenguaje para los desarrolladores que utilicen el lenguaje 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á diseñado para aprovechar

Page 22: Microsoft ASP.net - Curso Completo - Espa Ol

Introducción a la plataforma Microsoft .NET 11

al máximo el .NET Framework.

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

Page 23: Microsoft ASP.net - Curso Completo - Espa Ol

12 Introducción a la plataforma Microsoft .NET

¿Cuáles son los componentes del .NET Framework?

Los componentes del .NET Framework

Common Language Runtime - CLR

Biblioteca de clases del .NET FrameworkADO.NET: Datos y XML

ASP.NET: Formularios Web y Servicios Web

Interfaz de usuario

Objetivo Describir los temas que se tratan en esta sección.

Presentación En esta sección, estudiaremos los diferentes componentes que integran el .NET Framework.

En esta sección, estudiaremos los componentes que integran el Microsoft .NET Framework. El .NET Framework está formado por un conjunto de tecnologías que constituyen una parte fundamental de la plataforma .NET. El .NET Framework proporciona los bloques de construcción básicos para desarrollar aplicaciones y Servicios Web utilizando ASP.NET.

Page 24: Microsoft ASP.net - Curso Completo - Espa Ol

Introducción a la plataforma Microsoft .NET 13

Componentes del .NET Framework

BibliotecaBiblioteca de de clasesclases del .NET Frameworkdel .NET Framework

ADO.NET: ADO.NET: DatosDatos y XMLy XML

InterfazInterfazde de usuariousuario

Common Language RuntimeCommon Language Runtime

ASP .NETASP .NETFormulariosFormularios

y y ServiciosServicios WebWeb

Objetivo Ofrecer una descripción de los componentes del .NET Framework.

Presentación Visual Basic .NET utiliza los componentes que proporciona el .NET Framework.

Los componentes principales del .NET Framework son los siguientes:

Common Language Runtime - CLR Biblioteca de clases del .NET Framework ADO.NET: datos y XML ASP.NET: Formularios Web y Servicios Web Interfaz de usuario

Page 25: Microsoft ASP.net - Curso Completo - Espa Ol

14 Introducción a la plataforma Microsoft .NET

Common Language Runtime

SoporteSoporte de la de la bibliotecabiblioteca de de clasesclases basebase

SoporteSoporte de de hiloshilos COM COM marshalermarshaler

VerificadorVerificador de de tipostipos GestorGestor de de excepcionesexcepciones

MSIL a MSIL a compiladorescompiladores

nativosnativosGestorGestor

de de ccóódigodigoRecolectorRecolectorde de basurabasura

Motor de Motor de seguridadseguridad Motor de Motor de depuracidepuracióónn

CargadorCargador de de clasesclases

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

Presentación Esta sección ofrece una visión general de los diversos componentes del Common Language Runtime y proporciona una breve descripción de cada uno. Como desarrollador de Visual Basic, nunca verá estas piezas físicamente, pero hablar sobre ellas le ayudará a comprender mejor la riqueza del entorno de ejecución.

El CLR (Common Language Runtime) simplifica el desarrollo de aplicaciones, proporciona un entorno de ejecución robusto y seguro, soporta múltiples lenguajes, simplifica la implantación y administración de aplicaciones y proporciona un entorno gestionado.

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

¿Qué es un entorno gestionado? Un entorno gestionado es aquel que proporciona servicios comunes de forma automática. Algunos ejemplos de los tipos de servicios que proporciona un entorno gestionado son el recolector de basura y la seguridad.

Page 26: Microsoft ASP.net - Curso Completo - Espa Ol

Introducción a la plataforma Microsoft .NET 15

Componentes del Common Language Runtime La siguiente tabla describe las características del Common Language Runtime.

Componente Descripción Cargador de clases Carga la implementación de un tipo en memoria y lo prepara

para su ejecución.

Microsoft Intermediate Language (MSIL) a compilador nativo

Convierte lenguaje intermedio MSIL a código nativo (just-in-time).

Gestor de código Gestiona la ejecución de código.

Recolector de basura Gestiona automáticamente la vida de todos sus objetos. Es un recolector de basura multiprocesador y escalable.

Motor de seguridad Proporciona seguridad basada en evidencias en función del origen del código y del usuario.

Motor de depuración Le permite depurar su aplicación y trazar la ejecución de código.

Verificador de tipos No permitirá casts inseguros ni variables no inicializadas. Es posible verificar IL para garantizar la seguridad de tipos.

Gestor de excepciones Proporciona una gestión de excepciones estructurada e integrada con Windows Structured Exception Handling (SEH). Se han mejorado los informes de errores.

Soporte de hilos (threads)

Proporciona clases e interfaces que permiten programación multi-hilo.

COM marshaler Proporciona marshaling hacia y desde COM.

Soporte de la biblioteca de clases del .NET Framework

Integra el código con el entorno de ejecución que soporta la biblioteca de clases del .NET Framework. La siguiente sección trata sobre la biblioteca de clases del .NET Framework.

Page 27: Microsoft ASP.net - Curso Completo - Espa Ol

16 Introducción a la plataforma Microsoft .NET

Biblioteca de clases del .NET Framework

System.GlobalizationSystem.Globalization

System.DiagnosticsSystem.Diagnostics

System.ConfigurationSystem.Configuration

System.CollectionsSystem.CollectionsSystem.IOSystem.IO

System.ReflectionSystem.Reflection

System.NetSystem.Net

SystemSystem

System.ThreadingSystem.Threading

System.TextSystem.Text

System.SecuritySystem.Security System.Runtime.System.Runtime.InteropServicesInteropServices

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

Presentación En esta sección, aprenderemos cómo la biblioteca de clases del .NET Framework expone características del entorno de ejecución y proporciona otros servicios de alto nivel.

La biblioteca de clases del .NET Framework expone características del entorno de ejecución y proporciona en una jerarquía de objetos otros servicios de alto nivel que todo programador necesita. Esta jerarquía de objetos se denomina espacio de nombres.

Sugerencia La biblioteca de clases del .NET Framework proporciona numerosas y potentes características nuevas para los desarrolladores de Visual Basic .NET. Por ejemplo, el espacio de nombres Collections añade numerosas posibilidades nuevas, como clasificación, colas, pilas y matrices de tamaño automático. La clase de sistema Threading también ofrece nuevas posibilidades a los desarrolladores de Visual Basic .NET para crear verdaderas aplicaciones multi-hilo. En este punto, una descripción general de los espacios de nombres puede ser útil.

Espacios de nombres System El espacio de nombres System contiene clases fundamentales y clases base que definen tipos de datos valor y referencia comúnmente utilizados, eventos y descriptores de eventos, interfaces, atributos y procesamiento de excepciones. Otras clases proporcionan servicios como la conversión de tipos de datos o la manipulación de parámetros de métodos, operaciones matemáticas, invocación local y remota de programas, administración de los entornos de aplicaciones y la supervisión 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 más información sobre los espacios de nombres, realice una búsqueda de “espacio de nombres” en la documentación del .NET Framework SDK.

Page 28: Microsoft ASP.net - Curso Completo - Espa Ol

Introducción a la plataforma Microsoft .NET 17

ADO.NET: Datos y XML

DataSetDataSet DataRowDataRow

DataTableDataTable DataViewDataView

System.DataSystem.Data System.XmlSystem.Xml

System.Xml.SchemaSystem.Xml.Schema

System.Xml.SerializationSystem.Xml.Serialization

Objetivo Explicar el soporte para la gestión de datos y XML en el entorno de ejecución.

Presentación El .NET Framework proporciona un nuevo conjunto de clases ADO.NET para el manejo de datos.

ADO.NET es la siguiente generación de la tecnología ActiveX® Data Objects (ADO). ADO.NET proporciona un soporte mejorado para el modelo de programación desconectado. También ofrece un completo soporte de XML.

Sugerencia ADO.NET ha sido creado especialmente para ser utilizado en Internet, y utiliza XML como tecnología principal. Esto significa que los desarrolladores ya no necesitan pasar objetos Recordset a través del sistema, limitando potencialmente qué clientes pueden atender. También mejora el modelo de programación 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 básicos 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 múltiples 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 podría ser XML, otra podría ser OLE DB, y una tercera fuente de datos podría 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 implementación de XPath que permite navegación de grafos de datos en XML. El espacio de nombres System.XML.Serialization proporciona toda la infraestructura básica para los Servicios Web, incluyendo características como el movimiento atrás y adelante entre objetos y una representación XML.

Page 29: Microsoft ASP.net - Curso Completo - Espa Ol

18 Introducción a la plataforma Microsoft .NET

ASP.NET: Formularios Web y Servicios Web

ASP.NETASP.NETSystem.WebSystem.Web

ConfiguraciConfiguracióónn Estado de SesiEstado de Sesióónn

CachCachéé SeguridadSeguridad

ServiciosServiciosDescripciónDescripción

DescubrimientoDescubrimiento

ProtocolosProtocolos

IUIUHtmlControlsHtmlControls

WebControlsWebControls

Objetivo Presentar los Formularios y Servicios Web.

Presentación Internet evoluciona rápidamente desde los actuales sitios Web que únicamente sirven páginas de interfaz de usuario a navegadores, hasta una próxima generación de sitios Web programables que integran directamente organizaciones, aplicaciones, servicios y dispositivos. Estos sitios Web programables son mucho más que sitios a los que se accede de modo pasivo; son Servicios Web reutilizables e inteligentes.

ASP.NET es un marco de trabajo de programación 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 fácil y potente de generar interfaces de usuario (IUs) Web dinámicos. Los Servicios Web de ASP.NET proporcionan las piezas para construir aplicaciones distribuidas basadas en la Web. Los Servicios Web están basados en estándares abiertos de Internet, como HTTP y XML. Podemos pensar en un Servicio Web como un componente reutilizable accesible a través de Internet, en lugar de estar limitado a clientes Windows en una red de área local.

El Common Language Runtime proporciona un soporte nativo para crear y exponer Servicios Web utilizando una abstracción de programación 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 estándares 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 más habituales se describen en los siguientes párrafos.

Sugerencia Con Visual Basic .NET, el desarrollo Web es casi tan sencillo como el desarrollo de aplicaciones basadas en Windows. La creación de aplicaciones Web puede llevarse a cabo en un mismo IDE, tanto si son aplicaciones basadas en páginas Web o en Servicios Web.

Espacio de nombres System.Web En el espacio de nombres System.Web, existen servicios como la gestión de caché, seguridad, configuración y otros que son compartidos por los Servicios Web y por el interfaz de usuario (IU) Web.

Page 30: Microsoft ASP.net - Curso Completo - Espa Ol

Introducción 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 también otros controles WebControl más ricos que permiten estructurar controles mediante plantillas (por ejemplo, un control de rejilla).

Page 31: Microsoft ASP.net - Curso Completo - Espa Ol

20 Introducción a la plataforma Microsoft .NET

Interfaz de usuario

System.DrawingSystem.Drawing

System.Windows.FormsSystem.Windows.Forms

Objetivo Explicar cómo el .NET Framework gestiona el interfaz de usuario para las aplicaciones Windows tradicionales.

Presentación En esta sección, estudiaremos cómo .NET gestiona el interfaz de usuario. La clase System.Windows.Forms proporciona el IU de lado cliente y System.Drawing proporciona la siguiente generación de servicios GDI.

Las aplicaciones Windows pueden ahora proporcionar interfaces de usuario más 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 estándar en nuestras aplicaciones .NET. Muchas funciones a las que anteriormente sólo podían accederse mediante llamadas a la API (Application Programming Interface) están ahora disponibles como parte de los propios formularios, lo cual hace el desarrollo mucho más fácil y potente.

Espacio de nombres System.Drawing El espacio de nombres System.Drawing proporciona acceso a la funcionalidad de gráficos básica de GDI+. Los espacios de nombres System.Drawing.Drawing2D, System.Drawing.Imaging y System.Drawing.Text ofrecen funcionalidades más avanzadas.

Page 32: Microsoft ASP.net - Curso Completo - Espa Ol

Introducción a la plataforma Microsoft .NET 21

¿Cuáles son las mejoras de Visual Basic .NET?

¿Cuáles son las mejoras de Visual Basic .NET?

Principales mejoras del lenguajeSoporte mejorado orientado a objetosGestión de excepciones estructurada

Acceso total al .NET FrameworkNuevas opciones de manejo de hilosRecolector de basura

Desarrollo Web mejoradoCreación de Formularios Web tan fácilmente como formularios WindowsCrear servicios Web rápidamente

Objetivo Presentar algunas de las principales mejoras de Visual Basic .NET.

Presentación Visual Basic .NET proporciona importantes mejoras del lenguaje, un acceso total al .NET Framework, y un desarrollo Web mejorado.

Visual Basic .NET proporciona importantes mejoras del lenguaje, un acceso total al .NET Framework y un desarrollo Web mejorado.

Importantes mejoras de lenguaje Sugerencia Explique cada uno de los puntos de la diapositiva y sus ventajas para los desarrolladores.

En Visual Basic .NET, Visual Basic ha experimentado algunos cambios importantes para permitir a los desarrolladores de Visual Basic crear aplicaciones empresariales potentes, robustas y escalables.

Soporte orientado a objetos mejorado Permite a los desarrolladores de Visual Basic .NET utilizar herencia de clases, constructores, destructores, sobrecarga, interfaces y polimorfismo. Esto otorga a Visual Basic .NET tanto poder orientado a objetos como cualquier otro lenguaje .NET, como C# o Visual C++ con extensiones gestionadas.

Gestión de excepciones estructurada Simplifica el control de excepciones y permite utilizar potentes características como las excepciones anidadas. Esto mejora enormemente el anterior gestor de errores de Visual Basic.

Page 33: Microsoft ASP.net - Curso Completo - Espa Ol

22 Introducción 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 múltiples hilos de ejecución. Por primera vez, los desarrolladores de Visual Basic podrán 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 gestión de memoria, como posiciones de memoria vacías y referencias circulares que existían en versiones anteriores de Visual Basic y en otros lenguajes.

Desarrollo Web mejorado Visual Basic .NET permite a los desarrolladores crear rápidamente potentes aplicaciones Web.

Crear Formularios Web fácilmente Es tan fácil como crear formularios Windows utilizando la técnica de escribir código 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 páginas Web (como Microsoft Visual InterDev®) y otro entorno para el desarrollo de componentes. Ahora, todos los aspectos de una aplicación Web se crean simplemente en un único entorno para los desarrolladores de Visual Basic y de un modo fácil de entender.

Crear Servicios Web rápidamente Es posible crear Servicios Web rápidamente de modo similar a cómo se creaban componentes en las versiones anteriores de Visual Basic. Los Servicios Web son una potente tecnología que le permite acceder a sus componentes (o a los componentes de otras personas) a través de Internet mediante HTTP. Cualquier desarrollador de Visual Basic que haya creado componentes podrá realizar fácilmente la transición a los Servicios Web.

Page 34: Microsoft ASP.net - Curso Completo - Espa Ol

Introducción a la plataforma Microsoft .NET 23

Descripción de los espacios de nombres

Descripción de los espacios de nombres

Espacios de nombres

Espacios de nombres utilizados en módulos obligatorios

Espacios de nombres utilizados en módulos opcionales

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

Presentación En esta sección, estudiaremos los espacios de nombres del .NET Framework.

En esta sección, estudiaremos los espacios de nombres del .NET Framework. También veremos qué espacios de nombres se enseñan en este curso.

Esta sección incluye los siguientes temas:

Espacios de nombres Espacios de nombres utilizados en módulos obligatorios Espacios de nombres utilizados en módulos opcionales

Page 35: Microsoft ASP.net - Curso Completo - Espa Ol

24 Introducción a la plataforma Microsoft .NET

Espacios de nombres

Espacios de nombres

System System

GlobalizationGlobalizationDiagnosticsDiagnosticsConfigurationConfigurationCollectionsCollections

ResourcesResourcesReflectionReflectionNetNetIOIO

ThreadingThreadingTextText

SecuritySecurity RuntimeRuntimeServiceProcessServiceProcess

.Serialization.Serialization

.Remoting.Remoting

.InteropServices.InteropServices

Objetivo Entender el modo en que los espacios de nombres proporcionan una jerarquía de tipos y funcionalidades fáciles de utilizar.

Presentación El .NET Framework incluye un gran conjunto de ensamblados de bibliotecas de clases, que contienen cientos de tipos. Estos ensamblados proporcionan acceso a funcionalidades del sistema en nuestro proceso de desarrollo.

El .NET Framework incluye un gran conjunto de ensamblados que forman las bibliotecas de clases, que conjuntamente contienen cientos de tipos. Estos ensamblados proporcionan acceso a funcionalidades del sistema en nuestro proceso de desarrollo.

Objetivo de los espacios de nombres Debido a que la biblioteca de clases del .NET Framework incluye definiciones para nomerosos tipos, la biblioteca se organiza en un espacio de nombres de estructura jerárquica.

Los espacios de nombres utilizan un esquema nombres con una sintaxis basada en un punto para agrupar lógicamente clases relacionadas de modo que puedan buscarse y referenciarse fácilmente. 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 estándares para procesar XML.

El espacio de nombres System El espacio de nombres System es el espacio de nombres raíz 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 también contiene tipos para la gestión de excepciones, recolector de basura, E/S de consola, varios tipos de herramientas, tipos de datos de formato, generadores de números aleatorios y funciones matemáticas.

Page 36: Microsoft ASP.net - Curso Completo - Espa Ol

Introducción a la plataforma Microsoft .NET 25

Espacios de nombres utilizados en módulos obligatorios Espacios de nombres utilizados en módulos obligatorios

Módulo 2

System.Console

Módulo 3

System.Windows.Forms

System.Drawing

Módulo 4

System.Reflection

Módulo 7

System.Text

System.Collections

Módulo 10System.IO

Módulo 11System.Net

System.Net.SocketsMódulo 12

System.Runtime.SerializationMódulo 13

System.Runtime.Remoting.ChannelsSystem.Web.Services

Objetivo Explicar qué espacios de nombres se enseñan en este curso, y qué espacios de nombres no.

Presentación 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 Módulo 2 explica el espacio de nombres System.Console para enviar salida de impresión a la consola. El Módulo 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 Módulo 4 explica el espacio de nombres System.Reflection para almacenar información relativa a versiones y archivos de claves en un ensamblado. El Módulo 7 explica el espacio de nombres System.Text para la gestión avanzada de cadenas y el System.Collections para mantener colecciones de datos.

El Módulo 10 explica el espacio de nombres System.IO para leer y escribir archivos. El Módulo 11 explica los espacios de nombres System.Net y System.Net.Sockets para la transmisión de datos a través de la red.

El Módulo 12 explica el espacio de nombres System.Runtime.Serialization para la persistencia de objetos en el almacenamiento. El Módulo 13 explica los espacios de nombres System.Runtime.Remoting.Channels y System.Web.Services para la invocación de objetos remotos, y para la creación de servicios Web XML.

Page 37: Microsoft ASP.net - Curso Completo - Espa Ol

26 Introducción a la plataforma Microsoft .NET

Espacios de nombres utilizados en módulos opcionales Espacios de nombres utilizados en módulos opcionales

Módulo 14

System.Threading

Módulo 16 System.Data

Módulo 17

System.Reflection

Objetivo Completar la información sobre los espacios de nombres presentados en la sección anterior.

Presentación Estos son algunos espacios de nombres que se cubren en módulos opcionales de este curso.

Los Módulos 14 a 17 son opcionales.

El Módulo 14 explica el espacio de nombres System.Threading para permitir la programación multi-hilo. El Módulo 16 explica el espacio de nombres System.Data, que proporciona los objetos y tipos básicos para el modelo de programación ADO.NET. ADO.NET también proporciona soporte de XML en el espacio de nombres System.Xml. Finalmente, el Módulo 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.

Page 38: Microsoft ASP.net - Curso Completo - Espa Ol

Índice

Descripción 1

Lección: introducción al .NET Framework 2

Lección: descripción de ASP.NET 14

Lección: descripción de la aplicación del laboratorio 20

Lección: Recursos 26

Descripción del Microsoft .NET Framework

Page 39: Microsoft ASP.net - Curso Completo - Espa Ol
Page 40: Microsoft ASP.net - Curso Completo - Espa Ol

Descripción del Microsoft .NET Framework 1

Descripción

Introducción al .NET Framework

Descripción de ASP.NET

Descripción de la aplicación del laboratorio

Recursos

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

El Microsoft® .NET Framework representa un cambio importante en el modo de generar y ejecutar las aplicaciones Web. Microsoft ASP.NET es una de las múltiples tecnologías que forman parte del .NET Framework. En este módulo, estudiaremos el .NET Framework y ASP.NET. Tendremos la oportunidad de examinar la aplicación Web que generaremos en los laboratorios.

En este módulo, 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 básicas del sitio Web que generaremos en los

laboratorios.

Introducción

Objetivos

Page 41: Microsoft ASP.net - Curso Completo - Espa Ol

2 Descripción del Microsoft .NET Framework

Lección: Introducción 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******************************

En esta lección, estudiaremos el .NET Framework. Veremos algunos de los problemas a los que se enfrentan los desarrolladores cuando generan aplicaciones Web y cómo el .NET Framework soluciona estos problemas. También incluye una introducción a Microsoft Visual Studio® .NET, la herramienta de desarrollo que utilizaremos para desarrollar aplicaciones Web con el .NET Framework.

En esta lección, 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 características de Visual Studio .NET.

Introducción

Objetivos de la lección

Page 42: Microsoft ASP.net - Curso Completo - Espa Ol

Descripción del Microsoft .NET Framework 3

¿Qué es el .NET Framework?

Herramientas del desarrollador

Clientes

Experiencias del usuario

Aplicaciones Web ASP.NET

Servicios Web XML

Bases de datos

.NET Framework

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

.NET es el modelo de desarrollo de Microsoft que hace que el software sea independiente de la plataforma y de los dispositivos, y hace que los datos estén disponibles a través de Internet. El .NET Framework es la infraestructura básica 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 generación de aplicaciones Windows® y aplicaciones Web. El objetivo de la plataforma .NET de Microsoft es simplificar el desarrollo Web. Está formada por las siguientes tecnologías 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 programación 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 integración de diversas aplicaciones.

Introducción

¿Qué es la plataforma .NET?

Page 43: Microsoft ASP.net - Curso Completo - Espa Ol

4 Descripción 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 través de una familia de dispositivos.

Herramientas, como Visual Studio .NET, que pueden utilizarse para desarrollar servicios Web XML, aplicaciones Windows y aplicaciones Web para obtener una rica experiencia de usuario.

El .NET Framework proporciona la base sobre la que se desarrollan y ejecutan las aplicaciones y los servicios Web XML. La naturaleza unificada del .NET Framework significa que todas las aplicaciones, tanto si son aplicaciones Windows, aplicaciones Web o servicios Web XML, se desarrollan utilizando un conjunto de herramientas y código comunes, y se integran fácilmente 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 ejecución, incluyendo la integración de lenguajes, la seguridad y la gestión de memoria. Durante el desarrollo, el CLR proporciona funcionalidades necesarias para simplificar el desarrollo.

Biblioteca de clases. Las bibliotecas de clases proporcionan código reutilizable para las tareas más habituales, incluyendo el acceso a datos, el desarrollo de servicios Web XML, Web Forms y Windows Forms.

¿Qué es el .NET Framework?

Page 44: Microsoft ASP.net - Curso Completo - Espa Ol

Descripción del Microsoft .NET Framework 5

¿Qué problemas soluciona .NET?

Incluso con Internet, la mayoría de aplicaciones y dispositivos tienen problemas comunicándose 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******************************

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 fácilmente accesible para compartir información (Internet), algunas aplicaciones funcionan en más de un tipo de cliente o tienen la capacidad de interactuar transparentemente con otras aplicaciones. Esta limitación 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 diseñar 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 estándar de mercado XML. La independencia del lenguaje de .NET permite a los desarrolladores generar una aplicación en cualquier lenguaje basado en .NET y saber que la aplicación Web funcionará en cualquier cliente que soporte .NET.

El CLR también controla gran parte de la infraestructura de la aplicación, de modo que los desarrolladores pueden concentrarse en la lógica específica de la aplicación.

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 estándar abierto, la mayoría de clientes modernos, como los sistemas

Introducción

Aspectos previos a .NET

Page 45: Microsoft ASP.net - Curso Completo - Espa Ol

6 Descripción del Microsoft .NET Framework

operativos de PCs, teléfonos móviles, asistentes digitales personales (PDAs) y consolas de juegos, pueden aceptar datos XML.

Page 46: Microsoft ASP.net - Curso Completo - Espa Ol

Descripción del Microsoft .NET Framework 7

Componentes del .NET Framework

Win32Win32

MessageMessageQueuingQueuing

COM+COM+((Transacciones, Particiones, Transacciones, Particiones,

AgrupaciAgrupacióón de objetosn de objetos))IISIIS WMIWMI

Common Language RuntimeCommon Language Runtime

BibliotecaBiblioteca de de clasesclases de .NET Frameworkde .NET Framework

ADO.NET y XMLADO.NET y XML

ServiciosServicios Web XMLWeb XML InterfazInterfaz de de usuariousuario

VisualBasic C++ C#

ASP.NETASP.NET

Perl Python …

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

El .NET Framework proporciona el marco en tiempo de compilación y en tiempo de ejecución 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. Además, el .NET Framework se extiende para su ejecución en otras plataformas, como Windows CE, a través 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 través de clases en la biblioteca de clases del .NET Framework.

Biblioteca de clases del .NET Framework La biblioteca de clases del .NET Framework expone características del CLR y simplifica el desarrollo de aplicaciones basadas en .NET. Además, los desarrolladores pueden extender las clases creando sus propias bibliotecas de clases.

Introducción

El .NET Framework

Page 47: Microsoft ASP.net - Curso Completo - Espa Ol

8 Descripción 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 también acceden a las mismas bibliotecas.

Common Language Runtime El CLR simplifica el desarrollo de aplicaciones, proporciona un entorno de ejecución robusto y seguro, soporta múltiples lenguajes y simplifica la implantación y administración de las aplicaciones. El entorno del CLR también se denomina entorno gestionado, en el que se ofrecen automáticamente servicios comunes, como la recolección de basura y la seguridad.

Microsoft ADO.NET ADO.NET es la siguiente generación de la tecnología ActiveX® Data Objects (ADO) de Microsoft. ADO.NET ofrece un soporte mejorado del modelo de programación desconectado. ADO.NET también proporciona un amplio soporte de XML.

Para aprender más sobre ADO.NET, leer los Módulos 9, 10 y 11.

ASP.NET ASP.NET es un marco de programación creado sobre el CLR. Puede utilizarse en un servidor para crear potentes aplicaciones Web. ASP.NET Web Forms proporcionan una forma fácil y potente de generar interfaces de usuario (IUs) Web dinámicos.

Servicios Web XML Los Servicios Web XML son componentes Web programables que pueden compartirse entre aplicaciones en Internet o en intranets. El .NET Framework proporciona herramientas y clases para crear, probar y distribuir servicios Web XML.

Para saber más sobre los servicios Web XML, ver el Módulo 13.

Interfaces de usuario El .NET Framework soporta tres tipos de IUs:

• Web Forms, que funcionan a través de ASP.NET y HTTP (Hypertext Transfer Protocol)

• Windows Forms, que se ejecutan en equipos cliente Win32

• La consola de la línea de comandos Lenguajes

Cualquier lenguaje que cumpla con la Especificación de Lenguaje Común (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.

Para más información sobre los lenguajes basados en .NET, consultar

Nota

Nota

Nota

Page 48: Microsoft ASP.net - Curso Completo - Espa Ol

Descripción del Microsoft .NET Framework 9

el Módulo “Uso de lenguajes basados en Microsoft .NET”.

Page 49: Microsoft ASP.net - Curso Completo - Espa Ol

10 Descripción del Microsoft .NET Framework

Ventajas de usar el .NET Framework

Basado en estándares y prácticas WebLa funcionalidad de las clases .NET está disponible de forma universalEl código está organizado en clases y espacios de nombres jerárquicosIndependiente del lenguaje

Windows Windows APIAPI

ASPASP

.NET .NET FrameworkFramework

1980s 1990s 2000s

Visual BasicVisual Basic

MFC/ATLMFC/ATL

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

En los primeros años del desarrollo de aplicaciones Windows, todas las aplicaciones estaban escritas sobre la API (Interfaz de Programación de Aplicaciones) de Windows en C o C++.

Con la llegada de Visual Basic, y posteriormente de Internet, los desarrolladores debían 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 aplicación.

Las ventajas de utilizar el .NET Framework para desarrollar aplicaciones incluyen:

Basado en estándares y prácticas Web El .NET Framework soporta completamente las tecnologías 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 estándares Web.

Diseñado utilizando modelos de aplicación unificados La funcionalidad de una clase .NET está disponible desde cualquier lenguaje compatible con .NET o modelo de programación. Por tanto, la misma pieza de código puede ser utilizada por aplicaciones Windows, aplicaciones Web y Servicios Web XML.

Introducción

Ventajas

Page 50: Microsoft ASP.net - Curso Completo - Espa Ol

Descripción del Microsoft .NET Framework 11

Fácil de utilizar para los desarrolladores En el .NET Framework, el código está organizado en espacios de nombres jerárquicos y en clases. El .NET Framework proporciona un sistema de tipos comunes, conocido también 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 aplicación .NET escrita en cualquier lenguaje basado en .NET.

Clases extensibles La jerarquía del .NET Framework no queda oculta al desarrollador. Podemos acceder y extender las clases .NET (a menos que estén protegidas) mediante la herencia. También podemos implementar la herencia entre múltiples lenguajes.

Page 51: Microsoft ASP.net - Curso Completo - Espa Ol

12 Descripción del Microsoft .NET Framework

Visual Studio .NET: la herramienta para el desarrollo .NET

Visual Studio .NET

Herramientas Windows Forms

Herramientas Web Forms

Proceso de errores

Acceso a datos

Múltiples Lenguajes

Herramientas Servicios Web

Desarrollar Depurar ImplantarDiseñar

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

Visual Studio .NET constituye el núcleo del desarrollo .NET. Es un completo entorno de desarrollo en el que podemos diseñar, desarrollar, depurar e implementar nuestras aplicaciones .NET y nuestros Servicios Web XML.

Visual Studio .NET, como herramienta de desarrollo, proporciona las características siguientes:

Soporta varios lenguajes de desarrollo.

Para más información sobre los lenguajes disponibles basados en .NET, leer el Módulo “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 depuración local,

depuración remota y uso de trazas.

Introducción

Características de Visual Studio .NET

Nota

Page 52: Microsoft ASP.net - Curso Completo - Espa Ol

Descripción del Microsoft .NET Framework 13

En este curso, utilizaremos Visual Studio .NET. En esta práctica, Visual Studio .NET se mostrará en la parte superior del menú Inicio, para poder acceder a él fácilmente, 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 botón derecho en Microsoft Visual Studio .NET 2003 y, a continuación, 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 botón 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 página de inicio.

Estudiaremos más detalles del IDE de Visual Studio .NET en el Módulo “Uso de Microsoft Visual Studio .NET”.

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

Práctica opcional

Nota

Page 53: Microsoft ASP.net - Curso Completo - Espa Ol

14 Descripción del Microsoft .NET Framework

Lección: descripción de ASP.NET

¿Qué es ASP.NET?Aplicación Web ASP.NETMultimedia: modelo de ejecución ASP.NET

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

ASP.NET es un marco de programación basado en el .NET Framework que se utiliza para generar aplicaciones Web. Los formularios Web Forms ASP.NET, que forman parte de una aplicación Web ASP.NET, proporcionan un modo fácil de generar sitios Web dinámicos. ASP.NET también incluye la tecnología necesaria para generar servicios Web XML, que proporcionan los bloques básicos para construir aplicaciones distribuidas basadas en la Web.

En esta lección, aprenderemos a:

Explicar la diferencia entre Web Forms y aplicaciones Web ASP.NET. Describir las partes de una aplicación Web ASP.NET.

Introducción

Objetivos de la lección

Page 54: Microsoft ASP.net - Curso Completo - Espa Ol

Descripción del Microsoft .NET Framework 15

¿Qué es ASP.NET?

El sucesor y evolución de Active Server Pages, más flexible

Páginas Web dinámicas 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***********

Durante muchos años, los desarrolladores han estado utilizando la tecnología ASP para generar páginas Web dinámicas. De modo similar a ASP, ASP.NET se ejecuta en el servidor Web y proporciona una forma de desarrollar sitios Web dinámicos, personalizados y de rico contenido. Además, 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 página Web que los usuarios visualizan en un navegador. Una aplicación Web ASP.NET consta de uno o más formularios Web Form. Un Web Form es una página dinámica que puede acceder a recursos del servidor.

Por ejemplo, una página Web tradicional puede ejecutar scripts en el cliente para realizar tareas básicas. En cambio, un formulario Web Form ASP.NET también puede ejecutar código en el lado servidor para acceder a una base de datos, generar formularios Web Forms adicionales, o aprovechar la seguridad incorporada en el servidor.

Además, 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 prácticamente 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.

Introducción

¿Qué es ASP.NET?

Servicios Web XML

Page 55: Microsoft ASP.net - Curso Completo - Espa Ol

16 Descripción del Microsoft .NET Framework

La tecnología ASP.NET también permite la creación de servicios Web XML. Los servicios Web XML son aplicaciones distribuidas que utilizan XML para transferir información entre clientes, aplicaciones y otros servicios Web XML.

Aprenderemos cómo consumir y crear servicios Web XML en el Módulo “Consumir y crear Servicios Web XML”.

Nota

Page 56: Microsoft ASP.net - Curso Completo - Espa Ol

Descripción del Microsoft .NET Framework 17

Aplicación Web ASP.NET

DatosXML

Base de datos

InternetInternet

Page1.aspx

Page2.aspx

ServiciosWeb

ServiciosWeb ComponentesComponentes

Web Forms

Páginascódigotrasero

global.asax

Web.config

machine.config

Servidor Web ASP.NET

Cach

éde S

alida

Clientes

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

Una aplicación 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 aplicación ASP.NET.

Las partes de una aplicación Web ASP.NET incluyen:

Formularios Web Forms o páginas .aspx Los formularios Web Forms y las páginas .aspx proporcionan la interfaz de usuario para la aplicación Web.

Páginas con código trasero Las páginas con código trasero están asociadas a los formularios Web Forms y contienen el código del servidor para el formulario Web Form.

Archivos de configuración Los archivos de configuración son archivos XML que definen la configuración predeterminada para la aplicación Web y para el servidor Web. Cada aplicación Web tiene un archivo de configuración Web.config. Además, cada servidor Web tiene un archivo machine.config.

Archivo Global.asax Los archivos Global.asax contienen el código necesario para responder a los eventos a nivel de aplicación provocados por ASP.NET.

Introducción

Partes de una aplicación Web ASP.NET

Page 57: Microsoft ASP.net - Curso Completo - Espa Ol

18 Descripción del Microsoft .NET Framework

Enlaces a servicios Web XML Los enlaces a servicios Web XML permiten a la aplicación Web enviar y recibir datos de un servicio Web XML.

Conectividad a bases de datos La conectividad a bases de datos permite a la aplicación Web transferir datos desde y hacia fuentes de base de datos.

Caché El uso de caché permite a la aplicación Web devolver más rápidamente formularios Web Forms y datos tras la primera petición.

Page 58: Microsoft ASP.net - Curso Completo - Espa Ol

Descripción del Microsoft .NET Framework 19

Multimedia: modelo de ejecución de ASP.NET

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

En esta animación, observaremos el funcionamiento de ASP.NET para enviar información a un cliente que ha realizado una petición. Para empezar la animación abra el fichero media01.swf.

Cuando el cliente solicita una página Web por primera vez, se genera el siguiente conjunto de eventos:

1. El navegador cliente envía una solicitud GET HTTP al servidor. 2. El parseador ASP.NET interpreta el código fuente. 3. Si el código no se ha compilado todavía en una biblioteca de enlace

dinámico (DLL), ASP.NET invoca el compilador. 4. El CLR carga y ejecuta el código Microsoft intermediate language (MSIL).

Cuando el usuario invoca la misma página Web por segunda vez, se genera el siguiente conjunto de eventos:

1. El navegador cliente envía una solicitud GET HTTP al servidor. 2. El CLR carga y ejecuta inmediatamente el código MSIL que ya se ha

compilado durante el primer intento de acceso del usuario.

Introducción

Primera solicitud

Segunda solicitud

Page 59: Microsoft ASP.net - Curso Completo - Espa Ol

20 Descripción del Microsoft .NET Framework

Lección: descripción de la aplicación del laboratorio

Instalación de la aplicación del laboratorio

Demostración: la solución del laboratorio

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

Esta lección presenta una introducción a la aplicación de laboratorio que generaremos durante el resto del curso. También tendremos la oportunidad de explorar una versión completa de la aplicación de laboratorio y entender parte de su funcionalidad.

En esta lección, aprenderemos a:

Conocer la funcionalidad básica y las características de la aplicación de laboratorio que generaremos en el resto de laboratorios de este curso.

Enumerar el software requerido para ejecutar los laboratorios de este curso.

Introducción

Objetivo de la lección

Page 60: Microsoft ASP.net - Curso Completo - Espa Ol

Descripción del Microsoft .NET Framework 21

Instalación de la aplicación de laboratorio

3 proyectos

Aplicación Web

Biblioteca de Clases

Servicio Web XML

12 formularios Web Forms

3 bases de datos

Doctors

Dentists

Coho

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

En los laboratorios de este curso, generaremos una aplicación Web ASP.NET completa que simula un sitio Web interno para la compañía ficticia Coho Winery. El sitio Web ficticio, que crearemos en nuestro equipo, proporciona información a empleados sobre sus opciones de beneficios.

La aplicación Web Benefits que desarrollaremos incluye lo siguiente:

Tres proyectos, incluyendo una aplicación Web, una biblioteca de clases y un servicio Web XML.

12 formularios Web Forms utilizados para mostrar la información de beneficios de los empleados.

Tres bases de datos SQL Server.

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

Introducción

Detalles

Nota

Page 61: Microsoft ASP.net - Curso Completo - Espa Ol

22 Descripción del Microsoft .NET Framework

Los componentes en Visual Basic .NET y C# de la aplicación Web Benefits se enumeran en la siguiente tabla.

Página Visual Basic .NET Página C# Descripción Laboratorios default.aspx

default.aspx.vb

default.aspx

default.aspx.cs

La página de inicio. Invoca el componente BenefitsList y lista las opciones de beneficios en un control CheckBoxList.

4, 5, 14

dental.aspx

dental.aspx.vb

dental.aspx

dental.aspx.cs

Invoca el servicio Web XML para obtener un listado de dentistas.

13

doctors.aspx

doctors.aspx.vb

doctors.aspx

doctors.aspx.cs

Lista los principales médicos de la base de datos doctors de SQL Server

9, 10, 11, 15

dsDoctors.vb

dsDoctors.xsd

dsDoctors.cs

dsDoctors.xsd

Contiene el esquema del DataSet utilizado en el formulario Web Form doctors.aspx.

9

growth.xml

lgcap.xml

midcap.xml

smcap.xml

growth.xml

lgcap.xml

midcap.xml

smcap.xml

Archivos XML con la información de prospectos. 12

header.ascx header.ascx Control de usuario que es la cabecera de cada página. 4, 5, 15

life.aspx

life.aspx.vb

life.aspx

life.aspx.cs

Formulario de entrada de datos sobre seguros de vida. Utiliza controles de validación.

4, 7, 14

login.aspx

login.aspx.vb

login.aspx

login.aspx.cs

Página de inicio de sesión para el sitio Web. 17

medical.aspx

medical.aspx.vb

medical.aspx

medical.aspx.cs

Formulario de entrada de datos médicos. La página utilizada para seleccionar un médico de asistencia primaria de la página doctors.aspx.

8, 15

mutual_funds.xml mutual_funds.xml Archivo XML que contiene la lista de los fondos habituales de inversión.

12

namedate.ascx

namedate.ascx.vb

namedate.ascx

namedate.ascx.cs

Control de usuario utilizado para recoger la información del nombre y fecha de nacimiento. Se utiliza en la página medical.aspx.

8, 14

nestedData.aspx

nestedData.aspx.vb

nestedData.aspx

nestedData.aspx.cs

Permite crear un archivo XML anidado desde varias tablas que componen la base de datos doctors.

12

prospectus.aspx

prospectus.aspx.vb

prospectus.apsx

prospectus.aspx.cs

Muestra un prospecto de los planes de pensiones de un determinado archivo XML utilizando un archivo de hojas de estilo.

12

prospectus_style.xsl prospectus_style.xsl Archivo de hojas de estilo para mostrar los prospectos. 12

register.aspx

register.aspx.vb

register.aspx

register.aspx.cs

Agrega nuevos usuarios a la base de datos de Coho Winery.

16

retirement.aspx

retirement.aspx.vb

retirement.aspx

retirement.aspx.cs

Muestra los datos XML del archivo mutual_funds.xml en formato HTML.

12, 14

securitytest.aspx

securitytest.aspx.vb

securitytest.aspx

securitytest.aspx.cs

Muestra la identidad y el método de autenticación utilizado para validar al usuario actual, y verificar el sistema de seguridad.

16

Page 62: Microsoft ASP.net - Curso Completo - Espa Ol

Descripción del Microsoft .NET Framework 23

(continuación) Página Visual Basic .NET Página C# Descripción Laboratorios signout.aspx

signout.aspx.vb

signout.aspx

signout.aspx.cs

Permite al usuario cerrar sesión y salir del sistema. 16

Web.config Web.config Archivo de configuración. 14, 15, 16

Proyecto componente BenefitsListVB

Proyecto componente BenefitsListCS

Este proyecto contiene un componente Visual Basic .NET o C# denominado Class1.vb o Class1.cs que devuelve un listado de las opciones de beneficios.

3

Proyecto servicio Web DentalService

Proyecto servicio Web DentalService

Este proyecto contiene un servicio Web XML denominado DentalService.asmx (DentalService.asmx.vb y DentalService.asmx.cs). Este servicio Web XML lee información de la base de datos dentists de SQL Server y devuelve la información en un DataSet.

13

Page 63: Microsoft ASP.net - Curso Completo - Espa Ol

24 Descripción del Microsoft .NET Framework

Demostración: solución del laboratorio

MedicalMedical.aspxMedicalMedical.aspx

Página inicioBenefitsDefault.aspx

Página inicioBenefitsDefault.aspx

Life InsuranceLife.aspxLife InsuranceLife.aspx

RetirementRetirement.aspxRetirementRetirement.aspx

DentistsDental.aspxDentistsDental.aspx

Dentists

DoctorsDoctors.aspx DoctorsDoctors.aspx

Doctors

Página inicioLogin.aspxPágina inicioLogin.aspx

RegistroRegister.aspxRegistroRegister.aspx

CohoWinery

ProspectusProspectus.aspxProspectusProspectus.aspx

ServicioWeb XML dentalService1.asmx

ServicioWeb XML dentalService1.asmx

EncabezadopáginaHeader.ascx

EncabezadopáginaHeader.ascx

ASPState

tempdb

Aplicación Web Laboratorio

Control usuarionamedate.ascxControl usuarionamedate.ascx

ComponenteMenúClass1.vb or Class1.cs

ComponenteMenúClass1.vb or Class1.cs

Arch. XML

Web.config

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

En esta demostración, veremos las características y funcionalidades de la aplicación Web Benefits. Para seguir esta demostración es necesario instalar la aplicación Web Benefits, siguiendo los pasos de la “Guía de instalación”.

Default.aspx es la página de inicio de la aplicación Web Benefits. Desde esta página, los usuarios pueden navegar a otros formularios Web, incluyendo las páginas para introducir información sobre beneficios específicos, como coberturas de seguros de vida, planes de pensiones, seguros médicos y coberturas dentales.

Ejecutar la aplicación

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 solución en Visual Basic .NET y navegar a http://localhost/BenefitsCS/default.aspx para mostrar la solución en C#. La aplicación Web tiene protección; por tanto, se redirecciona a la página login.aspx para iniciar sesión. Esto se establece en el archivo Web.config. La página login.aspx compara los datos de usuario con los nombres y contraseñas de usuario almacenadas en la base de datos coho de SQL Server.

Introducción

Page 64: Microsoft ASP.net - Curso Completo - Espa Ol

Descripción del Microsoft .NET Framework 25

4. Hacer clic en Click here! Como actuamos como un nuevo usuario, la página register.aspx se utiliza para agregarnos a la lista de usuarios registrados de la aplicación Web Benefits.

5. Introducir la información de usuario y hacer clic en Save. Cuando la página register.aspx nos agregue a la base de datos e iniciemos sesión, se mostrará la página default.aspx, ya que es la página que solicitamos originalmente. La página default.aspx tiene un control de usuario que es un anuncio de página con enlaces en la parte superior. Este control de usuario lee del mismo componente que la lista de casillas de verificación de la página.

6. Seleccionar algunas casillas de verificación y hacer clic en Submit. Cuando se hace clic en Submit, la página lee qué casillas de verificación están seleccionadas y muestra una lista de salida.

7. Hacer clic en Life Insurance. La página Life Insurance utiliza controles de servidor, controles de validación y un control de validación de resumen. Un control calendario muestra la fecha actual.

8. Introducir información incorrecta y hacer clic en Save. Se muestran mensajes de Error en un control de resumen de validación.

9. Introducir información correcta y hacer clic en Save. 10. Hacer clic en Medical.

Esta página utiliza un control de usuario y variables de sesión para mostrar el mismo nombre y la fecha de nacimiento introducidos en la página Life Insurance.

11. Hacer clic en Select a doctor. Este enlace redirecciona a la página doctors.aspx. La página doctors.aspx utiliza conexión a base de datos y un control DataGrid. La página doctors.aspx invoca procedimientos almacenados y clasifica y pagina los datos.

12. Hacer clic en Select para seleccionar un médico y clic en Submit. La información del médico seleccionado se retorna a la página medical.aspx de la URL (Uniform Resource Locator).

13. Hacer clic en Retirement Account. Esta página obtiene su información de varios documentos de datos en formato XML. Un contador de páginas muestra el número de visitas que se han realizado a la página.

14. Hacer clic en Dental. La página dental.aspx conecta con el servicio Web XML DentalService, que lee una lista de dentistas de la base de datos SQL Server dentists.

Page 65: Microsoft ASP.net - Curso Completo - Espa Ol

26 Descripción del Microsoft .NET Framework

Lección: Recursos .NET

Recursos .NET

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

En esta lección, estudiaremos algunos de los recursos disponibles para el desarrollo de aplicaciones Web en Visual Studio .NET.

En esta lección, aprenderemos a encontrar la información necesaria para desarrollar aplicaciones Web ASP.NET.

Introducción

Objetivo de la lección

Page 66: Microsoft ASP.net - Curso Completo - Espa Ol

Descripción del Microsoft .NET Framework 27

Recursos .NET

Documentación del .NET Framework

Código de ejemplo

Tutoriales de Inicio rápido

Comunidades online

Sitios Web

www.gotdotnet.com

www.asp.net

msdn.microsoft.com

www.google.com

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

En el aprendizaje del desarrollo con .NET, es posible que necesite buscar soluciones para algunos problemas. La siguiente lista de recursos pretende ser un punto de partida para encontrar más información sobre .NET, además de respuestas a preguntas específicas:

Documentación del .NET Framework. La documentación del .NET Framework se encuentra en dos sitios distintos.

• En un equipo con Visual Studio .NET instalado, podemos acceder a la documentación desde Visual Studio .NET (en el menú de Ayuda, o pulsando F1).

• Otra forma de acceder a la documentación es seleccionar Todos los programas en el menú Inicio, seleccionar Microsoft .NET Framework SDK, y hacer clic en Documentación.

La documentación del .NET Framework contiene código de ejemplo en varios idiomas, además de tutoriales de inicio rápido.

Comunidades online. Las comunidades online son grupos de noticias específicos 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 información detallada para desarrolladores, ejemplos de código, comunidades .NET y más.

• El segundo sitio, http://www.asp.net, es un sitio Web completamente dedicado a los desarrolladores de ASP.NET.

Recursos

Page 67: Microsoft ASP.net - Curso Completo - Espa Ol

28 Descripción del Microsoft .NET Framework

• También 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 información sobre el desarrollo con .NET.

Page 68: Microsoft ASP.net - Curso Completo - Espa Ol

Índice

Descripción 1

Lección: Descripción de Visual Studio .NET 2

Lección: Crear un proyecto de aplicación Web ASP.NET 26

Uso de Microsoft Visual Studio .NET

Page 69: Microsoft ASP.net - Curso Completo - Espa Ol
Page 70: Microsoft ASP.net - Curso Completo - Espa Ol

1 Uso de Microsoft Visual Studio .NET

Descripción

Descripción

Descripción de Visual Studio .NET

Crear un proyecto de aplicación Web ASP.NET

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

En este módulo, estudiaremos cómo utilizar las principales características 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 más eficazmente.

En este módulo, aprenderemos a:

Navegar por el entorno de desarrollo integrado (Integrated Development Environment, IDE) de Visual Studio .NET.

Crear, generar y visualizar un proyecto de aplicación Web ASP.NET.

Introducción

Objetivos

Page 71: Microsoft ASP.net - Curso Completo - Espa Ol

Uso de Microsoft Visual Studio .NET 2

Lección: Descripción de Visual Studio .NET

Lección: Descripción de Visual Studio .NET

¿Por qué Visual Studio .NET?

Página de inicio

Plantillas de proyecto disponibles

Práctica: Seleccionar la plantilla del proyecto

Integrated Development Environment (IDE)

Demostración: Uso del IDE de Visual Studio .NET

Práctica: Uso del IDE de Visual Studio .NET

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

Esta lección presenta una introducción al IDE de Visual Studio .NET. El IDE es la interfaz de usuario (IU) común y el conjunto de herramientas que se utilizan para los distintos tipos de proyectos y lenguajes de programación soportados por Visual Studio .NET.

En esta lección, 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.

Introducción

Objetivos de la lección

Page 72: Microsoft ASP.net - Curso Completo - Espa Ol

3 Uso de Microsoft Visual Studio .NET

¿Por qué Visual Studio .NET?

¿Por qué Visual Studio .NET?

Un IDE para múltiples lenguajes y múltiples tipos de proyectosMúltiples lenguajes en un proyectoMúltiples tipos de proyectos en una soluciónNavegador integradoSoporte de depuraciónInterfaz personalizable

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

Visual Studio .NET simplifica el desarrollo de soluciones Web empresariales potentes y fiables e incrementa la eficacia del desarrollador al proporcionar un entorno de desarrollo compartido y familiar. Los componentes ya desarrollados, los asistentes de programación y la posibilidad de reutilizar componentes escritos en cualquier lenguaje pueden reducir significativamente el tiempo de desarrollo. La opción de completar el código basada en Microsoft IntelliSense® permite producir código preciso más rápidamente. El potente soporte de depuración multilenguaje extremo a extremo ayuda a que las aplicaciones estén operativas más rápidamente.

Visual Studio .NET tiene un único IDE que proporciona un aspecto coherente, con independencia del lenguaje de programación que se utilice o el tipo de aplicación que se desarrolle. Las características que antes estaban disponibles para un único lenguaje, ahora están 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++®

Introducción

Un IDE

Múltiples lenguajes

Page 73: Microsoft ASP.net - Curso Completo - Espa Ol

Uso de Microsoft Visual Studio .NET 4

Para más información sobre los lenguajes disponibles basados en .NET, consultar el Módulo “Uso de lenguajes basados en Microsoft .NET”.

Nota

Page 74: Microsoft ASP.net - Curso Completo - Espa Ol

5 Uso de Microsoft Visual Studio .NET

Visual Studio .NET soporta el desarrollo de múltiples tipos de proyectos, que abarcan desde aplicaciones basadas en Microsoft Windows® hasta aplicaciones Web ASP.NET y servicios Web XML.

Este soporte para múltiples tipos de proyectos permite trabajar de forma simultánea en varios proyectos sin necesidad de cambiar el entorno de desarrollo o aprender nuevas interfaces de herramientas o lenguajes.

Visual Studio .NET contiene un navegador integrado basado en Microsoft Internet Explorer. El navegador está integrado en el IDE y puede accederse a él desde múltiples ventanas y menús.

Esta accesibilidad al navegador permite visualizar el sitio Web durante el ciclo de desarrollo sin tener que transferir a otro programa y volver a escribir las cadenas de la URL (Uniform Resource Locator).

Visual Studio .NET está diseñado para soportar depuración desde el código inicial hasta el despliegue de la aplicación. El soporte de depuración incluye puntos de interrupción, expresiones break, expresiones watch y la posibilidad de recorrer el código de instrucciones o procedimientos paso a paso.

Para más información sobre la depuración, consultar el Módulo “Seguimiento en las aplicaciones Web Microsoft ASP.NET”.

El IDE de Visual Studio .NET puede personalizarse a nivel de ventanas y herramientas. Por tanto, podemos mostrar únicamente las herramientas o ventanas que utilicemos en un momento determinado y ocultar el resto.

Múltiples tipos de proyectos

Navegador integrado

Soporte de depuración

Nota

Interfaz personalizable

Page 75: Microsoft ASP.net - Curso Completo - Espa Ol

Uso de Microsoft Visual Studio .NET 6

Página de inicio

Página de inicio

Acceso de soporte en líneaProyectos recientes

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

Cada vez que iniciamos Visual Studio .NET, se muestra la página de inicio. Esta página proporciona una ubicación centralizada para establecer preferencias, leer noticias sobre productos, acceder a discusiones con otros desarrolladores y obtener otra información que puede utilizarse para iniciarse en el entorno de Visual Studio .NET.

Podemos visualizar la página de inicio en cualquier momento mientras trabajamos en el entorno de desarrollo.

Visualizar la página de inicio

• En el menú de Ayuda, hacer clic en Mostrar página de inicio.

Si hacemos clic en Introducción, la ayuda dinámica 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 rápidamente Visual Studio .NET y cargar todos los archivos relacionados con los proyectos actuales.

Encontrar ejemplos La carpeta Encontrar ejemplos presenta un motor de búsqueda que busca código de ejemplo por lenguaje y palabra clave en línea desde ms-help://MS.VSCC.

Introducción

Introducción

Novedades

Page 76: Microsoft ASP.net - Curso Completo - Espa Ol

7 Uso de Microsoft Visual Studio .NET

Si hacemos clic en Novedades se nos proporciona acceso a las actualizaciones en las secciones Recursos de Visual Studio, Recursos para Partners e Información de Producto.

Hacer clic en Comunidad en línea 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 características de Visual Studio .NET, artículos técnicos y a la base de conocimiento de Microsoft Visual Studio .NET.

Hacer clic en Búsqueda en línea proporciona un motor de búsqueda que accede a la biblioteca en línea de Microsoft MSDN®.

Hacer clic en Descargas proporciona acceso a descargas relacionadas con Visual Studio .NET, código 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). Además, podemos utilizar la selección 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 dinámica para adaptarlos a nuestras preferencias de programación. Podemos cambiar nuestro perfil en cualquier momento para modificar estas opciones de configuración personalizadas.

Tenemos la opción de escoger un perfil ya existente, como Desarrollador Visual Basic, o modificar manualmente cada uno de los elementos del perfil.

Comunidad en línea

Titulares

Búsqueda en línea

Descargas

Servicios Web XML

Alojamiento Web

Mi perfil

Page 77: Microsoft ASP.net - Curso Completo - Espa Ol

Uso de Microsoft Visual Studio .NET 8

Plantillas de proyectos disponibles

Plantillas de proyectos disponibles

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

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

Visual Studio .NET proporciona plantillas que soportan la creación de los tipos de proyectos más habituales. Estas plantillas contienen todos los archivos necesarios y trabajan con nuestro perfil para ajustar el IDE a la configuración correcta del proyecto seleccionado.

Estas plantillas nos ayudan a aprovechar mejor el tiempo al permitir que nos concentremos en agregar funciones al proyecto y no tener que establecer la infraestructura cada vez que cambiamos de tipo de proyecto.

Cuando creamos un proyecto en Visual Studio .NET, también creamos un contenedor de mayor tamaño denominado Solución. Esta Solución puede contener múltiples proyectos, del mismo modo que un contenedor de proyectos puede contener múltiples páginas.

Las soluciones permiten que nos concentremos en el proyecto o conjunto de proyectos necesarios para desarrollar e implementar nuestra aplicación, en lugar de tener que centrarnos en los detalles de administración de los objetos y de los archivos que los definen. Al utilizar el concepto de Solución como contenedor, ésta nos permite:

Trabajar con múltiples proyectos en una misma instancia del IDE. Trabajar con elementos, configuraciones y opciones aplicables a un grupo

de proyectos. Administrar archivos misceláneos que se abren fuera del contexto de una

Solución o de un Proyecto. Utilizar el Explorador de soluciones, que es una visualización gráfica de

nuestra solución, para organizar y administrar todos los proyectos y archivos necesarios para diseñar, desarrollar e implementar una aplicación.

Introducción

Soluciones y proyectos

Page 78: Microsoft ASP.net - Curso Completo - Espa Ol

9 Uso de Microsoft Visual Studio .NET

Page 79: Microsoft ASP.net - Curso Completo - Espa Ol

Uso de Microsoft Visual Studio .NET 10

Visual Studio .NET incluye múltiples 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 Descripción Aplicación para Windows

La plantilla de proyecto Aplicación para Windows se utiliza para crear aplicaciones Windows estándar. Esta plantilla agrega automáticamente las referencias y archivos de proyecto esenciales que la aplicación necesita como punto de inicio.

Biblioteca de clases La plantilla Biblioteca de clases se utiliza para crear clases y componentes reutilizables que pueden compartirse con otros proyectos.

Biblioteca de controles de Windows

La plantilla Biblioteca de controles de Windows se utiliza para crear controles personalizados para usarlos en formularios Windows Forms.

Aplicación Web ASP.NET

La plantilla de proyecto Aplicación Web ASP.NET se utiliza para crear una aplicación Web ASP.NET en un equipo en el que se haya instalado Internet Information Services (IIS) versión 5.0 o posterior. La plantilla crea los archivos básicos que se necesitan en el servidor como ayuda para iniciar el diseño de la aplicación.

Servicio Web ASP.NET

La plantilla de proyecto Servicio Web ASP.NET se utiliza para escribir un servicio Web XML que pueda ser consumido por otros servicios o aplicaciones Web en una red.

Los servicios Web XML son componentes disponibles en Internet y están diseñados para interactuar únicamente con otras aplicaciones Web.

Biblioteca de controles Web

La plantilla Biblioteca de controles Web se utiliza para crearcontroles de servidor Web personalizados. La plantilla agrega los elementos de proyecto necesarios para iniciar la creación de un control que pueda agregarse posteriormente a cualquier proyecto Web.

Aplicación de consola La plantilla de proyecto Aplicación de consola se utiliza para crear aplicaciones de consola. Normalmente, las aplicaciones de consola se diseñan sin una IU gráfica y se compilan en un archivo ejecutable autónomo. Una aplicación de consola se ejecuta desde la línea de comandos intercambiando la información de entrada y de salida entre el símbolo de sistema y la aplicación que se está ejecutando.

Servicio de Windows La plantilla Servicio de Windows se utiliza para crear aplicaciones de servicios de Windows, aplicaciones ejecutables de ejecución de larga duración que se ejecutan en su propia sesión de Windows.

Proyecto vacío La plantilla Proyecto vacío se utiliza para crear un tipo de proyecto propio. La plantilla crea la estructura de archivos necesaria para almacenar la información sobre la aplicación. Las referencias, archivos o componentes deben agregarse a la plantilla manualmente.

Plantillas de proyectos

Page 80: Microsoft ASP.net - Curso Completo - Espa Ol

11 Uso de Microsoft Visual Studio .NET

(continuación) Plantillas de proyecto Descripción Proyecto Web vacío La plantilla Proyecto Web vacío es para usuarios avanzados

que deseen empezar con un proyecto vacío. La plantilla crea la estructura de archivos necesaria para un proyecto basado en servidor en un servidor IIS. Las referencias y componentes (como páginas de formularios Web Forms) deben agregarse manualmente.

Nuevo proyecto en carpeta existente

La plantilla de proyecto Nuevo proyecto en carpeta existente se utiliza para crear un proyecto en blanco en un directorio de aplicación existente. Podemos decidir agregar los archivos desde el directorio de la aplicación existente en el nuevo proyecto haciendo clic con el botón derecho en cada uno de los elementos del Explorador de soluciones y seleccionando Incluir en el proyecto del menú contextual.

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

Grupo de plantillas Descripción Proyectos Visual C++ Las plantillas incluyen:

Proyectos ATL (Active Template Library)

Aplicaciones administradas

Biblioteca de clases administradas

Servicios Web administrados

Proyectos de instalación e implementación

La plantilla Proyectos de instalación e implementación permite crear instaladores para distribuir una aplicación. El archivo Windows Installer (.msi) resultante contiene la aplicación, los archivos dependientes, información sobre la aplicación (como entradas de registro) e instrucciones para la instalación.

Otros proyectos Las plantillas incluyen:

Proyectos de bases de datos

Proyectos empresariales

Proyectos de extensibilidad

Proyectos de aplicación Application Center Test

Las plantillas Biblioteca de clases, Proyecto vacío, Nuevo proyecto en carpeta existente, Biblioteca de controles Web, Servicio Windows, Biblioteca de controles Windows y Proyecto Web vacío no están disponibles en la Edición Estándar de Visual Studio .NET.

Nota

Page 81: Microsoft ASP.net - Curso Completo - Espa Ol

Uso de Microsoft Visual Studio .NET 12

Práctica: selección de la plantilla de proyecto

Práctica: selección de la plantilla de proyecto

Los estudiantes

Seleccionarán 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 aplicación Windows. _____________________________________________________________

_____________________________________________________________

Se desea generar una aplicación que se ejecute en un único equipo que utiliza Windows. _____________________________________________________________

_____________________________________________________________

Se desea crear una aplicación Web dinámica que incluya páginas Web y que pueda utilizar servicios Web XML. _____________________________________________________________

_____________________________________________________________

Se desea crear un componente reutilizable que sea accesible para varias aplicaciones Windows o Web. _____________________________________________________________

_____________________________________________________________

Page 82: Microsoft ASP.net - Curso Completo - Espa Ol

13 Uso de Microsoft Visual Studio .NET

Se desea crear un control Web definido por el usuario que pueda ser utilizado en varias páginas Web. ____________________________________________________________

____________________________________________________________

Se desea crear una aplicación que se ejecute desde una línea de comandos. ____________________________________________________________

____________________________________________________________

Se desea crear una clase a cuyos métodos pueda acceder cualquier aplicación Web a través de Internet. ____________________________________________________________

____________________________________________________________

Se desea crear un servicio Windows que se ejecute de modo continuado, con independencia de si un usuario ha iniciado sesión o no. ____________________________________________________________

____________________________________________________________

Page 83: Microsoft ASP.net - Curso Completo - Espa Ol

Uso de Microsoft Visual Studio .NET 14

Entorno de desarrollo integrado (IDE)

Entorno integrado de desarrollo (IDE)

Cuadro de herramientas

Lista de tareas

Exploradorde

soluciones

Ayuda dinámica

Editor/Navegador

PropiedadesExploradorde servidores

Examinador de objetos

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

El IDE de Visual Studio .NET contiene múltiples ventanas que proporcionan diversas herramientas y servicios. Muchas de las características de Visual Studio .NET están disponibles desde varias de las ventanas, menús 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 botón del alfiler Ocultar automáticamente para convertir ventanas estáticas en ventanas emergentes.

El editor/navegador es la ventana de interfaz principal de Visual Studio .NET. En modo editor, el editor/navegador muestra el código para editar y proporciona una interfaz gráfica WYSIWYG (What You See Is What You Get) para la ubicación de los controles. Podemos arrastrar y soltar para crear el diseño visual de nuestra aplicación. A continuación, podemos gestionar el diseño lógico de la aplicación modificando el código del control Web predeterminado.

Introducción

Editor/navegador

Page 84: Microsoft ASP.net - Curso Completo - Espa Ol

15 Uso de Microsoft Visual Studio .NET

Hay dos opciones para pantalla del editor: modo Diseño y modo HTML:

Modo Diseño En modo Diseño, el editor permite mover los controles y los elementos gráficos por la ventana mediante una sencilla operación de arrastrar y soltar. Visual Studio .NET proporciona dos esquemas de posicionamiento de controles para diseñar páginas Web: FlowLayout y GridLayout. En FlowLayout, los controles se ubican en la página uno a continuación del otro, mientras que GridLayout permite posicionar con exactitud cada control, agregando automáticamente etiquetas DHTML (Dynamic Hypertext Markup Language) a los controles. Cuando agregamos un control a una página Web en modo Diseño, Visual Studio .NET agrega al formulario Web Form código de soporte y predetermina las propiedades. A continuación, podemos cambiar a modo HTML para mostrar el código y editarlo.

Modo HTML En modo HTML, Visual Studio .NET destaca nuestro código para que los distintos elementos, como los nombres de variables y las palabras clave, sean identificables al instante. La característica de IntelliSense proporciona sugerencias para la finalización automática 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 Método, 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 Método mostrará todos los eventos de ese control. Los eventos son acciones que puede realizar el control y que pueden ser interpretadas por nuestra aplicación. Utilizando conjuntamente las listas Nombre de Clase y

Page 85: Microsoft ASP.net - Curso Completo - Espa Ol

Uso de Microsoft Visual Studio .NET 16

Nombre de Método, podemos localizar y editar rápidamente el código de nuestra aplicación.

El Examinador de objetos es una herramienta que proporciona información sobre los objetos y sus métodos, propiedades, eventos y constantes.

El Explorador de soluciones muestra la jerarquía de los archivos del proyecto. Desde esta ventana, podemos mover y modificar archivos, por ejemplo:

Utilizar una operación 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 página.

Hacer clic con el botón derecho en el archivo, proyecto o solución para ver las opciones disponibles, incluyendo agregar, generar y editar páginas.

Los tipos de archivos que muestra el Explorador de soluciones incluyen:

Referencias de proyectos que listan las clases que utiliza la página y los controles Web.

Todos los formularios Web Forms del proyecto. Todas las páginas de código subyacente que contienen la lógica que soporta

los formularios Web Forms. Carpetas relacionadas con proyectos y sub-elementos.

Examinador de objetos

Explorador de soluciones

Page 86: Microsoft ASP.net - Curso Completo - Espa Ol

17 Uso de Microsoft Visual Studio .NET

La ayuda dinámica proporciona acceso a temas de la ayuda local y en línea, en función de la configuración de Mi perfil, el Tipo de proyecto y la ubicación actual del cursor. A medida que nos movemos por el IDE o editamos código, las opciones disponibles en la ayuda dinámica se ajustan para corresponderse con nuestra actividad.

Visual Studio .NET permite ajustar las propiedades de documentos, clases y controles utilizando una ventana común de Propiedades. Cuando creamos o seleccionamos un elemento, la ventana Propiedades muestra automáticamente las propiedades relacionadas. Como muestra la siguiente ilustración, las propiedades disponibles se listan en la columna izquierda, mientras que las opciones de configuración se listan a la derecha.

Ayuda dinámica

Propiedades

Page 87: Microsoft ASP.net - Curso Completo - Espa Ol

Uso de Microsoft Visual Studio .NET 18

La Lista de Tareas permite hacer un seguimiento del estado de las tareas mientras se desarrollan las aplicaciones. Visual Studio .NET también utiliza la Lista de tareas para señalar errores cuando se genera una aplicación.

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 añadida manualmente.

Visual Studio .NET agrega automáticamente una tarea con símbolos, como el comentario 'TODO en el código. La segunda tarea de la siguiente imagen de pantalla ha sido añadida automáticamente por Visual Studio .NET debido a un comentario 'TODO del código. Para acceder a esta sección del código, hacemos clic en el elemento de la Lista de tareas y Visual Studio .NET abrirá la página referida en esa línea de comentario. Existen varios símbolos (tokens) preestablecidos que pueden utilizarse en el código y que añadirán automáticamente una tarea a la Lista de tareas.

Ver y agregar a la lista de símbolos:

a. En el menú Herramientas, hacer clic en Opciones. b. En el cuadro de diálogo Opciones, en la carpeta Entorno, hacer clic en

Lista de tareas. Visual Studio .NET agrega automáticamente los errores producidos en la

generación a la Lista de tareas. La tarea inferior de la siguiente imagen de pantalla se añadió automáticamente cuando se generó la página. Para acceder a esta sección del código, hacer clic en el elemento de la lista de tareas y Visual Studio .NET abrirá la página referida en la línea que contiene el error.

Lista de tareas

Page 88: Microsoft ASP.net - Curso Completo - Espa Ol

19 Uso de Microsoft Visual Studio .NET

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

El Cuadro de herramientas permite arrastrar y soltar los controles que formarán nuestra aplicación.

Las herramientas disponibles se agrupan por categorías en los siguientes menús:

Datos Esta categoría contiene objetos que permiten a la aplicación conectarse y acceder a datos de una base de datos Microsoft SQL Server™ y otras bases de datos.

Web Forms Esta categoría contiene un conjunto de controles de servidor que pueden agregarse a páginas Web.

Componentes Esta categoría contiene componentes que soportan la infraestructura de nuestra aplicación.

HTML Esta categoría contiene un conjunto de controles HTML que pueden agregarse a la página Web. Estos controles pueden ejecutarse tanto en el lado servidor como en el lado cliente.

Explorador de servidores

Cuadro de herramientas

Page 89: Microsoft ASP.net - Curso Completo - Espa Ol

Uso de Microsoft Visual Studio .NET 20

Page 90: Microsoft ASP.net - Curso Completo - Espa Ol

21 Uso de Microsoft Visual Studio .NET

Demostración: Uso del IDE de Visual Studio .NET

Demostración: Uso de Visual Studio .NET IDE

Abrir Visual Studio .NET

Crear una nueva aplicación Web ASP.NET

Cambiar el nombre de la aplicación Web

Agregar tareas a la Lista de tareas

Utilizar la ayuda dinámica

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

En esta demostración, aprenderemos a utilizar el IDE de Visual Studio .NET para crear un proyecto de aplicación Web ASP.NET, agregar tareas a la Lista de tareas, utilizar la ayuda dinámica y utilizar el Explorador de servidores.

Ejecutar esta demostración

1. Abrir Visual Studio .NET. 2. Mostrar las características de la Página de inicio, como Novedades,

Búsqueda en línea y Mi perfil. 3. Utilizando Visual Studio .NET, crear una nueva solución en blanco

denominada MyFirstSolution: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Solución en

blanco. b. En el cuadro de diálogo Nuevo proyecto, escribir MyFirstSolution en

el cuadro de texto Nombre y hacer clic en Aceptar. La solución MyFirstSolution contendrá varios proyectos. La solución sirve como contenedor para agrupar estos proyectos relacionados.

4. Crear un nuevo proyecto de Aplicación Web ASP.NET denominado MyFirstWebApplication en la solución MyFirstSolution: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto. b. En el cuadro de diálogo Nuevo proyecto:

En la lista Tipos de proyecto, hacer clic en Proyectos Visual Basic. En la lista de Plantillas, hacer clic en Aplicación Web ASP.NET, establecer la Ubicación en http://localhost/

Crear una solución Visual Studio .NET

Crear un proyecto de aplicación Web ASP.NET como parte de la solución

Visual Basic .NET

Page 91: Microsoft ASP.net - Curso Completo - Espa Ol

Uso de Microsoft Visual Studio .NET 22

MyFirstWebApplicationVB, hacer clic en Agregar a solución, y clic en Aceptar. En la lista Tipos de proyecto, hacer clic en Proyectos Visual C#. En la lista de Plantillas, hacer clic en Aplicación Web ASP.NET, establecer la Ubicación en http://localhost/MyFirstWebApplicationCS, hacer clic en Agregar a solución, y clic en Aceptar.

5. Utilizando el Explorador de soluciones, mostrar los archivos generados al crear la aplicación Web.

6. Utilizando el Explorador de Windows, mostrar la ubicación de los archivos en el sistema de archivos. Los archivos de solución se encuentran en la carpeta \Mis documentos\Visual Studio Projects\MyFirstSolution. Los archivos del proyecto Visual Basic .NET se encuentran en la carpeta \Inetpub\wwwroot\MyFirstWebApplicationVB y los archivos del proyecto C# se encuentran en la carpeta \Inetpub\wwwroot\MyFirstWebApplicationCS.

7. En el Explorador de soluciones de Visual Studio .NET, seleccionar WebForm1.aspx y mostrar las propiedades listadas en la ventana Propiedades.

8. Utilizando el Cuadro de herramientas, agregar un control Label y un control Button al formulario Web Form. Observar que la ventana Propiedades muestra ahora las propiedades del control Button.

9. En el menú Ayuda, hacer clic en Ayuda dinámica. La ventana de ayuda dinámica se abre con temas relacionados con el control Button.

10. Hacer clic en el control Label. La ventana de ayuda dinámica muestra temas relacionados con el control Label.

11. Hacer clic en el tema Members (System.Web.UI.WebControls) de Label. El tema se muestra en la ventana principal de Visual Studio .NET. Mostrar las propiedades Text y Visible.

12. En el Explorador de servidores, expandir Servidores, expandir nombre_equipo, expandir Servidores SQL Server, y expandir nombre_equipo. Se mostrará la lista de bases de datos instaladas en el equipo local que ejecutan SQL Server.

13. Por ejemplo, abrir la tabla dentists de la base de datos dentists. 14. Si la Lista de tareas no está visible, en el menú Ver, hacer clic en Mostrar

tareas y clic en Todos para mostrar la ventana Lista de tareas. 15. Insertar las siguientes tareas:

• Agregar un nuevo formulario Web Form de ASP.NET

• Agregar un nuevo proyecto a la solución 16. En el menú Archivo, hacer clic en Guardar todo.

C#

Examinar la ubicación de los nuevos archivos

Visualizar las propiedades del formulario Web Form

Ayuda dinámica

Explorador de servidores

Lista de tareas

Page 92: Microsoft ASP.net - Curso Completo - Espa Ol

23 Uso de Microsoft Visual Studio .NET

Page 93: Microsoft ASP.net - Curso Completo - Espa Ol

Uso de Microsoft Visual Studio .NET 24

Práctica: uso del IDE de Visual Studio .NET

Práctica: Uso del IDE de Visual Studio .NET

Los estudiantes

Realizarán 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 aplicación Web. _____________________________________________________________

_____________________________________________________________

Agregar un control Button al formulario Web Form predeterminado. _____________________________________________________________

_____________________________________________________________

Agregar una tarea al proyecto. _____________________________________________________________

_____________________________________________________________

Page 94: Microsoft ASP.net - Curso Completo - Espa Ol

25 Uso de Microsoft Visual Studio .NET

Visualizar las propiedades del proyecto de aplicación Web. ____________________________________________________________

____________________________________________________________

Determinar qué bases de datos SQL Server están instaladas en nuestro equipo. ____________________________________________________________

____________________________________________________________

Page 95: Microsoft ASP.net - Curso Completo - Espa Ol

Uso de Microsoft Visual Studio .NET 26

Lección: Crear un proyecto de aplicación Web ASP.NET

Lección: Crear un proyecto de aplicación Web ASP.NET

El proceso de desarrollo

Archivos de la aplicación Web

Estructura de los archivos de la aplicación Web

Demostración: Crear un proyecto de aplicación Web

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

En esta lección, estudiaremos cómo crear, generar y visualizar una aplicación Web con ASP.NET.

Tras esta lección, seremos capaces de:

Explicar cómo se desarrollan las páginas de las aplicaciones Web ASP.NET.

Identificar la función de los archivos utilizados por las soluciones Visual Studio .NET.

Explicar el proceso de generación de una aplicación Web ASP.NET. Crear, generar y visualizar una aplicación Web ASP.NET.

Introducción

Objetivos de la lección

Page 96: Microsoft ASP.net - Curso Completo - Espa Ol

27 Uso de Microsoft Visual Studio .NET

El proceso de desarrollo

El proceso de desarrollo

Crear una especificaciónde diseño

Crear una especificaciónde diseño

GenerarGenerar

Probar ydepurar

Probar ydepurar

Crear la interfaz y escribir código

Crear la interfaz y escribir código

Crear un nuevo proyecto

Crear un nuevo proyecto

Visual Studio .NETImplementarImplementar

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

Visual Studio .NET contiene todo lo necesario para generar una aplicación Web ASP.NET de principio a fin.

Crear una aplicación Web ASP.NET con Visual Studio .NET implica los siguientes pasos básicos:

1. Crear una especificación de diseño La especificación de diseño es la guía que utilizaremos cuando creemos una aplicación Web. Debemos tomarnos tiempo antes de escribir código para diseñar la aplicación que crearemos. Aunque Visual Studio .NET proporciona herramientas que nos ayudan a desarrollar rápidamente una solución, tener una idea clara de las necesidades del usuario y del conjunto inicial de características nos ayudará a ser más eficaces en nuestro trabajo de desarrollo. Empezar con una especificación de diseño también nos ayudará a ahorrar tiempo minimizando el potencial de reescritura de código debido a una pobre o inexistente especificación de diseño.

2. Crear un nuevo proyecto Cuando seleccionamos una nueva plantilla de proyecto, Visual Studio .NET crea automáticamente los archivos y el código predeterminado necesarios para soportar el proyecto. Como parte de esta creación inicial del proyecto, deberíamos transferir las principales tareas de codificación desde nuestra especificación de diseño a la Lista de tareas de Visual Studio .NET. Esta transferencia permite hacer un seguimiento de nuestro desarrollo contra la especificación.

3. Crear la interfaz

Introducción

Page 97: Microsoft ASP.net - Curso Completo - Espa Ol

Uso de Microsoft Visual Studio .NET 28

Para crear la interfaz de nuestra aplicación Web, en primer lugar necesitaremos ubicar controles y objetos en las páginas Web utilizando la ventana Editor/Navegador en modo Diseño. A medida que agregamos objetos a un formulario, podemos establecer sus propiedades desde la tabla en la ventana Propiedades o como código en la ventana de Edición.

Para más información sobre agregar controles a un formulario Web Form ASP.NET, consultar el Módulo “Crear un formulario Web Form con Microsoft ASP.NET”.

4. Escribir código Tras establecer las propiedades iniciales del formulario Web Form ASP.NET y sus objetos, podremos escribir los procedimientos de eventos que se ejecutarán al realizar diferentes acciones sobre un control u objeto. Es posible que también necesitemos escribir código para agregar lógica de negocio y para acceder a datos.

Para más información sobre escribir código en formularios Web Forms con ASP.NET, ver el Módulo “Agregar código a un formulario Web Form con Microsoft ASP.NET”.

5. Generar Cuando generamos un proyecto, compilamos todo el código de las páginas Web y demás archivos de clases en una librería de enlace dinámico (dynamic-link library, DLL) denominada ensamblado. Visual Studio .NET tiene dos opciones de generación: debug y release. Cuando desarrollamos un proyecto por primera vez, generamos versiones de depuración. Cuando estamos preparados para liberar el proyecto, crearemos una versión 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 versión de depuración de la aplicación para asegurarnos de que funciona según lo previsto. Visual Studio .NET ofrece numerosas herramientas de depuración que podemos utilizar para encontrar y solucionar errores de nuestra aplicación.

7. Implementar Cuando un proyecto está totalmente depurado y se ha generado una versión release, podemos implantar los archivos generados en un servidor Web en producción.

Para más información sobre implementar una aplicación Web ASP.NET, consultar el Módulo “Configuración, optimización y distribución de aplicaciones Web ASP.NET”.

Nota

Nota

Nota

Page 98: Microsoft ASP.net - Curso Completo - Espa Ol

29 Uso de Microsoft Visual Studio .NET

Archivos en aplicaciones Web

Archivos en aplicaciones Web

Archivos de solución (.sln, .suo)

Archivos de proyecto (.vbproj, .csproj)

Archivos de aplicación Web

Formularios Web Forms ASP.NET(.aspx)

Servicios Web ASP.NET (.asmx)

Clases, páginas de código subyacente (.vb o .cs)

Clases de aplicaciones globales (.asax)

Archivo Web.config

Ensamblado del proyecto (.dll)

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

Cuando creamos un nuevo proyecto o trabajamos con proyectos existentes, Visual Studio .NET crea un determinado conjunto de archivos que soportan nuestro desarrollo.

Al crear un nuevo proyecto, también se crea una solución, aunque la solución únicamente tenga un proyecto. Se crea una carpeta para cada solución en la carpeta \Mis documentos\Visual Studio Projects que contiene los archivos .sln y .suo.

Archivos de solución (.sln) La extensión de archivo NombreSolución.sln se utiliza para archivos de solución que enlazan uno o más proyectos, y almacena información 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 extensión de archivo NombreSolución.suo se utiliza para archivos que acompañan los registros de solución y las personalizaciones que agreguemos a nuestra solución. Este archivo guarda nuestra configuración, como puntos de interrupción y elementos de tareas, para que sean recuperados cada vez que abramos la solución.

Cada proyecto es una única aplicación Web almacenada en su propia carpeta. Dentro de la carpeta de proyecto se encuentra el archivo de configuración del proyecto y los archivos reales que constituyen el proyecto. El archivo de configuración del proyecto es un documento XML que contiene referencias a todos los elementos del proyecto, como formularios y clases, además de referencias de proyecto y opciones de compilación.

Introducción

Archivos de solución

Archivos de proyecto

Page 99: Microsoft ASP.net - Curso Completo - Espa Ol

Uso de Microsoft Visual Studio .NET 30

Los archivos de proyecto Visual Basic .NET utilizan una extensión .vbproj, mientras que C# utiliza .csproj. Estas extensiones permiten diferenciar entre archivos escritos en otros lenguajes compatibles con .NET y facilitan la inclusión de múltiples proyectos basados en diferentes lenguajes en la misma solución.

Los proyectos de aplicaciones Web se crean en una nueva carpeta \Inetpub\wwwroot. Además, en IIS, se crea un directorio virtual que apunta a la carpeta del proyecto.

Visual Studio .NET soporta varios tipos de archivos de aplicaciones y extensiones:

Formularios Web Forms ASP.NET (.aspx) Los formularios Web Forms ASP.NET se utilizan cuando es necesario generar sitios Web dinámicos a los que los usuarios accederán directamente. Los formularios Web Forms ASP.NET pueden estar soportados por una página de código subyacente diseñada por la extensión WebForm.aspx.vb o WebForm.aspx.cs.

Servicios Web ASP.NET (.asmx) Los servicios Web se utilizan cuando deseamos crear sitios Web dinámicos a los que únicamente accederán otros programas. Los servicios Web ASP.NET pueden estar soportados por una página de código subyacente designada por la extensión WebService.asmx.vb o WebService.asmx.vb.

Clases y páginas de código subyacente (.vb o .cs) Las versiones anteriores de Visual Basic utilizaban diferentes extensiones de archivo para distinguir entre clases (.cls), formularios (.frm), módulos (.bas), y controles de usuario (.ctl). Visual Basic .NET permite mezclar múltiples tipos en un único archivo .vb. Las páginas de código subyacente utilizan dos extensiones: el tipo de página (.aspx o .asmx) y la extensión de Visual Basic (.vb) o la extensión de C# (.cs). Por ejemplo, el nombre de archivo completo para la página de código subyacente de un formulario Web Form ASP.NET predeterminado es WebForm1.aspx.vb para un proyecto Visual Basic .NET y para un proyecto C# es WebForm1.aspx.cs.

Estudiaremos más sobre páginas de código subyacente en el Módulo “Agregar código 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 información para el descubrimiento programático de un servicio Web XML.

Clases de aplicación global (global.asax) El archivo Global.asax, también conocido como el archivo de la aplicación ASP.NET, es un archivo opcional que contiene código para responder a eventos a nivel de aplicación provocados por ASP.NET o por HttpModules. En tiempo de ejecución, se parsea Global.asax y se compila en una clase .NET Framework generada dinámicamente y derivada de la clase base HttpApplication.

Archivos de aplicaciones Web

Nota

Page 100: Microsoft ASP.net - Curso Completo - Espa Ol

31 Uso de Microsoft Visual Studio .NET

Archivos de recursos (.resx)

Un recurso es cualquier dato no ejecutable implantado lógicamente con una aplicación. Un recurso puede mostrarse en una aplicación como un mensaje de error o como parte de la IU. Los recursos pueden contener datos de diversos tipos, incluyendo cadenas, imágenes y objetos persistentes. Almacenar los datos en un archivo de recursos permite modificarlos sin necesidad de recompilar toda la aplicación.

Styles.css Styles.css es el archivo de hojas de estilo predeterminado para la aplicación Web.

Archivo Web.config Este archivo Web.config contiene opciones de configuración que el CLR lee, como políticas de enlace de ensamblados, objetos remoting, etc., y otras configuraciones que la aplicación puede leer. Los archivos Web.config también contienen las clases de aplicación global soportadas por un proyecto.

Los archivos que no estén basados en un lenguaje de programación tendrán sus propias extensiones. Por ejemplo, un archivo Crystal Reports utiliza la extensión .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 páginas de código subyacente (.aspx.vb y .aspx.cs) de un proyecto están 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 información general del ensamblado, como la versión y los atributos del mismo.

Para más información sobre archivos que soportan aplicaciones Web ASP.NET, consultar la documentación de Visual Studio .NET.

Otros archivos

Ensamblado de proyecto

Nota

Page 101: Microsoft ASP.net - Curso Completo - Espa Ol

Uso de Microsoft Visual Studio .NET 32

Estructura de los archivos de una aplicación Web

Estructura de los archivos de una aplicación Web

wwwrootwwwroot

BinBin

InetpubInetpub

ProjectAProjectA

Mis DocumentosMis Documentos

Archivos de desarrolloArchivos de desarrollo

Archivos de ensambladoArchivos de ensamblado

WebForm1.aspxWebForm1.aspx.vb(página de código subyacente)

Visual Studioprojects

Visual Studioprojects

SolutionSolution

Solution.sln ProjectA.vbproj

ProjectA.dllGenerar

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

Cuando creamos una aplicación Web ASP.NET, Visual Studio .NET crea dos carpetas para almacenar los archivos que soportan esa aplicación. Cuando compilamos un proyecto, se crea una tercera carpeta para almacenar el archivo .dll resultante.

Visual Studio .NET crea una carpeta para la solución, ProjectA, que contiene el archivo ProjectA.sln. Este archivo es un mapa de los diversos archivos que soportan el proyecto.

También podemos crear una solución en blanco y agregarle proyectos. Si creamos una solución en blanco, tendremos una solución con un nombre distinto al del proyecto.

Visual Studio .NET también crea una carpeta denominada ProjectA, en la carpeta Inetpub\wwwroot, que contiene los archivos que requiere la aplicación 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, además de referencias de proyecto y opciones de compilación.

Formularios ASP.NET Web Forms, WebForm1.aspx, o servicios Web XML, WebService.asmx.

Páginas de código subyacente, WebForm1.aspx.vb, WebService1.asmx.vb, WebForm1.aspx.cs o WebService1.asmx.cs.

Un archivo Web.config, que contiene las opciones de configuración de la aplicación Web.

Introducción

Mis documentos

Inetpub

Page 102: Microsoft ASP.net - Curso Completo - Espa Ol

33 Uso de Microsoft Visual Studio .NET

Un archivo Global.asax que gestiona los eventos que son invocados

mientras la aplicación Web se está ejecutando.

Cuando generamos un proyecto de aplicación 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 páginas de código subyacente que constituyen una aplicación Web.

El Ensamblado

Page 103: Microsoft ASP.net - Curso Completo - Espa Ol

Uso de Microsoft Visual Studio .NET 34

Demostración: creación de un proyecto de aplicación Web aplicación Web

Poblar el formulario Web Form ASP.NET

Agregar un nuevo formulario Web FormASP.NET

Agregar un nuevo proyecto

Escribir código para el botón

Generar y depurar la solución

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

En esta demostración, aprenderemos a agregar formularios Web Forms a un proyecto de aplicación Web, agregar un nuevo proyecto a una solución y generar y ejecutar un proyecto de aplicación Web.

Ejecutar esta demostración

1. Abrir el archivo de solución MyFirstSolution. 2. Abrir el archivo WebForm1.aspx en vista de Diseño. 3. Existen ya dos controles, un control Button y un control Label, incluidos en

la demostración 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 página de código

subyacente del formulario Web Form, y agregar el siguiente comentario al procedimiento del evento: 'TODO: Write Hello World //TODO: Write Hello World Se agrega automáticamente una nueva tarea a la Lista de tareas debido al símbolo TODO.

6. En el menú Proyecto, hacer clic en Agregar Web Forms. 7. En el cuadro de diálogo Agregar nuevo elemento, cambiar el nombre

predeterminado por login.aspx, y hacer clic en Abrir.

Poblar un formulario Web Form ASP.NET

Visual Basic .NET

C#

Agregar un nuevo formulario Web Form ASP.NET

Page 104: Microsoft ASP.net - Curso Completo - Espa Ol

35 Uso de Microsoft Visual Studio .NET

También podemos agregar un formulario Web Form ASP.NET a un proyecto haciendo clic con el botón derecho en el proyecto en el Explorador de soluciones, clic en Agregar y clic en Agregar Web Forms.

8. En la Lista de tareas, seleccionar la casilla de la tarea Agregar un nuevo formulario Web Form ASP.NET.

9. En el Explorador de soluciones, hacer clic con el botón derecho en la solución, clic en Agregar y clic en Nuevo proyecto.

10. En el cuadro de diálogo Agregar nuevo proyecto: Hacer clic en Visual Basic, clic en Servicio Web ASP.NET, establecer la ubicación en http://localhost/MyFirstWebServiceVB, y hacer clic en Aceptar. Hacer clic en Visual C#, clic en Servicio Web ASP.NET, establecer la ubicación en http://localhost/MyFirstWebServiceCS, y hacer clic en Aceptar. El nuevo proyecto también contiene un servicio Web XML.

11. En la Lista de tareas, seleccionar la tarea Agregar nuevo proyecto a la solución.

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 sitúa en la ubicación apropiada del código.

13. Escribir el siguiente código: lblMessage.Txt = "Hello World!" lblMessage.Txt = "Hello World!";

Éste es un error de sintaxis debido a que el código establece la propiedad Txt en lugar de la propiedad Text. Este error mostrará qué ocurre cuando falle la generación.

14. Eliminar TODO del comentario TODO: Write Hello World. La tarea TODO desaparece automáticamente de la Lista de tareas.

15. Verificar que MyFirstWebApplicationVB o MyFirstWebApplicationCS es el proyecto de inicio. En el Explorador de soluciones, MyFirstWebApplicationVB o MyFirstWebApplicationCS deberían aparecer en negrita.

Para establecer MyFirstWebApplicationVB o MyFirstWebApplicationCS como proyecto de inicio, hacer clic con el botón 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 solución para generar la solución.

Nota

Agregar un nuevo proyecto

Visual Basic .NET

C#

Escribir código para un control button

Visual Basic .NET

C#

Nota

Generar y ejecutar la solución

Nota

Page 105: Microsoft ASP.net - Curso Completo - Espa Ol

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 condición de error: Generar: 1 correctos, 1 incorrectos, 0 omitidos Y se añade 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 ubicación correcta del código.

19. Corregir el error de sintaxis. El código correcto debería ser como el siguiente: lblMessage.Text = "Hello World!" lblMessage.Text = "Hello World!"; En Visual Basic .NET, cuando retiramos el cursor de la línea de código corregida, el error se elimina de la Lista de tareas.

20. En el menú Generar, hacer clic en Volver a generar solución para volver a generar la solución. Verificar que en la ventana Resultados figura el siguiente mensaje: Volver a generar todo: 2 correctos, 0 incorrectos, 0 omitidos

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

Podemos generar y examinar un formulario Web Form en un mismo paso, haciendo clic con el botón derecho en la página del Explorador de soluciones y clic en Generar y examinar.

22. En el navegador, hacer clic en el botón del formulario Web Form, y comprobar que aparece el mensaje Hello World.

Visual Basic .NET

C#

Ver el resultado

Nota

Page 106: Microsoft ASP.net - Curso Completo - Espa Ol

Índice

Descripción 1

Lección: Crear formularios Web Forms 2

Lección: Uso de controles de servidor 12

Crear formularios Web Forms con Microsoft ASP.NET

Page 107: Microsoft ASP.net - Curso Completo - Espa Ol
Page 108: Microsoft ASP.net - Curso Completo - Espa Ol

Crear formularios Web Forms con Microsoft ASP.NET 1

Descripción

Crear formularios Web Forms

Uso de controles de servidor

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

En este módulo, estudiaremos cómo crear y poblar formularios Web Forms. Los formularios Web Forms son páginas Web programables que sirven como interfaz de usuario (IU) para un proyecto de aplicación Web utilizando ASP.NET. Un formulario Web Form presenta información al usuario visualizable en cualquier tipo de navegador, e implementa lógica de aplicación utilizando código ejecutable en el servidor.

En este módulo, aprenderemos a:

Agregar un formulario Web Form a un proyecto de aplicación Web ASP.NET.

Utilizar el Cuadro de herramientas de Microsoft Visual Studio® .NET para agregar controles de servidor a un formulario Web Form.

Introducción

Objetivos

Page 109: Microsoft ASP.net - Curso Completo - Espa Ol

2 Crear formularios Web Forms con Microsoft ASP.NET

Lección: crear formularios Web Forms

¿Qué es un formulario Web Form?

Crear un formulario Web Formcon Visual Studio .NET

Demostración: convertir una página HTML en un formulario Web Form

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

En esta lección, estudiaremos cómo crear un formulario Web Form. También aprenderemos cómo identificar las principales características de los formularios Web Forms.

En esta lección, aprenderemos a:

Identificar y explicar el código HTML (Hypertext Markup Language) que compone un formulario Web Form.

Crear un formulario Web Form utilizando Visual Studio .NET.

Introducción

Objetivos de la lección

Page 110: Microsoft ASP.net - Curso Completo - Espa Ol

Crear formularios Web Forms con Microsoft ASP.NET 3

¿Qué es un formulario Web Form?

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

<html><body ms_positioning="GridLayout">

<form id="Form1" method="post" runat="server"></form>

</body></html>

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

<html><body ms_positioning="GridLayout">

<form id="Form1" method="post" runat="server"></form>

</body></html>

Extensión .aspxAtributos de página

Directiva @ PageAtributos de cuerpoAtributos de formulario

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

Los formularios Web Forms están formados por una combinación de HTML, código 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 envía al navegador, mientras que el código de soporte y los controles que la componen permanecen en el servidor Web. Esta división entre el interfaz en el cliente y el código en el servidor es una importante diferencia entre los formularios Web Forms y las páginas Web tradicionales. Mientras una página Web tradicional requiere que todo el código se envíe 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 páginas se mantiene en el servidor. Esta división entre IU y código aumenta el número de navegadores soportados e incrementa la seguridad y funcionalidad de la página Web.

Los formularios Web Forms se denominan habitualmente páginas ASP.NET o páginas ASPX. Los formularios Web Forms tienen una extensión .aspx y funcionan como contenedores para el texto y los controles que deseamos mostrar en el navegador.

Las páginas ASP.NET (.aspx) y Active Server Pages (ASP) (.asp) pueden coexistir en el mismo servidor. La extensión del archivo determina si la página la procesa ASP o ASP.NET.

Los formularios Web Forms están 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 página de código subyacente, contiene el código de soporte.

Introducción

Extensión .aspx

Page 111: Microsoft ASP.net - Curso Completo - Espa Ol

4 Crear formularios Web Forms con Microsoft ASP.NET

Las funciones de un formulario Web Form están definidas por tres niveles de atributos. Los atributos de página definen las funciones globales, los atributos de cuerpo definen cómo se mostrará una página y los atributos de formulario definen cómo se procesarán los grupos de controles.

La etiqueta <@Page> define atributos específicos de la página que utiliza el parseador de páginas ASP.NET y el compilador. Únicamente podemos incluir una etiqueta <@ Page> por archivo .aspx. Los siguientes ejemplos son etiquetas <@ Page> típicas para Microsoft Visual Basic® .NET y para Microsoft Visual C#™ .NET:

<%@ Page Language="vb" Codebehind="WebForm1.aspx.vb" SmartNavigation="true" %> <%@ Page Language="c#" Codebehind="WebForm1.aspx.cs" SmartNavigation="true" %> Los atributos de una etiqueta <@ Page> incluyen:

Language El atributo Language define el lenguaje en el que está escrito el script de la página Web. Algunos de los valores de este atributo son: vb, c# y JScript.

Página Codebehind El atributo de página Codebehind identifica la página de código subyacente que tiene la lógica que soporta el formulario Web Form. Cuando Visual Studio .NET crea un formulario Web Form, como WebForm1.aspx, también crea una página de código subyacente, WebForm1.aspx.vb o WebForm1.aspx.cs.

Para más información sobre las páginas de código subyacente, consultar el Módulo “Agregar código 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 posición de desplazamiento y se mantiene la "última página" en el historial. Smartnavigation únicamente está disponible para los usuarios con Microsoft Internet Explorer 5 o superior.

Atributos de la página

Visual Basic .NET

C#

Nota

Page 112: Microsoft ASP.net - Curso Completo - Espa Ol

Crear formularios Web Forms con Microsoft ASP.NET 5

Los atributos de la etiqueta <Body> definen el aspecto de los objetos que se muestran en el navegador del cliente. La siguiente es una etiqueta <Body> típica:

<body ms_positioning="GridLayout"> Los atributos de una etiqueta <Body> incluyen:

PageLayout El atributo pageLayout (etiquetado como ms_positioning) determina cómo se posicionan los controles y el texto en la página. Existen dos opciones para pageLayout:

• FlowLayout En FlowLayout, el texto, las imágenes y los controles fluyen por la pantalla, dependiendo del ancho de la ventana del navegador.

• GridLayout En GridLayout, los campos de texto, las imágenes y los controles de una página están fijados por coordinadas absolutas. GridLayout es el valor de pageLayout predeterminado para Visual Studio .NET. El siguiente código de ejemplo muestra cómo implementar GridLayout y situar un cuadro de texto: <body ms_positioning="GridLayout"> <form id="Form1" method="post" runat="server"> <asp:textbox id="txtField1" style="Z-INDEX: 101; LEFT: 65px; POSITION: absolute; TOP: 98px" runat="server" Height="26px" Width="194px"> </asp:textbox> </form> </body>

La etiqueta <Form> define cómo se procesarán los grupos de controles. La etiqueta <Form> es diferente del término Web Form utilizado para definir la página Web completa. Los atributos de la etiqueta <Form> definen cómo se procesarán los controles. Aunque podemos tener muchos formularios HTML en una página, únicamente podemos tener un formulario del lado del servidor en una página .aspx.

El siguiente ejemplo es de una etiqueta <Form> típica:

<form id="Form1" method="post" runat="server"> ... </form>

Atributos del cuerpo

Atributos del formulario

Page 113: Microsoft ASP.net - Curso Completo - Espa Ol

6 Crear formularios Web Forms con Microsoft ASP.NET

Los atributos de una etiqueta <Form> incluyen:

Method El atributo Method identifica el método 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 petición HTTP (Hypertext Transfer Protocol).

• Get Los datos se pasan en una cadena de consulta.

Runat Una de las principales características de un formulario Web Form es que los controles se ejecutan en el servidor. El atributo runat="server" hace que el formulario publique información de control de retorno a la página ASP.NET en el servidor donde se ejecuta el código de soporte. Si el atributo runat no está establecido en "server", el formulario funciona como un formulario HTML normal.

El siguiente código procede del formulario Web Form predeterminado de Visual Studio .NET al crear un nuevo proyecto de aplicación Web ASP.NET con Visual Basic .NET:

<%@Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>WebForm1</title> <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.1"> <meta name="CODE_LANGUAGE" content="Visual Basic 7.1"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </head> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> 'HTML y controles aquí </form> </body> </html>

Ejemplo con Visual Basic .NET

Page 114: Microsoft ASP.net - Curso Completo - Espa Ol

Crear formularios Web Forms con Microsoft ASP.NET 7

El siguiente código procede del formulario Web Form predeterminado de Visual Studio .NET al crear un nuevo proyecto de aplicación Web ASP.NET con Visual C#:

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebApplication1.WebForm1" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>WebForm1</title> <meta name="GENERATOR" Content="Microsoft Visual Studio 7.1"> <meta name="CODE_LANGUAGE" Content="C#"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </head> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> 'HTML y controles aquí </form> </body> </html>

Ejemplo de C#

Page 115: Microsoft ASP.net - Curso Completo - Espa Ol

8 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 páginas HTML existentes en formularios Web Forms

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

Dependiendo del punto en que nos encontremos en el proceso de desarrollo, existen varios modos de crear un formulario Web Form.

Cuando creamos un nuevo proyecto en Visual Studio .NET, se incluye automáticamente en el proyecto un formulario Web Form predeterminado denominado WebForm1.aspx.

Crear un nuevo proyecto de aplicación Web ASP.NET y un formulario Web Form predeterminado

1. En Visual Studio .NET, en la Página de inicio, hacer clic en Nuevo proyecto.

2. En el cuadro de diálogo Nuevo proyecto, hacer clic en Aplicación Web ASP.NET, escribir el nombre del proyecto en el campo Ubicación y hacer clic en Aceptar.

Visual Studio .NET crea una nueva aplicación Web y un formulario Web Form predeterminado denominado WebForm1.aspx.

Si estamos expandiendo un proyecto existente, podemos utilizar el Explorador de soluciones para agregar rápidamente formularios Web Forms adicionales.

Agregar formularios Web Forms adicionales a un proyecto de aplicación Web

1. En la ventana del Explorador de soluciones, hacer clic con el botón derecho en el nombre del proyecto, seleccionar Agregar, y hacer clic en Agregar formulario Web Form. Se abrirá el cuadro de diálogo Agregar nuevo elemento - NombreProyecto.

2. En el cuadro de diálogo 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.

Introducción

Aplicaciones Web nuevas

Crear formularios Web Forms adicionales

Page 116: Microsoft ASP.net - Curso Completo - Espa Ol

Crear formularios Web Forms con Microsoft ASP.NET 9

Si estamos revisando un sitio Web existente, podemos importar páginas HTML a Visual Studio .NET y actualizar esas páginas a formularios Web Forms.

Actualizar páginas HTML existentes

1. En el Explorador de soluciones, hacer clic con el botón derecho en el nombre del proyecto, seleccionar Agregar y hacer clic en Agregar elemento existente.

2. En el cuadro de diálogo Agregar elemento existente, navegar hasta la ubicación 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 extensión del archivo.

4. Cuando se nos pregunte si deseamos crear un nuevo archivo de clase, hacer clic en Sí.

Actualizar páginas HTML

Page 117: Microsoft ASP.net - Curso Completo - Espa Ol

10 Crear formularios Web Forms con Microsoft ASP.NET

Demostración: convertir una página HTML en un formulario Web Form

Cambiar la extensión .htm por la extensión .aspx

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

Un modo rápido de crear páginas Web ASP.NET es convertir las páginas HTML existentes.

Ejecutar esta demostración

1. Iniciar Visual Studio .NET. 2. Crear un nuevo Proyecto de aplicación Web ASP.NET y establecer la

ubicación 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 diálogo Agregar elemento

existente, hacer clic en Todos los archivos (*.*). 5. Seleccionar la página HTMLPage.htm y hacer clic en Abrir. Este

archivo se puede encontrar dentro del fichero demos03.zip. 6. Abrir la página HTMLPage.htm y cambiar a la vista HTML. 7. Agregar una cuarta opción al cuadro de lista que contenga Lead

Program Manager para mostrar que la ayuda de contexto IntelliSense® está funcionando en el archivo HTML.

El código debería ser parecido el siguiente: <option>Lead Program Manager</option>

8. Guardar los cambios de la página. 9. En el Explorador de soluciones, hacer clic con el botón derecho en

HTMLPage.htm y hacer clic en Cambiar nombre. Cambiar la extensión .htm de la página 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 página HTMLPage.aspx, observamos que se ha añadido una directiva @Page a la página.

Page 118: Microsoft ASP.net - Curso Completo - Espa Ol

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 página de código subyacente que se ha creado.

12. Hacer clic en Guardar para guardar el proyecto. 13. Hacer clic con el botón derecho sobre HTMLPage.aspx en el Explorador

de soluciones, clic en Generar y examinar para generar el proyecto y visualizar la página en el navegador de Visual Studio .NET.

Debemos generar el proyecto puesto que Visual Studio .NET necesita compilar la nueva página de código subyacente.

14. Escribir un nombre en el cuadro de texto Nombre, hacer clic en una profesión en la lista Profession y hacer clic en Guardar.

Cuando se muestre la página de nuevo, la información en los controles se habrá perdido. Es el comportamiento predeterminado de los formularios HTML.

15. Hacer clic con el botón derecho en la página 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 código fuente HTML en el navegador.

Page 119: Microsoft ASP.net - Curso Completo - Espa Ol

12 Crear formularios Web Forms con Microsoft ASP.NET

Lección: uso de controles de servidor

¿Qué es un control de servidor?Tipos de controles de servidorGuardar View StateDemostración: convertir controles HTML en controles de servidorControles de servidor HTML Controles de servidor Web Práctica: identificar el código HTML generado por los controles de servidor Web Seleccionar el control adecuadoDemostración: agregar controles de servidor a un formulario Web

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

En esta lección, estudiaremos cómo 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 lógica de soporte se ejecuta en el servidor y no en el navegador del usuario.

En esta lección, aprenderemos a:

Describir las características de los controles de servidor. Describir los tipos de controles de servidor disponibles. Explicar cómo 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 situación.

Introducción

Objetivos de la lección

Page 120: Microsoft ASP.net - Curso Completo - Espa Ol

Crear formularios Web Forms con Microsoft ASP.NET 13

¿Qué es un control de servidor?

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

<asp:Button id="Button1" runat="server" Text="Submit"/><asp:Button id="Button1" runat="server" Text="Submit"/>

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

Los controles de servidor ASP.NET son componentes que se ejecutan en el servidor y encapsulan la IU y demás funcionalidades relacionadas. Los controles de servidor se utilizan en páginas ASP.NET y en las clases de código subyacente. Los controles de servidor incluyen botones, cuadros de texto y listas desplegables.

El siguiente ejemplo es el de un control de servidor Button:

<asp:Button id="Button1" runat="server" Text="Submit" /> Los controles de servidor tienen un atributo runat="server", el mismo atributo que los formularios Web Forms. Esto significa que la lógica 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 acción en el servidor.

Otra característica de los controles de servidor es que el estado de la vista, las opciones de configuración y la entrada de datos de usuario en el control se guardan automáticamente cuando la página viaja entre el cliente y el servidor. Los controles HTML tradicionales no tienen estado y vuelven a su configuración predeterminada cuando la página retorna del servidor al cliente.

La funcionalidad de un control es lo que se produce cuando el usuario hace clic en un botón o en un cuadro de lista. A estos procesos se denominan procedimientos de eventos. Como programadores del formulario Web Form, debemos determinar los procedimientos de eventos asociados a cada control de servidor.

Para más información sobre la funcionalidad del control de servidor, consultar el Módulo “Agregar código a un formulario Web Form con Microsoft ASP.NET”.

Introducción

Runat=“server”

Funcionalidad incluida

Nota

Page 121: Microsoft ASP.net - Curso Completo - Espa Ol

14 Crear formularios Web Forms con Microsoft ASP.NET

En ASP.NET, los controles de servidor se basan en un modelo de objetos común, 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 código HTML siguiente del botón de un control de servidor Web muestra algunos de los atributos típicos de un control de servidor:

<asp:Button id="Button1" runat="server" BackColor="red" Width="238px" Height="25px" Text="Web control"></asp:Button> Cuando un navegador interpreta una página, los controles de servidor Web determinan el tipo de navegador que solicita la página, y envía el código HTML adecuado.

Por ejemplo, si el navegador soporta scripting de cliente, como Internet Explorer versión 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 código del lado del servidor y requieren más viajes de ida y vuelta al servidor para obtener el mismo comportamiento.

El siguiente ejemplo es el código HTML de ASP.NET en un formulario Web Form que deberíamos 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 página, el CLR crea el siguiente código 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 código HTML personalizado en función de las características disponibles en el navegador del cliente, podemos escribir código para las últimas versiones de navegadores sin tener que preocuparnos de que los usuarios que no estén actualizados puedan ser bloqueados por errores del navegador.

Modelo de objetos común

Crear código HTML específico del navegador

Page 122: Microsoft ASP.net - Curso Completo - Espa Ol

Crear formularios Web Forms con Microsoft ASP.NET 15

Tipos de controles de servidor

Controles de servidor HTML

Controles de servidor Web

Controles intrínsecos

Controles de validación

Controles ricos

Controles List-bound

Controles Web de Internet Explorer

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

Existen numerosos tipos de controles de servidor disponibles en ASP.NET. Algunos controles de servidor se parecen mucho a los controles HTML tradicionales, mientras que otros son nuevos en ASP.NET. Esta amplia variedad de controles nos permite personalizar nuestro formulario Web Form para que se adapte a la aplicación que estamos creando.

Por defecto, el servidor no tiene disponibles los elementos HTML de una página de un formulario Web Form; los elementos HTML son tratados como texto opaco que pasa a través del navegador. Sin embargo, al agregar el atributo runat="server" se convierten los elementos HTML en controles de servidor HTML, exponiéndolos por tanto como elementos que podemos programar con código del lado del servidor.

Los controles de servidor Web no sólo incluyen controles de tipo formulario, como botones y cuadros de texto, sino también controles con funcionalidad especial, como el control calendario. Los controles de servidor Web son más 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 intrínsecos Los controles intrínsecos 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 validación Los controles de validación incorporan lógica que permite verificar la entrada de datos de un usuario. Para probar la entrada de un usuario, adjuntamos un control de validación al control de entrada y especificamos las condiciones de entrada de datos de usuario correctas.

Para más información sobre los controles de validación, consultar el

Introducción

Controles de servidor HTML

Controles de servidor Web

Nota

Page 123: Microsoft ASP.net - Curso Completo - Espa Ol

16 Crear formularios Web Forms con Microsoft ASP.NET

Módulo “Validar la entrada de datos de usuario”. Controles ricos estándar

Los controles estándar son controles complejos que incluyen múltiples funciones. Ejemplos de controles estándar 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 página ASP.NET. Estos controles nos permiten mostrar, reformatear, clasificar y editar datos.

Para más información sobre los controles enlazados a listas y el acceso a datos, consultar el Módulo “Acceso a datos relacionales utilizando Microsoft Visual Studio .NET,” y el Módulo “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 aplicación Web con ASP.NET. Estos controles pueden ser interpretados en todos los navegadores utilizados habitualmente, y al mismo tiempo aprovechan las potentes características 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/overview/overview.asp.

Este ejemplo muestra el código HTML de tres controles de tipo botón: un botón HTML, un botón de control de servidor HTML y un botón de control de servidor Web. Todos los controles botón parecen idénticos en el navegador del usuario. El botón HTML únicamente puede invocar eventos del lado del cliente, mientras que el botón de control de servidor HTML y el botón de control de servidor Web producen eventos del lado del servidor.

El siguiente es el código de un control de botón HTML: <INPUT type="button" value="HTML Button">

Si agregamos el atributo runat="server" el control de botón HTML anterior se convierte en un control de servidor HTML que se ejecutará en el servidor. Además del atributo runat="server", también debemos agregar un atributo id para que el control funcione como un control de servidor. El botón de control de servidor HTML se muestra en el siguiente ejemplo: <INPUT type="button" value="HTML Server Control" id="button1" runat="server">

El botón de control de servidor Web utiliza código HTML de ASP.NET: <asp:Button id="Button1" runat="server" Text="Web control"/>

Nota

Ejemplo de controles equivalentes

Page 124: Microsoft ASP.net - Curso Completo - Espa Ol

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

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

<%@ Page EnableViewState="False" %>

<asp:ListBox id="ListName" EnableViewState="true" runat="server">

</asp:ListBox>

<%@ Page EnableViewState="False" %>

<asp:ListBox id="ListName" EnableViewState="true" runat="server">

</asp:ListBox>

<input type="hidden" name="__VIEWSTATE" value="dDwtMTA4MzE0MjEwNTs7Pg==" />

<input type="hidden" name="__VIEWSTATE" value="dDwtMTA4MzE0MjEwNTs7Pg==" />

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

Uno de los retos de los sitios Web es resolver el almacenamiento del estado de los controles (configuración o entrada de datos del usuario) en una página Web mientras el código HTML viaja entre el cliente y el servidor. Como con cualquier tecnología basada en HTTP, los formularios Web Forms no tienen estado, lo que significa que el servidor no conserva ninguna información 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 añade al formulario del lado del servidor indicado por la etiqueta <Form … runat="server">, y únicamente registra el estado de los controles en esta sección. Mientras la página viaja desde el cliente al servidor, el estado del control de servidor Web se almacena con la página y puede actualizarse en cualquier extremo de la transacción (en el cliente o el servidor).

Como el estado de la página Web se guarda dentro del formulario del servidor, la página 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 diseño de la página y no necesita generar la infraestructura necesaria para realizar el seguimiento del estado de la misma.

Introducción

Page 125: Microsoft ASP.net - Curso Completo - Espa Ol

18 Crear formularios Web Forms con Microsoft ASP.NET

El control _VIEWSTATE es un control oculto que contiene el valor de una cadena de pares nombre-valor que lista el nombre de cada control y el último valor de ese control.

Con cada petición, el control _VIEWSTATE se actualiza y se envía 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 configuración de la página permanece coherente de una solicitud a la siguiente.

El siguiente ejemplo incluye el código HTML generado por un formulario Web Form y enviado al cliente:

<form name="Form1" method="post" action="WebForm1.aspx" id="Form1"> <input type="hidden" name="__VIEWSTATE" value="dDw3NzE0MTExODQ7Oz4=" /> 'HTML aquí </form> De forma predeterminada, un formulario Web Form guarda el estado de la vista de los controles en el formulario Web Form. Para formularios Web Forms con múltiples controles, el tamaño del campo valor de las propiedades _VIEWSTATE puede ralentizar el rendimiento. Para maximizar el rendimiento de la página, podemos deshabilitar el atributo ViewState a nivel de página y habilitar ViewState únicamente para determinados controles.

Para deshabilitar el almacenamiento del estado de la vista a nivel de página Web, estableceremos el atributo EnableViewState de la directiva @Page, como se muestra en el siguiente código:

<%@ Page EnableViewState="False" %> Para habilitar el almacenamiento del estado de la vista de un control específico, estableceremos el atributo EnableViewState del control, como se muestra en el siguiente código:

<asp:ListBox id="ListName" EnableViewState="true" runat="server"></asp:ListBox>

Para más información sobre guardar el estado, consultar el Módulo “Gestionar el estado”.

Control oculto

Deshabilitar y habilitar ViewState

Nota

Page 126: Microsoft ASP.net - Curso Completo - Espa Ol

Crear formularios Web Forms con Microsoft ASP.NET 19

Demostración: 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 conversión de controles HTML en controles de servidor.

Ejecutar esta demostración

1. Visualizar la página HTMLPage.aspx que convertimos de una página HTML en la demostración anterior, en la vista HTML, y agregar un atributo runat="server" a los controles de cuadro de texto, selección y el de envío.

2. Hacer clic en Guardar para guardar el proyecto. 3. Visualizar la página HTMLPage.aspx en el navegador haciendo clic con

el botón derecho en la página 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 código.

4. Visualizar el código fuente de la página para mostrar los cambios realizados. Se ha agregado un atributo name a cada control de servidor.

5. Cerrar la vista del código fuente HTML en el navegador. 6. En el navegador, introducir información en los controles, y hacer clic en

Guardar. Los controles todavía pierden sus valores. 7. Editar la página y agregar un atributo runat="server" al formulario. 8. Guardar los cambios y visualizar la página de nuevo en el navegador. No

es necesario volver a generar el proyecto ya que no se ha agregado ningún código.

9. Visualizar el código fuente de la página 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 código fuente HTML en el navegador. 11. Introducir información en los controles y hacer clic en Guardar. Ahora,

los controles guardan sus valores.

Page 127: Microsoft ASP.net - Curso Completo - Espa Ol

20 Crear formularios Web Forms con Microsoft ASP.NET

12. Editar la página y agregar un control de servidor Web Label al formulario Web Form, debajo del botón Guardar:

<asp:label id="lblMessage" runat="server">Label</asp:label>

13. Guardar los cambios y visualizar la página en el navegador. 14. Visualizar el código fuente de la página. El control de servidor Web

Label genera un elemento <span>. 15. Cerrar la vista del código fuente HTML en el navegador. 16. Visualizar la página http://localhost/Demos03/HTMLPage.aspx en

Internet Explorer y modificar el tamaño del navegador para que muestre verticalmente menos que la página completa. La barra de desplazamiento vertical debería estar visible.

17. Desplazarse hacia abajo y hacer clic en Guardar. Seremos redirigidos a la parte superior de la página debido al postback.

18. Cerrar el navegador. 19. Editar la página en la vista HTML y agregar SmartNavigation= "true"

a la directiva @ Page. El código HTML debería ser parecido al siguiente: <%@ Page SmartNavigation="true" Language="vb" CodeBehind="HTMLPage.aspx.vb" AutoEventWireup="false" Inherits="Mod04.HTMLPage" %> <%@ Page SmartNavigation="true" Language="c#" CodeBehind="HTMLPage.aspx.cs" AutoEventWireup="false" Inherits="Mod04.HTMLPage" %>

20. Guardar los cambios y visualizar la página en otro navegador cuyo tamaño se haya modificado.

21. Desplazarse hacia abajo y hacer clic en Guardar. Esta vez, no somos redireccionados a la parte superior de la página durante el postback, la página mantiene su posición actual.

22. Visualizar el código fuente de la página en el navegador. En Internet Explorer 4.0 y posterior, el atributo SmartNavigation crea IFrames para actualizar únicamente la parte modificada de la página.

23. Cerrar la vista del código fuente HTML en el navegador.

Agregar una etiqueta al formulario Web Form

Uso de SmartNavigation

Visual Basic .NET

C#

Page 128: Microsoft ASP.net - Curso Completo - Espa Ol

Crear formularios Web Forms con Microsoft ASP.NET 21

Controles de servidor HTML

Basados en elementos HTML

Existen en el espacio de nombres System.Web.UI.HtmlControls

<input type="text" id="txtName"runat="server" />

<input type="text" id="txtName"runat="server" />

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

Los controles HTML de un formulario Web Form no están disponibles en el servidor. Si convertimos los controles HTML en controles de servidor HTML, podemos exponerlos como elementos a nuestro código del lado del servidor. Esta conversión 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 rápidamente páginas existentes a formularios Web Forms. Además, podemos optimizar el rendimiento de una página ajustando qué controles deben funcionar localmente en el navegador y qué controles se procesan en el servidor.

El siguiente código 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" />

Introducción

Ejemplo

Page 129: Microsoft ASP.net - Curso Completo - Espa Ol

22 Crear formularios Web Forms con Microsoft ASP.NET

Controles de servidor Web

Controles de servidor Web

Existen en el espacio de nombresSystem.Web.UI.WebControls

Sintaxis del control

HTML generado por el control

<asp:TextBox id="TextBox1"runat="server">Text_to_Display</asp:TextBox>

<asp:TextBox id="TextBox1"runat="server">Text_to_Display</asp:TextBox>

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

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

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

Los controles de servidor Web son controles de servidor creados específicamente para ASP.NET. A diferencia de los controles de servidor HTML, los controles de servidor Web no funcionarán si falta el atributo runat="server".

Los controles de servidor Web se basan en un modelo de objetos común; por ello, todos los controles comparten varios atributos, incluyendo la etiqueta <asp:TipoControl...>, y un atributo id. Los controles de servidor Web existen en el espacio de nombres System.Web.UI.WebControls y pueden utilizarse en cualquier formulario Web Form.

Los controles de servidor Web intrínsecos corresponden a elementos HTML simples. La siguiente tabla muestra algunos de los controles de servidor Web intrínsecos utilizados más habitualmente.

Control de servidor Web

Control HTML equivalente

Función del control de servidor Web

<asp:button> <input type=submit> Crea un botón que envía una

petición al servidor.

<asp:checkbox> <input type=checkbox> Crea una casilla de verificación que puede seleccionarse haciendo clic.

<asp:hyperlink> <a href="…"> </a> Crea un hiperenlace a una etiqueta anchor HTML.

<asp:image> <img src="…"> Crea un área que se utiliza para mostrar una imagen.

<asp:imagebutton> <input type=image> Crea un botón que incorpora la visualización de una imagen en lugar de texto.

<asp linkButton> Ninguno Crea un botón que tiene el aspecto de un hiperenlace.

Introducción

Controles de servidor Web intrínsecos

Page 130: Microsoft ASP.net - Curso Completo - Espa Ol

Crear formularios Web Forms con Microsoft ASP.NET 23

(continuación) Control de servidor Web

Control HTML equivalente

Función del control de servidor Web

<asp:label> <span> </span> Crea texto que los usuarios no

pueden modificar.

<asp:listbox> <select size="5"> </select>

Crea una lista de opciones. Permite múltiples selecciones.

<asp:panel> <div> </div> Crea una división sin bordes en el formulario que se utiliza como contenedor para otros controles.

<asp:radiobutton> <input type=radiobutton> Crea un único control de botón de opción.

<asp:table> <table> </table> Crea una tabla.

<asp:textbox> <input type=text> Crea un control de cuadro de texto.

Los controles de validación son controles ocultos que validan la entrada de datos del usuario comparándolos con patrones predeterminados. La siguiente tabla muestra algunos de los controles de validación que se utilizan más habitualmente.

Control Función CompareValidator Requiere que la entrada concuerde con una segunda

entrada o campo existente.

CustomValidator Requiere que la entrada concuerde con una condición como que sean números primos o impares.

RangeValidator Requiere que la entrada concuerde con un intervalo especificado.

RegularExpressionValidator Requiere que la entrada concuerde con un formato especificado como un número de teléfono de un determinado país o una contraseña que tenga números y letras.

RequiredFieldValidator Requiere que el usuario introduzca algún valor antes de que el control sea procesado.

ValidationSummary Recopila todos los mensajes de error de los controles de validación para una visualización centralizada.

Para más información sobre los controles de validación, consultar el Módulo “Validar la entrada de datos del usuario”.

Los controles estándares proporcionan una rica funcionalidad a nuestro formulario Web Form insertando funciones complejas. La siguiente tabla muestra los controles ricos disponibles actualmente.

Control Función AdRotator Muestra una secuencia (predefinida o aleatoria) de

imágenes.

Calendar Muestra un calendario gráfico en el que los usuarios pueden seleccionar fechas.

Controles de validación

Nota

Controles ricos estándares

Page 131: Microsoft ASP.net - Curso Completo - Espa Ol

24 Crear formularios Web Forms con Microsoft ASP.NET

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

Control Función CheckBoxList Muestra datos como una columna de casillas de verificación.

Repeater Muestra información desde un conjunto de datos utilizando el conjunto de elementos y controles HTML que especifiquemos. El control Repeater repite el elemento una vez por cada registro del DataSet.

DataList Similar al control Repeater, pero con más opciones de formato y presentación, incluyendo la posibilidad de mostrar información en una tabla. El control DataList también nos permite especificar el comportamiento de edición.

DataGrid Muestra información, normalmente enlazada a datos en forma tabular, con columnas. También proporciona mecanismos para permitir editar y clasificar.

DropDownList Muestra datos en un menú desplegable.

Listbox Muestra datos en una ventana.

RadioButtonList Muestra datos en una columna de botones de opción.

Para más información sobre los controles enlazados a listas y el acceso a datos, consultar el Módulo “Acceso a datos con Microsoft ADO.NET”.

Controles enlazados a listas

Nota

Page 132: Microsoft ASP.net - Curso Completo - Espa Ol

Crear formularios Web Forms con Microsoft ASP.NET 25

Práctica: identificar el código HTML generado por los controles de servidor Web

Los estudiantes:

Agregarán controles de servidor Web a un formulario Web e identificarán el código HTML que se envía al cliente

Tiempo: 5 minutos

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

En esta práctica, agregaremos controles de servidor Web a un formulario Web Form y visualizaremos el código fuente en un navegador para determinar qué código HTML se ha enviado al cliente.

Cumplimentar la tabla inferior siguiendo los pasos

1. Iniciar Visual Studio .NET. 2. Crear un proyecto de aplicación Web y establecer la ubicación en

http://localhost/Practices03. 3. Abrir la página WebForm1.aspx. 4. Agregar los controles TextBox, Button, Label, ListBox, Image,

Hyperlink y Calendar al formulario Web Form. 5. Hacer clic con el botón derecho en WebForm1.aspx en el Explorador de

soluciones y clic en Generar y examinar. 6. Hacer clic con el botón derecho en el navegador y clic en Ver fuente

para ver el código HTML enviado al cliente. 7. Cumplimentar la siguiente tabla con las etiquetas HTML del control.

Control de servidor Web HTML enviado al cliente asp:textbox

asp:button

asp:label

Page 133: Microsoft ASP.net - Curso Completo - Espa Ol

26 Crear formularios Web Forms con Microsoft ASP.NET

asp:listbox

asp:image

asp:hyperlink

asp:calendar

Seleccionar el control adecuado

Se necesitan funcionalidades específicas como un calendario o rotación de publicidad

El control interactuará con scripts cliente y servidor

Se está escribiendo una página que puede ser utilizada por varios navegadores

Se está trabajando con páginas HTML existentes y se desea agregar funcionalidades de página ASP.NET Web

Se prefiere un modelo de programación Visual Basic

Se prefiere un modelo de objetos como HTML

Utilizar controles de Utilizar controles de servidor Web si:servidor Web si:

Utilizar controles de servidor Utilizar controles de servidor HTML si:HTML si:

El ancho de banda no es un problemaEl ancho de banda es limitado

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

Cuando creamos páginas ASP.NET, tenemos la opción de utilizar controles de servidor HTML o controles de servidor Web. Podemos mezclar estos tipos de controles en la misma página para actualizar rápidamente una página HTML.

Como ejemplo de mezcla de tipos de controles, nuestra página ASP.NET podría incluir un elemento HTML que listase la hora local, un botón 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 más rico que los controles de servidor HTML.

Los controles de servidor HTML son elementos HTML modificados que se ejecutan en el servidor en lugar de en el navegador cliente.

Utilizar controles de servidor HTML si:

Se prefiere un modelo de objetos como HTML. Los controles de servidor HTML tienen prácticamente el mismo código HTML que los controles HTML básicos. Los controles de servidor HTML también tienen funcionalidad del lado del servidor como los controles de servidor Web.

Introducción

Controles de servidor HTML

Page 134: Microsoft ASP.net - Curso Completo - Espa Ol

Crear formularios Web Forms con Microsoft ASP.NET 27

Se está trabajando con páginas HTML existentes y se desea agregar rápidamente 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 sustitución o problemas de formato de página.

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 están visibles en el cliente. Al mismo tiempo, podemos tener código del lado del servidor, ya que también es un control de servidor.

El ancho de banda es limitado y se necesita realizar una gran cantidad de procesamiento en el cliente para reducir el uso del ancho de banda.

Los controles de servidor Web de ASP.NET no sólo son equivalentes a los controles HTML, sino que también incluyen varios controles nuevos que no existen en HTML.

Utilizar controles de servidor Web si:

Se prefiere un modelo de programación como Visual Basic. Se podrá utilizar programación orientada a objetos, identificar controles por su atributo ID y separar fácilmente la lógica de página de la lógica del interfaz de usuario. Con los controles de servidor Web, también pueden crearse aplicaciones con controles anidados y capturar eventos a nivel de contenedor.

Se está creando una página Web que puede ser visualizada en diversos navegadores. Como la lógica de los controles de servidor Web puede crear código HTML adaptado a las características disponibles en el navegador del cliente, podemos escribir para los navegadores más 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 página Web.

Se necesitan funcionalidades específicas, como calendario o anuncios, o rotación de publicidad, disponibles únicamente como controles de servidor Web.

El ancho de banda no está limitado y los ciclos de petición-respuesta de los controles de servidor Web no causan problemas de ancho de banda.

Controles de servidor Web

Page 135: Microsoft ASP.net - Curso Completo - Espa Ol

28 Crear formularios Web Forms con Microsoft ASP.NET

Demostración: 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 demostración, veremos cómo agregar controles de servidor Web a un formulario Web Form.

Ejecutar esta demostración

1. Abrir la página WebForm1.aspx del proyecto de aplicación Web Mod04. 2. Agregar un control de servidor TextBox, Button y Label a la página

WebForm1.aspx. 3. Utilizando la ventana Propiedades, establecer las propiedades ID y Text

de los controles a los valores en la siguiente tabla: Control ID Text TextBox txtName Name

Button cmdSubmit Submit

Label lblMessage Message

4. Visualizar la página 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 cómo se han implementado las propiedades ID y Text en HTML para los distintos controles.

5. Generar y examinar WebForm1.aspx.

Agregar sencillos controles de servidor Web

Page 136: Microsoft ASP.net - Curso Completo - Espa Ol

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 página. Observar que el posicionamiento de los controles se realiza utilizando DHTML.

8. Cerrar la vista de la fuente de la página. 1. Hacer clic con el botón derecho sobre el formulario en la vista Diseño 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 página de nuevo en el navegador. 4. Visualizar el código fuente de la página. Ahora, el posicionamiento de los controles se realiza utilizando tablas HTML.

5. Cerrar la vista de fuente de la página. 6. Hacer clic con el botón derecho sobre el formulario en vista Diseño y

hacer clic en Propiedades. 7. En el cuadro de diálogo Páginas de propiedades, volver a establecer

Target Schema como Internet Explorer 5.0. 1. En el cuadro de diálogo Páginas de propiedades, seleccionar

FlowLayout (en lugar de GridLayout) en el campo Page Layout, y hacer clic en Aceptar.

La cuadrícula desaparece. 2. Agregar un control Button al formulario Web, y visualizar la página en

vista HTML. El nuevo botón no tiene un atributo style.

1. En la vista Diseño, agregar un control de servidor Web Calendar en el formulario Web Form, y visualizar la página en vista HTML.

Localizar el código HTML para el control Calendar: <asp:Calendar id="Calendar1" runat="server"></asp:calendar>

2. Guardar los cambios y visualizar la página en el navegador y, a continuación, visualizar el código fuente de la página.

Observar el HTML generado por el control Calendar. 3. Cerrar la vista de fuente de la página. 4. Editar la página WebForm1 y ver las propiedades del control Calendar

en la ventana Propiedades. 5. Hacer clic con el botón derecho en el control Calendar en el formulario

Web Form en la vista Diseño y seleccionar Formato automático para mostrar los diferentes estilos del cuadro de diálogo Formato automático de Calendar. Hacer clic en Colorful 1, y clic en Aceptar.

6. Guardar los cambios y visualizar la página de nuevo en el navegador para ver el nuevo aspecto del control Calendar.

Cambiar el navegador de destino

Cambiar la presentación de la página

Agregar un control Calendar

Page 137: Microsoft ASP.net - Curso Completo - Espa Ol

1

Práctica A: Crear un formulario Web Form con Microsoft ASP.NET

MedicalMedical.aspxMedicalMedical.aspx

BenefitsHome PageDefault.aspx

BenefitsHome PageDefault.aspx

Life InsuranceLife.aspxLife InsuranceLife.aspx

RetirementRetirement.aspxRetirementRetirement.aspx

DentalDental.aspxDentalDental.aspx

Dentists

DoctorsDoctors.aspx DoctorsDoctors.aspx

Doctors

Logon PageLogin.aspxLogon PageLogin.aspx

RegistrationRegister.aspxRegistrationRegister.aspx

CohoWinery

ProspectusProspectus.aspxProspectusProspectus.aspx

XML Web ServicedentalService1.asmx

XML Web ServicedentalService1.asmx

Page HeaderHeader.ascxPage HeaderHeader.ascx

ASPState

tempdb

Lab Web Application

User Controlnamedate.ascxUser Controlnamedate.ascx

Menu ComponentClass1.vb or Class1.cs

Menu ComponentClass1.vb or Class1.cs

XML Files

Web.config

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

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.

Este laboratorio se centra en los conceptos de este módulo y, por ello, podría no cumplir las recomendaciones de seguridad de Microsoft.

Para poder trabajar en este laboratorio, es necesario tener conocimientos sobre el entorno de desarrollo integrado (IDE) de Microsoft Visual Studio® .NET.

Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios del curso, crearemos un sitio Web que permita a los empleados seleccionar y establecer los beneficios que elijan.

En el Laboratorio 2, “Uso de Microsoft Visual Studio .NET”, creamos una solución Visual Studio .NET y un proyecto de aplicación Web para al aplicación Web Benefits.

En este laboratorio, crearemos la interfaz de usuario (IU) de las páginas de formularios Web Form default.aspx y life.aspx en la aplicación Web Benefits. El formulario Web Form default.aspx es la página de inicio del sitio Web Benefits. La página default.aspx muestra la lista de beneficios que ofrece la compañía. La página life.aspx permite al usuario introducir información relativa a su seguro de vida, como su nombre, fecha de nacimiento e importe de la cobertura.

Objetivos

Nota

Requisitos previos

Escenario

Tiempo estimado para realizar este laboratorio: 30 minutos

Page 138: Microsoft ASP.net - Curso Completo - Espa Ol

2

Ejercicio 0 Configuración del laboratorio

Para realizar este laboratorio, es necesario haber creado el proyecto de aplicación 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 solución LabApplication

Realizar este procedimiento únicamente si no se ha creado un archivo de solución LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solución en blanco denominada LabApplication: En el menú Archivo, seleccionar Nuevo, y hacer clic en Solución en

blanco. En el cuadro de diálogo Nuevo proyecto, escribir LabApplication en el

cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

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

1. Crear un nuevo proyecto de aplicación Web ASP.NET, denominado BenefitsVB o BenefitsCS, en la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto. b. En el cuadro de diálogo 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 Aplicación Web ASP.NET,

establecer la Ubicación 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 Solución, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solución, es importante el uso de mayúsculas 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 mayúsculas el nombre del proyecto Benefits.

Importante

Importante

Precaución

Page 139: Microsoft ASP.net - Curso Completo - Espa Ol

3

Actualizar el proyecto Benefits

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsVB o BenefitsCS, seleccionar Agregar, y hacer clic en Agregar elemento existente.

3. Buscar los archivos de proyecto Ir a la carpeta VB\Starter\BenefitsVB. Ir a la carpeta CS\Starter\BenefitsCS. Estas carpetas se pueden encontrar dentro del fichero labs03.zip.

4. En el cuadro Archivos de tipo del cuadro de diálogo Agregar elemento existente – Benefits, hacer clic en Todos los archivos (*.*).

5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir. 6. Hacer clic en Sí a la pregunta de sobrescribir o cargar de nuevo los archivos.

Crear la biblioteca de clases BenefitsList

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

Crear un proyecto de biblioteca de clases Crear un nuevo proyecto de biblioteca de clases Microsoft Visual Basic® .NET con el nombre BenefitsListVB, y añadirlo a la solución LabApplication: En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto. En el cuadro de diálogo 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 solución, y clic en Aceptar.

Crear un nuevo proyecto de biblioteca de clases Microsoft Visual C#™ .NET con el nombre BenefitsListCS, y añadirlo a la solución LabApplication: a. En el menú Archivo, hacer clic en Nuevo, y hacer clic en Proyecto. b. En el cuadro de diálogo 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 solución, y clic en Aceptar.

Verificar que se han escrito correctamente las mayúsculas del proyecto BenefitsList.

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Importante

Para un proyecto Visual Basic .NET

Para un proyecto Visual C#

Precaución

Page 140: Microsoft ASP.net - Curso Completo - Espa Ol

4

Actualizar el proyecto BenefitsList

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

3. Buscar los archivos de proyecto: Ir a la carpeta VB\Starter\BenefitsListVB. Ir a la carpeta CS\Starter\BenefitsListCS. Estas carpetas se pueden encontrar dentro del fichero labs03.zip.

4. En el cuadro Archivos de tipo del cuadro de diálogo 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 solución LabApplication, completar los siguientes pasos para agregar una referencia al componente BenefitsList que acabamos de crear: a. Hacer clic con el botón derecho en el proyecto BenefitsVB o

BenefitsCS en el Explorador de soluciones y hacer clic en Agregar referencia.

b. En el cuadro de diálogo Agregar referencia, en la pestaña Proyectos, hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.

c. En la lista Componentes seleccionados, seleccionar el componente BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar. El componente se agrega a la carpeta Referencias del Explorador de soluciones.

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Page 141: Microsoft ASP.net - Curso Completo - Espa Ol

5

Ejercicio 1 Crear el formulario Web Form Default.aspx

En este ejercicio, crearemos un nuevo formulario Web Form denominado default.aspx. A continuación, agregaremos un control de usuario, un control enlazado a lista, un control Button, y un control Label a la página default.aspx. Finalmente, estableceremos atributos del control enlazado a lista para mostrar una lista estática de información.

Colocar controles en un formulario Web Form

1. Crear un nuevo Web Form denominado default.aspx. Este formulario Web Form será la página de entrada principal de nuestra aplicación Web. Para crear el formulario Web Form: a. Hacer clic con el botón derecho en el proyecto BenefitsVB o

BenefitsCS, seleccionar Agregar y hacer clic en Agregar Web Form. b. En el cuadro de diálogo Agregar nuevo elemento, escribir default.aspx

en el campo Nombre y hacer clic en Abrir. 2. Desde el Explorador de soluciones, utilizar una operación de arrastrar y

soltar para ubicar el archivo header.ascx desde el Explorador de soluciones a la parte superior del formulario Web Form.

Estudiaremos con mayor profundidad los controles de usuario en el Módulo “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 debería tener un aspecto similar a la siguiente ilustración.

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

Control ID Text CheckBoxList chkListBenefits Ninguno

Button cmdSubmit Submit

Label lblSelections Selected items:

5. Visualizar la página en la vista Hypertext Markup Language (HTML) haciendo clic en la ficha HTML situada en la parte inferior derecha de la ventana del editor.

Nota

Page 142: Microsoft ASP.net - Curso Completo - Espa Ol

6

Visual Studio .NET ha añadido el HTML dinámico (DHTML) a los controles CheckBoxList, Button, y Label. El atributo style que contiene los parámetros Z-INDEX, LEFT, POSITION y TOP posiciona los controles en la página.

6. Hacer clic con el botón derecho en la página default.aspx del Explorador de soluciones y hacer clic en Ver en el explorador.

El proyecto debe generarse aunque no hayamos escrito código. Esto se debe a que cuando agregamos componentes de interfaz de usuario a la página, Visual Studio .NET genera código para soportar estos elementos.

La página debería tener un aspecto similar al de la ilustración, sin ningún contenido en el control CheckBoxList.

Agregar elementos al control CheckBoxList

1. Visualizar la página default.aspx en la vista Diseño. 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 botón … para abrir el cuadro de diálogo ListItem Collection Editor. 4. En el cuadro de diálogo ListItem Collection Editor, agregar los elementos

que se muestran en la siguiente tabla (con la propiedad Selected establecida en False).

Texto Valor First Item First Item

Second Item Second Item

Third Item Third Item

5. Hacer clic en Aceptar para cerrar el cuadro de diálogo ListItem Collection Editor.

6. Guardar los cambios a default.aspx y visualizar la página en el navegador. Ahora que hemos agregado elementos al control CheckBoxList, la lista de elementos sobrescribe el botón Submit.

7. Visualizar de nuevo la página default.aspx en la vista Diseño. 8. Hacer clic en el fondo de la página default.aspx, y en la ventana

Propiedades, establecer la propiedad pageLayout en FlowLayout (en lugar de GridLayout).

Nota

Page 143: Microsoft ASP.net - Curso Completo - Espa Ol

7

Aunque FlowLayout hace que el diseño de la página sea un poco más difícil, permite que los elementos de interfaz de usuario se muevan automáticamente cuando otros elementos de la página cambian de tamaño. Por ejemplo, cuando el control chkListBenefits tenía más elementos agregados a la lista, se sobrescribió el botón Submit. Utilizando FlowLayout, el botón se moverá automáticamente para dejar espacio para una lista más larga.

9. Mover los controles en la página, utilizando retornos de carro, para que la página tenga un aspecto similar al de la siguiente ilustración.

10. Visualizar de nuevo la página en el explorador. Ahora la lista de casillas de verificación no sobrescribe el botón Submit.

11. Cerrar la ventana del explorador.

Page 144: Microsoft ASP.net - Curso Completo - Espa Ol

8

Ejercicio 2 Crear el formulario Web Form Life.aspx

En este ejercicio, crearemos la interfaz de usuario de la página life.aspx. Esta página implementa el beneficio de seguro de vida de la compañía.

Agregar controles a la página life.aspx

1. Crear un nuevo formulario Web Form denominado life.aspx. Para crear el formulario Web Form: a. Hacer clic con el botón derecho en el proyecto BenefitsVB o

BenefitsCS, seleccionar Agregar y hacer clic en Agregar Web Form. b. En el cuadro de diálogo 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 botón derecho en el control Calendar en la vista Diseño y

seleccionar Formato automático para abrir el cuadro de diálogo Formato automático 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 página.

Page 145: Microsoft ASP.net - Curso Completo - Espa Ol

9

6. Establecer las propiedades ID y Text de cada control como se muestra en la siguiente tabla. Control ID Texto Cuadro de texto Name txtName ninguno

Cuadro de texto Birth date

txtBirth ninguno

Cuadro de texto Coverage

txtCoverage ninguno

Casilla de verificación Short-term disability

chkShortTerm Short-term disability

Casilla de verificación Long-term disability

chkLongTerm Long-term disability

Botón Save cmdSave Save

Label1 default Life Insurance Application

Label2 default Proof of good health appointment

Label3 default Name:

Label4 default Birth Date:

Label5 default Coverage:

Cambiar el tamaño de la fuente de Label1, en la ventana Propiedades de la etiqueta, expandir Fuente, seleccionar Tamaño, y elegir Grande.

7. Hacer clic con el botón derecho en la página 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 deberían permanecer en la página.

Nota

Page 146: Microsoft ASP.net - Curso Completo - Espa Ol

Índice

Descripción 1

Lección: uso de las páginas de código subyacente 2

Lección: agregar procedimientos de evento a controles de servidor Web 9

Lección: uso de eventos de página 22

Agregar código a un formulario Web Form con Microsoft ASP.NET

Page 147: Microsoft ASP.net - Curso Completo - Espa Ol
Page 148: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar código a un formulario Web Form con Microsoft ASP.NET 1

Descripción

Uso de las páginas de código subyacente

Agregar procedimientos de evento a controles de servidor Web

Uso de eventos de página

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

En este módulo, estudiaremos los distintos métodos que pueden utilizarse para agregar código a nuestra aplicación Web con Microsoft® ASP.NET. También estudiaremos los procedimientos de evento para los controles de servidor Web, cómo utilizarlos y el orden en que funcionan. Estudiaremos el uso de las páginas de código subyacente, que son el método preferido de Microsoft Visual Studio® .NET para agregar código a páginas Web. Finamente, estudiaremos cómo se utilizan los eventos de página, en particular al evento Page_Load.

En este módulo, aprenderemos a:

Utilizar páginas de código subyacente en una aplicación Web. Crear procedimientos de evento para controles de servidor Web. Utilizar eventos de página en una aplicación Web.

Introducción

Objetivos

Page 149: Microsoft ASP.net - Curso Completo - Espa Ol

2 Agregar código a un formulario Web Form con Microsoft ASP.NET

Lección: uso de las páginas de código subyacente

Cómo implementar código

Escribir código en línea

¿Qué son las páginas de código subyacente?

Entender cómo funcionan las páginas de código subyacente

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

En esta lección, estudiaremos cómo implementar código con Visual Studio .NET. También estudiaremos cómo se utilizan las páginas de código subyacente y en qué se diferencian del código en línea.

En esta lección, aprenderemos a:

Identificar tres formas de implementar código en un formulario Web Form ASP.NET.

Utilizar las páginas de código subyacente.

Introducción

Objetivos de la lección

Page 150: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar código a un formulario Web Form con Microsoft ASP.NET 3

Cómo implementar código

Tres métodos para agregar código:

Ubicar el código en el mismo archivo que el contenido (mezclado)

Ubicar el código en una sección distinta del archivo de contenido (código en línea )

Ubicar el código en un archivo distinto (páginas de código subyacente)

Las páginas de código subyacente son el método predeterminado de Visual Studio .NET

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

Podemos agregar código a nuestro formulario Web Form de los siguientes modos:

Código mezclado. El código se encuentra en el mismo archivo que el contenido Web, entremezclado con el contenido Hypertext Markup Language (HTML). Este método es el menos elegido, ya que es difícil leer y trabajar con un archivo de este tipo. Sin embargo, es un método utilizado con frecuencia en páginas Active Server Pages (ASP).

Código en línea. El código se encuentra en el mismo archivo en una sección SCRIPT distinta, al igual que el contenido HTML.

Código subyacente. El código se encuentra en un archivo distinto del contenido HTML. El archivo de código se denomina página de código subyacente. Cuando se utiliza Visual Studio .NET, el método predeterminado es ubicar todo el código en una página de código subyacente.

Implementar código

Page 151: Microsoft ASP.net - Curso Completo - Espa Ol

4 Agregar código a un formulario Web Form con Microsoft ASP.NET

Escribir código en línea

Código y contenido en el mismo archivo

Distintas secciones en el archivo para el código y HTML

<HTML><asp:Button id="btn" runat="server"/></HTML><SCRIPT Language="vb" runat="server">

Sub btn_Click(s As Object, e As EventArgs) Handles btn.Click ...End Sub

</SCRIPT>

<HTML><asp:Button id="btn" runat="server"/></HTML><SCRIPT Language="vb" runat="server">

Sub btn_Click(s As Object, e As EventArgs) Handles btn.Click ...End Sub

</SCRIPT>

<HTML><asp:Button id="btn" runat="server"/></HTML><SCRIPT Language="c#" runat="server">

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

. . . }

</SCRIPT>

<HTML><asp:Button id="btn" runat="server"/></HTML><SCRIPT Language="c#" runat="server">

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

. . . }

</SCRIPT>

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

Aunque el método predeterminado para implementar código en el lado del servidor en Visual Studio .NET es utilizar una página de código subyacente, podemos encontrar páginas que utilizan código en línea, concretamente páginas ASP.

Cuando se utiliza código en línea en una página Web, el HTML y el código se encuentran en secciones distintas de un único archivo .aspx. Esta separación se produce para ofrecer claridad en la lectura de la página; la funcionalidad, el código y HTML pueden coexistir en cualquier lugar de la página.

El siguiente código es un ejemplo de código en línea:

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

Introducción

Código en línea

Visual Basic .NET

C#

Page 152: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar código a un formulario Web Form con Microsoft ASP.NET 5

<HTML>

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

Page 153: Microsoft ASP.net - Curso Completo - Espa Ol

6 Agregar código a un formulario Web Form con Microsoft ASP.NET

¿Qué son las páginas de código subyacente?

Separación de código y contenido

Los desarrolladores y los diseñadores de la interfaz de usuario pueden trabajar independientemente

Form1.aspxForm1.aspx Form1.aspxForm1.aspx Form1.aspx.vbForm1.aspx.vbo Form1.aspx.cso Form1.aspx.cs

<tags><tags> ccóódigodigo

ccóódigodigo

Archivos distintosUn archivo

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

El método predeterminado para implementar código en el lado del servidor en Visual Studio .NET es utilizar páginas de código subyacente. Cuando utilizamos páginas de código subyacente, la lógica de programación se encuentra en un archivo distinto de los elementos visuales de la página. Separar la lógica del diseño permite a los desarrolladores trabajar en la página de código subyacente mientras los diseñadores de la interfaz de usuario (IU) trabajan en la página ASP.NET.

Las páginas de código subyacente contienen toda la lógica de programación para una sola página Web. Cada página de una aplicación Web tiene su propia página de código subyacente. De forma predeterminada, una página de código subyacente tiene el mismo nombre que la página Web a la que está asociada; sin embargo, la página de código subyacente también tiene una extensión .aspx.vb o .aspx.cs, dependiendo del lenguaje utilizado en la página de código subyacente. Por ejemplo la página Web Form1.aspx tendrá una página de código subyacente Microsoft Visual Basic® .NET denominada Form1.aspx.vb o una página de código subyacente C# denominada Form1.aspx.cs.

Una página de código subyacente únicamente puede contener código en un sólo lenguaje. No podemos mezclar Visual Basic .NET y C# en una misma página de código subyacente.

Introducción

Poner nombre a las páginas de código subyacente

Nota

Page 154: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar código a un formulario Web Form con Microsoft ASP.NET 7

Cómo funcionan las páginas de código subyacente

Crean archivos distintos para la interfaz de usuario y la lógica de la interfaz

Utilizan la directiva @ Page para enlazar los dos archivos

Pre-compilación o compilación JIT

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

Page1.aspx.cs

public class WebForm1{

private void cmd1_Click(){

…}

}

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

Para que las páginas de código subyacente funcionen, cada página .aspx debe estar asociada a una página de código subyacente, y esa página de código subyacente debe estar compilada antes de que la información se envíe de vuelta a un navegador cliente que la solicite.

Aunque cada página Web Form está formada por dos archivos distintos (la página .aspx y la página de código subyacente), ambos archivos forman una única unidad cuando se ejecuta la aplicación Web. La página de código subyacente puede ser precompilada por Visual Studio .NET cuando generamos el proyecto de aplicación Web, o puede ser compilada just-in-time (JIT) la primera vez que un usuario accede a la página.

La página .aspx debe estar asociada a la página de código subyacente. Visual Studio .NET agrega los tres atributos siguientes a la directiva @ Page de la página .aspx para conseguir esta asociación:

Codebehind. Es el atributo que Visual Studio .NET utiliza internamente para asociar los archivos.

Src. Este atributo es el nombre de la página de código subyacente, y se utiliza si la aplicación Web no está precompilada.

Inherits. Este atributo permite a la página .aspx heredar clases y objetos de la página de código subyacente.

El atributo Inherits es sensible a mayúsculas.

Introducción

Enlazar los dos archivos

Nota

Page 155: Microsoft ASP.net - Curso Completo - Espa Ol

8 Agregar código a un formulario Web Form con Microsoft ASP.NET

El siguiente código muestra un ejemplo de directiva @ Page para un archivo denominado Page1.aspx:

<%@ Page Language="vb" Inherits="Project.WebForm1" Codebehind="Page1.aspx.vb" Src="Page1.aspx.vb" %> <%@ Page Language="c#" Inherits="Project.WebForm1" Codebehind="Page1.aspx.cs" Src="Page1.aspx.cs" %> Cuando una página está compilada JIT, las páginas de código subyacente se compilan la primera vez que un cliente solicita la página .aspx. Tras la primera petición, las siguientes utilizan el archivo compilado existente. Por tanto, la primera petición de una página dura más, pero las siguientes peticiones son más rápidas.

Si se desea utilizar la compilación JIT para una página, debería utilizarse el atributo Src de la directiva @ Page.

La compilación JIT mantendrá el tamaño del proyecto pequeño y permitirá actualizaciones de código sin recompilar todo el sitio.

Cuando un usuario solicita la página .aspx, el archivo DLL procesa la petición entrante y responde creando el código HTML y el scripting adecuados y devolviéndolos al navegador solicitante.

Si omitimos el atributo Src de la directiva @ Page en un archivo .aspx, la página se precompila cuando generamos la aplicación en Visual Studio .NET. De modo predeterminado, Visual Studio .NET no agrega el atributo Src; por ello, todas las páginas de código 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 páginas de código subyacente también simplifica la implantación del sitio Web ya que no es necesario implantar las páginas de código subyacente junto con las páginas .aspx.

Para más información sobre la implementación de sitios Web, consultar el Módulo “Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET”.

Visual Basic .NET

C#

Compilación JIT

Nota

Ejecución

Precompilación

Nota

Page 156: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar código a un formulario Web Form con Microsoft ASP.NET 9

Lección: agregar procedimientos de evento a controles de servidor Web

¿Qué son los procedimientos de evento?Demostración: uso de eventosProcedimientos de evento en el lado del clienteProcedimientos de evento en el lado del servidorMultimedia: eventos en el lado del cliente y en el lado del servidorCrear procedimientos de eventoPráctica dirigida por el profesor: crear un procedimiento de eventoInteractuar con controles en procedimientos de evento

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

En esta lección, estudiaremos los procedimientos de evento y cómo 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 cuándo resulta apropiado utilizar cada uno.

En esta lección, 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.

Introducción

Objetivos de la lección

Page 157: Microsoft ASP.net - Curso Completo - Espa Ol

10 Agregar código a un formulario Web Form con Microsoft ASP.NET

¿Qué son los procedimientos de evento?

Acciones en respuesta a la interacción de un usuario con los controles de la página

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

Los formularios Web Forms dinámicos 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 interactúa con un formulario Web Form, se genera un evento. Diseñamos nuestra aplicación Web para realizar una determinada tarea cuando se genera el evento. Un procedimiento de evento es la acción que ocurre en respuesta al evento generado.

Muchos formularios Web Forms permiten al usuario introducir información y hacer clic en un botón Enviar. Se genera un evento cuando el usuario hace clic en el botón Enviar. Por ejemplo, un procedimiento de evento podría ser enviar la información del usuario a una base de datos Microsoft SQL Server™.

Introducción

Definición

Ejemplo de un procedimiento de evento

Page 158: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar código a un formulario Web Form con Microsoft ASP.NET 11

Demostración: uso de eventos

Abrir una página 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 ejecución de los eventos en el lado del cliente y en el lado del servidor

En el explorador, visualizar el código fuente de la página

En el editor, visualizar el código del procedimiento de evento

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

Esta demostración puede realizarse utilizando un proyecto Visual Basic .NET o Microsoft Visual C#™. En esta demostración, veremos cómo se ejecutan los procedimientos de evento en el lado del cliente y en el lado del servidor en un sitio Web.

Ejecutar la demostración

1. En Visual Studio .NET, abrir la página eventorderstart.aspx en el proyecto Demo04VB o Demo04CS que se pueden encontrar dentro del fichero demos04.zip.

2. Visualizar la página en el navegador. No es necesario generar antes el proyecto.

3. Hacer clic en los controles de la página. Cada control tiene un procedimiento de evento en el lado del cliente que envía una cadena cuando se ejecuta.

4. Hacer clic en Save. Esto envía el formulario y hará que se ejecuten todos los procedimientos de evento en el lado del servidor.

5. En el navegador, visualizar el código fuente de la página. Sólo está visible el código para los procedimientos de evento en el lado del cliente.

6. Cerrar la vista de código fuente de la página. 7. En Visual Studio .NET, abrir la página en la vista HTML. Hay código tanto

para procedimientos de evento en el lado del cliente como en el lado del servidor.

Introducción

Page 159: Microsoft ASP.net - Curso Completo - Espa Ol

12 Agregar código a un formulario Web Form con Microsoft ASP.NET

Procedimientos de evento en el lado del cliente

Internet Páginas.HTM

Normalmente, se utilizan únicamente con controles HTML

Interpretado por el navegador y se ejecuta en el cliente

No tiene acceso a los recursos del servidorUtiliza <SCRIPT language="lenguaje">

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

Existen dos tipos de procedimientos de evento: en el lado del cliente y en el lado del servidor. Ambos tienen ventajas e inconvenientes.

Los procedimientos de evento en el lado del cliente son eventos gestionados en el equipo que solicita el formulario Web Form (el cliente). Cuando se genera un evento, no se envía ninguna información al servidor. En lugar de ello, el navegador del cliente interpreta el código y también realiza la acción.

Los procedimientos de evento en el lado del cliente únicamente pueden utilizarse con controles HTML. Además, los procedimientos de evento en el lado del cliente nunca tienen acceso a los recursos del servidor. Por ejemplo, no podemos utilizar scripts en el lado del cliente para acceder a una base de datos SQL Server.

Los procedimientos de evento en el lado del cliente resultan útiles para eventos que deseamos que ocurran inmediatamente porque no requieren un viaje de ida y vuelta al servidor Web (envío de información al servidor Web y espera de una respuesta). Por ejemplo, es posible validar información en un cuadro de texto antes de enviarla al servidor. Podemos utilizar scripts en el lado del cliente para validar la información rápida y eficazmente antes de enviar la información 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 página Web, como muestra el siguiente código:

<SCRIPT language="javascript">

Introducción

Procedimientos de evento en el lado del cliente

Usos de los procedimientos de evento en el lado del cliente

Especificar procedimientos de evento en el lado del cliente

Page 160: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar código 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 código 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.Páginas

.ASPX

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

A diferencia de los procedimientos de evento en el lado del cliente, los procedimientos de evento en el lado del servidor requieren el envío de información 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 más potentes que los procedimientos de evento en el lado del cliente.

Los procedimientos de evento en el lado del servidor están formados por código 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 están 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 código:

<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 número limitado de tipos de eventos de control soportados. Con los procedimientos de evento en el lado del cliente, podemos incluir código para procesar eventos asociados a botones de ratón y eventos onChange. Mientras los procedimientos de evento en el lado del servidor soportan eventos click y una versión especial del evento onChange, no pueden soportar eventos que ocurren frecuentemente, como eventos asociados a botones del ratón.

Introducción

Procedimientos de evento en el lado del servidor

Visual Basic .NET

C#

Soporte de eventos

Page 161: Microsoft ASP.net - Curso Completo - Espa Ol

14 Agregar código 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******************************

En esta animación, veremos cómo los procedimientos de evento en el lado del cliente y en el lado del servidor se procesan. Para iniciar la animación abrir el fichero media041.swf.

1. El cliente solicita una página ASP.NET del servidor Web. 2. El servidor devuelve al cliente una página que contiene HTML y scripts. La

página incluye un control de cuadro de texto y un botón Submit. La página también contiene scripting en el lado del cliente que valida el contenido del cuadro de texto.

3. El usuario introduce información no válida 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 información al servidor, el proceso en el lado del cliente reduce el tráfico de red y el tiempo de respuesta.

5. El usuario corrige la información del cuadro de texto y hace clic en el botón Submit.

6. La información se valida en el lado del cliente y se envía al servidor, donde puede iniciarse el proceso en el lado del servidor.

7. El servidor repite la validación y almacena la información 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.

Introducción

Page 162: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar código 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

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

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

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

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

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

Protected WithEvents cmd1 As System.Web.UI.WebControls.ButtonPrivate Sub cmd1_Click(ByVal s As System.Object, _

ByVal e As System.EventArgs) Handles cmd1.Click

Protected WithEvents cmd1 As System.Web.UI.WebControls.ButtonPrivate Sub cmd1_Click(ByVal s As System.Object, _

ByVal e As System.EventArgs) Handles cmd1.Click

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

Crear un procedimiento de evento en el lado del servidor en Visual Studio .NET implica dos pasos. En el primer paso, creamos el control que genera el evento en el formulario Web Form. En el segundo, proporcionamos el código necesario en la página de código 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 también agrega la palabra clave Handles, que adjunta el procedimiento de evento al control. La palabra clave Handles permite crear múltiples procedimientos de evento a un único evento.

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

El siguiente código HTML muestra un formulario Web Form que tiene un único botón con un atributo id igual a cmd1; el evento click del botón se gestionará en el servidor:

<form id="form1" method="post" runat="server"> <asp:Button id="cmd1" runat="server"/> </form>

Introducción

Crear un procedimiento de evento en el lado del servidor

Nota

Page 163: Microsoft ASP.net - Curso Completo - Espa Ol

16 Agregar código a un formulario Web Form con Microsoft ASP.NET

El siguiente código Visual Basic .NET muestra la declaración de variables necesaria en la página de código subyacente.

Protected WithEvents cmd1 As _ System.Web.UI.WebControls.Button En el código 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 código Visual Basic .NET, que muestra el procedimiento de evento para el evento Click, la palabra clave Handles indica que el procedimiento de evento se ejecuta en respuesta al evento Click del control cmd1:

Private Sub cmd1_Click(ByVal s As System.Object, _ ByVal e As System.EventArgs) _ Handles cmd1.Click ... End Sub Todos los eventos pasan dos argumentos al procedimiento de evento: el remitente del evento y una instancia de la clase que guarda los datos del evento. Normalmente, este último es del tipo EventArgs, y a menudo no contiene ninguna información adicional; sin embargo, para algunos controles, es de un tipo que es específico para ese control.

Por ejemplo, para un control Web ImageButton, el segundo argumento es de tipo ImageClickEventArgs, que incluye información sobre las coordenadas donde el usuario ha hecho clic. El siguiente procedimiento de evento envía las coordenadas de la ubicación donde ocurre un clic en un control Label:

Sub img_OnClick(ByVal s As System.Object, _ ByVal e As System.Web.UI.ImageClickEventArgs) _ Handles ImageButton1.Click Label1.Text = e.X & ", " & e.Y End Sub La forma de crear un procedimiento de evento ASP.NET en C# es ligeramente distinta de la de Visual Basic .NET. C# no soporta la palabra clave Handles. En lugar de ello, en C#, agregamos el procedimiento de evento a la propiedad de evento del control.

Por ejemplo, el siguiente es el mismo formulario HTML del código anterior:

<FORM ID="Form1" runat="server"> <asp:Button id="cmd1" runat="server" /> </FORM>

Argumentos del evento

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

Page 164: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar código a un formulario Web Form con Microsoft ASP.NET 17

En la página de código subyacente, se crea una variable con el mismo nombre

que el control. En el método 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) { ... } }

Page 165: Microsoft ASP.net - Curso Completo - Espa Ol

18 Agregar código a un formulario Web Form con Microsoft ASP.NET

Práctica 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 más controles para agregar procedimientos de evento

Generar y examinar

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

Esta práctica dirigida por el instructor puede realizarse utilizando archivos de Visual Basic .NET o archivos de Visual C#.

En esta práctica, veremos cómo agregar un procedimiento de evento a un control Web utilizando Visual Studio .NET.

Ejecutar la práctica

1. En Visual Studio .NET, agregar un nuevo formulario Web Form denominado events.aspx al proyecto Mod05VB o Mod05CS, en la solución 2310Demos.

2. Abrir la página 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 Diseño, hacer doble clic en el control Button para abrir la página de código subyacente y crear un procedimiento de evento Click. En la página de código subyacente, ver la variable declarada y la plantilla de procedimiento creada por Visual Studio .NET.

5. Introducir el siguiente código en el procedimiento de evento Click: Label1.Text = "You clicked the button" Label1.Text = "You clicked the button";

6. Observar la palabra clave Handles en el procedimiento de evento Button1_Click. C# no soporta la palabra clave Handles, en lugar de ello C# enlaza un procedimiento a un evento en el procedimiento InitializeComponent. Para ver el enlace de Button1_Click, expandir la sección Web Form Designer generated code en la ventana de código. Encontrar el procedimiento InitializeComponent y observar el enlace del controlador de eventos.

Introducción

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 166: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar código a un formulario Web Form con Microsoft ASP.NET 19

7. En el Explorador de soluciones, hacer clic con el botón derecho en la página

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 código fuente de la página para mostrar que no

hay código en el lado del cliente. Sólo hay código en el lado del servidor. 10. Cerrar la vista de código fuente de la página. 11. En la vista Diseño, cambiar la propiedad ID del control Button por

cmdSubmit. 12. En la página de código subyacente, observar que la palabra clave Handles se

ha eliminado del procedimiento de evento Button1_Click. En la página de código subyacente, observar que el enlace de evento en InitializeComponent ha cambiado al nombre del nuevo botón.

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 código: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSubmit.Click La palabra clave Handles no está soportada en C#. En lugar de ello, el procedimiento está enlazado al evento en el procedimiento InitializeComponent. Visual Studio agrega el enlace correcto, como se muestra en el paso 12.

14. Generar y examinar la página. El procedimiento de evento Click se sigue activando con el nuevo nombre del control.

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 167: Microsoft ASP.net - Curso Completo - Espa Ol

20 Agregar código 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

Respuestas de salida a otros controles de servidor Web

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

strGreeting = "Hello " & txtName.TextstrGreeting = "Hello " & txtName.Text

strGreeting = "Hello " + txtName.Text;strGreeting = "Hello " + txtName.Text;

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

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

En muchas aplicaciones Web, necesitamos leer y escribir a controles de un formulario. Podemos hacerlo dentro de los procedimientos de evento en el lado del servidor.

En un procedimiento de evento en el lado del servidor, podemos leer información de un control de servidor. Por ejemplo, si tenemos el siguiente formulario con un control Textbox y un control Button:

<FORM id="Form1" runat="server"> <asp:TextBox id="txtName" runat="server" /> <asp:Button id="cmd1" runat="server" /> </FORM> Cuando el usuario hace clic en el botón, podemos leer el texto que el usuario ha escrito en el cuadro de texto. El siguiente código asigna la variable de cadena strGreeting a una concatenación del texto “Hello” y el texto del cuadro de texto txtName:

Dim strGreeting As String = "Hello " & txtName.Text string strGreeting = "Hello " + txtName.Text; Por ejemplo, si un usuario ha escrito "Shannon" en el cuadro de texto txtName, la variable strGreeting contendrá la cadena de texto "Hello Shannon".

Introducción

Leer las propiedades de un control de servidor

Visual Basic .NET

C#

Page 168: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar código a un formulario Web Form con Microsoft ASP.NET 21

Podemos enviar información 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 página ASP.NET, como sigue:

<asp:Label id="lblGreeting" runat="server">Greeting</asp:Label> El siguiente código en el lado del servidor asigna la propiedad Text del control de servidor Web lblGreeting a una cadena de texto:

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

En ASP, utilizamos la colección Request.Forms para leer las propiedades de controles en un formulario, y utilizamos Response.Write para enviar texto. Aunque estos métodos funcionan con ASP.NET, no son la mejor elección. En lugar de ello, podemos utilizar etiquetas de control de servidor y spans.

Envío de información de un control de servidor Web

Visual Basic .NET

C#

Sugerencia

Page 169: Microsoft ASP.net - Curso Completo - Espa Ol

22 Agregar código a un formulario Web Form con Microsoft ASP.NET

Lección: uso de los eventos de página

Ciclo de vida de un evento de página

Multimedia: el proceso PostBack

Demostración: gestionar eventos

Práctica: ordenar los eventos

Gestión de los eventos Page.IsPostback

Vínculo de dos controles

Demostración: vincular controles

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

En esta lección, estudiaremos cómo utilizar los eventos de página. En primer lugar, estudiaremos el ciclo de vida de los eventos de página. A continuación, veremos cómo funciona el proceso de postback, y estudiaremos el orden de los eventos. También veremos cómo trabajar con el evento Page_Load. La lección finaliza con el vínculo de controles.

En esta lección, aprenderemos a:

Describir el ciclo de vida de los eventos de página. Utilizar formularios postback. Enlazar un control con otro control.

Introducción

Objetivos de la lección

Page 170: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar código a un formulario Web Form con Microsoft ASP.NET 23

Ciclo de vida de los eventos de página

Page_LoadPage_Load

Page_UnloadPage_Unload

Textbox1_ChangedTextbox1_Changed

Button1_ClickButton1_Click

La página se gestiona

Page_InitPage_Init

EventosEventos controlcontrol

EventosEventos de de cambiocambio

EventosEventos de de acciaccióónn

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

Cuando se solicita una página ASP.NET, se producen una serie de eventos de página. Estos eventos siempre ocurren en el mismo orden, denominado ciclo de vida de los eventos de página.

El ciclo de vida de los eventos de página consta de los siguientes eventos de página, que ocurren en el siguiente orden:

1. Page_Init. Este evento de página inicializa la página creando e inicializando los controles de servidor Web de la página.

2. Page_Load. Este evento de página se ejecuta cada vez que se solicita la página.

3. Eventos Control. Este evento de página incluye eventos de cambio (por ejemplo, Textbox1_Changed) y eventos de acción (por ejemplo, Button1_Click).

4. Page_Unload. Este evento de página ocurre cuando la página se cierra o cuando el control pasa a otra página.

El final del ciclo de vida de los eventos de página incluye el borrado de la página en memoria.

La mayoría de eventos de control no ocurren hasta que el formulario Web Form se envíe de nuevo al servidor. Por ejemplo, los eventos Change se gestionan en orden aleatorio en el servidor después 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 botón Submit, los eventos Change de los controles de texto no se procesarán hasta que el evento Click envíe el formulario al servidor.

Para más información sobre los eventos de página, ver “Página (miembros

Introducción

Ciclo de vida de los eventos de página

Nota

Page 171: Microsoft ASP.net - Curso Completo - Espa Ol

24 Agregar código a un formulario Web Form con Microsoft ASP.NET

de)” y “Ciclo de vida de ejecución de un control” en la documentación en línea de Visual Studio .NET. En ASP.NET, los formularios están diseñados para enviar información de retorno a la página 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 código 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 código de la página de código subyacente es como sigue:

Private Sub ListBox1_SelectedIndexChanged _ (ByVal s As System.Object, ByVal e As System.EventArgs) _ Handles ListBox1.SelectedIndexChanged TextBox1.Text=ListBox1.SelectedItem.Value End Sub private void ListBox1_SelectedIndexChanged (object sender, System.EventArgs e) { TextBox1.Text = ListBox1.SelectedItem.Value; }

Postbacks

Visual Basic .NET

C#

Page 172: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar código a un formulario Web Form con Microsoft ASP.NET 25

Multimedia: el proceso de postback

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

En esta animación, veremos cómo funcionan los formularios en ASP.NET y cómo puede codificarse el evento Page_Load para que únicamente se ejecute la primera vez que se muestra una página, y cómo pueden utilizarse los controles para que envíen información inmediatamente al servidor. Para iniciar la animación abrir el fichero media042.swf

La primera vez que un usuario solicita una página del servidor, la verificación de Page.IsPostBack del evento Page_Load se realiza satisfactoriamente y se ejecuta el código del bloque. En este ejemplo, el código rellena un cuadro de lista.

El servidor devuelve la página al usuario. En este ejemplo, la página tiene un control ListBox, un control Label en blanco, y un botón Submit.

Cuando el usuario cambia la selección en el cuadro de lista y hace clic en el botón Submit, la información se envía de retorno al servidor.

El servidor puede determinar que ésta es una página que ha sido enviada de retorno por sí misma, y por ello, la verificación de Page.IsPostBack del evento Page_Load falla y el código 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 botón) y, en este escenario, el procedimiento de evento del cuadro de lista cambia la etiqueta para reflejar la nueva selección del cuadro de lista.

A continuación, el servidor devuelve la información actualizada al cliente. El usuario ve la misma página, pero la etiqueta ha cambiado para reflejar la selección del cuadro de lista.

Si deseamos que el nuevo valor del cuadro de lista se envíe al servidor inmediatamente, y no esperar a que el usuario haga clic en el botón Submit, podemos establecer la propiedad AutoPostBack del control de cuadro de lista a True.

Con la propiedad AutoPostBack establecida a True, la información se envía al servidor en cuanto el usuario cambia la selección en el cuadro de lista.

El servidor actualiza la etiqueta para reflejar el cambio, y envía la información actualizada de retorno al cliente.

Introducción

Page 173: Microsoft ASP.net - Curso Completo - Espa Ol

26 Agregar código a un formulario Web Form con Microsoft ASP.NET

Demostración: Gestionar eventos

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

Esta demostración puede realizarse utilizando un proyecto Visual Basic .NET o un proyecto Visual C#.

En esta demostración, veremos cómo 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 código completo para esta demostración se encuentra en la página:

Demo04VB\eventorderFinal.aspx.

Demo04CS\eventorderFinal.aspx.

Estas páginas y sus correspondientes proyectos se pueden encontrar dentro del fichero demos04.zip.

Introducción

Visual Basic .NET

C#

Page 174: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar código a un formulario Web Form con Microsoft ASP.NET 27

Ejecutar la demostración

1. En Visual Studio .NET, visualizar la página 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 verificación y hacer clic en Save. La página 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 verificación, el botón y la página.

2. En Visual Studio .NET, editar la página en la vista HTML y cambiar la casilla de verificación a un control de servidor Web, agregando un atributo Text, como muestra el siguiente código: <asp:checkbox onclick="checkClick()" onserverclick="checkServerClick" onserverchange="checkServerChange" runat="server" id="Checkbox1" Text="Certified Professional"/>

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

3. Visualizar de nuevo la página en el navegador. Escribir un nombre en el campo Name, hacer clic en el cuadro de lista Profession, seleccionar la casilla de verificación y hacer clic en Save. Ahora, la casilla de verificación únicamente lanza eventos en el lado del cliente. Mientras el evento del cliente todavía 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 página 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 código: <asp:checkbox onclick="checkClick()" onserverclick="checkServerClick" oncheckedchanged="checkServerChange" runat="server" id="Checkbox1" Text="Certified Professional"/>

5. Visualizar de nuevo la página 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 verificación y hacer clic en Save. Se ejecutan de nuevo los procedimientos de eventos cliente y servidor.

6. Modificar la página y establecer el atributo AutoPostBack a true para la casilla de verificación.

7. Visualizar de nuevo la página en el navegador.

Nota

Page 175: Microsoft ASP.net - Curso Completo - Espa Ol

28 Agregar código a un formulario Web Form con Microsoft ASP.NET

Cuando seleccionamos la casilla de verificación, obtenemos el evento en el lado del cliente y, a continuación, el evento en el lado del servidor.

8. En el navegador, visualizar el código fuente de la página para ver cómo se implementa AutoPostBack.

9. Cerrar la vista de código fuente de la página. 10. Modificar la página y agregar una verificación Page.IsPostBack para el

procedimiento de evento del evento Page_Load, como muestra el siguiente código: Sub Page_Load(s As Object, e As EventArgs) If Not Page.IsPostback Then Label1.Text &= "<P>Page_Load first time, " Else Label1.Text &= "<P>Page_Load postback, " End If End Sub void Page_Load(object s, System.EventArgs e) { if (!Page.IsPostBack) { Label1.Text += "<P>Page_Load first time, "; } else { Label1.Text += "<P>Page_Load postback, "; } }

11. Visualizar de nuevo la página en el navegador. Mientras el formulario se carga la primera vez, y se envía de retorno a continuación, veremos los distintos mensajes que se muestran.

Visual Basic .NET

C#

Page 176: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar código a un formulario Web Form con Microsoft ASP.NET 29

Práctica: ordenar los eventos

Los estudiantes:

En determinados escenarios, enumerarán los eventos que ocurrirán y el orden en que se producirán

Tiempo: 5 minutos

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

En esta práctica, predeciremos qué eventos se producirán en determinados escenarios. Los eventos a incluir son: carga de una página, 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.

____________________________________________________________

____________________________________________________________

Introducción

Page 177: Microsoft ASP.net - Curso Completo - Espa Ol

30 Agregar código 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 finalización y hacer clic en Submit.

_____________________________________________________________

_____________________________________________________________

Page 178: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar código a un formulario Web Form con Microsoft ASP.NET 31

Gestión de los eventos Page.IsPostback

Page_Load se invoca en cada solicitud

Utilizar Page.IsPostBack para ejecutar lógica condicional

Page.IsPostBack evita la recarga en cada postback

Private Sub Page_Load(ByVal s As System.Object, _ByVal e As System.EventArgs) Handles MyBase.LoadIf Not Page.IsPostBack Then'executes only on initial page load

End If'this code executes on every request

End Sub

Private Sub Page_Load(ByVal s As System.Object, _ByVal e As System.EventArgs) Handles MyBase.LoadIf Not Page.IsPostBack Then'executes only on initial page load

End If'this code executes on every request

End Sub

private void Page_Load(object sender, System.EventArgs e){ if (!Page.IsPostBack)

{// executes only on initial page load

}//this code executes on every request

}

private void Page_Load(object sender, System.EventArgs e){ if (!Page.IsPostBack)

{// executes only on initial page load

}//this code executes on every request

}

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

El evento Page_Load se ejecuta en cada petición de una página, tanto si es la primera petición de la página o un postback.

Debido a que el evento Page_Load se ejecuta con cada petición de una página, todo el código del evento Page_Load se ejecutará cada vez que la página sea solicitada. Sin embargo, cuando utilizamos eventos postback, es posible que no deseemos que se ejecute nuevamente todo el código. Si éste es el caso, podemos utilizar la propiedad Page.IsPostBack para controlar qué código se ejecuta únicamente cuando la página se solicita por primera vez, como muestra el siguiente código:

Private Sub Page_Load(ByVal s As System.Object, _ ByVal e As System.EventArgs) _ Handles MyBase.Load If Not Page.IsPostBack Then 'ejecución sólo en la carga de página inicial End If 'este código se ejecuta en cada petición End Sub private void Page_Load(object sender, System.EventArgs e) { if (!Page.IsPostBack) { // ejecución sólo en la carga de página inicial } // este código se ejecuta en cada petición }

Introducción

Uso de Page.IsPostBack

Visual Basic .NET

C#

Page 179: Microsoft ASP.net - Curso Completo - Espa Ol

32 Agregar código a un formulario Web Form con Microsoft ASP.NET

Vínculo entre dos controles

Vincular un control con otro resulta útil para obtener valores de cuadros de lista o listas desplegables

Enlace de datos

<asp:DropDownList id="lstOccupation" autoPostBack="True" runat="server" >

You selected: <asp:Label id="lblSelectedValue" Text="<%# lstOccupation.SelectedItem.Text %>" runat="server" />

<asp:DropDownList id="lstOccupation" autoPostBack="True" runat="server" >

You selected: <asp:Label id="lblSelectedValue" Text="<%# lstOccupation.SelectedItem.Text %>" runat="server" />

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

lblSelectedValue.DataBind();}

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

lblSelectedValue.DataBind();}

Sub Page_Load(s As Object, e As EventArgs) Handles MyBase.LoadlblSelectedValue.DataBind()

End Sub

Sub Page_Load(s As Object, e As EventArgs) Handles MyBase.LoadlblSelectedValue.DataBind()

End Sub

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

Podemos vincular un control con el contenido de otro. Vincular es especialmente útil para mostrar valores de cuadros de lista o listas desplegables.

El siguiente código de ejemplo muestra cómo 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 código 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 código anterior, la propiedad AutoPostBack de la lista desplegable está establecida a True, que provoca el postback automático cuando cambia el valor del cuadro de lista.

Introducción

Page 180: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar código a un formulario Web Form con Microsoft ASP.NET 33

En el procedimiento de evento Page_Load, invocamos el método DataBind de

toda la página o del control Label, como muestra el siguiente código:

Sub Page_Load (s As Object, e As EventArgs) _ Handles MyBase.Load lblSelectedValue.DataBind() End Sub private void Page_Load(object sender, System.EventArgs e) { lblSelectedValue.DataBind(); } Podemos utilizar Page.DataBind() si deseamos que la página enlace a datos en todos los elementos de la página. El código de ejemplo anterior enlaza a datos únicamente el control Label, utilizando por tanto la sintaxis de control.DataBind(), donde control es el atributo id del control Label.

Visual Basic .NET

C#

Page 181: Microsoft ASP.net - Curso Completo - Espa Ol

34 Agregar código a un formulario Web Form con Microsoft ASP.NET

Demostración: vincular controles

Vincular un control Label a un control ListBox

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

Esta demostración puede realizarse utilizando los archivos del proyecto Visual Basic .NET o del proyecto Visual C#.

En esta demostración, veremos cómo vincular controles.

El código completo para esta demostración se encuentra en la página:

Demo04VB\binding.aspx.

Demo04CS\binding.aspx.

Estas páginas y sus correspondientes proyectos se pueden encontrar dentro del fichero demos04.zip.

Ejecutar la demostración

1. En Visual Studio .NET, editar la página beforebinding.aspx del proyecto Mod05. Contiene un control DropDownList y un control Label. Visualizar el código HTML de la página. Observar el atributo AutoPostBack de DropDownList.

2. Vincular el control Label al control DropDownList estableciendo su atributo Text, como muestra el siguiente código de ejemplo: <asp:label id="lblListValue" Text="<%# lstTitle.SelectedItem.Text %>" runat="server"/>

Introducción

Visual Basic .NET

C#

Page 182: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar código 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 código de ejemplo: Private Sub Page_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load lblListValue.DataBind() End Sub private void Page_Load(object sender, System.EventArgs e) { lblListValue.DataBind(); }

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

Visual Basic .NET

C#

Page 183: Microsoft ASP.net - Curso Completo - Espa Ol

Práctica A: agregar funcionalidades a una aplicación Web

MedicalMedical.aspxMedicalMedical.aspx

BenefitsHome PageDefault.aspx

BenefitsHome PageDefault.aspx

Life InsuranceLife.aspxLife InsuranceLife.aspx

RetirementRetirement.aspxRetirementRetirement.aspx

DentalDental.aspxDentalDental.aspx

Dentists

DoctorsDoctors.aspx DoctorsDoctors.aspx

Doctors

Logon PageLogin.aspxLogon PageLogin.aspx

RegistrationRegister.aspxRegistrationRegister.aspx

CohoWinery

ProspectusProspectus.aspxProspectusProspectus.aspx

XML Web ServicedentalService1.asmx

XML Web ServicedentalService1.asmx

Page HeaderHeader.ascxPage HeaderHeader.ascx

ASPState

tempdb

Lab Web Application

User Controlnamedate.ascxUser Controlnamedate.ascx

Menu ComponentClass1.vb or Class1.cs

Menu ComponentClass1.vb or Class1.cs

XML Files

Web.config

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

En este laboratorio, aprenderemos a:

Crear un procedimiento de evento Page_Load para una página Web Microsoft® ASP.NET.

Crear procedimientos de evento Click para controles Web en una página Web ASP.NET.

Este laboratorio se centra en los conceptos de este módulo. Por ello, podría no cumplir las recomendaciones de seguridad de Microsoft.

Para trabajar en este laboratorio, es necesario tener:

Conocimientos sobre cómo invocar una función en Microsoft Visual Basic® .NET.

Conocimientos sobre cómo utilizar controles Web en un formulario Web Form.

Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios del curso, crearemos un sitio Web que permita a los empleados seleccionar y establecer los beneficios que elijan.

En el Laboratorio 3, “Generar un componente Microsoft Visual Studio .NET”, creamos un componente que devolvía una lista de todos los beneficios que ofrecía la compañía. En este laboratorio, invocaremos ese componente desde la página default.aspx del sitio Web de la compañía, mostraremos la información en un control CheckBoxList, e implementaremos el botón Submit en el formulario para mostrar los beneficios seleccionados.

Objetivos

Nota

Requisitos previos

Escenario

Tiempo estimado para completar el laboratorio: 45 minutos

Page 184: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 0 Configuración del laboratorio

Para realizar este laboratorio, es necesario haber creado el proyecto de aplicación 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 solución LabApplication

Realizar este procedimiento únicamente si no se ha creado un archivo de solución LabApplication .

1. Utilizando Visual Studio .NET, crear una nueva solución en blanco denominada LabApplication : En el menú Archivo, seleccionar Nuevo, y hacer clic en Solución en

blanco. En el cuadro de diálogo Nuevo proyecto, escribir LabApplication en

el cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

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

1. Crear un nuevo proyecto de aplicación Web ASP.NET, denominado BenefitsVB o BenefitsCS, en la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto. b. En el cuadro de diálogo 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 Aplicación Web ASP.NET,

establecer la Ubicación 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 Solución, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solución, es importante el uso de mayúsculas 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 mayúsculas el nombre del proyecto Benefits.

Importante

Importante

Precaución

Page 185: Microsoft ASP.net - Curso Completo - Espa Ol

Actualizar el proyecto Benefits

1. En Visual Studio .NET, abrir el archivo de solución LabApplication . 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsVB o BenefitsCS, seleccionar Agregar, y hacer clic en Agregar elemento existente.

3. Buscar el proyecto Benefits. VB\Starter\BenefitsVB para los archivos de Visual Basic .NET. CS\Starter\BenefitsCS para los archivos de Visual C#. Estas carpetas se pueden encontrar dentro del fichero labs04.zip.

4. En el cuadro Archivos de tipo del cuadro de diálogo Agregar elemento existente – Benefits, hacer clic en Todos los archivos (*.*).

5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir. 6. Hacer clic en Sí a la pregunta de si sobrescribir o cargar de nuevo los

archivos.

Crear la biblioteca de clases BenefitsList

Realizar estos pasos únicamente si no se ha creado anteriormente un proyecto BenefitsList, o si se ha eliminado el proyecto BenefitsList según los pasos del Apéndice A, “Recuperación del laboratorio”.

1. Crear un proyecto de biblioteca de clases. Crear un nuevo proyecto de biblioteca de clases Microsoft Visual Basic® .NET con el nombre BenefitsListVB, y añadirlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto. b. En el cuadro de diálogo 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 solución, y clic en Aceptar. Crear un nuevo proyecto de biblioteca de clases Visual C# .NET con el nombre BenefitsListCS, y añadirlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto. b. En el cuadro de diálogo 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 solución, y clic en Aceptar.

Verificar que se han escrito correctamente las mayúsculas del proyecto BenefitsList.

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Importante

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Precaución

Page 186: Microsoft ASP.net - Curso Completo - Espa Ol

Actualizar el proyecto BenefitsList

1. En Visual Studio .NET, abrir el archivo de solución LabApplication . 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

3. Buscar el proyecto BenefitsList. Ir a la carpeta VB\Starter\BenefitsListVB. Ir a la carpeta CS\Starter\BenefitsListCS. Estas carpetas se pueden encontrar dentro del fichero labs04.zip.

4. En el cuadro Archivos de tipo del cuadro de diálogo 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 solución LabApplication, completar los siguientes pasos para agregar una referencia al componente BenefitsList que acabamos de crear: a. Hacer clic con el botón derecho en el proyecto BenefitsVB o

BenefitsCS en el Explorador de soluciones y hacer clic en Agregar referencia.

b. En el cuadro de diálogo Agregar referencia, en la pestaña Proyectos, hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.

c. En la lista Componentes seleccionados, seleccionar el componente BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar. El componente se agrega a la carpeta Referencias en el Explorador de soluciones.

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Page 187: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 1 Crear un procedimiento de evento Page_Load

En este ejercicio, crearemos el procedimiento de evento Page_Load para la página default.aspx. En el procedimiento de evento Page_Load, agregaremos código para leer la lista de beneficios del componente BenefitsListVB o BenefitsListCS. A continuación, mostraremos los beneficios en un control CheckBoxList.

Invocar el componente BenefitsListVB o BenefitsListCS

1. Utilizando Visual Studio .NET, abrir la solución LabApplication. 2. Abrir la página default.aspx del proyecto BenefitsVB o BenefitsCS. 3. Hacer doble clic en el fondo de la página default.aspx en vista de Diseño

para crear un procedimiento de evento Page_Load. La página de código subyacente se abre y se agrega una plantilla para el procedimiento de evento Page_Load, que contiene el siguiente código: Private Sub Page_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here End Sub private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here }

4. Crear una nueva instancia de la clase BenefitsList.Benefits y guardarla en una variable denominada clBenefits. El código debería ser similar al siguiente: Dim clBenefits As New _ BenefitsListVB.Benefits() BenefitsListCS.Benefits clBenefits = new BenefitsListCS.Benefits();

5. Si se está realizando este laboratorio en Visual Basic .NET, declarar una variable de tipo BenefitsListVB.Benefits.BenefitInfo y nombrarla bi. El código debería ser similar al siguiente: Dim bi As BenefitsListVB.Benefits.BenefitInfo Si se está realizando este laboratorio en Visual C#, la variable bi se declara en el bucle foreach más adelante en este laboratorio.

6. Invocar el método GetBenefitsList de la clase, el cual devuelve una matriz de las variables BenefitsListVB.Benefits.BenefitInfo o BenefitsListCS.Benefits.BenefitInfo.

7. Repetir en la matriz devuelta con un bucle For Each.

Visual Basic .NET

C#

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 188: Microsoft ASP.net - Curso Completo - Espa Ol

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 colección Items del control chkListBenefits CheckBoxList utilizando el método chkListBenefits.Items.Add. El código debería ser similar al siguiente: For Each bi In clBenefits.GetBenefitsList() chkListBenefits.Items.Add("<a href=" & bi.strPage & _ ">" & bi.strName & "</a>") Next foreach (BenefitsListCS.Benefits.BenefitInfo bi in clBenefits.GetBenefitsList()) { chkListBenefits.Items.Add("<a href=" + bi.strPage + ">" + bi.strName + "</a>"); }

9. Hacer clic con el botón derecho en la página default.aspx en el Explorador de soluciones y clic en Generar y examinar. Ahora, la lista chkListBenefits contiene hiperenlaces a otras páginas, además de la colección inicial de valores, como muestra la siguiente ilustración.

Visual Basic .NET

C#

Page 189: Microsoft ASP.net - Curso Completo - Espa Ol

10. Hacer clic en el hiperenlace Life Insurance. Se muestra la página life.aspx.

11. Hacer clic en el hiperenlace Home para regresar a la página default.aspx. 12. Hacer clic en Submit dos veces. ¿Qué ocurre? ¿Por qué?

_____________________________________________________________

_____________________________________________________________

La vista del cuadro de lista chkBenefitsList debería mostrar únicamente la lista de beneficios que proporciona el componente BenefitsList, no los tres primeros elementos temporales. Además, la lista de beneficios no debería añadirse al cuadro de lista con cada actualización de la página. Para solventar estos aspectos, seguir los siguientes procedimientos.

Eliminar la lista temporal de elementos

1. Abrir la página 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 colección y hace clic en Aceptar.

Agregar una prueba Page.IsPostBack

1. En la página default.aspx, agregar una prueba Page.IsPostBack al procedimiento de evento Page_Load. Agregar únicamente elementos desde el componente al control CheckBoxList si la página se muestra por primera vez. Cuando finalice, el procedimiento de evento Page_Load completo debería ser similar al siguiente (el nuevo código está en negrita): Private Sub Page_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load If Not Page.IsPostBack Then Dim clBenefits As New BenefitsListVB.Benefits() Dim bi As BenefitsListVB.Benefits.BenefitInfo For Each bi In clBenefits.GetBenefitsList() chkListBenefits.Items.Add("<a href=" & _ bi.strPage & ">" & bi.strName & "</a>") Next End If End Sub

Visual Basic .NET

Page 190: Microsoft ASP.net - Curso Completo - Espa Ol

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 página default.aspx. Ahora, la lista muestra los elementos del componente BenefitsList.

3. Hacer clic en Submit dos o más veces. ¿Qué ocurre? ¿Por qué? ____________________________________________________________

____________________________________________________________

C#

Page 191: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 2 Crear un procedimiento de evento Click

En este ejercicio, crearemos un procedimiento de evento Click para el botón Submit de la página default.aspx. Cuando el usuario hace clic en Submit, el procedimiento de evento lee la lista de beneficios y envía los beneficios seleccionados de la lista en una etiqueta en la página default.aspx.

Leer los beneficios seleccionados

1. Abrir la página default.aspx. 2. Hacer doble clic en el botón Submit en vista de Diseño para crear un

procedimiento de evento Click para el botón Submit. Se abre la página 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, añadir una cadena a la propiedad Text del control lblSelections Label. El código debería ser similar al siguiente: Dim li As ListItem For Each li In chkListBenefits.Items If li.Selected Then lblSelections.Text &= ", " & li.Value End If Next foreach (ListItem li in chkListBenefits.Items) { if (li.Selected) { lblSelections.Text += ", " + li.Value; } }

4. Generar y examinar la página default.aspx. 5. Seleccionar algunos beneficios de la lista y hacer clic en Submit.

La etiqueta muestra una lista de los elementos seleccionados como hiperenlaces.

Visual Basic .NET

C#

Page 192: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 3 (si se dispone de tiempo) Uso de un componente en un control de usuario

Cada página del sitio Web Benefits muestra una parte de la misma información. Esta información 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 página.

En este ejercicio, rediseñaremos la página header.ascx para leer la lista de beneficios desde el componente BenefitsList y mostrarlos en controles hiperenlace.

Invocar el componente BenefitsList

1. Abrir la página 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 página, excluyendo el hiperenlace Home, a controles de servidor Web:

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

a. En vista Diseño, hacer clic con el botón derecho en cada hiperenlace y hacer clic en Ejecutar como control de servidor.

b. Hacer clic en el botón HTML para ver el código Hypertext Markup Language (HTML) de la página. 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 página 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 método GetBenefitsList de la clase, que devuelve una matriz de

variables BenefitsList.Benefits.BenefitInfo.

Nota

Page 193: Microsoft ASP.net - Curso Completo - Espa Ol

7. Establecer las propiedades HRef y InnerText de cada hiperenlace en las propiedades strPage y strName de un elemento en la matriz devuelta. El código debería ser similar al siguiente: Dim clBenefits As New BenefitsListVB.Benefits() Dim arBenefits As BenefitsListVB.Benefits.BenefitInfo() arBenefits = clBenefits.GetBenefitsList() A1.HRef = arBenefits(0).strPage A1.InnerText = arBenefits(0).strName A2.HRef = arBenefits(1).strPage A2.InnerText = arBenefits(1).strName A3.HRef = arBenefits(2).strPage A3.InnerText = arBenefits(2).strName A4.HRef = arBenefits(3).strPage A4.InnerText = arBenefits(3).strName BenefitsListCS.Benefits clBenefits = new BenefitsListCS.Benefits(); BenefitsListCS.Benefits.BenefitInfo[] arBenefits; arBenefits = clBenefits.GetBenefitsList(); A1.HRef = arBenefits[0].strPage; A1.InnerText = arBenefits[0].strName; A2.HRef = arBenefits[1].strPage; A2.InnerText = arBenefits[1].strName; A3.HRef = arBenefits[2].strPage; A3.InnerText = arBenefits[2].strName; A4.HRef = arBenefits[3].strPage; A4.InnerText = arBenefits[3].strName;

8. Generar el proyecto Benefits.

Debido a que header.ascx es un control de usuario, no podemos visualizarlo directamente en un explorador.

9. Visualizar la página default.aspx en un explorador. La página 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 reflejarán el cambio.

Visual Basic .NET

C#

Page 194: Microsoft ASP.net - Curso Completo - Espa Ol

Práctica A: seguimiento en aplicaciones Web Microsoft ASP.NET

MedicalMedical.aspxMedicalMedical.aspx

BenefitsHome PageDefault.aspx

BenefitsHome PageDefault.aspx

Life InsuranceLife.aspxLife InsuranceLife.aspx

RetirementRetirement.aspxRetirementRetirement.aspx

DentalDental.aspxDentalDental.aspx

Dentists

DoctorsDoctors.aspx DoctorsDoctors.aspx

Doctors

Logon PageLogin.aspxLogon PageLogin.aspx

RegistrationRegister.aspxRegistrationRegister.aspx

CohoWinery

ProspectusProspectus.aspxProspectusProspectus.aspx

XML Web ServicedentalService1.asmx

XML Web ServicedentalService1.asmx

Page HeaderHeader.ascxPage HeaderHeader.ascx

ASPState

tempdb

Lab Web Application

User Controlnamedate.ascxUser Controlnamedate.ascx

Menu ComponentClass1.vb or Class1.cs

Menu ComponentClass1.vb or Class1.cs

XML Files

Web.config

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

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 página y de aplicación.

Utilizar el seguimiento en un componente.

Este laboratorio se centra en los conceptos de este módulo. Por ello, podría no cumplir las recomendaciones de seguridad de Microsoft.

Para trabajar en este laboratorio, es necesario tener:

Conocimientos sobre cómo generar una biblioteca de clases. Conocimientos sobre cómo agregar una referencia a un proyecto.

Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios de este curso, crearemos un sitio Web que permita a los empleados seleccionar y configurar los beneficios que elijan.

En este laboratorio, utilizaremos el seguimiento a través de la ejecución de la aplicación Web Benefits.

Objetivos

Nota

Requisitos previos

Escenario

Tiempo estimado para completar el laboratorio: 30 minutos

Page 195: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 0 Configuración del laboratorio

Para realizar este laboratorio, es necesario haber creado el proyecto de la aplicación Web Benefits y el proyecto de la biblioteca de clases BenefitsList. Si no se han creado estos proyectos, realizar los siguientes pasos:

Crear la solución LabApplication

Realizar este procedimiento únicamente si no se ha creado un archivo de solución LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solución en blanco denominada LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Solución en

blanco. a. En el cuadro de diálogo Nuevo proyecto, escribir LabApplication en el

cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

Realizar este procedimiento únicamente si no se ha creado anteriormente un proyecto Benefits t, o si se ha eliminado el proyecto Benefits siguiendo los pasos del Apéndice A, “Recuperación del laboratorio”.

Crear un nuevo proyecto de aplicación Web ASP.NET, denominado BenefitsVB o BenefitsCS, en la solución LabApplication: En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto. En el cuadro de diálogo 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 Aplicación Web ASP.NET,

establecer la Ubicación 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 Solución, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solución, es importante el uso de mayúsculas 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 mayúscula el nombre del proyecto Benefits. Pueden crearse dos versiones del proyecto: BenefitsVB sería una solución Visual Basic .NET y BenefitsCS sería una solución Visual C#.

Importante

Importante

Precaución

Page 196: Microsoft ASP.net - Curso Completo - Espa Ol

Actualizar el proyecto Benefits

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsVB o BenefitsCS, seleccionar Agregar, y hacer clic en Agregar elemento existente. Ir a la carpeta VB\Starter\BenefitsVB para los archivos de Visual Basic

.NET. En el cuadro Archivos de tipo del cuadro de diálogo Agregar elemento

existente – BenefitsVB, hacer clic en Todos los archivos. Ir a la carpeta CS\Starter\BenefitsCS para los archivos de Visual C#.

En el cuadro Archivos de tipo del cuadro de diálogo Agregar elemento existente – BenefitsCS, hacer clic en Todos los archivos.

Estas carpetas se pueden encontrar dentro del fichero labs05.zip. 3. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir. 4. Hacer clic en Sí a la pregunta de si sobrescribir o cargar de nuevo los

archivos.

Crear la biblioteca de clases BenefitsList

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

1. Crear un proyecto de biblioteca de clases con los nombres BenefitsListVB o BenefitsListCS, y añadirlo a la solución LabApplication. a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto:

En el cuadro de diálogo 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 solución, y clic en Aceptar.

En el cuadro de diálogo 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 solución, y clic en Aceptar.

Verificar que se han escrito correctamente las mayúsculas del proyecto BenefitsListVB o BenefitsListCS.

En el proyecto Microsoft Visual Basic .NET

En el proyecto Visual C#

Importante

En el proyecto Visual Basic .NET

En el proyecto Visual C#

Precaución

Page 197: Microsoft ASP.net - Curso Completo - Espa Ol

Actualizar el proyecto BenefitsList

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

3. Copiar los archivos de la carpeta Labfiles: a. Ir a la carpeta VB\Starter\BenefitsListVB. b. En el cuadro Archivos de tipo del cuadro de diálogo 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 diálogo 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 solución LabApplication, completar los siguientes pasos para agregar una referencia al componente BenefitsList que acabamos de crear: a. Hacer clic con el botón derecho en el proyecto BenefitsVB o BenefitsCS

en el Explorador de soluciones y hacer clic en Agregar referencia. b. En el cuadro de diálogo Agregar referencia, en la pestaña Proyectos,

hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS. c. En la lista Componentes seleccionados, seleccionar el componente

BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar. El componente se agrega a la carpeta Referencias en el Explorador de soluciones.

En el proyecto Visual Basic .NET

En el proyecto Visual C#

Page 198: Microsoft ASP.net - Curso Completo - Espa Ol

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 página

1. En Visual Studio .NET, abrir la solución LabApplication. 2. En el proyecto BenefitsVB o BenefitsCS, abrir el archivo default.aspx. 3. En la página 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 debería ser similar al siguiente código, con la parte añadida en negrita: <%@ Page Language="vb" AutoEventWireup="false" Codebehind="default.aspx.vb" Inherits="BenefitsVB._default" Trace="true" %> <%@ Page Language="c#" AutoEventWireup="false" Codebehind="default.aspx.cs" Inherits="BenefitsCS._default" Trace="true" %>

5. Guardar default.aspx. No es necesario generar la página, ya que no hemos cambiado nada del código. Los cambios a HTML únicamente requieren que se guarde la página.

6. Visualizar la página default.aspx en el navegador. La información de seguimiento aparece en la parte inferior de la página.

Agregar mensajes de seguimiento personalizados

1. Ir al principio del procedimiento de evento Page_Load para la página default.aspx, que se encuentra en la página de código subyacente default.aspx.vb o default.aspx.cs. Agregar un mensaje de seguimiento que muestre el mensaje Beginning of Page_Load en una categoría llamada 2310. El código debería ser similar al siguiente: Trace.Warn("2310", "Beginning of Page_Load") Trace.Warn("2310", "Beginning of Page_Load");

2. En el procedimiento de evento Page_Load, inmediatamente debajo del primer mensaje de seguimiento, agregar otro mensaje de seguimiento que muestre el valor de la propiedad Page.IsPostBack. El código debería ser similar al siguiente: Trace.Warn("2310", "IsPostBack=" & Page.IsPostBack) Trace.Warn("2310", "IsPostBack=" + Page.IsPostBack);

Visual Basic .NET

C#

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 199: Microsoft ASP.net - Curso Completo - Espa Ol

3. Generar y examinar la página default.aspx. Deberíamos visualizar los mensajes personalizados en la sección Trace Information, como muestra la siguiente ilustración.

Utilizar seguimiento a nivel de aplicación

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 instrucción de seguimiento que reconoceremos fácilmente en el resultado de seguimiento. Utilizar 2310 para la categoría nos será de ayuda para encontrar la instrucción de seguimiento.

3. Generar y examinar la página life.aspx. ¿Se muestra la información de seguimiento en la página? Explicar por qué o por qué no. ____________________________________________________________

____________________________________________________________

4. Abrir el archivo Web.config del proyecto Benefits y localizar el elemento trace.

Page 200: Microsoft ASP.net - Curso Completo - Espa Ol

5. Generar una lista y a continuación definir los atributos establecidos para el elemento trace. Utilizar la documentación de Visual Studio .NET para descubrir las funcionalidades de los atributos. _____________________________________________________________

_____________________________________________________________

6. En el archivo Web.config, habilitar el seguimiento a nivel de aplicación estableciendo el atributo enabled del elemento trace a true.

7. Visualizar de nuevo la página life.aspx en el navegador. ¿Se muestra la información de seguimiento en la página? 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 página life.aspx en el navegador. ¿Se muestra la información de seguimiento en la página? Explicar por qué o por qué no. _____________________________________________________________

_____________________________________________________________

¿Por qué se muestra la información de ese modo? _____________________________________________________________

_____________________________________________________________

Page 201: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 2 Utilizar seguimiento en un componente

En este ejercicio, agregaremos instrucciones Trace al componente BenefitsList invocado desde la página 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 botón

derecho en la carpeta Referencias y hacer clic en Agregar referencia. b. En el cuadro de diálogo Agregar referencia, en la ficha .NET, en la

lista de componentes, hacer doble clic en System.Web.dll, y en Aceptar.

2. Abrir el archivo Class1: En el proyecto BenefitsListVB, abrir el archivo Class1.vb.

En el proyecto BenefitsListCS, abrir el archivo Class1.cs. 3. En el método GetBenefitsList, habilitar el seguimiento estableciendo la

propiedad HttpContext.Current.Trace.IsEnabled a True. El código debería ser similar al siguiente: System.Web.HttpContext.Current.Trace.IsEnabled = True System.Web.HttpContext.Current.Trace.IsEnabled = true;

También 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 método GetBenefitsList que muestra el mensaje “Beginning of GetBenefitsList” en la categoría denominada BenefitsList component. El código debería ser similar al siguiente: System.Web.HttpContext.Current.Trace.Warn _ ("BenefitsList component", _ "Beginning of GetBenefitsList") System.Web.HttpContext.Current.Trace.Warn ("BenefitsList component", "Beginning of GetBenefitsList");

En el proyecto Visual Basic .NET

En el proyecto Visual C#

Visual Basic .NET

C#

Nota

Visual Basic .NET

C#

Page 202: Microsoft ASP.net - Curso Completo - Espa Ol

2. Agregar otro mensaje de seguimiento al final del procedimiento (pero antes del comando Return) que muestra el mensaje “End of GetBenefitsList”. El código debería ser similar al siguiente: System.Web.HttpContext.Current.Trace.Warn _ ("BenefitsList component", _ "End of GetBenefitsList") System.Web.HttpContext.Current.Trace.Warn ("BenefitsList component", "End of GetBenefitsList");

Guardar y probar

1. Guardar los cambios del archivo Class1, y generar el proyecto. 2. Visualizar la página default.aspx en Microsoft Internet Explorer.

Deberíamos visualizar nuestros mensajes personalizados desde la página y desde el componente en la sección Trace Information, como muestra la siguiente ilustración.

¿Por qué se invoca dos veces el método GetBenefitsList? _____________________________________________________________

_____________________________________________________________

Visual Basic .NET

C#

Page 203: Microsoft ASP.net - Curso Completo - Espa Ol

3. Abrir la página header.ascx.vb o header.ascx.cs. 4. En el procedimiento de evento Page_Load, agregar dos mensajes

Trace.Warn, ambos con un parámetro 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 código debería ser similar al siguiente: System.Web.HttpContext.Current.Trace.Warn _ ("Header", "Start Header") System.Web.HttpContext.Current.Trace.Warn _ ("Header", "End Header") System.Web.HttpContext.Current.Trace.Warn ("Header", "Start Header"); System.Web.HttpContext.Current.Trace.Warn ("Header", "End Header");

5. Generar y examinar default.aspx. La información de seguimiento ahora incluye mensajes de seguimiento Header, uno antes y otro después del segundo conjunto de mensajes de seguimiento BenefitsList Component.

Deshabilitar el seguimiento

1. Deshabilitar el seguimiento a nivel de aplicación en Web.config. 2. Deshabilitar el seguimiento a nivel de página en la página default.aspx. 3. Deshabilitar los mensajes Trace.Warn en el evento Page_Load de

header.aspx. 4. Visualizar de nuevo la página default.aspx en el navegador.

¿Se muestra la información de seguimiento en la página? Explicar por qué o por qué no ____________________________________________________________

____________________________________________________________

Si la información de seguimiento se muestra en la página, ¿qué mensajes de seguimiento personalizados se muestran? ¿Por qué? ____________________________________________________________

____________________________________________________________

Visual Basic .NET

C#

Page 204: Microsoft ASP.net - Curso Completo - Espa Ol

5. Eliminar o comentar los mensajes de seguimiento que hemos agregado en este laboratorio, de acuerdo con la siguiente tabla. Página Código a eliminar default.aspx.vb o default.aspx.cs Dos líneas en el procedimiento de evento

Page_Load.

life.aspx.vb o life.aspx.cs Una línea en el procedimiento de evento Page_Load.

header.ascx.vb o header.ascx.cs Una línea al inicio del procedimiento de evento Page_Load, y una línea al final.

Class1.vb o Class1.cs Tres líneas en el método GetBenefitsList.

Al eliminar estas líneas de código, las páginas no tendrán 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 página.

Page 205: Microsoft ASP.net - Curso Completo - Espa Ol

Índice

Introducción 1

Lección: descripción del seguimiento 2

Lección: depuración remota 18

Seguimiento en aplicaciones Web con Microsoft ASP.NET

Page 206: Microsoft ASP.net - Curso Completo - Espa Ol
Page 207: Microsoft ASP.net - Curso Completo - Espa Ol

Seguimiento en aplicaciones Web con Microsoft ASP.NET 1

Introducción

Descripción del seguimiento

Depuración remota

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

Es difícil, si no imposible, capturar todos los errores posibles de código cuando desarrollamos por primera vez una aplicación Web. Podemos obtener errores en tiempo de compilación o en tiempo de ejecución. El compilador de Microsoft® Visual Studio® .NET encuentra los errores en tiempo de compilación. Para encontrar errores en tiempo de ejecución, podemos utilizar el depurador de Visual Studio .NET, el objeto Trace o el objeto Debug.

En este módulo, aprenderemos a:

Utilizar el objeto Trace para visualizar información en tiempo de ejecución sobre una aplicación Web.

Utilizar el objeto Debug para visualizar información en tiempo de ejecución sobre una aplicación Web.

Depurar aplicaciones remotamente.

Introducción

Objetivos

Page 208: Microsoft ASP.net - Curso Completo - Espa Ol

2 Seguimiento en aplicaciones Web con Microsoft ASP.NET

Lección: descripción del seguimiento

Información en tiempo de ejecución

Habilitar el seguimiento

Uso del objeto Trace

Visualizar los resultados de seguimiento

Uso del seguimiento a nivel de aplicación

Demostración: seguimiento en una aplicación Web

Seguimiento en un componente

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

El seguimiento implica la recepción de mensajes informativos sobre la ejecución de una aplicación Web en tiempo de ejecución. Estos mensajes informativos de la aplicación 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 información durante el tiempo de ejecución: el objeto Debug el objeto Trace.

En esta lección, aprenderemos a:

Identificar el tipo de información que puede recopilarse durante el tiempo de ejecución.

Utilizar el objeto Debug para mostrar información de tiempo de ejecución en el depurador de Visual Studio .NET.

Habilitar el seguimiento en un formulario Web Form. Utilizar los métodos Trace.Write y Trace.Warn. Utilizar el seguimiento a nivel de aplicación. Interpretar los resultados del seguimiento. Realizar seguimiento en un componente.

Introducción

Objetivos de la lección

Page 209: Microsoft ASP.net - Curso Completo - Espa Ol

Seguimiento en aplicaciones Web con Microsoft ASP.NET 3

Información en tiempo de ejecución

Durante el tiempo de ejecución, podemos:Visualizar valores de variablesAfirmar si se cumple o no una condiciónRealizar seguimiento por la ruta de ejecución de la aplicación

Podemos recopilar información en tiempo de ejecución utilizando

El objeto TraceEl objeto Debug

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

Podemos recopilar información mientras nuestra aplicación Web se está ejecutando utilizando los objetos Debug y Trace.

Para actualizar los conocimientos sobre depuración, consultar el Apéndice B, “Depuración con Microsoft Visual Studio .NET” al final del libro de ejercicios.

Podemos realizar los siguientes pasos durante el tiempo de ejecución:

Visualizar valores de variables. Determinar si se han cumplido determinadas condiciones. Por ejemplo,

existe un método Trace.WriteIf que muestra un mensaje únicamente si se satisface la condición.

Seguir la ruta de ejecución de la aplicación. Podemos seguir la lógica de programación de un formulario Web Form mientras se está ejecutando para garantizar de que el procesamiento se produce correctamente.

Existen dos objetos que podemos utilizar para mostrar información de depuración durante el tiempo de ejecución. Son los siguientes:

El objeto Trace. El objeto Trace de Microsoft ASP.NET permite mostrar información en una página Web o guardarla en memoria. En las páginas ASP tradicionales, utilizamos instrucciones Response.Write para realizar el seguimiento del progreso de una aplicación Web. La ventaja de utilizar el objeto Trace frente a utilizar instrucciones Response.Write, o mostrar información de depuración en etiquetas en un formulario Web Form, radica en que todo el seguimiento puede ser habilitado o deshabilitado cambiando la configuración en el archivo Web.config. Por tanto, no es necesario revisar todo el código; simplemente podemos eliminar las instrucciones de seguimiento en un servidor en producción.

Introducción

Nota

Tipos de información

Objetos de tiempo de ejecución

Page 210: Microsoft ASP.net - Curso Completo - Espa Ol

4 Seguimiento en aplicaciones Web con Microsoft ASP.NET

El objeto Debug. También podemos utilizar el objeto Debug para mostrar información de depuración. Las instrucciones que utiliza el objeto Debug únicamente se ejecutarán cuando estén compiladas en modo debug y cuando la aplicación Web se ejecute en el depurador. Si creamos una versión release, las instrucciones no se ejecutarán. Con el objeto Debug, los mensajes se muestran en la ventana Resultados del depurador. Cuando utilizamos el objeto Debug para imprimir información de depuración y comprobar la lógica, podemos hacer que nuestro código sea más estable sin afectar al rendimiento del producto final o al tamaño del código.

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

Nota

Page 211: Microsoft ASP.net - Curso Completo - Espa Ol

Seguimiento en aplicaciones Web con Microsoft ASP.NET 5

Habilitar el seguimiento

El seguimiento a nivel de página muestra instrucciones de seguimiento únicamente en la página configuradaHabilitar el seguimiento a nivel de página

El seguimiento a nivel de aplicación muestra información de seguimiento para todas las páginas de la aplicación Web

Habilitar el seguimiento a nivel de aplicación en el archivo Web.config

Práctica: comprobar la configuración predeterminada

<trace enabled="true" pageOutput="true"localOnly="true"/><trace enabled="true" pageOutput="true"localOnly="true"/>

<%@ Page Language="vb" Trace="true" %><%@ Page Language="vb" Trace="true" %>

<%@ Page Language="c#" Trace="true" %><%@ Page Language="c#" Trace="true" %>

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

Cuando realizamos el seguimiento, podemos escribir instrucciones de seguimiento directamente en la página o en un objeto de almacenamiento.

Cuando realizamos el seguimiento a nivel de página, todos los mensajes de seguimiento se añaden al final de la página Web, lo que permite visualizar rápidamente los mensajes de seguimiento al mismo tiempo que estamos visualizando la página Web.

Para habilitar en una página el seguimiento a nivel de página, establecemos el atributo Trace de la directiva @ Page a true, como muestra el siguiente código:

<%@ Page Language="vb" Trace="true" %> -o- <%@ Page Language="c#" Trace="true" %> Una vez habilitado el seguimiento, todas las instrucciones Trace.Write de nuestro código aparecerán en la página. Cuando acabemos de realizar el seguimiento, podemos deshabilitarlo en lugar de eliminar todas las instrucciones Trace.Write de nuestro código.

Cuando habilitamos el seguimiento a nivel de aplicación, lo hacemos para todas las páginas de la aplicación Web. El seguimiento a nivel de aplicación también permite una mayor flexibilidad al escribir instrucciones de seguimiento. Por ejemplo, con el seguimiento a nivel de página, todos los mensajes de seguimiento se añaden a la página, mientras que con el seguimiento a nivel de aplicación, podemos escribir mensajes de seguimiento en la página o en memoria. El visor de seguimiento a nivel de aplicación, trace.axd, puede acceder a las instrucciones de seguimiento almacenadas en memoria.

Introducción

Seguimiento a nivel de página

Seguimiento a nivel de aplicación

Page 212: Microsoft ASP.net - Curso Completo - Espa Ol

6 Seguimiento en aplicaciones Web con Microsoft ASP.NET

Para habilitar el seguimiento a nivel de aplicación, es necesario configurar el archivo Web.config de la aplicación Web, como muestra el siguiente código:

<configuration> <system.web> <trace enabled="true"/> </system.web> </configuration> Para configurar que los mensajes de seguimiento se escriban en la página, utilizamos el atributo pageOutput del elemento trace. La configuración a true escribe las instrucciones de seguimiento en cada página. La configuración a false escribe las instrucciones de seguimiento en memoria, donde el visor de seguimiento a nivel de aplicación, trace.axd, puede acceder a ellas, como muestra el siguiente código:

<trace enabled="true" pageOutput="true|false"/> También podemos establecer el atributo localOnly del elemento trace para asegurarnos de que los mensajes de seguimiento están visibles únicamente en el equipo local, como muestra el siguiente código:

<trace enabled="true" pageOutput="true" localOnly="true"/> En Visual Studio .NET, abrir el proyecto Benefits. En el Explorador de soluciones, hacer doble clic en el archivo Web.config. ¿Cuáles son las opciones de configuración predeterminadas para el seguimiento a nivel de aplicación?

________________________________________________________________

________________________________________________________________

Práctica (opcional)

Page 213: Microsoft ASP.net - Curso Completo - Espa Ol

Seguimiento en aplicaciones Web con Microsoft ASP.NET 7

Uso del objeto Trace

Insertar mensajes de seguimiento

Ejecución condicional con Trace.IsEnabled

Cambiar dinámicamente el estado del seguimiento

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

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

If Trace.IsEnabled ThenstrMsg = "Tracing is enabled!"Trace.Write("myTrace", strMsg)

End If

If Trace.IsEnabled ThenstrMsg = "Tracing is enabled!"Trace.Write("myTrace", strMsg)

End If

Trace.IsEnabled = FalseTrace.IsEnabled = False

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

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

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

Para escribir mensajes de seguimiento en una página (o en memoria), utilizamos los métodos Trace.Write y Trace.Warn. Podemos utilizar la propiedad IsEnabled del objeto Trace para cambiar dinámicamente el estado de seguimiento de una página.

Utilizamos los métodos Write y Warn del objeto Trace para mostrar mensajes de seguimiento. Trace.Write y Trace.Warn funcionan exactamente igual, con la excepción de que Warn escribe mensajes de seguimiento en color rojo.

Cuando utilizamos los métodos Write y Warn, proporcionamos el mensaje que debe mostrarse, junto con una categoría apropiada al mensaje, como muestra el siguiente código:

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

El parámetro de categoría se utiliza para clasificar y agrupar mensajes de seguimiento. Por ejemplo, podemos establecer el orden de clasificación de los mensajes de seguimiento para mostrar juntos los mensajes que correspondan a la misma categoría.

Introducción

Trace.Write y Trace.Warn

Visual Basic .NET

C#

Nota

Page 214: Microsoft ASP.net - Curso Completo - Espa Ol

8 Seguimiento en aplicaciones Web con Microsoft ASP.NET

El siguiente código escribe dos mensajes de seguimiento en una página. El segundo mensaje de seguimiento aparece en rojo al utilizar el método 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 ilustración:

Existen situaciones en las que es posible que deseemos generar mensajes de seguimiento únicamente cuando el seguimiento esté habilitado a nivel de página Web o aplicación Web. Para estas situaciones, el objeto Trace tiene una propiedad Boolean denominada IsEnabled que permite invocar los métodos Write y Warn sólo cuando el seguimiento está habilitado, como muestra el siguiente código:

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); } También podemos utilizar la propiedad IsEnabled para cambiar dinámicamente el estado del seguimiento de una página, como muestra el siguiente código:

Trace.IsEnabled = False Trace.IsEnabled = false;

Ejemplo de uso de Write y Warn

Visual Basic .NET

C#

Trace.IsEnabled

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 215: Microsoft ASP.net - Curso Completo - Espa Ol

Seguimiento en aplicaciones Web con Microsoft ASP.NET 9

Visualizar los resultados de seguimiento

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

Los resultados de seguimiento a nivel de página se añaden a la parte inferior de la página .aspx para la que están habilitados. Los resultados de seguimiento muestran una gran cantidad de información, junto con los mensajes personalizados creados por las instrucciones Trace.Write y Trace.Warn.

Existen varias categorías de información visualizadas en los resultados de seguimiento. La siguiente tabla muestra una lista de cada categoría y la descripción del tipo de información que contiene.

Categoría Descripción Detalles de la petición Información sobre la petición: identificación de sesión (ID),

hora de la solicitud, tipo de petición y estado de la petición.

Información de seguimiento

Resultado de las instrucciones de seguimiento estándares y personalizadas. La columna “From First(s)” contiene el tiempo total desde la ejecución hasta que se ejecuta el seguimiento, y la columna “From Last(s)” muestra la duración del incremento.

Árbol de control Lista todos los elementos que se encuentran en la página, junto con el tamaño de cada uno.

Colección Cookies Lista las cookies que se están utilizando.

Colección Headers Lista los elementos en la cabecera Hypertext Transfer Protocol (HTTP).

Colección Form Lista los controles, y sus valores, en el formulario que se está transmitiendo.

Variables de servidor Lista todas las variables de servidor y sus valores.

Introducción

Categorías de seguimiento

Page 216: Microsoft ASP.net - Curso Completo - Espa Ol

10 Seguimiento en aplicaciones Web con Microsoft ASP.NET

Uso del seguimiento a nivel de aplicación

Las instrucciones de seguimiento a nivel de aplicación se muestran en páginas individuales

Si pageOutput=false en el archivo Web.config, el visor de seguimiento puede visualizar los resultados de seguimiento

http://servidor/proyecto/trace.axdhttp://servidor/proyecto/trace.axd

PáginaPáginaPágina

Trace=TrueTrace=True

Trace=FalseTrace=False

Trace not setTrace not set

AplicaciónAplicaciónAplicaciónTrace=True o Trace=FalseTrace=True o Trace=FalseTrace=True o Trace=FalseTrace=True o Trace=False

Trace=TrueTrace=True

ResultadoResultadoResultado

Los resultados de seguimiento se muestran en la páginaLos resultados de seguimiento se muestran en la página

Los resultados de seguimiento no se muestranLos resultados de seguimiento no se muestran

Los resultados de seguimiento se muestran en la páginaLos resultados de seguimiento se muestran en la página

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

Para una aplicación Web, habilitamos el seguimiento a nivel de aplicación en el archivo Web.config. Tras habilitar el seguimiento a nivel de aplicación, podemos visualizar las instrucciones de seguimiento en páginas individuales o en el visor de seguimiento.

Cuando habilitamos el seguimiento a nivel de aplicación, la configuración de seguimiento a nivel de página sigue vigente. Por ejemplo, si deshabilitamos el seguimiento a nivel de página para una página, y esa página forma parte de una aplicación Web en la que está habilitado el seguimiento a nivel de aplicación, el seguimiento se deshabilita para esa página específica. La siguiente tabla muestra las posibles combinaciones de habilitar y deshabilitar el seguimiento, y el resultado correspondiente para esa página.

Configuración de la página

Configuración de la aplicación

Resultado para la página

Trace=True Trace=True o

Trace=False

Los resultados de seguimiento se muestran en la página.

Trace=False Trace=True o

Trace=False

Los resultados de seguimiento no se muestran en la página.

Trace no establecido Trace=True Los resultados de seguimiento se muestran en la página.

Introducción

Configuración del seguimiento

Page 217: Microsoft ASP.net - Curso Completo - Espa Ol

Seguimiento en aplicaciones Web con Microsoft ASP.NET 11

Podemos mostrar mensajes de seguimiento a nivel de aplicación en dos

lugares: en la propia página, o en el visor de seguimiento. Para determinar cómo se muestran los resultados de seguimiento, establecemos el atributo pageOutput del elemento trace en el archivo Web.config. Mientras la configuración true muestra los resultados en la página, la configuración false mantiene los mensajes de seguimiento en memoria. El siguiente código muestra un ejemplo de deshabilitar la salida a la página:

<configuration> <system.web> <trace enabled="true" pageOutput="false"/> </system.web> </configuration> Si se deshabilita la salida de la página para el seguimiento a nivel de aplicación, los mensajes de seguimiento se almacenan en memoria. Los mensajes de seguimiento pueden visualizarse utilizando el visor de seguimiento, que es una página Web que se incluye en todas las aplicaciones Web. Utilizamos el visor de seguimiento visualizando la página 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\número_versión\Config La referencia a trace.axd (el visor de seguimiento) en el archivo machine.config se encuentra en la sección 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 vacía (path="").

El atributo localOnly que se utiliza para el seguimiento en páginas ASP.NET también se aplica a la página trace.axd. Si localOnly está establecido a true, la página trace.axd sólo puede visualizarse desde el equipo local.

Mostrar mensajes de seguimiento

Sugerencia

Page 218: Microsoft ASP.net - Curso Completo - Espa Ol

12 Seguimiento en aplicaciones Web con Microsoft ASP.NET

Demostración: seguimiento en una aplicación Web

Seguimiento a nivel de página

Seguimiento a nivel de aplicación

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

En esta demostración, veremos cómo habilitar seguimiento a nivel de página y a nivel de aplicación y agregar instrucciones de seguimiento a un formulario Web Form.

Ejecutar la demostración 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 página CallClassLibraries.aspx, incluyendo el atributo Trace en la directiva @ Page, como muestra el siguiente código: <%@ Page Language="vb" Trace="true" Codebehind="CallClassLibraries.aspx.vb" AutoEventWireup="false" Inherits="CallClassVB.CallClassLibraries" %>

La información de seguimiento aparece mejor en páginas generadas con flowLayout. Si una página está generada con gridLayout, los mensajes de seguimiento aparecen detrás del contenido de la página.

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

4. Generar y examinar la página CallClassLibraries.aspx. La información de seguimiento se muestra en la página.

Nota

Page 219: Microsoft ASP.net - Curso Completo - Espa Ol

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 página, y visualizarla de nuevo.

No es necesario volver a generar el proyecto, puesto que no hemos modificado el código.

No se muestran mensajes de seguimiento en la página. 7. Habilitar el seguimiento a nivel de aplicación editando la etiqueta de

seguimiento del archivo Web.config. Establecer el atributo pageOutput a true, como muestra el siguiente código: <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 información de seguimiento.

8. Actualizar la vista de la página CallClassLibraries.aspx y observar que los mensajes de seguimiento no se muestran debido a que el seguimiento está deshabilitado explícitamente para esta página.

9. Generar y examinar la página VBForm.aspx. Estas páginas no tienen habilitado el seguimiento, pero los resultados de seguimiento se muestran igualmente debido a que el seguimiento a nivel de aplicación está habilitado.

10. Hacer que un estudiante examine la página VBForm.aspx en el equipo del instructor. No debería ver el resultado de seguimiento porque el atributo localOnly está establecido a true.

11. Agregar la siguiente instrucción de seguimiento a la página CSharpForm.aspx en el procedimiento de evento button1_onclick: Trace.Warn ("C#", "Value to double " + Textbox1.Text)

12. Generar y examinar la página CSharpForm.aspx. Esta página tampoco tiene habilitado el seguimiento, pero los resultados de seguimiento, incluyendo el mensaje personalizado que acabamos de añadir, se muestran igualmente.

13. Cambiar la etiqueta de seguimiento de Web.config para deshabilitar pageOutput: <trace enabled="true" pageOutput="false"/>

14. Visualizar la página VBForm.aspx en el navegador. El resultado de seguimiento no se muestra en la página; en lugar de ello, se escribe en memoria.

15. Visualizar la página http://localhost/CallClassVB/trace.axd para visualizar las instrucciones de seguimiento almacenadas en memoria.

Nota

Page 220: Microsoft ASP.net - Curso Completo - Espa Ol

14 Seguimiento en aplicaciones Web con Microsoft ASP.NET

Ejecutar la demostración 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 página CallClassLibraries.aspx, incluyendo el atributo Trace en la directiva @ Page, como muestra el siguiente código: <%@ Page Language="c#" Trace="true" Codebehind="CallClassLibraries.aspx.cs" AutoEventWireup="false" Inherits="CallClassCS.CallClassLibraries" %>

La información de seguimiento aparece mejor en páginas generadas con flowLayout. Si una página se ha generado con gridLayout, los mensajes de seguimiento aparecen detrás del contenido de la página.

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

4. Generar y examinar la página CallClassLibraries.aspx. La información de seguimiento se muestra en la página.

5. Introducir un precio y hacer clic en C# Shipping Cost. Ver los mensajes de seguimiento personalizados.

6. Deshabilitar el seguimiento para la página y visualizar de nuevo la página.

No es necesario volver a generar el proyecto ya que no se ha modificado el código.

No se muestran mensajes de seguimiento en la página. 7. Habilitar el seguimiento a nivel de aplicación modificando la etiqueta de

seguimiento en el archivo Web.config. Establecer el atributo pageOutput a true, como muestra el siguiente código: <trace enabled="true" requestLimit="10" pageOutput="true" traceMode="SortByTime" localOnly="true" /> Observar que el atributo localOnly está establecido a true. Esto permite que sólo los navegadores locales visualicen la información de seguimiento.

8. Actualizar la vista de la página CallClassLibraries.aspx y observar que los mensajes de seguimiento no se muestran porque el seguimiento está deshabilitado explícitamente para esta página.

Nota

Nota

Page 221: Microsoft ASP.net - Curso Completo - Espa Ol

Seguimiento en aplicaciones Web con Microsoft ASP.NET 15

9. Generar y examinar la página VBForm.aspx. Estas páginas no tienen

habilitado el seguimiento, pero los resultados de seguimiento se muestran porque el seguimiento a nivel de aplicación está habilitado.

10. Hacer que un estudiante examine la página VBForm.aspx en el equipo del instructor. No debería ver el resultado de seguimiento porque el atributo localOnly está establecido a true.

11. Agregar la siguiente instrucción de seguimiento a la página VBForm.aspx en el procedimiento de evento button1_onclick: Trace.Warn ("VB", "Value to double " + Textbox1.Text);

12. Generar y examinar la página VBForm.aspx. Esta página tampoco tiene habilitado el seguimiento, pero los resultados de seguimiento, incluyendo el mensaje personalizado que acabamos de añadir, 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 página VBForm.aspx en el navegador. El resultado de seguimiento no se muestra en la página; en lugar de ello, se escribe en memoria.

15. Visualizar la página http://localhost/CallClassCS/trace.axd para ver las instrucciones de seguimiento almacenadas en memoria.

Page 222: Microsoft ASP.net - Curso Completo - Espa Ol

16 Seguimiento en aplicaciones Web con Microsoft ASP.NET

Seguimiento en un componente

Importar la biblioteca System.Web

Habilitar el seguimiento

Invocar los métodos Trace

HttpContext.Current.Trace.IsEnabled = TrueHttpContext.Current.Trace.IsEnabled = True

Imports System.WebImports System.Web

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

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

using System.Web;using System.Web;

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

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

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

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

Si un componente es invocado desde un formulario Web Form, podemos agregar instrucciones de seguimiento a ese componente, lo que permitirá generar mensajes de seguimiento tanto para el formulario Web Form como para el componente.

Para utilizar el seguimiento en un componente, debemos importar el espacio de nombres System.Web, habilitar el seguimiento en el componente y agregar los mensajes de seguimiento utilizando los métodos Write y Warn.

Agregar seguimiento a un componente

1. En la parte superior del componente, importar el espacio de nombres System.Web: Imports System.Web using System.Web;

2. En el constructor de la clase a la que deseamos agregar instrucciones de seguimiento, habilitar el seguimiento con la siguiente instrucción: HttpContext.Current.Trace.IsEnabled = True HttpContext.Current.Trace.IsEnabled = true; Como el seguimiento está adjunto a una página, debemos determinar qué página ejecuta el componente. En el código anterior, esto se consigue utilizando HttpContext.Current, que obtiene el objeto Context para la petición actual.

Introducción

Seguimiento en un componente

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 223: Microsoft ASP.net - Curso Completo - Espa Ol

Seguimiento en aplicaciones Web con Microsoft ASP.NET 17

3. En el método en el que se desea generar mensajes de seguimiento,

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

Cuando el seguimiento está habilitado en un componente, los resultados de seguimiento se escriben en las páginas que acceden al componente, aunque el seguimiento esté deshabilitado para esa página.

La siguiente tabla muestra una lista de los resultados al habilitar o deshabilitar el seguimiento en una página o en un componente.

Configuración del componente

Configuración de la página

Resultado

El seguimiento está habilitado en el constructor

Seguimiento deshabilitado

El seguimiento está habilitado cuando se invocan todos los métodos del componente.

El seguimiento está habilitado en un método

Seguimiento deshabilitado

El seguimiento está habilitado cuando sólo se invoca ese único método.

El seguimiento está deshabilitado en el constructor

Seguimiento habilitado

El seguimiento está deshabilitado cuando se invocan los métodos del componente.

El seguimiento no está establecido en el componente

Seguimiento habilitado

El seguimiento está habilitado cuando se invocan los métodos del componente.

Los mensajes de seguimiento de un componente aparecerán en todas las páginas con seguimiento habilitado que invoquen el componente si el seguimiento no se ha deshabilitado intencionadamente en el componente.

Visual Basic .NET

C#

Importante

Page 224: Microsoft ASP.net - Curso Completo - Espa Ol

18 Seguimiento en aplicaciones Web con Microsoft ASP.NET

Lección: depuración remota

Cómo depurar remotamente

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

La depuración se utiliza normalmente para capturar errores durante la creación de una aplicación Web. La mayor parte de la depuración tiene lugar localmente; es decir, ejecutamos el depurador de Visual Studio .NET en el equipo que hospeda la aplicación Web. La depuración remota permite depurar una aplicación Web que se ejecuta en una ubicación remota. En esta lección, aprenderemos a realizar la depuración remota.

En esta lección, aprenderemos a depurar aplicaciones remotamente.

Introducción

Objetivos de la lección

Page 225: Microsoft ASP.net - Curso Completo - Espa Ol

Seguimiento en aplicaciones Web con Microsoft ASP.NET 19

Cómo depurar remotamente

La depuración remota:Depura aplicaciones Web remotamenteSimplifica el desarrollo en equipoSimplifica la administración de sitios Web

Requerimientos para la depuración remota:Requiere Visual Studio .NET o componentes remotos en el servidorVisual Studio .NET debe estar instalado en el clienteRequiere acceso administrativo al servidorRequiere acceso para el usuario que realiza la depuración

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

La depuración remota es el proceso de depurar aplicaciones Web que se están ejecutando en otro servidor. La depuración remota permite depurar aplicaciones Web en varios servidores distintos desde una sola estación de trabajo.

Para que la depuración 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 aplicación Web que deseamos depurar.

Visual Studio .NET debe estar instalado en el equipo cliente, que es la estación de trabajo desde la que se producirá la depuración.

Debemos disponer de acceso administrativo al servidor que hospeda la aplicación Web.

El servidor remoto debe conceder acceso al usuario que realiza la depuración. 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.

Introducción

Requerimientos para la depuración remota

Page 226: Microsoft ASP.net - Curso Completo - Espa Ol

20 Seguimiento en aplicaciones Web con Microsoft ASP.NET

Depurar remotamente

1. En el equipo cliente, iniciar Visual Studio .NET. 2. En el menú Archivo, hacer clic en Abrir y clic en Proyecto desde Web. 3. En el cuadro de diálogo Abrir Proyecto desde Web, escribir la dirección

URL (Uniform Resource Locator) del servidor desde el que deseamos abrir el proyecto, y hacer clic en Aceptar.

4. En el cuadro de diálogo Abrir proyecto, ir al proyecto en el servidor remoto y hacer clic en Abrir.

5. Después de abrir el proyecto, podemos establecer puntos de interrupción y ejecutar la aplicación Web en modo de depuración, igual que si estuviéramos ejecutando una aplicación local.

Para más información sobre la depuración remota, consultar “Depurar aplicaciones Web en un servidor remoto” y “Configurar la depuración remota” en el SDK de Microsoft .NET Framework.

Procedimiento de depuración remota

Nota

Page 227: Microsoft ASP.net - Curso Completo - Espa Ol

Práctica A: Validar la entrada de datos del usuario

MedicalMedical.aspxMedicalMedical.aspx

BenefitsHome PageDefault.aspx

BenefitsHome PageDefault.aspx

Life InsuranceLife.aspxLife InsuranceLife.aspx

RetirementRetirement.aspxRetirementRetirement.aspx

DentalDental.aspxDentalDental.aspx

Dentists

DoctorsDoctors.aspx DoctorsDoctors.aspx

Doctors

Logon PageLogin.aspxLogon PageLogin.aspx

RegistrationRegister.aspxRegistrationRegister.aspx

CohoWinery

ProspectusProspectus.aspxProspectusProspectus.aspx

XML Web ServicedentalService1.asmx

XML Web ServicedentalService1.asmx

Page HeaderHeader.ascxPage HeaderHeader.ascx

ASPState

tempdb

Lab Web Application

User Controlnamedate.ascxUser Controlnamedate.ascx

Menu ComponentClass1.vb or Class1.cs

Menu ComponentClass1.vb or Class1.cs

XML Files

Web.config

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

En este laboratorio, aprenderemos a:

Utilizar controles de validación para validar valores de cuadros de texto en un formulario Web Form con Microsoft® ASP.NET.

Utilizar un control de validación ValidationSummary para resumir errores de validación en un formulario Web Form.

Este laboratorio se centra en los conceptos de este módulo. Por ello, podría no cumplir las recomendaciones de seguridad de Microsoft.

Para trabajar en este laboratorio, es necesario tener:

Conocimientos sobre cómo agregar controles Web a un formulario Web Form ASP.NET.

Conocimientos sobre cómo escribir una función Microsoft Visual Basic® Scripting Edition (VBScript) en el lado del cliente.

Conocimientos sobre cómo crear un procedimiento de evento para un control Web.

Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios de este curso, crearemos un sitio Web que permita a los empleados seleccionar y configurar los beneficios que elijan.

La aplicación Web Benefits tiene un formulario Web Form denominado life.aspx. Esta página 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 validación para validar las entradas en estos campos de texto. También agregaremos un control de validación resumen para resumir las entradas no válidas en la página.

Objetivos

Nota

Requisitos previos

Escenario

Tiempo estimado para completar el laboratorio: 15 minutos

Page 228: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 0 Configuración del laboratorio

Para realizar este laboratorio, es necesario haber creado el proyecto de la aplicación 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 solución LabApplication

Realizar este procedimiento únicamente si no se ha creado un archivo de solución LabApplication.

Utilizando Visual Studio .NET, crear una nueva solución en blanco denominada LabApplication: En el menú Archivo, seleccionar Nuevo, y hacer clic en Solución en

blanco. En el cuadro de diálogo Nuevo proyecto, escribir LabApplication en el

cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

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

Crear un nuevo proyecto de aplicación Web ASP.NET, denominado BenefitsVB o BenefitsCS, en la solución LabApplication: En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto. En el cuadro de diálogo 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 Aplicación Web ASP.NET,

establecer la Ubicación 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 Solución, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solución, es importante el uso de mayúsculas 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 mayúsculas el nombre del proyecto Benefits.

Importante

Importante

Precaución

Page 229: Microsoft ASP.net - Curso Completo - Espa Ol

Actualizar el proyecto Benefits

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsVB o BenefitsCS, seleccionar Agregar, y hacer clic en Agregar elemento existente. Ir a la carpeta VB\Starter\BenefitsVB Ir a la carpeta CS\Starter\BenefitsCS Estas carpetas pueden encontrarse dentro del fichero labs06.zip

1. En el cuadro Archivos de tipo del cuadro de diálogo Agregar elemento existente – Benefits, hacer clic en Todos los archivos (*.*).

2. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir. 3. Hacer clic en Sí a la pregunta de si sobrescribir o recargar los archivos.

Crear la biblioteca de clases BenefitsList

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

1. Crear un proyecto de biblioteca de clases. Crear un nuevo proyecto de biblioteca de clases Visual Basic .NET con el nombre BenefitsListVB y añadirlo a la solución LabApplication: En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto. En el cuadro de diálogo 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 solución, y clic en Aceptar. Crear un nuevo proyecto de biblioteca de clases Visual C# .NET con el nombre BenefitsListCS y añadirlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto. b. En el cuadro de diálogo 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 solución, y clic en Aceptar.

Verificar que se han escrito correctamente las mayúsculas del proyecto BenefitsList.

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

Importante

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Importante

Page 230: Microsoft ASP.net - Curso Completo - Espa Ol

Actualizar el proyecto BenefitsList

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

3. Ir al proyecto BenefitsList. Ir a la carpeta VB\Starter\BenefitsListVB. Ir a la carpeta CS\Starter\BenefitsListCS. Estas carpetas pueden encontrarse dentro del fichero labs06.zip

4. En el cuadro Archivos de tipo del cuadro de diálogo 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 solución LabApplication, completar los siguientes pasos para agregar una referencia al componente BenefitsList que acabamos de crear: a. Hacer clic con el botón derecho en el proyecto BenefitsVB o

BenefitsCS en el Explorador de soluciones y hacer clic en Agregar referencia.

b. En el cuadro de diálogo Agregar referencia, en la pestaña Proyectos, hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.

c. En la lista Componentes seleccionados, seleccionar el componente BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar. El componente se agrega a la carpeta Referencias en el Explorador de soluciones.

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Page 231: Microsoft ASP.net - Curso Completo - Espa Ol

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 página life.aspx en el proyecto Benefits de la solución LabApplication.

2. Mediante una operación 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 ilustración.

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

en blanco * txtName

vldBirth La Fecha de nacimiento no puede dejarse en blanco

* txtBirth

vldCoverage La cobertura no puede dejarse en blanco

* txtCoverage

Cuando cambiamos la propiedad Text de los controles, cambiamos el texto que aparece en la vista Diseño. La página debería tener ahora un aspecto similar a la siguiente ilustración.

Page 232: Microsoft ASP.net - Curso Completo - Espa Ol

4. Generar y examinar la página 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é? ____________________________________________________________

____________________________________________________________

Page 233: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 2 Uso del control ValidationSummary

En este ejercicio, utilizaremos un control ValidationSummary para hacer un resumen de los errores de validación de la página life.aspx.

Agregar un control ValidationSummary a la página life.aspx

1. Mediante una operación 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 página debería ser similar al de la siguiente ilustración.

3. Generar y examinar la página life.aspx. 4. En el explorador, dejar en blanco los campos Name, Birth Date y

Coverage y hacer clic en Guardar. Además del asterisco rojo que aparece junto a las entradas no válidas, deberíamos ver un resumen de errores en la parte inferior de la página.

5. ¿De dónde proviene el resumen de mensajes de error? ____________________________________________________________

____________________________________________________________

Page 234: Microsoft ASP.net - Curso Completo - Espa Ol

Probar si la página es válida

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 página debería ser similar al de la siguiente ilustración.

2. Abrir el procedimiento de evento Click para el botón Guardar. 3. Modificar el código del procedimiento de evento para probar si los controles

de la página son válidos y, si lo son, escribir un mensaje en el control lblMessage indicando que la página es válida. El código debería ser como el siguiente: If Page.IsValid Then lblMessage.Text = "La página es válida" End If if (Page.IsValid) { lblMessage.Text = "La página es válida"; }

4. Generar y examinar la página 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 página es válida.

Visual Basic .NET

C#

Page 235: Microsoft ASP.net - Curso Completo - Espa Ol

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 operación de arrastrar y soltar, ubicar un control CompareValidator en el formulario Web Form life.aspx, junto al control vldBirth RequiredFieldValidator.

2. Establecer las propiedades del control CompareValidator como se muestra en la siguiente tabla.

Propiedad Valor ErrorMessage El valor de Fecha de nacimiento no es válido

Text *

ControlToValidate txtBirth

Operator DataTypeCheck

Type Date

ID vldBirthType

El aspecto de la página debería ser similar al de la siguiente ilustración.

3. Generar y examinar la página life.aspx. 4. Introducir una fecha no válida, como 14/3/02 (el mes 14 es incorrecto), en el

campo Birth Date y hacer clic en Guardar. Debería aparecer el asterisco rojo junto al campo Birth Date.

5. Introducir una fecha válida, como s 12/3/02, en el campo Birth Date y hacer clic en Guardar. El asterisco rojo junto al campo Birth Date debería desaparecer.

Page 236: Microsoft ASP.net - Curso Completo - Espa Ol

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 operación de arrastrar y soltar, colocar un control RegularExpressionValidator en el formulario Web Form life.aspx, junto al control vldCoverage RequiredFieldValidator.

2. Establecer las propiedades del control como muestra la siguiente tabla.

Propiedad Valor ErrorMessage La Cobertura debe tener un valor de tipo moneda

Text *

ControlToValidate txtCoverage

ValidationExpression \ d + ( \ . \ d { 2 } ) ?

ID vldCoverageType

El aspecto de la página debería ser similar al de la siguiente ilustración.

3. ¿Cuáles son las entradas válidas para el campo Coverage? ____________________________________________________________

____________________________________________________________

4. Generar y examinar la página life.aspx. 5. Introducir un valor incorrecto, como 333.3, en el campo Coverage y hacer

clic en Guardar. Debería 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 debería desaparecer.

Page 237: Microsoft ASP.net - Curso Completo - Espa Ol

Índice

Descripción 1

Lección: Descripción de la validación de entrada de datos del usuario 2

Lección: uso de los controles de validación 8

Lección: validación de páginas 30

Validación de entrada de datos de usuario

Page 238: Microsoft ASP.net - Curso Completo - Espa Ol
Page 239: Microsoft ASP.net - Curso Completo - Espa Ol

Validación de entrada de datos de usuario 1

Descripción

Descripción de la validación de entrada de datos de usuario

Uso de controles de validación

Validación de páginas

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

Al crear un control de entrada de datos, como un control TextBox, podemos tener ciertas expectativas del tipo de entrada que el usuario introducirá en ese control. Una entrada de datos incorrecta, como mínimo, retrasará al usuario, y puede incluso terminar nuestra aplicación 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 comprobación, enlazamos al menos un control de validación 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 módulo, estudiaremos los controles de validación de entrada de datos disponibles en Microsoft® ASP.NET. También estudiaremos cómo aplicar de forma eficaz estos controles a un formulario Web Form con ASP.NET utilizando Microsoft Visual Studio® .NET.

En este módulo, aprenderemos a:

Identificar cuándo es apropiada la validación de entrada de datos en los formularios Web Forms.

Utilizar controles de validación de entrada de datos para verificar los datos introducidos por el usuario en un formulario Web Form.

Verificar que todos los controles de validación de una página son válidos.

Introducción

Objetivos

Page 240: Microsoft ASP.net - Curso Completo - Espa Ol

2 Validación de entrada de datos de usuario

Lección: validación de entrada de datos del usuario

¿Qué es es la validación de entrada de datos?

Validación del lado del cliente y del lado del servidor

Controles de validación ASP.NET

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

En esta lección, estudiaremos cómo la validación 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 petición sea procesada en el servidor. También estudiaremos los tipos de controles de validación de entrada de datos disponibles en ASP.NET.

En esta lección, aprenderemos a:

Explicar el concepto de validación. Explicar la diferencia entre validación del lado del cliente y validación del

lado del servidor. Combinar los tipos apropiados de controles de validación ASP.NET para

determinados requerimientos de entrada.

Introducción

Objetivos de la lección

Page 241: Microsoft ASP.net - Curso Completo - Espa Ol

Validación de entrada de datos de usuario 3

¿Qué es la validación de entrada de datos?

Verifica que el usuario ha introducido correctamente el valor de un control

Bloquea el procesamiento de una página hasta que todos los controles son válidos

Evita el spoofingo añadircódigo mal intencionado

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

La validación 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 validación 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 envíos incorrectos o caídas 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 validación de entrada de datos pueden mejorar enormemente el uso de una aplicación Web, mejorando por tanto la percepción de usuario de la calidad global del sitio Web.

Los controles de validación de entrada de datos actúan 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 validación de entrada de datos de un formulario Web Form actúan como filtros de datos antes de que la página o la lógica de servidor sea procesada.

En ASP.NET, la validación 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 validación. Si el navegador soporta la validación del lado del cliente, los controles de validación de entrada de datos realizan la comprobación de errores en el cliente antes de enviar los datos al servidor. El usuario recibe información inmediata sobre si los datos que ha introducido son válidos o no. Por motivos de seguridad, toda validación de entrada de datos que se ejecute en el lado del cliente se repite a continuación en el lado del servidor.

La validación 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 número de caracteres, el uso de dígitos y/o letras, el intervalo del valor, una cadena específica de caracteres, o una fórmula matemática.

Introducción

Verificar valores de control

Page 242: Microsoft ASP.net - Curso Completo - Espa Ol

4 Validación de entrada de datos de usuario

Por ejemplo, un control de entrada de datos que solicita al usuario que introduzca su número de teléfono podría tener un control de validación de entrada de datos adjunto que verificara que el usuario únicamente introduce números en un formato basado en el número de teléfono. Introducir letras o muy pocos números activaría el control de validación de entrada de datos para validar la entrada de datos.

La entrada de usuario que concuerda con el formato predeterminado es procesada por el formulario Web Form. La entrada de usuario que no concuerda con el formato predeterminado provoca un mensaje de error que detiene el procesamiento por parte del formulario Web hasta que la entrada de usuario se corrige para cumplir con el formato previsto y la página haya sido reenviada para su procesamiento.

Los controles de validación protegen los formularios Web Forms de dos importantes peligros: spoofing y código mal intencionado. Ejecutando todos los controles de validación en el lado del servidor, con independencia de la validación del lado del cliente, ASP.NET protege de las siguientes amenazas:

Spoofing Spoofing es cuando un usuario modifica la página HTML (Hypertext Markup Language) que se le ha enviado, y devuelve valores que hacen que parezca que ha introducido datos válidos o pasado una comprobación de autorización. La validación ú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 código de validación del lado del cliente, lo que crea un falso nivel de autorización. Con ASP.NET, la validación 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 validación.

Código mal intencionado Cuando un usuario puede agregar texto ilimitado a una página Web mediante controles de entrada de datos de usuario que no dispongan de validación de entrada de datos, puede introducir código mal intencionado. Cuando el usuario envía la siguiente solicitud al servidor, este código añadido podría 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 validación, un usuario mal intencionado podría explotar esta falta de validación para provocar varios problemas, incluyendo:

• Generar un error de tipo buffer overrun y una caída 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, contraseñas y números de tarjetas de crédito.

Procesamiento de bloque de errores

Spoofing y código mal intencionado

Page 243: Microsoft ASP.net - Curso Completo - Espa Ol

Validación de entrada de datos de usuario 5

Validación del lado del cliente y del lado del servidor

ASP.NET puede generar validación del lado del cliente y del lado del servidorValidación del lado del cliente

Dependiente de la versión del navegadorRespuesta inmediataReduce los ciclos de postback

Validación del lado del servidorRepite toda la validación del lado del clientePuede validar contra datos almacenados

¿Válido?

¿Válido?

El usuariointroduce datos

No

No

Mensaje de error

ClienteServidor

Aplicación Webprocesada

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

La validación de entrada de datos puede tener lugar tanto en el servidor como en el cliente. Aunque ASP.NET siempre requiere validación del lado del servidor, la validación del lado del cliente es una opción con algunos navegadores.

Los controles de validación de ASP.NET disponen de soporte tanto del lado del cliente como del lado del servidor. La validación del lado del cliente utiliza JavaScript y scripts DHTML (HTML Dinámico). La validación del lado del servidor puede ser desarrollada en cualquier lenguaje basado en Microsoft .NET, y se compila a Microsoft Intermediate Language (MSIL). Tanto la validación del lado del cliente como la validación del lado del servidor utilizan el mismo modelo de programación, aunque algunas variaciones entre los lenguajes pueden crear pequeñas diferencias en las funciones de validación.

La validación 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 validación 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 validación del lado del servidor.

Escribir múltiples versiones de código de validación para soportar tanto el servidor como los diferentes navegadores puede exigir mucho tiempo al desarrollador. Los controles de validación ASP.NET eliminan este problema ya que la lógica de validación se encapsula en los controles. Los controles crean código específico para los navegadores de forma que los usuarios con soporte de scripts del lado del cliente tendrán validación de entrada de datos. Los navegadores que no soporten scripts no recibirán los scripts de validación en el lado del cliente.

En versiones de navegador que soporten la validación de entrada de datos, como Microsoft Internet Explorer 4 o posterior, la validación del lado del cliente se produce cuando el usuario hace clic en el botón Submit. La página no se publicará de nuevo en el servidor hasta que toda la validación del lado del

Introducción

Validación del lado del cliente

Page 244: Microsoft ASP.net - Curso Completo - Espa Ol

6 Validación 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 validación del lado del cliente para el control de entrada de datos completo. Esta validación utilizando el TABULADOR ofrece al usuario información inmediata sobre los datos que ha introducido.

Todos los controles de validación 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 página se envía de nuevo al servidor. Esta repetición evita el spoofing de usuarios que no ejecutan el script del lado del cliente e intentan introducir datos no válidos.

Los controles de validación del lado del servidor pueden escribirse en cualquier lenguaje basado en .NET, y se compilan en MSIL antes de ser ejecutados en el servidor.

Además de validar el formato de los datos introducidos, los controles de validación del lado del servidor pueden utilizarse para comparar la entrada de datos del usuario con datos almacenados. Esta funcionalidad permite validación contra diversos elementos, como contraseñas previamente almacenadas o restricciones geográficas, incluyendo las leyes y los impuestos locales.

Validación del lado del servidor

Page 245: Microsoft ASP.net - Curso Completo - Espa Ol

Validación de entrada de datos de usuario 7

Controles de validación ASP.NET

ASP.NET proporciona controles de validación para:

Comparar valores

Comparar con una fórmula personalizada

Comparar con un intervalo

Comparar con un modelo de expresión habitual

Requerir entrada de datos por parte del usuario

Resumir los controles de validación de una página

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

ASP.NET incluye los controles de validación que se muestran en la siguiente tabla.

Control de validación Función CompareValidator Compara un control de entrada de datos con otro, un valor fijo,

un tipo de datos o un archivo. Por ejemplo, este control puede utilizarse para campos de verificación de contraseñas.

CustomValidator Nos permite escribir nuestro propio código para crear la expresión de validación. Por ejemplo, este control puede utilizarse para verificar que el valor es un número primo.

RangeValidator Similar al control CompareValidator, pero este control puedeverificar que la entrada de datos de usuario está entre dos valores o los valores de otros controles de entrada de datos. Por ejemplo, este control puede utilizarse para verificar que la entrada el usuario coincide con el intervalo de edad esperado.

RegularExpression Validator

Verifica que la entrada coincide con un modelo definido por una expresión habitual. Este control de validación permite comprobar secuencias predecibles de caracteres, como números de la seguridad social, direcciones electrónicas, números de teléfono y códigos postales. Visual Studio .NET proporciona modelos predefinidos para expresiones habituales como números de teléfono.

RequiredFieldValidator Comprueba si se ha introducido un valor en un control. Es el único control de validación que requiere un valor. El resto de controles de validación de entrada de datos aceptarán un control vacío como respuesta válida.

ValidationSummary Muestra un resumen de todos los errores de validación para todos los controles de validación de la página. Este control se ubica normalmente cerca del botón Submit para proporcionar respuesta inmediata sobre el estado de entrada de datos de la página.

Controles de validación

Page 246: Microsoft ASP.net - Curso Completo - Espa Ol

8 Validación de entrada de datos de usuario

Lección: uso de los controles de validación

Agregar controles de validación a un formulario Web Form

Posicionar controles de validación en un formulario Web Form

Combinar controles de validación

Controles de validación para la entrada de datos

Uso del control RegularExpressionValidator

Demostración: uso de controles de validación

Uso del control CustomValidator

Demostración: uso del control CustomValidator

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

En esta lección, estudiaremos cómo aplicar controles de validación a controles de entrada de datos en un formulario Web Form ASP.NET.

Validar los datos introducidos por el usuario solía ser un proceso difícil. Para cada control de entrada de datos, era necesario escribir primero código de validación para el servidor en un determinado lenguaje. A continuación, si se realizaba validación en el lado del cliente, necesitábamos escribir la validación equivalente en el lado del cliente en un script diferente para cada navegador. ASP.NET y Visual Studio .NET han hecho más fácil la validación de la entrada de usuario al proporcionar controles de validación que proporcionan código en el lado del servidor y en el lado del cliente al agregarlos a nuestro formulario Web Form.

En esta lección, aprenderemos a:

Agregar un control de validación a un formulario Web Form y asociarlo a un control de entrada de datos.

Posicionar los controles de validación en una página Web para soportar el uso correcto del control de entrada de datos asociado.

Utilizar los controles de validación 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 múltiples controles de validación a un único control de entrada de datos.

Introducción

Objetivos de la lección

Page 247: Microsoft ASP.net - Curso Completo - Espa Ol

Validación de entrada de datos de usuario 9

Agregar controles de validación a un formulario Web Form

1. Agregar un control de validación

2. Seleccionar el control de entrada de datos para validar

3. Establecer propiedades de validación

<asp:Type_of_Validatorid="Validator_id"runat="server"ControlToValidate="txtName"ErrorMessage="Message_for_error_summary"Display="static|dynamic|none"Text="Text_to_display_by_input_control">

</asp:Type_of_Validator>

<asp:Type_of_Validatorid="Validator_id"runat="server"ControlToValidate="txtName"ErrorMessage="Message_for_error_summary"Display="static|dynamic|none"Text="Text_to_display_by_input_control">

</asp:Type_of_Validator>

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

111

222

333

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

Como todos los controles de validación de entrada de datos comparten un modelo de objetos común, el proceso de agregar controles de validación a una página es el mismo para todos los controles. En Visual Studio .NET, simplemente arrastramos el control de validación de entrada a una página, seleccionamos el control de entrada a validar y establecemos las propiedades.

Para agregar un control de validación, abrimos el cuadro de herramientas del formulario Web Form, seleccionamos uno de los controles de validación 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 múltiples controles de validación a un único control de entrada de datos. Todos los controles de validación 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 validación de entrada de datos está ubicado en la página, utilizamos la ventana Propiedades para introducir las propiedades específicas del control, como la expresión de validación, el mensaje de error y mensaje de texto.

La sintaxis compartida para los controles de validación 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>

Introducción

Agregar un control de validación

Seleccionar el control de entrada de datos para validar

Establecer las propiedades de validación

Page 248: Microsoft ASP.net - Curso Completo - Espa Ol

10 Validación de entrada de datos de usuario

Cada control de validación tiene propiedades únicas adicionales que definen el modo de funcionamiento. Dos de las propiedades que comparten todos los controles de validación, a excepción del control ValidationSummary, son Type y EnableClientScript:

Type La propiedad Type es el tipo de datos que se validará. Visual Studio .NET ajustará automáticamente 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 validación del lado del cliente. El valor predeterminado de esta propiedad es true. ASP.NET crea procedimientos de validación en el lado del cliente en Microsoft JScript® .NET, y crea procedimientos de validación del lado del servidor en C# y Microsoft Visual Basic® .NET. Esta diferencia de lenguaje puede provocar pequeñas diferencias entre las implementaciones de controles de validación en el lado del cliente y en el lado del servidor.

Page 249: Microsoft ASP.net - Curso Completo - Espa Ol

Validación de entrada de datos de usuario 11

Posicionar controles de validación en un formulario Web Form

Crear mensajes de errorSeleccionar modo de presentación

Estático

Dinámico

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

Los controles de validación de entrada de datos pueden mostrar un mensaje de error cuando se produce una violación en la entrada de datos. Es importante posicionar los controles de validación 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 validación en la página donde debe aparecer el mensaje de error.

El código HTML estándar para un control de validación de entrada de datos es el siguiente:

<asp:type_of_validator id="validator_id" runat="server" ControlToValidate="control_id" ErrorMessage="error_message_for_error_summary" Display="static|dynamic|none" Text="Text_to_display_by_input_control"> </asp:type_of_validator> Los controles de validación de entrada de datos ASP.NET contienen dos propiedades de mensajes de error: una propiedad ErrorMessage y una propiedad Text, pudiéndose mostrar ambas en la ubicación del control de validación 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 ubicación de un control de validación cuando éste se dispara, si no está establecida la propiedad Text. Este mensaje también se incluirá en un control ValidationSummary si se utiliza uno en el formulario Web Form.

Introducción

Mensajes de error

Page 250: Microsoft ASP.net - Curso Completo - Espa Ol

12 Validación de entrada de datos de usuario

Propiedad Text

La propiedad Text es el texto alternativo que se mostrará en la ubicación del control de validación cuando se utilizan las propiedades ErrorMessage y Text, y se dispara el control de validación. 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 válido para indicar dónde 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 validación, como muestra el siguiente código: <asp:type_of_validator…>Text</asp:type_of_validator> En este módulo, observarmos la propiedad Text declarada explícitamente, como muestra el siguiente código: <asp:type_of_validator…Text="Text"> </asp:type_of_validator>

La propiedad Display establece el espacio de mensajes de error desde múltiples controles de validación cuando se muestra el formulario Web Form en FlowLayout. La propiedad Display únicamente afecta a mensajes de error en la ubicación del control de validación. 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 Descripción Static Define una presentación prefijada para el mensaje de error, con cada

control de validación ocupando un espacio, aunque no haya texto de mensaje de error visible. Esta opción permite definir una presentación fija para la página, como se muestra en la ilustración anterior.

De forma predeterminada, Visual Studio .NET utiliza Display="static" para posicionar el texto del mensaje de error.

Dynamic Permite que los controles de validación se representen en la página como parte del flujo de texto. El uso de esta opción evita que se muestren espacios en blanco en la página cuando no se invocan los controles de validación de entrada de datos, como se muestra en la ilustración anterior. En ocasiones, esta opción hace que los controles tengan movimiento en el formulario Web Form cuando se muestran mensajes de error.

None Bloquea la visualización de mensajes de error en la ubicación del control de validación.

Establecer la propiedad Display

Page 251: Microsoft ASP.net - Curso Completo - Espa Ol

Validación de entrada de datos de usuario 13

Combinar controles de validación

Pueden existir múltiples controles de validación en un único control de entrada de datos

Únicamente RequiredFieldValidator comprueba los controles vacíos

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

En ocasiones, una única función o control de validación no es suficiente para verificar que el usuario ha introducido correctamente los datos en un control de entrada.

Por ejemplo, un control TextBox con números de teléfono puede requerir una entrada, ajustarse a uno o varios modelos de número de teléfono y ser verificada contra una base de datos que almacena números de teléfono. En este escenario, TextBox debería estar enlazado a un control RequiredFieldValidator, un control RegularExpressionValidator con varios patrones y un control CustomValidator con acceso a una base de datos.

Podemos asociar múltiples controles de validación a un único control de entrada de datos. Esta asociación muchos-a-uno de los controles de validación permite la introducción de datos del usuario para más de un requerimiento de validación.

El siguiente código de ejemplo muestra un único control de entrada de datos para un número de teléfono. 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 código define el control TextBox que se está validando: <asp:TextBox id="txtPhone1" runat="server" > </asp:TextBox>

Introducción

Múltiples controles de validación en un único control de entrada

Ejemplo

Page 252: Microsoft ASP.net - Curso Completo - Espa Ol

14 Validación de entrada de datos de usuario

Control RequiredFieldValidator

El siguiente código 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 código define el control RegularExpressionValidator que verifica que la entrada en txtPhone1 coincide con el modelo de número de teléfono 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 código define el control CustomValidator que invoca la función MyServerValidation, que compara la entrada en txtPhone1 con una base de datos de números de teléfono: <asp:CustomValidator id="CustomValidator1" OnServerValidate = "MyServerValidation" runat="server" ErrorMessage="This telephone number is not recognized" ControlToValidate="txtPhone1" Text="*"> </asp:CustomValidator>

Page 253: Microsoft ASP.net - Curso Completo - Espa Ol

Validación de entrada de datos de usuario 15

Controles de validación de entrada de datos

RequiredFieldValidatorInitialValue

CompareValidatorValueToComparar o ControlToCompararTypeOperator

RangeValidatorMinimumValueMaximumValueType

Código de ejemplo ***************************** use******************************

Los controles de validación más 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 carácter es una respuesta válida con este control de validación. Únicamente la nula entrada de datos (en blanco), o espacios, constituye una entrada no válida con este control.

El control RequiredFieldValidator se utiliza normalmente sólo en controles de entrada de datos necesarios para completar un proceso solicitado. Por ejemplo, un control RequiredFieldValidator se utilizaría para los campos nombre_usuario y contraseña en una página de inicio de sesión, pero no para información secundaria, como una oferta para convertirse en visitante favorito de un determinado sitio Web.

Una opción para el control RequiredFieldValidator es tener un valor inicial que no sea una cadena vacía (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:

Introducción

Control RequiredFieldValidator

Page 254: Microsoft ASP.net - Curso Completo - Espa Ol

16 Validación de entrada de datos de usuario

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

Únicamente el control RequiredFieldValidator requiere que se introduzca un valor en un control. El resto de controles de validación aceptarán un control vacío o un espacio como respuesta válida.

Utilizamos el control CompareValidator para probar la entrada de datos del usuario contra un valor específico o contra un segundo control de entrada de datos. El control CompareValidator a menudo se utiliza donde el riesgo de errores tipográficos es alto, como campos de contraseña que no muestran la entrada real de usuario.

El control CompareValidator mostrará como válido un control de entrada de datos vacío.

El control CompareValidator utiliza las siguientes propiedades:

ValueToCompare La propiedad ValueToCompare se utiliza para establecer un valor constante con el que realizar la comparación. Utilizamos un carácter tubería (|) para separar varios valores. Esta propiedad se utiliza especialmente para validar contra valores inalterables, como un límite de edad mínima. 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 comparación. Esta propiedad puede utilizarse para buscar errores tipográficos 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 comparación a utilizar. Los operadores se especifican con el nombre de los operadores de comparación, como Equal, NotEqual, GreaterThan y GreaterThanEqual.

Nota

Uso del control CompareValidator

Page 255: Microsoft ASP.net - Curso Completo - Espa Ol

Validación de entrada de datos de usuario 17

En el siguiente ejemplo, un control CompareValidator verifica que los valores de los controles TextBox, txtPassword1 y txtPassword2, coinciden:

<asp:TextBox id="txtPassword1" runat="server"> Enter your password </asp:TextBox> <asp:TextBox id="txtPassword2" runat="server" > Enter your password again </asp:TextBox> <asp:CompareValidator id="CompareValidator1" runat="server" ErrorMessage="These fields do not match" ControlToCompare="txtPassword1" ControlToValidate="txtPassword2" Text="*"> </asp:CompareValidator> El control RangeValidator se utiliza para comprobar si el valor introducido está dentro de un determinado intervalo. El intervalo de medida es inclusivo y los valores mínimo y máximo se consideran válidos. El control RangeValidator se utiliza normalmente para verificar que el valor introducido (por ejemplo, edad, estatura, salario o número de hijos) coincide con un intervalo previsto.

El control RangeValidator mostrará como válido un control de entrada de datos vacío.

El control RangeValidator tiene las siguientes propiedades:

MinimumValue La propiedad MinimumValue especifica el valor mínimo del intervalo válido para variables numéricas, o la longitud mínima de la cadena de caracteres para variables de cadena.

MaximumValue La propiedad MaximumValue especifica el valor máximo del intervalo válido para variables numéricas, o la longitud máxima 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 comparación.

En el siguiente ejemplo, un control RangeValidator verifica que el control TextBox denominado txtAge tiene un valor entre 18 y 50:

Uso del control RangeValidator

Page 256: Microsoft ASP.net - Curso Completo - Espa Ol

18 Validación de entrada de datos de usuario

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

Page 257: Microsoft ASP.net - Curso Completo - Espa Ol

Validación 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:

Números de teléfono

Códigos postales

Direcciones electrónicas<asp:RegularExpressionValidator …

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

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

Código de ejemplo ***************************** use******************************

Cuando debemos verificar que los datos introducidos por un usuario coinciden con un modelo predefinido, como un número de teléfono, un código postal o una dirección electrónica, utilizamos el control RegularExpressionValidator. Este control de validación compara el modelo de caracteres, dígitos y símbolos introducidos por el usuario con uno o más 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 electrónicas y Web, números de teléfono y códigos postales. Para crear un nuevo modelo, seleccionar la plantilla Custom. El último modelo utilizado estará disponible para ser modificado. Esta característica del último utilizado ofrece una base a partir de la cual crear nuestro propio modelo.

Introducción

Page 258: Microsoft ASP.net - Curso Completo - Espa Ol

20 Validación de entrada de datos de usuario

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

Carácter Definición a Debe utilizar la letra en minúscula. Las letras que no estén precedidas

por una barra invertida (\), o parte de un intervalo, son un requerimiento para ese valor literal.

1 Debe utilizar el número 1. Cualquier número 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 mínimo).

[0-n] Intervalo de valores enteros de 0 a n.

{n} La longitud debe ser n caracteres.

| Separa múltiples modelos válidos.

\ El siguiente carácter es un carácter comando.

\w Debe tener un carácter.

\d Debe tener un dígito.

\. Debe tener un periodo.

Para más información sobre los caracteres de control, leer la “Introducción a las expresiones regulares,” en la documentación en línea de Referencia de JScript.

El siguiente código de ejemplo muestra cómo podemos utilizar un control RegularExpressionValidator para comprobar si un usuario ha introducido una dirección electrónica válida:

<asp:TextBox id="txtEmail" runat="server" /> <asp:RegularExpressionValidator id="txtEmail_validation" runat="server" ControlToValidate="txtEmail" ErrorMessage="Use the format [email protected]" ValidationExpression="\w+@\w+\.\w+" Text="*"> </asp:RegularExpressionValidator>

Caracteres de expresiones habituales

Nota

Ejemplo de una expresión simple

Page 259: Microsoft ASP.net - Curso Completo - Espa Ol

Validación de entrada de datos de usuario 21

Este control de validación RegularExpression comprueba un modelo específico, como muestra la siguiente tabla.

Caracteres Definición \w+ Una cadena de un carácter como mínimo.

@ Un signo (@).

\w+ Una cadena de un carácter como mínimo.

\. Un periodo.

\w+ Una cadena de un carácter como mínimo.

Una dirección electrónica válida para este control es: [email protected].

Una dirección electrónica no válida para este control es: alguien.com, o [email protected].

La expresión predeterminada de correo electrónico de Visual Studio .NET es más compleja que el ejemplo anterior. El modelo predeterminado de correo electrónico también limita la separación de términos antes y después del signo (@) a xx.xx o xx-xx.

La expresión regular predeterminada para direcciones electrónicas es:

\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* Este control de validación RegularExpression comprueba un modelo específico, como muestra la siguiente tabla.

Caracteres Definición \w+ Una cadena de un carácter como mínimo.

([-+.]\w+)* Puede tener uno o más guiones o un punto, y una cadena de un carácter como mínimo.

@ Un signo (@).

\w+ Una cadena de un carácter como mínimo.

([-.]\w+)* Puede tener un guión o un punto, y una cadena de un carácter como mínimo.

\. Un punto.

\w+ Una cadena de un carácter como mínimo.

([-.]\w+)* Puede tener un guión o un punto, y una cadena de un carácter como mínimo.

Una dirección electrónica válida para este control es: [email protected].

Una dirección electrónica no válida para este control es: algu,[email protected].

Ejemplo de una expresión compleja

Page 260: Microsoft ASP.net - Curso Completo - Espa Ol

22 Validación de entrada de datos de usuario

Demostración: uso de los controles de validación

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 demostración, veremos cómo 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 demostración

1. Crear un nuevo proyecto de aplicación Web denominado ValidationTst1. 2. Cambiar a FlowLayout. 3. Arrastrar los siguientes controles Web desde el Cuadro de herramientas a

WebForm1: TextBox y Button. 4. Agregar un control RequiredFieldValidator junto al control de entrada de

datos TextBox. 5. Establecer las propiedades del control RequiredFieldValidator en la

ventana Propiedades, como muestra la siguiente tabla. Propiedad Valor ControlToValidate TextBox1

ErrorMessage Texto del mensaje de error

Text Se requiere entrada de datos

6. Mostrar que la propiedad Display de RequiredFieldValidator está establecida en Static de forma predeterminada.

7. Guardar, generar y examinar la página. 8. Dejar el control en blanco y hacer clic en Button1.

Se obtiene el mensaje de error Text, y no el mensaje ErrorMessage.

Crear un formulario Web Form ASP.NET con controles TextBox y Button

Agregar un control RequiredFieldValidator

Page 261: Microsoft ASP.net - Curso Completo - Espa Ol

Validación de entrada de datos de usuario 23

9. Agregar un control RangeValidator al formulario Web Form junto a

RequiredFieldValidator. 10. Establecer las propiedades del control RangeValidator en la ventana

Propiedades, como muestra la siguiente tabla: Propiedad Valor ControlToValidate TextBox1

ErrorMessage Texto del mensaje de error

Text Fuera del intervalo

MaximumValue 100

MinimumValue 16

Type Entero

11. Guardar, generar y examinar la página. 12. Dejar el valor en blanco y hacer clic en Button.

Se debería 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 debería 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 página está en modo de presentación estático, 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 página. 16. Introducir un valor mayor que 100 o menor que 16, y hacer clic en Button.

Se debería 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 presentación dinámico).

17. Agregar un segundo control TextBox y un control RegularExpressionValidator junto a él.

18. Hacer clic con el botón 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 Dirección electrónica no

válida. b. En la propiedad ControlToValidate, seleccionar TextBox2. c. En la propiedad ValidationExpression, seleccionar Internet E-mail

Address. 19. Guardar, generar y examinar la página.

Agregar un control RangeValidator

Agregar un segundo control TextBox y un control Regular ExpressionValidator

Page 262: Microsoft ASP.net - Curso Completo - Espa Ol

24 Validación de entrada de datos de usuario

Escribir una dirección electrónica incorrecta en el segundo cuadro de texto y hacer clic en Button. Se debería obtener el mensaje de texto Dirección electrónica no válida del control RegularExpressionValidator.

20. Seleccionar Ver fuente y mostrar la validación del lado del cliente HTML.

Page 263: Microsoft ASP.net - Curso Completo - Espa Ol

Validación 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

ClientValidationFunctionOnServerValidate

Validar con: FórmulaDatosObjetos COMServicio Web

Código de ejemplo ***************************** use******************************

Utilizamos el control CustomValidator cuando deseamos utilizar nuestra propia lógica de validación personalizada para comprobar los datos introducidos por el usuario contra una variable, fórmula, o la entrada desde una segunda fuente. El control CustomValidator se utiliza a menudo para situaciones como la verificación de contraseñas, en las que los datos introducidos por el usuario se comparan con una contraseña 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 validación. A diferencia de otros controles de validación, donde ASP.NET crea los scripts de validación de cliente y servidor, debemos escribir explícitamente los scripts de validación para el control CustomValidator. Establecemos el control CustomValidator como válido o no válido 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 lógica con el código 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 código en el servidor, es importante comprobar que existe coherencia lógica con el script del lado del cliente.

Introducción

Validación del lado del cliente y del lado del servidor

Page 264: Microsoft ASP.net - Curso Completo - Espa Ol

26 Validación de entrada de datos de usuario

El siguiente código de ejemplo muestra procedimientos del lado del servidor y del lado del cliente para un control CustomValidator y verificará que un número introducido en un control de entrada de datos es un número par:

<asp: CustomValidator… ClientValidationFunction = "MyClientFunction" OnServerValidate = "MyServerFunction" />

Procedimiento del lado del cliente El siguiente código JScript está pensado para ejecutarse en Internet Explorer 6, y verificará que un número es par: <script language = "Jscript"> function MyClientFunction(source, arguments) { alert("Ejecución 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 código está diseñado para ejecutarse en un servidor .NET, y verificará que un número es par: Sub MyServerFunction(objSource as Object, _ args as ServerValidateEventArgs) Dim intValue As Integer = args.Value If intValue mod 2 = 0 Then args.IsValid = True Else args.IsValid = False End If End Sub private void MyServerFunction(object objSource, ServerValidateEventArgs args) { int intValue = Convert.ToInt16(args.Value); if (intValue%2 == 0) { args.IsValid = true; } else { args.IsValid = false; } }

Ejemplo

Visual Basic .NET

C#

Page 265: Microsoft ASP.net - Curso Completo - Espa Ol

Validación de entrada de datos de usuario 27

Demostración: uso del control CustomValidator

Agregar un control CustomValidator

Escribir el código del lado del servidor

Escribir el script en el lado del cliente

Probar el resultado

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

En esta demostración, veremos cómo utilizar un control CustomValidator.

El código para esta demostración se encuentra en el proyecto Demo06VB o Demo06CS que se pueden encontrar dentro del fichero demos06.zip

Ejecutar esta demostración

1. Abrir el formulario Web Form denominado CustomValidator.aspx en Visual Studio .NET. El formulario Web Form ya dispone de un control TextBox y de un control Button.

2. Agregar un control CustomValidator al formulario Web Form . 3. En la propiedad Text del control CustomValidator, escribir Es un número

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

Introducción

Agregar un control CustomValidator

Escribir el código del lado del servidor Visual Basic .NET

Page 266: Microsoft ASP.net - Curso Completo - Espa Ol

28 Validación de entrada de datos de usuario

int intValue = Convert.ToInt16(args.Value); if (intValue % 2 == 0) { args.IsValid = true; } else { args.IsValid = false; } El procedimiento de eventos del lado del servidor que Visual Studio .NET ha creado automáticamente debería tener el nombre CustomValidator1_ServerValidate, y dos parámetros: source (tipo Object) y args (tipo ServerValidateEventArgs).

6. En la propiedad ClientValidationFunction del control CustomValidator, escribir MyClientValidation.

7. Abrir el código fuente HTML de la página CustomValidator.aspx (y no CustomValidator.aspx.vb).

8. Quitar el comentario del siguiente código que se encuentra justo después de la etiqueta <head>. Este ejemplo está en JScript: function MyClientValidation(source, arguments) { alert("Ejecución en el cliente"); var intValue = arguments.Value; if (intValue % 2 == 0) { arguments.IsValid = true; } else { arguments.IsValid = false; } } Verificar que el navegador de destino es Internet Explorer 5. En la vista de Diseño 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 código del lado del servidor para evitar el viaje de ida y vuelta al servidor con la página si esta propiedad está establecida a True y el navegador cliente es Internet Explorer 4 o posterior.

C#

Escribir el script del lado del cliente

Probar el resultado

Page 267: Microsoft ASP.net - Curso Completo - Espa Ol

Validación de entrada de datos de usuario 29

10. Generar y examinar CustomValidator.aspx. 11. Escribir un número en el cuadro de texto. 12. Se debería obtener el cuadro de mensaje Ejecución en el cliente al hacer

clic en Button. Además, se debería obtener el mensaje Es un número impar cuando el número sea impar.

13. Establecer la propiedad EnableClientScript del control CustomValidator en False, de forma que únicamente se ejecute el código del lado del servidor.

14. Generar y examinar la página. 15. En este momento no se debería obtener el cuadro de mensaje, ya que se está

ejecutando el código en el lado del servidor. Sin embargo, seguirá apareciendo el mensaje Es un número impar cuando el número sea impar.

Page 268: Microsoft ASP.net - Curso Completo - Espa Ol

30 Validación de entrada de datos de usuario

Lección: validación de páginas

Uso de la propiedad Page.IsValid

Uso del control ValidationSummary

Demostración: uso de la propiedad Page.IsValid y del control ValidationSummary

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

En esta lección, estudiaremos cómo utilizar la propiedad Page.IsValid y el control ValidationSummary para verificar que todos los controles de validación de un formulario ASP.NET Web Form son válidos antes de que se inicie el proceso.

En esta lección, aprenderemos a:

Utilizar la propiedad Page.IsValid para determinar si todos los controles de validación de entrada de datos de una página son válidos.

Utilizar el control ValidationSummary para mostrar un resumen de mensajes de error en una página.

Introducción

Objetivos de la lección

Page 269: Microsoft ASP.net - Curso Completo - Espa Ol

Validación de entrada de datos de usuario 31

Uso de la propiedad Page.IsValid

Examina todos los controles de validación

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

Sub cmdSubmit_Click(s As Object, e As EventArgs)If Page.IsValid Then

Message.Text = "Page is valid!"' Perform database updates or other logic here

End IfEnd Sub

private void cmdSubmit_Click(object s, System.EventArgs e)

{ if (Page.IsValid)

{ Message.Text = "Page is Valid!";

// Perform database updates or other logic here

}

}

private void cmdSubmit_Click(object s, System.EventArgs e)

{ if (Page.IsValid)

{ Message.Text = "Page is Valid!";

// Perform database updates or other logic here

}

}

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

.NET permite verificar que todos los controles de una página son válidos antes de que realicen alguna acción. Esta verificación puede llevarse a cabo en el cliente o en el servidor, dependiendo del navegador que se esté utilizando. La verificación del lado del cliente se realiza con el control ValidationSummary, mientras que la verificación del lado del servidor se realiza con la propiedad Page.IsValid.

Para determinar si todos los controles de validación de una página son válidos, comprobamos la propiedad IsValid de la página en tiempo de ejecución. La propiedad IsValid se vincula a los valores de todos los controles de validación que se encuentran en la página (utilizando un AND lógico). Si algún control de validación no es válido, 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 válidos y si el formulario Web Form está preparado para seguir con la lógica de negocio.

Los controles de validación verifican las entradas del usuario, establecen un estado de error y producen mensajes de error. Sin embargo, los controles de validación no cambian el flujo de procesamiento de páginas. Por ejemplo, los controles de validación no evitan nuestro código si detectan un error en los datos introducidos por el usuario. En lugar de ello, probamos el estado de los controles en nuestro código antes de realizar lógica específica de aplicación. Si detectamos un error, evitamos que nuestro código se ejecute; la página seguirá procesándose y se devuelve al usuario con mensajes de error.

La información de validación no está disponible durante la inicialización de una página o durante la fase de carga. Para obtener información sobre los estados de página, examinar “Estados de procesamiento de páginas de formularios Web Forms” en la documentación de Visual Studio .NET.

Introducción

Uso de la propiedad Page.IsValid

Nota

Page 270: Microsoft ASP.net - Curso Completo - Espa Ol

32 Validación de entrada de datos de usuario

El siguiente ejemplo muestra el controlador de eventos de un botón. El código verifica la propiedad IsValid de toda la página. No es necesario para una cláusula Else, ya que la página será enviada de vuelta automáticamente al navegador y los controles de validación mostrarán sus propios mensajes de error:

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

Ejemplo

Visual Basic .NET

C#

Page 271: Microsoft ASP.net - Curso Completo - Espa Ol

Validación de entrada de datos de usuario 33

Uso del control ValidationSummary

Recopila los mensajes de error de todos los controles de validación de la página

Puede mostrar mensajes de texto y de error

Utilizar Text="*" para indicar la ubicación del error

<asp:ValidationSummary id="valSummary"runat="server"HeaderText="These errors were found:"ShowSummary="True" DisplayMode="List"/>

<asp:ValidationSummary id="valSummary"runat="server"HeaderText="These errors were found:"ShowSummary="True" DisplayMode="List"/>

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

El control ValidationSummary muestra cuando la propiedad Page.IsValid devuelve False. Se contacta con cada control de validación de la página y el control ValidationSummary reúne 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 viñetas o un único párrafo. Los controles ValidationSummary se ubican normalmente cerca del botón Submit de forma que todos los mensajes de error sean fácilmente visibles para el usuario cuando se disparen los controles de validación de entrada de datos.

El siguiente código HTML muestra un control ValidationSummary típico:

<asp:ValidationSummary id="valSummary" runat="server" HeaderText="These errors were found:" ShowSummary="True" DisplayMode="List" /> Cuando se utiliza el control ValidationSummary, la propiedad Text (si se utiliza) se muestra en la ubicación del control de validación, mientras que la propiedad ErrorMessage se muestra en la presentación 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 descripción del error de entrada de datos, que normalmente se ubica cerca del evento que dispara el control.

Introducción

Muestra mensajes de texto y de error

Uso de * para localizar errores

Page 272: Microsoft ASP.net - Curso Completo - Espa Ol

34 Validación de entrada de datos de usuario

La siguiente ilustración muestra un par de campos de contraseña con varios controles de validación de entrada de datos y un control ValidationSummary.

Ejemplo

Page 273: Microsoft ASP.net - Curso Completo - Espa Ol

Validación de entrada de datos de usuario 35

Demostración: uso de la propiedad Page.IsValid y del control ValidationSummary

Abrir una página ASP.NET con múltiples cuadros de texto y controles de validación

Agregar un control ValidationSummary

Agregar un script que utilice la propiedad Page.IsValid

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

En esta demostración, veremos cómo utilizar el método Page.IsValid y el control Validation Summary.

Los campos de esta demostración se encuentran en el proyecto Demo06VB o Demo06CS que se pueden encontrar dentro del fichero demos06.zip

Ejecutar esta demostración

1. Abrir el formulario Web Form denominado ValidationSummary.aspx en Visual Studio .NET. La página ya contiene dos controles TextBox. Hay un control RequiredFieldValidator y un control RangeValidator, que validan el primer cuadro de texto. La página también contiene un control RequiredFieldValidator y un control RegularExpressionValidator, que validan el segundo cuadro de texto. Además, hay un botón Submit y un Label.

2. Arrastrar el control ValidationSummary a la parte inferior de la página. 3. Hacer doble clic en el control Button para abrir el controlador de eventos

Click, y eliminar el comentario del siguiente código:

If Page.IsValid Then lblMessage.Text = "Page is valid!" End If

Introducción

Abrir una página ASP.NET

Agregar un control Validation Summary

Agregar código para probar la validez de la página

Visual Basic .NET

C#

Page 274: Microsoft ASP.net - Curso Completo - Espa Ol

36 Validación de entrada de datos de usuario

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

4. Guardar, generar y examinar la página ValidationSummary.aspx. Deberíamos ver el mensaje Page is valid! cuando toda la página sea válida.

Page 275: Microsoft ASP.net - Curso Completo - Espa Ol

Índice

Descripción 1

Lección: agregar controles de usuario a un formulario Web Form ASP.NET 2

Lección: crear controles de usuario 12

Creación de controles de usuario

Page 276: Microsoft ASP.net - Curso Completo - Espa Ol
Page 277: Microsoft ASP.net - Curso Completo - Espa Ol

Creación de controles de usuario 1

Descripción

Agregar controles de usuario a un formulario Web FormASP.NET

Crear controles de usuario

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

Además de Hypertext Markup Language (HTML) y los controles de servidor Web, podemos crear fácilmente 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 fácil de reutilizar componentes habituales de la interfaz de usuario y código en una aplicación Web.

En este módulo, aprenderemos a:

Agregar un control de usuario a un formulario Microsoft® ASP.NET. Crear un control de usuario.

Introducción

Objetivos

Page 278: Microsoft ASP.net - Curso Completo - Espa Ol

2 Creación de controles de usuario

Lección: agregar controles de usuario a un formulario Web Form ASP.NET

¿Qué es un control de usuario?

¿Por qué utilizar controles de usuario?

Práctica: hacer una lista de controles de usuario

Agregar un control de usuario

Demostración: Crear un control de usuario

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

Un control de usuario es una página 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 demás funcionalidades relacionadas. Una vez creado un control de usuario, éste puede ser utilizado por otras páginas de la misma aplicación Web.

En esta lección, estudiaremos qué son los controles de usuario, porqué deberíamos pensar en utilizarlos en nuestras aplicaciones Web, cómo referenciar un control de usuario desde un formulario Web Form ASP.NET, y cómo acceder a las propiedades de un control de usuario.

En esta lección, aprenderemos a:

Explicar qué es un control de usuario y por qué deberíamos utilizar uno. Agregar un control de usuario a una página ASP.NET. Acceder a las propiedades de los controles de usuario de una página

ASP.NET.

Introducción

Objetivos de la lección

Page 279: Microsoft ASP.net - Curso Completo - Espa Ol

Creación de controles de usuario 3

¿Qué es un control de usuario?

Los controles de usuario simplifican la reutilización de código y componentes de la IU en una aplicación WebUn control de usuario es un control de servidor Web definido por el usuario con una extensión .ascxContiene HTML, pero no las etiquetas <HTML>, <BODY>, o <FORM>

ó

Contiene código para gestionar sus propios eventos

<%@ Control Language="vb" %><%@ Control Language="vb" %>

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

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

Los controles de usuario pueden simplificar la reutilización de código y componentes habituales de la interfaz de usuario; por ello, saber qué son y cómo funcionan es una parte importante del aprendizaje del desarrollo con ASP.NET.

Los controles de usuario son páginas ASP.NET con una extensión de archivo .ascx. Los controles de usuario ofrecen un modo fácil de particionar y reutilizar funcionalidades habituales de la interfaz de usuario en nuestras aplicaciones Web ASP.NET. Similar a una página de un formulario Web Form, podemos crear estos controles con cualquier editor de texto, o desarrollarlos utilizando clases de código subyacente. Además, 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 página Web Form para que puedan funcionar.

El Microsoft .NET Framework impide que archivos con la extensión 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 página ASP.NET independiente.

Un control de usuario está formado por HTML y código, 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

Introducción

Definición

Nota

¿Qué hay en un control de usuario?

Page 280: Microsoft ASP.net - Curso Completo - Espa Ol

4 Creación 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. Además, como un control de usuario es una página ASP.NET, tiene su propia lógica de página. Por ejemplo, un control de usuario puede gestionar su propio postback en su procedimiento de evento Page_Load.

Los controles de usuario son diferentes de los controles de servidor personalizados. Para aprender más sobre la creación de controles de servidor personalizados, leer “Desarrollo de controles de servidor ASP.NET” en la documentación de Microsoft Visual Studio® .NET.

Al igual que los formularios Web Forms tienen páginas de código subyacente, los controles de usuario también tienen una página de código subyacente asociada. La directiva @ Page se utiliza en los formularios Web Forms para asociar una página de código subyacente, mientras que la directiva @ Control se utiliza para hacer referencia a una página de código subyacente desde una página de control de usuario. La directiva @ Control sólo puede utilizarse con controles de usuario, y únicamente podemos incluir una directiva @ Control por cada archivo .ascx. Por ejemplo, para hacer referencia a una página de código subyacente de un control de usuario denominada WebUserControl1, en un proyecto de aplicación Web denominado test, utilizamos la siguiente directiva @ Control:

<%@ Control Language="vb" Codebehind="WebUserControl1.ascx.vb" Inherits="test.WebUserControl1" %> <%@ Control Language="c#" Codebehind="WebUserControl1.ascx.cs" Inherits="test.WebUserControl1" %>

La directiva @ Control soporta los mismos atributos que la directiva @ Page, salvo los atributos AspCompat y Trace. Como la directiva @ Control no utiliza el atributo Trace, si deseamos habilitar el seguimiento para el control de usuario, debemos añadirlo a la directiva @ Page para la página .aspx que invoca el control de usuario.

Un control de usuario es distinto de un control de servidor Web. Los controles de servidor Web no sólo incluyen controles de tipo formulario, como botones y cuadros de texto, sino también controles específicos como calendarios, etc.

Para más información sobre los controles de servidor Web, ver el Módulo “Crear un formulario Web Form con Microsoft ASP.NET”.

Nota

Controles de usuario y sus páginas asociados de código subyacente

Visual Basic .NET

C#

Nota

Control de usuario frente a control de servidor Web

Nota

Page 281: Microsoft ASP.net - Curso Completo - Espa Ol

Creación de controles de usuario 5

¿Por qué utilizar controles de usuario?

Reutilizar interfaz de usuario y código

Page2.aspx

Control1.ascx

Page1.aspx

Page3.aspx

Aplicación A Aplicación B

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

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 página principal que los hospeda.

Los controles de usuario se utilizan para numerosas utilidades, como crear encabezados y barras de navegación, y para repetir bloques de código en un proyecto de aplicación Web.

En las páginas Web Active Server Pages (ASP) tradicionales, la funcionalidad include de archivos se utiliza para reutilizar código e interfaz de usuario. En ASP.NET, las páginas de controles de usuario sustituyen la funcionalidad include de archivos.

Los controles de usuario ofrecen numerosas ventajas en el desarrollo de una aplicación Web:

Los controles de usuario son autocontenidos. Proporcionan espacios de nombres de variables distintos, lo cual significa que ninguno de los métodos y propiedades del control de usuario entra en conflicto con ningún método existente o propiedad de la página que lo aloja.

Los controles de usuario pueden utilizarse más de una vez en la página que los hospeda, sin causar conflictos con propiedades o métodos.

Los controles de usuario pueden escribirse en un lenguaje distinto del de la página 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.

Introducción

Ventajas de utilizar controles de usuario

Nota

Page 282: Microsoft ASP.net - Curso Completo - Espa Ol

6 Creación de controles de usuario

Un único control de usuario puede ser compartido por todas las páginas de una aplicación Web. Sin embargo, las páginas .aspx de una aplicación Web no pueden hospedar un control de usuario de otra aplicación Web. Para utilizar un control de usuario en varias aplicaciones Web, el control de usuario debe copiarse a la carpeta raíz del directorio virtual de cada aplicación Web.

Para compartir controles entre múltiples aplicaciones Web, también podemos crear un control Web personalizado, que actúa como un control de usuario compartible. Los controles Web personalizados son más difíciles 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 código.

Para más información sobre controles de usuario y los controles Web personalizados, ver “Controles de usuario Web y controles Web personalizados” en la documentación de Visual Studio .NET.

Compartir controles de usuario

Nota

Page 283: Microsoft ASP.net - Curso Completo - Espa Ol

Creación de controles de usuario 7

Práctica: hacer una lista de controles de usuario

Los estudiantes:

Crearán una lista de ejemplos sobre cuándo resulta apropiado el uso de controles de usuario

Tiempo: 5 minutos

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

En esta práctica, generaremos una lista de ideas en las que podríamos 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 páginas Web

________________________________________________________________

________________________________________________________________

Introducción

Page 284: Microsoft ASP.net - Curso Completo - Espa Ol

8 Creación de controles de usuario

Agregar un control de usuario

Utilizar la directiva @ Register para incluir un control de usuario en una página ASP.NET

Insertar el control de usuario en un formulario Web Form

Utilizar las propiedades Get y Set del control de usuario

o

<%@ Register TagPrefix="demo" TagName="validNum" Src="numberbox.ascx" %><%@ Register TagPrefix="demo" TagName="validNum" Src="numberbox.ascx" %>

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

num1.pNum = 5 'uses Setx = num1.pNum 'uses Getnum1.pNum = 5 'uses Setx = num1.pNum 'uses Get

num1.pNum = 5; //uses Setx = num1.pNum; //uses Getnum1.pNum = 5; //uses Setx = num1.pNum; //uses Get

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

Podemos ubicar un control de usuario en cualquier formulario Web Form ASP.NET. La página 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 código:

<%@ Register TagPrefix="demo" TagName="validNum" Src="numberbox.ascx" %> El atributo TagPrefix determina un espacio de nombres único para el control de usuario de forma que múltiples controles de usuario con el mismo nombre pueden diferenciarse entre sí. El atributo TagName es el único nombre para el control de usuario. El atributo Src es la ruta virtual al archivo del control de usuario.

Tras registrar el control de usuario con la directiva @ Register, podemos ubicar la etiqueta del control de usuario en el formulario Web Form al igual que colocaríamos un control de servidor Web normal, incluyendo el uso del atributo runat="server". El siguiente código 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 ejecución compila el archivo del control de usuario y lo pone a disposición de la página.

Introducción

Incluir controles de usuario

Uso del control de usuario

Page 285: Microsoft ASP.net - Curso Completo - Espa Ol

Creación de controles de usuario 9

En los procedimientos de evento en la página host, podemos acceder a las propiedades del control de usuario agregando declaraciones para el control de usuario. El siguiente código muestra declaraciones para dos controles de usuario numberbox:

Protected num1 As numberbox Protected num2 As numberbox protected numberbox num1; protected numberbox num2; En los ejemplos de código anteriores, numberBox es el nombre de la clase que implementa el control de usuario. El nombre de variable (num1 o num2) debe ser el mismo que el atributo id que se utiliza cuando se agrega el control de usuario al formulario Web Form.

El siguiente ejemplo invoca la propiedad Get de los controles de usuario num1 y num2:

lblSum.Text = (num1.pNum + num2.pNum).ToString() lblSum.Text = (num1.pNum + num2.pNum).ToString(); El siguiente ejemplo invoca la propiedad Set de los controles de usuario num1 y num2 para mostrar las constantes 5 y 7 en el control de usuario:

num1.pNum = 5 num2.pNum = 7 num1.pNum = 5; num2.pNum = 7;

Uso de las propiedades Get y Set

Visual Basic .NET

C#

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 286: Microsoft ASP.net - Curso Completo - Espa Ol

10 Creación de controles de usuario

Demostración: crear un control de usuario

Crear un nuevo control de usuario

Crear una propiedad

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

En esta demostración, crearemos un control de usuario con Visual Studio .NET.

El código completo para esta demostración se encuentra en el archivo numberbox.ascx del proyecto Demo07VB o Demo07CS, que se pueden encontrar dentro del fichero demos07.zip.

Ejecutar esta demostración

1. Crear un nuevo proyecto de aplicación Web o utilizar un proyecto existente. 2. Agregar la página beforeuser.aspx al proyecto de aplicación Web.

Agregar la página carpeta_instalación\Democode\Mod08VB\beforeuser.aspx al proyecto. Agregar la página carpeta_instalación\Democode\Mod08CS\beforeuser.aspx al proyecto.

3. Abrir la página y mostrar el código fuente HTML. El código HTML utiliza la misma combinación de controles (un cuadro de texto y dos controles de validación) en dos lugares.

4. En vista Diseño, agrupar, seleccionar y copiar el primer conjunto del cuadro de texto y los controles de validación de la página.

5. Crear un nuevo control de usuario añadiendo un nuevo Control de Usuario Web al proyecto. Denominarlo numberbox.ascx.

6. Mostrar el código HTML de la página y observar la directiva @ Control que ha creado Visual Studio .NET.

7. En la vista Diseño, pegar en el cuadro de texto y en los controles de validación.

Introducción

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

Page 287: Microsoft ASP.net - Curso Completo - Espa Ol

Creación de controles de usuario 11

8. Abrir la página de código subyacente para el nuevo control de usuario. 9. En la página de código subyacente denominada numberbox.ascx.vb o

numberbox.ascx.cs, crear una propiedad pública para el valor del cuadro de texto, como muestra el siguiente código de ejemplo: Public Property pNum() As Integer Get Return CInt(txtNum1.Text) End Get Set(ByVal Value As Integer) txtNum1.Text = Value.ToString() End Set End Property Observar que cuando se introduce el encabezado de la propiedad pNum, Visual Studio .NET crea una plantilla para las propiedades Get y Set. public int pNum { get { return Convert.ToInt32(txtNum1.Text); } set { txtNum1.Text = Convert.ToString(value); } } Observar que la propiedad set no toma ningún argumento. El valor pasado se asigna automáticamente a una variable denominada value, accesible para la propiedad set.

10. Guardar los cambios de la página numberbox.ascx.

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Page 288: Microsoft ASP.net - Curso Completo - Espa Ol

12 Creación de controles de usuario

Lección: crear controles de usuario

Crear un control de usuario

Demostración: utilizar un control de usuario

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

Después de crear un control de usuario, éste puede ser utilizado por otras páginas de la misma aplicación Web. En esta lección, aprenderemos a crear controles de usuario.

En esta lección, aprenderemos a:

Crear un control de usuario. Convertir un formulario Web Form existente en un control de usuario.

Introducción

Objetivos de la lección

Page 289: Microsoft ASP.net - Curso Completo - Espa Ol

Creación de controles de usuario 13

Crear un control de usuario

Dos métodos para la creación de controles de usuario:

Crear un nuevo control de usuario utilizando Visual Studio .NET

Convertir una página ASP.NET existente en un control de usuario

La pagina host interactúa con el control utilizando propiedades

La página host debería utilizar el flujo de presentación

Public Property pNum() As IntegerGetReturn Convert.ToInt32(txtNum.Text)

End GetSet (ByVal value As Integer)txtNum.Text = CStr(value)

End SetEnd Property

Public Property pNum() As IntegerGetReturn Convert.ToInt32(txtNum.Text)

End GetSet (ByVal value As Integer)txtNum.Text = CStr(value)

End SetEnd Property

public int pNum{get{return Convert.ToInt32(txtNum.Text);

}set{txtNum.Text =Convert.ToString(value);

}}

public int pNum{get{return Convert.ToInt32(txtNum.Text);

}set{txtNum.Text =Convert.ToString(value);

}}

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

Podemos crear un nuevo control de usuario o convertir un formulario Web Form ASP.NET existente en un control de usuario.

Crear un nuevo control de usuario

1. Hacer clic con el botón derecho en un proyecto de aplicación 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 página con una extensión .ascx.

La página se crea con la presentación de página establecida en modo de presentación de flujo, y una directiva @ Control. Podemos arrastrar un control de panel de presentación en rejilla (Grid Layout Panel) desde la sección de HTML al cuadro de herramientas si necesitamos generar el control de usuario con una presentación de rejilla en lugar de presentación de flujo.

3. Agregar los elementos de la interfaz de usuario. Generamos la página 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 código HTML.

Cuando generamos la parte de interfaz de usuario de un control de usuario en Visual Studio .NET, debemos utilizar presentación de flujo en lugar de presentación de rejilla.

Introducción

Crear un nuevo control de usuario

Nota

Nota

Page 290: Microsoft ASP.net - Curso Completo - Espa Ol

14 Creación de controles de usuario

4. Agregar procedimientos de evento para elementos de interfaz de usuario y los eventos de página. Al igual que la creación de cualquier otra página ASP.NET, agregamos procedimientos de evento a la página de código subyacente.

5. Crear propiedades para interactuar con la página 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 implementación del control.

Convertir un formulario Web Form existente en un control de usuario

6. Eliminar todas las etiquetas <HTML>, <BODY> y <FORM>. 7. Si hay una directiva @ Page existente en la página, modificarla a una

directiva @ Control. Aunque la mayoría de atributos @ Page también están soportados por la directiva @ Control, comprobar que no hay atributos no soportados.

Para más información sobre los atributos soportados por las directivas @ Page y @ Control, ver “Sintaxis de directivas” en la documentación 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 página.

9. Cambiar el nombre del archivo a un nombre que represente su funcionalidad, y cambiar la extensión de archivo .aspx por .ascx.

La página host es el formulario Web Form que incluirá el control de usuario. Esta página debería estar en modo de presentación de flujo para evitar solapamientos entre el contenido del control de usuario y el contenido de la página.

La página host no tiene acceso directo a los elementos de la interfaz de usuario que están en un control de usuario. Por tanto, utilizamos propiedades públicas 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, necesitaríamos una propiedad para cada cuadro de texto para que la página host pueda leer y escribir el valor de cada cuadro de texto.

El siguiente código es la parte HTML de un control de usuario Visual Basic .NET que incluye un cuadro de texto y dos controles de validación de entrada de datos:

Convertir un formulario Web Form existente en un control de usuario

Nota

Página host

Page 291: Microsoft ASP.net - Curso Completo - Espa Ol

Creación 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 pública. Por ejemplo, el siguiente código de la página de código subyacente crea una propiedad denominada pNum. La propiedad pNum expone la propiedad Text del control del cuadro de texto en el control de usuario:

Public Property pNum() As Integer Get Return CInt(txtNum.Text) End Get Set(ByVal Value As Integer) txtNum.Text = Value.ToString() End Set End Property public int pNum { get { return Convert.ToInt32(txtNum1.Text); } set { txtNum1.Text = Convert.ToString(value); } } Todas las variables, propiedades y métodos públicos de un control de usuario se convierten en propiedades y métodos del control en la página host. Desde los ejemplos de código anteriores, podemos acceder a la propiedad pNum como un atributo de una etiqueta de la página host. Si el control de usuario se denomina userText1, podemos leer y escribir la propiedad userText1.pNum. Del mismo modo, si creamos una función pública en el control de usuario, se convierte en un método que puede ser utilizado desde la página host.

Visual Basic .NET

C#

Page 292: Microsoft ASP.net - Curso Completo - Espa Ol

16 Creación de controles de usuario

Demostración: uso de un control de usuario

Insertar un control de usuario en una página

Utilizar los controles de usuario en la página de código subyacente

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

En esta demostración, veremos cómo utilizar un control de usuario desde una página host.

El código completo para la demostración de Visual Basic .NET se encuentra en el archivo Demo07VB\afteruser.aspx.

El código completo para la demostración de Visual C# se encuentra en el archivo Demo07CS\afteruser.aspx.

Ambos archivos pueden encontrarse dentro del fichero demos07.zip.

Esta demostración se añade a la primera demostración de este módulo, “Crear un control de usuario.”

Utilizar un control de usuario en una nueva página ASP.NET

1. Editar la página beforeuser.aspx. 2. Borrar los dos conjuntos de cuadros de texto y controles de validación (seis

controles en total). 3. Mediante una operación de arrastrar y soltar, colocar el control de usuario

numberbox.ascx desde el Explorador de soluciones en la ubicación del primer conjunto de controles en el formulario Web Form que acabamos de borrar.

4. Visualizar el código HTML de la página; Visual Studio .NET ha agregado la directiva @ Register, junto con la etiqueta para el control de usuario, como muestra el siguiente código de ejemplo:

Introducción

Nota

Page 293: Microsoft ASP.net - Curso Completo - Espa Ol

Creación de controles de usuario 17

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

5. Colocar un segundo control numberbox.ascx en el formulario Web Form beforeuser.aspx en la ubicación del segundo conjunto de controles que acabamos de borrar. Visual Studio .NET agrega el siguiente código HTML para crear el control de usuario: <uc1:numberbox id=Numberbox2 runat="server"> </uc1:numberbox>

6. En la página de código subyacente del archivo beforeuser.aspx, agregar declaraciones para los dos nuevos controles: Protected Numberbox1 As numberbox Protected Numberbox2 As numberbox protected numberbox Numberbox1; protected numberbox Numberbox2;

Si el nombre de nuestro proyecto no es Mod08CS o Mod08VB, deberíamos 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 botón Compute para leer los valores de los controles de usuario: Sub Button1_Click(s As Object, e As EventArgs) If Page.IsValid Then lblSum.Text = _ CStr(Numberbox1.pNum + Numberbox2.pNum) End If End Sub private void Button1_Click(object sender, System.EventArgs e) { if (Page.IsValid) lblSum.Text = Convert.ToString(Numberbox1.pNum + Numberbox2.pNum); }

8. Generar y examinar la página beforeuser.aspx. 9. Visualizar el código fuente HTML en el navegador. 10. Observar cómo los controles de usuario se representan en HTML. 11. En el control de usuario numberbox.ascx, agregar código de inicialización al

procedimiento de evento Page_Load:

Visual Basic .NET

Visual C#

Nota

Visual Basic .NET

C#:

Page 294: Microsoft ASP.net - Curso Completo - Espa Ol

18 Creación de controles de usuario

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

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

Visual Basic .NET

C#

Page 295: Microsoft ASP.net - Curso Completo - Espa Ol

1

Práctica A: Crear controles de usuario

MedicalMedical.aspxMedicalMedical.aspx

BenefitsHome PageDefault.aspx

BenefitsHome PageDefault.aspx

Life InsuranceLife.aspxLife InsuranceLife.aspx

RetirementRetirement.aspxRetirementRetirement.aspx

DentalDental.aspxDentalDental.aspx

Dentists

DoctorsDoctors.aspx DoctorsDoctors.aspx

Doctors

Logon PageLogin.aspxLogon PageLogin.aspx

RegistrationRegister.aspxRegistrationRegister.aspx

CohoWinery

ProspectusProspectus.aspxProspectusProspectus.aspx

XML Web ServicedentalService1.asmx

XML Web ServicedentalService1.asmx

Page HeaderHeader.ascxPage HeaderHeader.ascx

ASPState

tempdb

Lab Web Application

User Controlnamedate.ascxUser Controlnamedate.ascx

Menu ComponentClass1.vb or Class1.cs

Menu ComponentClass1.vb or Class1.cs

XML Files

Web.config

*****************************illegal for non-trainer use******************************

En este laboratorio, aprenderemos a:

Crear un control de usuario. Utilizar un control de usuario en un formulario Web Form con Microsoft®

ASP.NET.

Este laboratorio se centra en los conceptos de este módulo. Por ello, podría no cumplir las recomendaciones de seguridad de Microsoft.

Para trabajar en este laboratorio, es necesario tener:

Conocimientos sobre cómo utilizar controles Web de servidor en un formulario Web Form ASP.NET.

Conocimientos sobre cómo utilizar los controles de validación en un formulario Web Form.

Conocimientos sobre cómo crear procedimientos de eventos para controles en un formulario Web Form.

Conocimientos sobre cómo crear una propiedad en Microsoft Visual Basic® .NET o C#.

Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios de este curso, crearemos un sitio Web que permita a los empleados seleccionar y configurar los beneficios que elijan.

En muchas páginas del sitio Web de la compañía, se recoge el nombre y fecha de nacimiento del usuario. En este laboratorio, crearemos un control de usuario para recoger esa información y utilizar el control de usuario en la página medical.aspx del sitio Web.

Objetivos

Nota

Requisitos previos

Escenario

Tiempo estimado para completar el laboratorio: 30 minutos

Page 296: Microsoft ASP.net - Curso Completo - Espa Ol

2 ¡Error! No hay texto con el estilo especificado en el documento.

Ejercicio 0 Configuración del laboratorio

Para realizar este laboratorio, es necesario haber creado el proyecto de la aplicación Web Benefits. Si no se han creado estos proyectos, realizar los siguientes pasos:

Crear la solución LabApplication

Realizar este procedimiento únicamente si no se ha creado un archivo de solución LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solución en blanco denominada LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Solución en

blanco. b. En el cuadro de diálogo Nuevo proyecto, escribir LabApplication en el

cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

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

1. Crear un nuevo proyecto de aplicación Web ASP.NET, denominado BenefitsVB o BenefitsCS, en la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto. b. En el cuadro de diálogo 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 Aplicación Web ASP.NET,

establecer la ubicación 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 Solución, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solución, es importante el uso de mayúsculas 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 mayúsculas el nombre del proyecto Benefits. Pueden crearse dos versiones del proyecto; BenefitsVB sería una solución Visual Basic .NET y BenefitsCS sería una solución Visual C#.

Importante

Importante

Precaución

Page 297: Microsoft ASP.net - Curso Completo - Espa Ol

3

Actualizar el proyecto Benefits

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente: a. Ir a la carpeta VB\Starter\BenefitsVB para los archivos de Visual Basic

.NET. b. En el cuadro Archivos de tipo del cuadro de diálogo Agregar elemento

existente – BenefitsVB, hacer clic en Todos los archivos. a. Ir a la carpeta CS\Starter\BenefitsCS para los archivos de Visual C#. b. En el cuadro Archivos de tipo del cuadro de diálogo Agregar elemento

existente – BenefitsCS, hacer clic en Todos los archivos. Estas carpetas pueden encontrarse dentro del fichero labs07.zip

3. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir. 4. Hacer clic en Sí a la pregunta de si sobrescribir o recargar los archivos.

Crear la biblioteca de clases BenefitsList

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

1. Crear un nuevo proyecto de biblioteca de clases Visual Basic .NET con el nombre BenefitsListVB o BenefitsListCS, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. Crear el proyecto de biblioteca de clases.

En el cuadro de diálogo 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 solución, y hacer clic en Aceptar. En el cuadro de diálogo 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 solución, y hacer clic en Aceptar.

Verificar que se han escrito correctamente las mayúsculas del proyecto BenefitsList.

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Importante

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Precaución

Page 298: Microsoft ASP.net - Curso Completo - Espa Ol

4 ¡Error! No hay texto con el estilo especificado en el documento.

Actualizar el proyecto BenefitsList

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 1. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

2. Copiar archivos de la carpeta Labfiles. Ir a la carpeta VB\Starter\BenefitsListVB. En el cuadro Archivos de tipo del cuadro de diálogo Agregar elemento existente – BenefitsListVB, seleccionar Todos los archivos (*.*). Ir a la carpeta CS\Starter\BenefitsListCS. En el cuadro Archivos de tipo del cuadro de diálogo Agregar elemento existente – BenefitsListCS, seleccionar Todos los archivos (*.*). Estas carpetas pueden encontrarse dentro del fichero labs07.zip

3. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir. 4. Hacer clic en Sí a la pregunta de sobrescribir o recargar los archivos.

Crear una referencia al componente BenefitsList del proyecto Benefits

1. En el proyecto BenefitsVB de la solución LabApplication, completar los siguientes pasos para agregar una referencia al componente BenefitsList que acabamos de crear: a. Hacer clic con el botón derecho en el proyecto BenefitsVB en el

Explorador de soluciones y hacer clic en Agregar referencia. b. En el cuadro de diálogo Agregar referencia, en la pestaña Proyectos,

hacer doble clic en el proyecto BenefitsListVB. c. En la lista Componentes seleccionados, seleccionar el componente

BenefitsListVB, y hacer clic en Aceptar. El componente se agrega a la carpeta Referencias en el Explorador de soluciones.

1. En el proyecto BenefitsCS de la solución LabApplication, completar los siguientes pasos para agregar una referencia al componente BenefitsList que acabamos de crear: a. Hacer clic con el botón derecho en el proyecto BenefitsCS en el

Explorador de soluciones y hacer clic en Agregar referencia. b. En el cuadro de diálogo Agregar referencia, en la pestaña Proyectos,

hacer doble clic en el proyecto BenefitsListCS. c. En la lista Componentes seleccionados, seleccionar el componente

BenefitsListCS, y hacer clic en Aceptar. El componente se agrega a la carpeta Referencias en el Explorador de soluciones.

Para el proyecto Visual Basic .NET:

Para el proyecto Visual C#:

Para el proyecto Visual Basic .NET:

Para el proyecto Visual C#:

Page 299: Microsoft ASP.net - Curso Completo - Espa Ol

5

Ejercicio 1 Crear un control de usuario

En este ejercicio, crearemos un control de usuario desde los controles Name y Birth Date de la página life.aspx.

Crear la interfaz de usuario

1. Utilizando Visual Studio .NET, abrir la solución LabApplication. 2. Agregar un nuevo control de usuario al proyecto BenefitsVB o BenefitsCS

denominado namedate.ascx: a. Hacer clic con el botón derecho en el proyecto Benefits, seleccionar

Agregar, y hacer clic en Agregar control de usuario Web. b. En el cuadro de diálogo Agregar nuevo elemento, escribir

namedate.ascx en el campo Nombre, y hacer clic en Abrir. 3. Abrir la página life.aspx del proyecto Benefits. 4. Copiar los controles Label, TextBox, y los controles de validación 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 página namedate.ascx. 6. Utilizando la tecla Intro y la barra espaciadora, organizar los controles para

que tenga un aspecto similar al de la siguiente ilustración.

Page 300: Microsoft ASP.net - Curso Completo - Espa Ol

6 ¡Error! No hay texto con el estilo especificado en el documento.

Crear las propiedades del control de usuario

1. Abrir la página de código subyacente de la página 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 código debería ser similar al siguiente: Public Property strName() As String Get Return txtName.Text End Get Set(ByVal Value As String) txtName.Text = Value End Set End Property public String strName { get { return txtName.Text; } set { txtName.Text = value; } }

Cuando se utilice C#, las palabras set y get se especifican en minúsculas.

3. Agregar una propiedad denominada dtDate para leer y escribir la propiedad Text del control txtBirth. Agregar una propiedad denominada dtDate de tipo Date para leer y escribir la propiedad Text del control txtBirth. Agregar una propiedad denominada dtDate de tipo DateTime para leer y escribir la propiedad Text del control txtBirth. El tipo de datos de la propiedad dtDate es Date para Visual Basic .NET y DateTime para C#, pero el control txtBirth guarda un valor String. Por tanto, en la propiedad Get, es necesario convertir el valor del control a un tipo de datos Date, y en la propiedad Set, es necesario convertir el valor de entrada a un tipo de datos String.

Visual Basic .NET

C#

Precaución

Visual Basic .NET

C#

Page 301: Microsoft ASP.net - Curso Completo - Espa Ol

7

El código debería ser similar al siguiente: Public Property dtDate() As Date Get Return CDate(txtBirth.Text) End Get Set(ByVal Value As Date) txtBirth.Text = Value.ToString() End Set End Property public DateTime dtDate { get { return Convert.ToDateTime(txtBirth.Text); } set { txtBirth.Text = value.ToString(); } }

4. Guardar los cambios. Guardar los cambios de los archivos namedate.ascx y namedate.ascx.vb. Guardar los cambios de los archivos namedate.ascx y namedate.ascx.cs Probaremos el control de usuario en el Ejercicio 2.

Visual Basic .NET

C#

Visual Basic .NET C#

Page 302: Microsoft ASP.net - Curso Completo - Espa Ol

8 ¡Error! No hay texto con el estilo especificado en el documento.

Ejercicio 2 Uso del control de usuario

En este ejercicio, utilizaremos el control de usuario de la página medical.aspx para solicitar el nombre y la fecha de nacimiento del usuario.

Ubicar un control de usuario en la página medical.aspx

1. Abrir la página medical.aspx del proyecto BenefitsVB o BenefitsCS. 2. Mediante una operación de arrastrar y soltar, ubicar el control

namedate.ascx del Explorador de soluciones en la primera fila de la tabla de la página medical.aspx. La página debería tener un aspecto similar a la siguiente ilustración.

3. Visualizar el código HTML creado. Introducir la directiva @ Register creada por Visual Studio .NET en las siguientes líneas. _____________________________________________________________

_____________________________________________________________

Introducir el código HTML creado por Visual Studio .NET para el control de usuario en las siguientes líneas. _____________________________________________________________

_____________________________________________________________

4. Abrir la página de código subyacente del formulario Web Form medical.aspx, medical.aspx.vb o medical.aspx.cs.

Page 303: Microsoft ASP.net - Curso Completo - Espa Ol

9

5. Declarar una variable Protected denominada Namedate1 de tipo de datos namedate. Protected Namedate1 As BenefitsVB.namedate protected BenefitsCS.namedate Namedate1;

6. Crear un procedimiento de evento Click para el botón Save. Cuando el usuario haga clic en Save, el procedimiento de evento debería devolver los valores del nombre y fecha de nacimiento del control de usuario al control Label2 de la página medical.aspx. El código debería ser similar al siguiente: Private Sub cmdSave_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles cmdSave.Click Label2.Text = Namedate1.strName & " born on " & _ Namedate1.dtDate.ToString() End Sub private void cmdSave_Click(object sender, System.EventArgs e) { Label2.Text = Namedate1.strName + " born on " + Namedate1.dtDate.ToString(); }

7. Generar y examinar la página medical.aspx. 8. En el explorador, introducir un nombre y una fecha de nacimiento, y hacer

clic en Guardar.

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 304: Microsoft ASP.net - Curso Completo - Espa Ol

Índice

Descripción 1

Lección: introducción al uso de ADO.NET 2

Lección: conectar a una base de datos 6

Lección: acceso a datos con DataSets 14

Lección: utilizar múltiples tablas 34

Lección: acceder a datos con DataReaders 44

Acceso a datos con Microsoft ADO.NET

Page 305: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 1

Descripción

Introducción a ADO.NET

Conectar a una base de datos

Acceder a datos con DataSets

Utilizar múltiples tablas

Acceder a datos con DataReaders

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

Crear un sitio Web dinámico que responda a las peticiones de los usuarios con datos personalizados puede requerir que vinculemos nuestra aplicación Web a varias fuentes de datos. Microsoft® ADO.NET es la herramienta que nos permite acceder programáticamente a fuentes de datos desde un formulario Web Form.

En este módulo, aprenderemos a utilizar ADO.NET para agregar acceso a datos a nuestra aplicación Web con Microsoft ASP.NET.

En esta lección, 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 manipulación de datos locales de los formularios Web Forms.

Almacenar múltiples tablas de datos en un objeto DataSet, y mostrar los datos en controles DataGrid.

Leer datos programáticamente de una base de datos SQL utilizando un objeto SqlDataReader.

Introducción

Objetivos de la lección

Page 306: Microsoft ASP.net - Curso Completo - Espa Ol

2 Acceso a datos con Microsoft ADO.NET

Lección: introducción al uso de ADO.NET

Multimedia: modelo de objetos ADO.NET

Utilizar DataSets frente a DataReaders

Práctica: cuándo utilizar DataSets o DataReaders

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

ADO.NET está diseñado para cargar datos desde una fuente de datos y trabajar con esos datos en modo desconectado. Este estado de desconexión permite al formulario Web Form operar de forma semi-independiente de las fuentes de datos, reduciendo así el tráfico de red. ADO.NET utiliza Extensible Markup Language (XML) como formato universal de transmisión de datos, lo cual garantiza la interoperabilidad con cualquier plataforma donde esté disponible un parser XML.

En esta lección, estudiaremos el uso del modelo de objetos de ADO.NET para acceder a datos. También estudiaremos cómo utilizar los objetos DataSet y DataReader para acceder a datos.

En esta lección, 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 aplicación Web.

Introducción

Objetivos de la lección

Page 307: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 3

Uso de DataSets frente a DataReaders

Soportado por las herramientas de Visual Studio .NET

Acceso más lento

Sólo hacia delante

Vinculado a un único control

Basado en una instrucción SQL de una base de datos

Sólo lectura

Codificación manual

Acceso más rápido

Búsqueda de datos hacia delante y hacia atrás

Vinculado a múltiples controles

Incluye múltiples tablas de distintas bases de datos

Acceso lectura/escritura a datos

DataReaderDataSet

Desconectado Conectado

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

Los objetos DataSet son objetos complejos que nos permiten almacenar múltiples tablas de datos DataTables desde una fuente de datos. Los objetos DataSet son como una base de datos virtual ubicada dentro de una aplicación Web. Los objetos DataSet también 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 sólo hacia delante (forward-only) y de sólo lectura (read-only) a los datos de una base de datos.

La elección entre utilizar objetos DataSet u objetos DataReader debería 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 contraseña almacenada, o se cumplimenta un control enlazado a una lista. Los objetos DataSet se utilizan para un acceso a datos más 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 intención es leer y escribir a nuestra fuente de datos, debemos utilizar un objeto DataSet. Los objetos DataReader son conexiones de sólo lectura y deberían utilizarse únicamente cuando los datos vayan a utilizarse en una situación de sólo lectura.

Acceso a múltiples bases de datos Si nuestra intención es combinar tablas de una o más bases de datos, debemos utilizar un objeto DataSet. Los objetos DataReader se basan en una única instrucción SQL de una sola base de datos.

Enlace a controles

Introducción

Uso de DataSets y DataReaders

Page 308: Microsoft ASP.net - Curso Completo - Espa Ol

4 Acceso a datos con Microsoft ADO.NET

Si nuestra intención es enlazar los datos a más de un control, debemos utilizar un objeto DataSet. Los objetos DataReader sólo pueden vincularse a un único control.

Modo conexión Si nuestra intención es trabajar en un modo desconectado, debemos utilizar un objeto DataSet. Los objetos DataReader deben ejecutarse en modo conectado.

Búsqueda (scanning) de datos Si nuestra intención es buscar los datos hacia atrás 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 más 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. También la sobrecarga es mayor en la creación del objeto DataSet debido a la capacidad de leer y escribir datos y búsqueda hacia delante y hacia atrás. Los objetos DataReader son más rápidos debido a la naturaleza del objeto más ligera. Hay muy poca sobrecarga para el objeto DataReader, ya que éste trabaja sólo hacia delante y sólo de lectura.

Soporte de herramientas Si nuestra intención es utilizar Microsoft Visual Studio® .NET para crear la conexión a datos, utilizaremos objeto DataSet. Con los objetos DataSet, podemos elegir entre escribir nuestro propio código o utilizar el código máquina de Visual Studio .NET. Con los objetos DataReader, debemos escribir todo el código de soporte.

Page 309: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 5

Práctica: cuándo utilizar DataSets o DataReaders

Los estudiantes:

Seleccionarán la mejor opción 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 información de dos tablas que se encuentran en dos bases de datos distintas, y mostrar las tablas al usuario. ____________________________________________________________

____________________________________________________________

Deseamos obtener información 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 información de dos tablas de la misma base de datos y mostrar esa información al usuario. ____________________________________________________________

____________________________________________________________

Deseamos obtener información de una tabla de una base de datos y dejar al usuario visualizar los datos en múltiples configuraciones distintas. ____________________________________________________________

____________________________________________________________

Page 310: Microsoft ASP.net - Curso Completo - Espa Ol

6 Acceso a datos con Microsoft ADO.NET

Lección: conexión a una base de datos

Seguridad SQL ServerCrear la conexiónDemostración: establecer la seguridad SQL Server

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

El primer paso en el uso de una base de datos para soportar nuestra aplicación Web es crear una conexión segura a la base de datos. Las conexiones no seguras pueden exponer a ataques mal intencionados tanto la aplicación Web como la base de datos.

En esta lección, aprenderemos a crear conexiones seguras a una base de datos SQL Server utilizando los objetos SqlConnection y SqlDataAdapter.

En esta lección, aprenderemos a:

Explicar la diferencia entre el modo mixto y la autenticación sólo Windows. Crear una conexión, con autenticación sólo Windows, a una base de datos

SQL Server.

Introducción

Objetivos de la lección

Page 311: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 7

Seguridad SQL Server

ClienteCliente

Enviar el nombre de usuario y contraseña

en texto claro.

No enviar el nombre de usuario y contraseña.

Enviar sólo que el usuario ha sido

autenticado.

Autenticaciónmodo mixto

Autenticaciónmodo mixto

Autenticaciónsólo WindowsAutenticaciónsólo Windows

Servidor SQL Sólo la cuenta ASPNETtiene concedido acceso

Servidor SQL Sólo la cuenta ASPNETtiene concedido accesoServidor Web

Autenticación WindowsServidor Web

Autenticación Windows

o…o…

Servidor SQL Cada cuenta de usuario se

agrega a grupo login de SQL Server

Servidor SQL Cada cuenta de usuario se

agrega a grupo login de SQL Server

Servidor Web Configuración ASP.NET

predeterminada

Servidor Web Configuración ASP.NET

predeterminada

Aquí está el nombre de usuario

y la contraseña

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

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 envía una petición a la aplicación Web, y ésta se conecta a la base de datos SQL Server para satisfacer la solicitud. Existen dos métodos principales para que una aplicación Web se conecte a una base de datos SQL Server: autenticación en modo mixto y autenticación en modo sólo Windows. El método más utilizado es la autenticación sólo Windows.

La autenticación en modo mixto utiliza la configuración predeterminada de ASP.NET y de la aplicación Web. Cada usuario de la aplicación Web debe tener una cuenta de usuario añadida al grupo logins de SQL Server. El punto débil de la autenticación en modo mixto es que los nombres de usuario y las contraseñas se envían al equipo que ejecuta SQL Server en código HTML no encriptado. Estos datos expuestos podrían permitir a terceros obtener las credenciales de inicio de sesión. Además, es necesario administrar cuentas de usuario tanto en el servidor Web como en el equipo que ejecuta SQL Server.

Para utilizar la autenticación en modo mixto, configurar SQL Server en modo de autenticación mixto (SQL Server y Windows). El siguiente código puede utilizarse para conectar a un SQL Server con autenticación en modo mixto:

Dim strConn As String = _ "data source=localhost; " & _ "initial catalog=northwind; " & _ "user id=CohoUser;password=1Coho" Dim conn As New SqlConnection(strConn) string strConn = "data source=localhost; " + "initial catalog=northwind; " + "user id=CohoUser; " + "password=1Coho"; SqlConnection conn = new SqlConnection(strConn);

Introducción

Autenticación En modo mixto

Visual Basic .NET

C#

Page 312: Microsoft ASP.net - Curso Completo - Espa Ol

8 Acceso a datos con Microsoft ADO.NET

Utilizar la autenticación en modo mixto para acceder a SQL Server desde una aplicación Web es un riesgo de seguridad y no está recomendado. La autenticación en modo mixto se describe aquí como una técnica que puede utilizarse durante el desarrollo de la aplicación Web.

La autenticación en modo sólo Windows es el método más utilizado para conectar una aplicación Web a una base de datos SQL Server. Cuando utilizamos la autenticación en modo sólo Windows, SQL Server no necesita el nombre de usuario y la contraseña. Sólo se requiere una confirmación de que el usuario ha sido autenticado por una fuente de confianza para procesar la petición a la base de datos.

El proceso de la autenticación en modo sólo Windows utiliza una sola cuenta denominada ASPNET para todos los accesos a SQL Server desde la aplicación Web. Esta única cuenta elimina los problemas de transmitir nombres de usuario y contraseñas no encriptados entre la aplicación Web y SQL Server, junto con la necesidad de mantener cuentas de usuario en ambos servidores.

Con la autenticación en modo sólo Windows, los usuarios acceden al formulario Web Form como usuarios anónimos. 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 aplicación Web. Finalmente, el formulario Web Form que incluye los datos solicitados se devuelven al usuario.

Para utilizar la autenticación en modo sólo Windows, configuramos SQL Server con la autenticación en modo sólo Windows. El siguiente código puede utilizarse para conectar a un SQL Server con autenticación en modo sólo Windows:

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

Aviso

Autenticación sólo Windows

Visual Basic .NET

C#

Page 313: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 9

Cuando utilizamos la autenticación en modo sólo Windows, podemos mantener a SQL Server en el modo de autenticación predeterminado de sólo Windows. Si utilizamos la autenticación en modo mixto, necesitamos modificar el modo de autenticación de SQL Server.

Cambiar el modo de autenticación de SQL Server

1. En el menú Inicio, hacer clic con el botón derecho en Mi PC y clic en Administrar.

2. En la consola Administración de equipos, expandir la carpeta Servicios y Aplicaciones y la carpeta Servidores Microsoft SQL Server.

3. Hacer clic con el botón derecho en el servidor SQL Server (local) y clic en Propiedades.

4. En el cuadro de diálogo Propiedades de SQL Server, en la ficha Seguridad, hacer clic en el botón de opción SQL Server y Windows o la opción sólo Windows de la sección Autenticación, y hacer clic en Aceptar.

Para más información sobre securizar una aplicación Web, ver el Módulo “Securizar una aplicación Web con Microsoft ASP.NET”.

Configurar el SQL Server para ejecutar autenticación en modo mixto o sólo Windows

Nota

Page 314: Microsoft ASP.net - Curso Completo - Espa Ol

10 Acceso a datos con Microsoft ADO.NET

Crear la conexión

Uso de SqlConnection

Establecer los parámetros de la cadena de conexión

Timeout de conexión

Fuente de datos

Catálogo inicial

Seguridad integrada

Dim strConn As String = "data source=localhost; " & _"initial catalog=northwind; integrated security=true"

Dim conn As New SqlConnection(strConn)

Dim strConn As String = "data source=localhost; " & _"initial catalog=northwind; integrated security=true"

Dim conn As New SqlConnection(strConn)

Contraseña

Persistir información seguridad

Proveedor

ID de usuario

string strConn = "data source=localhost; " +"initial catalog=northwind; integrated security=true";

SqlConnection conn = new SqlConnection(strConn);

string strConn = "data source=localhost; " +"initial catalog=northwind; integrated security=true";

SqlConnection conn = new SqlConnection(strConn);

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

Para mover datos entre una base de datos y nuestra aplicación Web, en primer lugar debemos crear una conexión 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 información de inicio de sesión requerida.

Dependiendo del tipo de base de datos al que accedamos, podemos utilizar un objeto SqlConnection o un objeto OleDbConnection. Utilizamos un objeto SqlConnection para conectar a bases de datos SQL Server 7.0 o posterior, y objetos OleDbConnection para conectar al resto de bases de datos.

Creamos un objeto SqlConnection pasando una cadena de conexión que proporciona los parámetros necesarios para crear una conexión a una fuente de datos.

El siguiente código de ejemplo crea un objeto SQLConnection a la base de datos SQL Server Northwind:

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

Introducción

Crear una cadena de conexión

Visual Basic .NET

C#

Page 315: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 11

La siguiente tabla describe algunos de los parámetros más habituales de un objeto de conexión:

Parámetro Descripción Connection Timeout El intervalo de tiempo de espera en segundos en una conexión

al servidor antes de finalizar el intento y generar una excepción. 15 segundos es el tiempo predeterminado.

Data Source El nombre del servidor SQL Server utilizado cuando se abre una conexión, o el nombre del archivo que se utiliza cuando en la conexión a una base de datos Microsoft Access.

Initial Catalog El nombre de la base de datos.

Integrated Security El parámetro que determina si la conexión es o no segura. Los valores posibles son True, False y SSPI. SSPI es el equivalente a True.

Password La contraseña de inicio de sesión en la base de datos SQL Server.

Persist Security Info Cuando está establecido a False no se devuelve información sensible a la seguridad (como la contraseña) como parte de la conexión, si la conexión está abierta o ha estado en un estado abierto. Establecer esta propiedad a True puede constituir un riesgo de seguridad. La configuración predeterminada es False.

Provider La propiedad que se utiliza para establecer o devolver el nombre del proveedor de la conexión; este parámetro se utiliza únicamente para objetos OleDbConnection.

User ID El nombre de cuenta de inicio de sesión de SQL Server.

Parámetros de la cadena de conexión

Page 316: Microsoft ASP.net - Curso Completo - Espa Ol

12 Acceso a datos con Microsoft ADO.NET

Demostración: establecer la seguridad de SQL Server

Abrir SQL Server Enterprise Manager

Establecer el modo de autenticación

Probar con seguridad integrada

Probar con seguridad en modo mixto

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

En esta demostración, veremos cómo establecer y probar una conexión de seguridad integrada entre una aplicación Web y un SQL Server.

Ejecutar esta demostración

1. En el menú Inicio, hacer clic con el botón derecho en Mi PC y clic en Administrar.

2. En la consola Administración de equipos, expandir la carpeta Servicios y aplicaciones y expandir la carpeta Servidores Microsoft SQL Server.

3. Hacer clic con el botón derecho en el servidor SQL Server (local) y clic en Propiedades.

4. En el cuadro de diálogo Propiedades de SQL Server, en la ficha Seguridad, hacer clic en el botón de opción Sólo Windows de la sección Autenticación 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 página SQLSecurityModes.aspx. 7. Hacer clic en Utilizar seguridad integrada, y clic en Get Data.

Los datos se recuperan de la base de datos y se muestran en el control DataGrid.

8. Hacer clic en Utilizar seguridad estándar, 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 Gestión de equipos, expandir la carpeta SQL Server

(local) y expandir la carpeta Seguridad. b. Hacer clic con el botón derecho en Logins y hacer clic en Nuevo Login.

Introducción

Abrir SQL Server Enterprise Manager

Establecer el modo de autenticación

Prueba con seguridad integrada

Page 317: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 13

c. En el cuadro de diálogo Propiedades de login de SQL Server, escribir

CohoUser en el campo Nombre, hacer clic en Autenticación SQL Server en la sección Autenticación, escribir 1Coho en el campo Contraseña, y hacer clic en Aceptar.

d. Teclear 1Coho en el cuadro de diálogo Confirmar contraseña, y hacer clic en Aceptar.

10. Cambiar el modo de autenticación de SQL Server a modo mixto. a. En la consola Gestión de equipos, hacer clic con el botón derecho en

SQL Server (local) y clic en Propiedades. b. En el cuadro de diálogo Propiedades de SQL Server, en la ficha

Seguridad, hacer clic en el botón de opción SQL Server y Windows de la sección Autenticación, 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 página SQLSecurityModes.aspx en el navegador de nuevo y probar ambos métodos para acceder a SQL Server. Ahora, funcionarán los dos métodos.

Prueba con seguridad en modo mixto

Page 318: Microsoft ASP.net - Curso Completo - Espa Ol

14 Acceso a datos con Microsoft ADO.NET

Lección: acceso a datos con DataSets

Crear un DataAdapterCrear un DataSetDemostración: utilizar programáticamente un DataSetUtilizar un DataViewPráctica: organizar código para crear un DataSetVincular un DataSet a un control enlazado a listaPráctica dirigida por el instructor: visualizar un DataSetGestión de errores

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

El objeto DataSet representa una copia local de los datos que provienen de una o más 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 lección, estudiaremos cómo utilizar los objetos DataSet para soportar el almacenamiento local de datos y los requerimientos de manipulación de los formularios Web Forms.

En esta lección, 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 típicos que nos encontramos en el acceso a datos.

Introducción

Objetivos de la lección

Page 319: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 15

Crear un DataAdapter

Almacenar la consulta en un DataAdapter

El constructor DataAdapter establece la propiedad SelectCommand

Establecer las propiedades InsertCommand, UpdateCommand y DeleteCommand si fuera necesario

Dim da As New SqlDataAdapter _("select * from Authors", conn)

Dim da As New SqlDataAdapter _("select * from Authors", conn)

da.SelectCommand.CommandText da.SelectCommand.Connection

da.SelectCommand.CommandText da.SelectCommand.Connection

SqlDataAdapter da = new SqlDataAdapter("select * from Authors",conn);

SqlDataAdapter da = new SqlDataAdapter("select * from Authors",conn);

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

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

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

El objeto DataSet representa una copia local de datos de una fuente de datos. Cuando se utiliza sin una fuente de datos, el objeto DataSet resulta útil para guardar datos locales a los cuales pueden acceder los formularios Web Forms. Sin embargo, para actuar como una herramienta de gestión de datos real, un objeto DataSet debe poder interactuar con una o más fuentes de datos. Para conseguir esta interacción, el .NET Framework proporciona las clases SqlDataAdapter y OleDbDataAdapter.

Un objeto DataAdapter actúa 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 conexión 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 instrucción SQL o un procedimiento almacenado.

Visual Studio .NET pone a disposición 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 específica para una base de datos SQL Server versión 7.0 o posterior. El objeto SqlDataAdapter es más rápido que el objeto OleDbDataAdapter porque funciona directamente con SQL Server y no debe funcionar a través de una capa OLE DB Data Provider.

Además, las clases DataAdapter para otros tipos de fuentes de datos pueden integrarse con Visual Studio .NET.

Introducción

DataAdapter

Page 320: Microsoft ASP.net - Curso Completo - Espa Ol

16 Acceso a datos con Microsoft ADO.NET

Cuando utilizamos objetos DataAdapter para intercambiar datos entre un objeto DataSet y una fuente de datos, podemos especificar las acciones que deseamos realizar utilizando una de las cuatro propiedades DataAdapter. Las propiedades DataAdapter ejecutan una instrucción SQL o invocan un procedimiento almacenado.

Las propiedades que están disponibles con la clase DataAdapter se muestran en la siguiente tabla.

Propiedad Función SelectCommand La propiedad SelectCommand recupera filas de la fuente de

datos.

InsertCommand La propiedad InsertCommand escribe filas insertadas del DataSet a la fuente de datos.

UpdateCommand La propiedad UpdateCommand escribe filas modificadas del DataSet a la fuente de datos.

DeleteCommand La propiedad DeleteCommand elimina filas en la fuente de datos.

El siguiente código de ejemplo muestra cómo crear un objeto SqlDataAdapter denominado da que contiene una sentencia de consulta:

'Create a connection Dim conn As New SqlConnection _ ("data source=localhost;initial catalog=pubs;" & _ "integrated security=true;persist security info=True;") 'Create the DataAdapter Dim da As New SqlDataAdapter _ ("select * from Authors", conn) //Create a connection SqlConnection conn = new SqlConnection ("data source=localhost; initial catalog=pubs; " + "integrated security=true; persist security info=True;"); //Create the DataAdapter SqlDataAdapter da = new SqlDataAdapter ("select * from Authors", conn);

Propiedades del DataAdapter

Ejemplo de SqlDataAdapter

Visual Basic .NET

C#

Page 321: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 17

Crear un DataSet

Crear y poblar un DataSet con DataTables

El método Fill ejecuta el SelectCommand

Acceder a DataTable

Dim ds As New DataSet()da.Fill(ds, "Authors")

Dim ds As New DataSet()da.Fill(ds, "Authors")

Dim r As DataRowDim str As StringFor Each r in _

ds.Tables("Authors").Rowsstr &= r(2)str &= r("au_lname")

Next

Dim r As DataRowDim str As StringFor Each r in _

ds.Tables("Authors").Rowsstr &= r(2)str &= r("au_lname")

Next

ds.Tables("Authors").Rows.Countds.Tables("Authors").Rows.Count

DataSet ds = new DataSet();da.Fill(ds, "Authors");

DataSet ds = new DataSet();da.Fill(ds, "Authors");

ds.Tables["Authors"].Rows.Count;ds.Tables["Authors"].Rows.Count;

string str="";

foreach(DataRow r in ds.Tables["Authors"].Rows)

{str += r[2];str += r["au_lname"];

}

string str="";

foreach(DataRow r in ds.Tables["Authors"].Rows)

{str += r[2];str += r["au_lname"];

}

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

Para crear una copia local de una base de datos, creamos y poblamos un objeto DataSet utilizando objetos DataTable.

El primer paso para crear un objeto DataSet es declarar el nombre del objeto DataSet. El siguiente código 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 método Fill en el objeto DataAdapter y especificamos el objeto DataTable que deseamos rellenar. El siguiente código rellena la tabla Authors del objeto DataSet ds utilizando un DataAdapter denominado da:

da.Fill(ds, "Authors") da.Fill(ds, "Authors"); El método Fill ejecuta implícitamente 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.

Introducción

Crear a DataSet

Visual Basic .NET

C#

Rellenar el DataSet

Visual Basic .NET

C#

Page 322: Microsoft ASP.net - Curso Completo - Espa Ol

18 Acceso a datos con Microsoft ADO.NET

El siguiente código de ejemplo muestra cómo crear un objeto SqlDataAdapter da, e invocar a continuación el método Fill para almacenar los datos en el objeto DataSet ds.

'Create a connection Dim conn As New SqlConnection _ ("data source=localhost;initial catalog=pubs;" & _ "integrated security=SSPI;persist security info=True;") 'Create the DataSet Dim ds As New DataSet() 'Create the DataAdapter Dim da As New SqlDataAdapter _ ("select * from Authors", conn) 'Fill the DataSet ds da.Fill(ds, "Authors") //Create a connection SqlConnection conn = new SqlConnection ("data source=localhost;initial catalog=pubs; " + "integrated security=SSPI;persist security info=True;"); //Create the DataSet DataSet ds = new DataSet(); //Create the DataAdapter SqlDataAdapter da = new SqlDataAdapter ("select * from Authors", conn); //Fill the DataSet ds da.Fill(ds, "Authors"); El segundo argumento del método Fill es un nombre para el objeto DataTable que está creado. Utilizamos este nombre para acceder a los datos devueltos.

Una vez insertados los datos en un objeto DataSet, podemos acceder programáticamente a los datos. Como muestra el siguiente código, cada objeto DataSet está formado por uno o más objetos DataTable a los que podemos hacer referencia por su nombre o posición ordinal:

ds.Tables("Authors") -o- ds.Tables(0) ds.Tables["Authors"]; -o- ds.Tables[0];

Visual Basic .NET

C#

Acceder a DataTable

Visual Basic .NET

C#

Page 323: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 19

Las clases DataRow y DataColumn son los componentes principales de una clase DataTable. Utilizaríamos un objeto DataRow con sus propiedades y métodos 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 programático a DataRowCollection. La propiedad Columns del objeto DataTable proporciona acceso programático a DataColumnCollection.

El siguiente código de ejemplo agrega los nombres de columnas de un objeto DataSet al control ListBox denominado lstItems:

Dim col As DataColumn For Each col In ds.Tables(0).Columns lstItems.Items.Add(col.ColumnName) Next foreach(DataColumn col in ds.Tables[0].Columns) { lstItems.Items.Add(col.ColumnName); } Tanto el objeto DataRowCollection como el objeto DataColumnCollection tienen una propiedad Count que nos permite determinar el número de filas o columnas de un objeto DataTable, como muestra el siguiente código de ejemplo:

ds.Tables("Authors").Rows.Count ds.Tables("Authors").Columns.Count ds.Tables["Authors"].Rows.Count; ds.Tables["Authors"].Columns.Count; Contar las filas y columnas del objeto DataTable nos permite acceder a campos individuales del objeto DataTable. Podemos acceder a campos por posición ordinal (basada-en-0) o por el nombre. En el siguiente código, x es el índice de la fila de datos a la que deseamos acceder:

DataSet.Tables(0).Rows(x)(1) DataSet.Tables(0).Rows(x)("fieldname") ds.Tables["Authors"].Rows[x][1]; ds.Tables["Authors"].Rows[x]["fieldname"];

Visual Basic .NET

C#

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 324: Microsoft ASP.net - Curso Completo - Espa Ol

20 Acceso a datos con Microsoft ADO.NET

El siguiente código recorre en bucle cada fila del objeto DataTable denominado Authors y crea una cadena utilizando los campos segundo y au_lname de Authors:

Dim r As DataRow Dim str As String For Each r in ds.Tables("Authors").Rows str &= r(1) str &= r("au_lname") Next string str = ""; foreach(DataRow r in ds.Tables["Authors"].Rows) { str += r[1]; str += r["au_lname"]; }

Visual Basic .NET

C#

Page 325: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 21

Demostración: utilizar programáticamente un DataSet

Crear una conexión

Crear DataAdapter

Crear DataSet

Leer los datos del DataSetprogramáticamente

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

En esta demostración, examinaremos código que crea y rellena un objeto DataSet, y veremos cómo ese código rellena dinámicamente un control ListBox desde el objeto DataSet.

Ejecutar la demostración

1. Abrir la página UseDataSet.aspx del proyecto Demo08VB o Demo08CS que se pueden encontrar dentro del fichero demos08.zip.

2. Generar y examinar la página. La primera vez que se carga la página, el cuadro de lista lstItems se rellena dinámicamente con los nombres de las columnas del DataSet. El botón Get Number of Rows y el botón Get Values leen la información del DataSet.

3. Hacer clic en Get Number of Rows. El código en el procedimiento de evento click muestra la propiedad Count de la colección Rows.

4. Seleccionar una columna en el cuadro de lista y hacer clic en Get Values. El código 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 página de código subyacente de la página UseDataSet.aspx.

Introducción

Page 326: Microsoft ASP.net - Curso Completo - Espa Ol

22 Acceso a datos con Microsoft ADO.NET

6. En el procedimiento de evento Page_Load, mostrar el código que crea los

siguientes objetos:

• SqlConnection

• SqlDataAdapter

• DataSet 7. En el procedimiento de evento Page_Load, mostrar cómo la primera vez

que se muestra la página, el cuadro lista se rellena únicamente con los nombres de columnas.

8. En el procedimiento de evento cmdRows_Click, mostrar cómo se recupera el número de filas desde el DataSet.

9. En el procedimiento de evento cmdGetValues_Click, mostrar cómo se recupera el campo seleccionado desde el DataSet.

Page 327: Microsoft ASP.net - Curso Completo - Espa Ol

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 DataViewpredeterminado de la tabla

Establecer una vista distinta de un DataSet

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

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

Dim dv As DataView = ds.Tables("Authors").DefaultViewDim dv As DataView = ds.Tables("Authors").DefaultView

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

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

DataView dv = ds.Tables["Authors"].DefaultView;DataView dv = ds.Tables["Authors"].DefaultView;

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

Para mostrar los datos que almacena un objeto DataSet, podemos vincular el objeto DataSet directamente a un control enlazado a una lista o utilizar un objeto DataView. Un objeto DataView es una vista personalizada y enlazable de un único objeto DataTable. Después 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 personalización 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 código muestra cómo 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;

Introducción

DataViews como subconjunto de un DataTable

DefaultView

Visual Basic .NET

C#

Page 328: Microsoft ASP.net - Curso Completo - Espa Ol

24 Acceso a datos con Microsoft ADO.NET

También 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 expresión de filtro. La expresión de filtro puede tener el valor True o False. También podemos establecer la propiedad Sort del objeto DataView utilizando una expresión de clasificación. La expresión de clasificación puede incluir los nombres de objetos DataColumn o un cálculo.

En el siguiente código, la propiedad RowFilter, de un objeto DataView dv, está asignada para recuperar autores únicamente del estado de California y, a continuación, ordenar los resultados por apellido:

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

DataView personalizado

Visual Basic .NET

C#

Page 329: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 25

Práctica: organizar código para crear un DataSet

Los estudiantes:

Reordenarán líneas de código para crear un DataSet

Tiempo: 5 minutos

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

En esta práctica, reordenaremos líneas de código ADO.NET en el orden correcto para crear un objeto DataSet.

Ejecutar la práctica

• Visualizar la página http://localhost/Mod10VB/DataSetCode.aspx o http://localhost/Mod10CS/DataSetCode.aspx y organizar las líneas de código ADO.NET en el orden correcto para crear un objeto DataSet.

Hay varias respuestas correctas para esta práctica.

Nota

Page 330: Microsoft ASP.net - Curso Completo - Espa Ol

26 Acceso a datos con Microsoft ADO.NET

Vincular un DataSet a un control enlazado a lista

Crear el control

Vincular a un DataSet o un DataView

dg.DataSource = dsdg.DataMember = "Authors"

dg.DataBind()

dg.DataSource = dsdg.DataMember = "Authors"

dg.DataBind()

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

dg.DataSource = ds;dg.DataMember = "Authors";

dg.DataBind();

dg.DataSource = ds;dg.DataMember = "Authors";

dg.DataBind();

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

ASP.NET incluye un conjunto de controles enlazados a listas, como los controles DataGrid, DataList y DataRepeater, que facilitan y flexibilizan la visualización 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 código muestra cómo crear un control DataGrid dg que produce la salida HTML parecida a una hoja de cálculo:

<asp:DataGrid id="dg" runat="server" /> Para vincular un objeto DataSet a un control DataGrid, en primer lugar debemos establecer la propiedad DataSource del control DataGrid a un objeto DataSet, DataTable o DataView, e invocar el método 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 código de ejemplo muestra cómo vincular la tabla Authors, del objeto DataSet ds, a un control DataGrid denominado dg:

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

Introducción

Crear el control

Vincular a un Dataset o DataView

Visual Basic .NET

C#

Page 331: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 27

El siguiente código muestra cómo podemos utilizar también la colección Tables del objeto DataSet ds para asignar el objeto DataTable Authors directamente a la propiedad DataSource del control DataGrid denominado dg:

dg.DataSource = ds.Tables("Authors") dg.DataBind() dg.DataSource = ds.Tables["Authors"]; dg.DataBind(); Si deseamos mostrar una vista distinta de los datos del control DataGrid, deberemos crear un nuevo objeto DataView desde el objeto DataSet y vincular ese objeto al control.

El siguiente código de ejemplo muestra cómo vincular un objeto DataView dv, filtrado para el estado de California, a un control DataGrid dg:

Dim dv As New DataView(ds.Tables("Authors")) dv.RowFilter = "state = 'CA'" dg.DataSource = dv dg.DataBind() DataView dv = new DataView(ds.Tables["Authors"]); dv.RowFilter = "state = 'CA'"; dg.DataSource = dv; dg.Databind(); La siguiente ilustración muestra el formato predeterminado del control DataGrid, mostrando datos de autores que viven en el estado de California.

Visual Basic .NET

C#

Ejemplo de uso de una vista personalizada

Visual Basic .NET

C#

Page 332: Microsoft ASP.net - Curso Completo - Espa Ol

28 Acceso a datos con Microsoft ADO.NET

Práctica dirigida por el instructor: mostrar un DataSet

Crear una conexión

Crear un DataAdapter

Crear un DataSet

Crear un DataView

Vincular DataSet y DataView a controles DataGrid

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

En esta práctica dirigida por el instructor, examinaremos código 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 práctica dirigida por el instructor

1. Abrir la página UseGrid.aspx del proyecto Mod10VB o Mod10CS de la solución 2310Demos.

2. Generar y examinar la página 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 también implementa la clasificación estableciendo la propiedad Sort del objeto DataView.

3. En Visual Studio .NET, visualizar el código subyacente de la página UseGrid.aspx.

4. En el procedimiento de evento Page_Load, mostrar el código 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.

Introducción

Page 333: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 29

Gestión de errores

La conexión no se abre

La cadena de conexión no es válida

El servidor o la base de datos no se encuentran

Fallo de inicio de sesión

El DataAdapter no puede crear un DataSet

Sintaxis SQL no válida

Nombre de tabla o campo no válido

Código de ejemplo *****************************

Existen dos fuentes principales de error cuando intentamos acceder a datos desde un formulario Web Form utilizando ADO.NET: problemas de conexión y una falta de alineación con la base de datos.

Cuando se invoca el método Open, puede producirse más de un error. Ante la posibilidad de que ocurra más de un error, debemos ser capaces de gestionar múltiples errores utilizando las instrucciones Try…Catch…Finally. Si se produce una o más excepciones SqlException, podemos recorrer todos los objetos de excepciones SQL devueltos a nuestra aplicación Web.

El siguiente código muestra cómo utilizar una instrucción Try...Catch para capturar múltiples tipos de excepciones. En este ejemplo, el código captura el tipo de excepción InvalidOperationException, junto con otras excepciones, utilizando un procesador de excepciones genérico:

Introducción

La conexión no se abre

Page 334: Microsoft ASP.net - Curso Completo - Espa Ol

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

Page 335: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 31

try { SqlConnection conn = new SqlConnection("..."); SqlDataAdapter da = new SqlDataAdapter("...",conn); DataSet ds = new DataSet(); da.Fill(ds); } catch (System.Data.SqlClient.SqlException ex1) { switch(ex1.Number) { case 17: lblErrors.Text = lblErrors.Text + ("invalid Server name"); break; case 156: case 170: //bad SQL syntax lblErrors.Text = lblErrors.Text + ("incorrect syntax"); break; case 207: //bad field name in select lblErrors.Text = lblErrors.Text + ("invalid column name"); break; case 208: //bad table name in select lblErrors.Text = lblErrors.Text + ("invalid object name"); break; case 18452: lblErrors.Text = lblErrors.Text + ("invalid user name"); break; case 18456: lblErrors.Text = lblErrors.Text + ("invalid password"); break; case 4060: lblErrors.Text = lblErrors.Text + ("invalid database"); break; } } catch (System.Exception ex2) { lblErrors.Text = lblErrors.Text + ("Unexpected exception: " + ex2.Message + ". "); }

C#

Page 336: Microsoft ASP.net - Curso Completo - Espa Ol

32 Acceso a datos con Microsoft ADO.NET

La clase SqlException contiene la excepción 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 situación 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 excepción.

Para capturar objetos SqlException, debemos buscar errores de tipo System.Data.SqlClient.SqlException. Cuando se produce un objeto SqlException, el objeto de excepción contiene una colección Errors.

El siguiente ejemplo muestra cómo podemos recorrer la colección Errors para encontrar información sobre los errores que se han producido:

Dim erData As SqlClient.SqlErrorCollection = ex1.Errors Dim i As Integer For i = 0 To erData.Count - 1 lblErrors.Text &= ("Error " & i & ": " & _ erData(i).Number & ", " & _ erData(i).Class & ", " & _ erData(i).Message & "<br>") Next i SqlErrorCollection erData = ex1.Errors; for(int i = 0; i < erData.Count; i++) { lblErrors.Text += "Error" + i + ": " + erData[i].Number + ", " + erData[i].Class + ", " + erData[i].Message + "<br>"; } Los errores de SQL Server comparten propiedades comunes y están identificados por un número 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 Descripción Class Obtiene el nivel de gravedad del error devuelto por SQL Server.

LineNumber Obtiene el número de línea del archivo de proceso por lotes con comandos Transact-SQL o el procedimiento almacenado que contiene el error.

Message Obtiene el texto que describe el error.

Number Obtiene un número que identifica el tipo de error.

Para una lista completa de las propiedades de la clase SqlError, consultar la documentación de Visual Studio .NET.

El DataAdapter no puede crear un DataSet

Visual Basic .NET

C#

Errores de SQL Server

Nota

Page 337: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 33

Números de error de SQL Server

La propiedad Number permite determinar el error específico que se ha producido. Por ejemplo, la siguiente tabla ofrece una lista de algunos números de errores SQL Server más habituales y sus descripciones.

Número Descripción 17 Nombre de servidor no válido

4060 Nombre de base de datos no válido

18456 Nombre de usuario o contraseña no válidos

Niveles de gravedad de SQL Server La siguiente tabla describe niveles de severidad de errores de SQL Server, a los que se accede a través de la propiedad Class de la clase SqlError. Gravedad Descripción Acción 11-16 Generado por usuario Puede ser corregido por el usuario.

17-19 Errores de software o hardware

Podemos seguir trabajando, pero es posible que no podamos ejecutar una instrucción determinada. SqlConnection permanece abierto.

20-25 Errores de software o hardware

El servidor cierra SqlConnection. El usuario puede volver a abrir la conexión.

Page 338: Microsoft ASP.net - Curso Completo - Espa Ol

34 Acceso a datos con Microsoft ADO.NET

Lección: utilizar múltiples tablas

Almacenar múltiples tablas

Crear relaciones

Navegar programáticamente entre tablas utilizando relaciones

Navegar visualmente entre tablas utilizando relaciones

Práctica dirigida por el instructor: mostrar datos de múltiples tablas

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

Uno de los puntos fuertes de los objetos DataSet es que pueden contener múltiples objetos DataTable, y cada objeto DataTable puede provenir de una fuente distinta.

En esta lección, estudiaremos cómo almacenar múltiples tablas de datos en un objeto DataSet y cómo mostrar esos datos en controles DataGrid.

En esta lección, aprenderemos a:

Almacenar datos en múltiples tablas de múltiples fuentes. Crear relaciones entre datos de múltiples fuentes de datos. Utilizar relaciones para navegar entre tablas de datos de múltiples fuentes.

Introducción

Objetivos de la lección

Page 339: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 35

Almacenar múltiples tablas

Agregar la primera tabla

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

daCustomers = New SqlDataAdapter _("select * from Customers", conn1)

daCustomers.Fill(ds, "Customers")

daCustomers = New SqlDataAdapter _("select * from Customers", conn1)

daCustomers.Fill(ds, "Customers")

Orders

Customers

daOrders = New SqlDataAdapter _("select * from Orders", conn2)

daOrders.Fill(ds, "Orders")

daOrders = New SqlDataAdapter _("select * from Orders", conn2)

daOrders.Fill(ds, "Orders")

conn2conn1

DataSet

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

Para rellenar un objeto DataSet con múltiples objetos DataTable que provienen de una o más fuentes de datos, debemos utilizar múltiples objetos DataAdapter. Cada objeto DataAdapter rellena una tabla distinta del objeto DataSet. Como el orden de los objetos DataAdapter controla el orden de implementación, podemos controlar el orden en que se escriben las actualizaciones a y desde la base de datos. Este control sobre el orden de implementación 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 podría ser un responsable de ventas que necesita recuperar información de clientes, e información sobre órdenes de compra realizadas por cada cliente, desde una base de datos central. Para satisfacer este requerimiento, podemos crear una aplicación 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.

Introducción

Agregar la primera tabla

Page 340: Microsoft ASP.net - Curso Completo - Espa Ol

36 Acceso a datos con Microsoft ADO.NET

El siguiente código puebla un objeto Customers DataTable utilizando un objeto DataAdapter denominado daCustomers:

Dim conn As SqlConnection Dim daCustomers As SqlDataAdapter Dim daOrders As SqlDataAdapter Dim ds As New DataSet() 'create a connection to the Pubs database conn = New SqlConnection("data source=localhost;" & _ "integrated security=true;initial catalog=northwind") 'create the first DataTable daCustomers = New SqlDataAdapter _ ("select CustomerID, CompanyName from Customers", conn) daCustomers.Fill(ds, "Customers") SqlConnection conn; SqlDataAdapter daCustomers; SqlDataAdapter daOrders; DataSet ds = new DataSet(); // Create a connection to the Pubs database conn = new SqlConnection("data source=localhost; " + "integrated security=true;initial catalog=northwind"); // Create the first DataTable daCustomers = new SqlDataAdapter ("select CustomerID, CompanyName from Customers", conn); daCustomers.Fill(ds, "Customers"); Después 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, rellenaríamos el objeto Orders DataTable.

El siguiente código puebla el objeto Orders DataTable utilizando un objeto DataAdapter denominado daOrders:

'Create the second DataTable daOrders = New SqlDataAdapter _ ("select CustomerID, OrderID, OrderDate, ShippedDate " & _ "from Orders", conn) daOrders.Fill(ds, "Orders") // Create the second DataTable daOrders = new SqlDataAdapter ("select CustomerID, OrderID, OrderDate, ShippedDate " + "from Orders", conn); daOrders.Fill(ds, "Orders");

Deberíamos utilizar un nuevo objeto DataAdapter para cada objeto DataTable de un objeto DataSet.

Visual Basic .NET

C#

Agregar tablas subsiguientes

Visual Basic .NET

C#

Nota

Page 341: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 37

Crear relaciones

Identificar la columna primaria

Identificar la columna secundaria

Crear DataRelation

Dim dr As New DataRelation _("name", parentCol, _childCol)

ds.DataRelations.Add(dr)

Dim dr As New DataRelation _("name", parentCol, _childCol)

ds.DataRelations.Add(dr)

Dim parentCol As DataColumn = _ds.Tables("Customers").Columns("CustomerID")

Dim parentCol As DataColumn = _ds.Tables("Customers").Columns("CustomerID")

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

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

Tabla Orders

Tabla Customers

DataSet

parentCol

childCol

DataRelation

Código de ejemplo C# *****************************

Se utiliza un objeto DataRelation para referenciar dos objetos DataTable entre sí a través de objetos DataColumn. Por ejemplo, en una relación Customer/Orders, Customers es la tabla primaria de la relación y Orders es la secundaria. Esta relación es similar a una relación clave principal/clave foránea. Las relaciones se crean entre columnas coincidentes de las tablas primaria y secundaria. El valor de DataType para ambas columnas debe ser idéntico.

Los objetos DataRelation están contenidos en un objeto DataRelationCollection, al que podemos acceder no sólo a través de la propiedad Relations del objeto DataSet, sino también a través de las propiedades ChildRelations y ParentRelations del objeto DataTable.

Para crear un objeto DataRelation, utilizamos el constructor DataRelation y el método Add de la colección Relations de un objeto DataSet.

Introducción

Page 342: Microsoft ASP.net - Curso Completo - Espa Ol

38 Acceso a datos con Microsoft ADO.NET

El siguiente ejemplo crea un objeto DataRelation dr y lo agrega al objeto DataSet ds:

'Create DataRelation: each publisher publishes many titles Dim dr As DataRelation Dim parentCol As DataColumn Dim childCol As DataColumn parentCol = ds.Tables("Customers").Columns("CustomerID") childCol = ds.Tables("Orders").Columns("CustomerID") dr = New DataRelation("CustOrders", parentCol, childCol) ds.Relations.Add(dr) // Create DataRelation: each publisher publishes many titles DataRelation dr; DataColumn parentCol; DataColumn childCol; parentCol = ds.Tables["Customers"].Columns["CustomerID"]; childCol = ds.Tables["Orders"].Columns["CustomerID"]; dr = new DataRelation("CustOrders", parentCol, childCol); ds.Relations.Add(dr);

Para más información sobre relaciones de datos, ver “Explorar una relación entre tablas,” en la documentación de Visual Studio .NET.

Ejemplo de objeto DataRelation

Visual Basic .NET

C#

Nota

Page 343: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 39

Navegar programáticamente entre tablas utilizando relaciones

ds.Tables(index).Rows(index).GetChildRows("relation")ds.Tables(index).Rows(index).GetParentRow("relation")

ds.Tables(index).Rows(index).GetChildRows("relation")ds.Tables(index).Rows(index).GetParentRow("relation")

Customers Orders

GetChildRows

GetParentRowDataSet

ds.Tables[index].Rows[index].GetChildRows("relation");ds.Tables[index].Rows[index].GetParentRow("relation");

ds.Tables[index].Rows[index].GetChildRows("relation");ds.Tables[index].Rows[index].GetParentRow("relation");

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

En muchos ejemplos de aplicaciones Web, necesitaremos trabajar con datos de más de una tabla, y a menudo querremos trabajar con datos de tablas relacionadas. La relación entre una tabla primaria y una tabla secundaria se denomina relación principal-detalle. Un ejemplo de esta relación sería recuperar el registro de un cliente y visualizar también información de los pedidos relacionados con ese cliente.

El modelo de objetos DataSet desconectado nos permite trabajar con múltiples objetos DataTables en nuestra aplicación Web y definir una relación entre esos objetos DataTable. Podemos utilizar la relación para navegar por registros relacionados de las tablas.

Una de las principales funciones de una clase DataRelation es permitir la navegación desde un objeto DataTable a otro objeto DataTable en un objeto DataSet. Esta capacidad de navegación 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 método DataRow.GetChildRows.

El método GetChildRows de un objeto DataRow recupera las filas relacionadas de un objeto DataTable secundario. El método GetParentRow de un objeto DataRow recupera la fila primaria de un objeto DataTable primario.

Introducción

Navegar programáticamente

Page 344: Microsoft ASP.net - Curso Completo - Espa Ol

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 código muestra un bucle que recorre todos los registros childOrder para obtener una lista de números de pedido:

currentParentRow = ds.Tables("Customers"). _ Rows(dgCustomers.SelectedIndex) For Each r In currentParentRow.GetChildRows("CustOrders") Label1.Text &= r("OrderID") & ", " Next currentParentRow = ds.Tables["Customers"]. Rows[dgCustomers.SelectedIndex]; foreach(DataRow r in currentParentRow.GetChildRows("CustOrders")) { Label1.Text += r["OrderID"] + ","; }

Visual Basic .NET

C#

Page 345: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 41

Navegar visualmente entre tablas utilizando relaciones

Dim tableView As DataViewDim currentRowView As DataRowView

tableView = New DataView(ds.Tables("Customers"))currentRowView = tableView(dgCustomers.SelectedIndex)dgChild.DataSource = currentRowView.CreateChildView("CustOrders")

Dim tableView As DataViewDim currentRowView As DataRowView

tableView = New DataView(ds.Tables("Customers"))currentRowView = tableView(dgCustomers.SelectedIndex)dgChild.DataSource = currentRowView.CreateChildView("CustOrders")

Customers Orders

CreateChildView

DataRowView

DataView

DataSet

DataView tableView;DataRowView currentRowView;

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

DataView tableView;DataRowView currentRowView;

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

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

Con Visual Studio .NET también podemos mostrar relaciones arrastrando controles desde el cuadro de herramientas. Si deseamos mostrar las filas secundarias de una relación en otro control enlazado a lista, podemos utilizar el método CreateChildView y vincular el control enlazado a lista al objeto DataView resultante.

Para conectar dos controles enlazados a lista a través de un objeto DataRelation, necesitamos obtener el objeto DataRowView de la fila seleccionada del control enlazado a lista primario, e invocar el método CreateChildView del objeto DataRowView.

El siguiente código crea un objeto DataView desde un objeto DataRelation para mostrar registros secundarios en un control DataGrid:

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

Navegar visualmente

Visual Basic .NET

C#

Page 346: Microsoft ASP.net - Curso Completo - Espa Ol

42 Acceso a datos con Microsoft ADO.NET

Práctica dirigida por el instructor: mostrar datos de múltiples tablas

Programáticamente:

Crear un DataSet

Crear un DataRelation

Mostrar registros secundarios utilizando DataRelation

Visualmente:

Invocar CreateChildView

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

Ejecutar la práctica dirigida por el instructor

1. Abrir la página UseRelations.aspx del proyecto Mod10VB o Mod10CS de la solución 2310Demos.

2. Generar y examinar la página UseRelations.aspx. La página 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, basándose en la relación y los números de pedido que se muestran, y genera un DataView para el control DataGrid secundario.

3. En Visual Studio .NET, visualizar la página de código subyacente de la página 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 relación 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: programáticamente y visualmente:

• Programáticamente. El procedimiento invoca el método GetChildRows de la fila actual recorre los registros devueltos para mostrar el campo OrderID de cada fila.

• Visualmente. El procedimiento invoca el método CreateChildView de la vista de la fila actual y la vincula a un segundo control DataGrid.

Page 347: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 43

Mostrar el Asistente para formularios de datos

1. Hacer clic con el botón derecho en el proyecto Mod10, clic en Agregar y clic en Agregar nuevo elemento.

2. En el cuadro de diálogo 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 página Hacer lo siguiente Bienvenido … Hacer clic en Siguiente.

Escoger el DataSet que deseamos utilizar

Hacer clic en Crear un nuevo DataSet denominado, escribir dsCustOrders en el campo y hacer clic en Siguiente.

Escoger una conexión de datos Seleccionar una conexión existente a la base de datos Northwind o crear una nueva, y hacer clic en Siguiente.

Escoger tablas o vistas Agregar las tablas Customers y Orders a la lista Elemento(s) seleccionado(s) y hacer clic en Siguiente.

Crear una relación entre tablas Introducir CustOrders en el campo Nombre, seleccionar Customers como Tabla primaria, seleccionar Orders como Tabla secundaria, seleccionar CustomerID como Clave para ambas tablas (primaria y secundaria), hacer clic en el botón > y clic en Siguiente.

Escoger las tablas y columnas a mostrar Mantener los valores predeterminados para mostrar todas las columnas en las tablas Principal y Detalle, y hacer clic en Finalizar.

El Asistente para formularios de datos crea un formulario Web Form con un control DataGrid y un botón Load.

4. Hacer clic con el botón derecho en la página 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 página. La información detallada del cliente seleccionado se muestra en otra tabla.

Page 348: Microsoft ASP.net - Curso Completo - Espa Ol

44 Acceso a datos con Microsoft ADO.NET

Lección: 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

Práctica: organizar código para crear un DataReader

Demostración: mostrar datos utilizando DataReaders

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

La ventaja de utilizar un objeto DataSet es que proporciona una copia desconectada de la base de datos. Para aplicaciones Web de larga ejecución, el uso de un objeto DataSet es a menudo la mejor opción. 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 contraseña, con cada petición de datos. Para ese tipo de operaciones, los desarrolladores no necesitan mantener un objeto DataSet; pueden utilizar un objeto DataReader.

En esta sección, aprenderemos a leer datos de una fuente de datos utilizando la clase DataReader.

En esta lección, aprenderemos a:

Explicar cómo 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.

Introducción

Objetivos de la lección

Page 349: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 45

¿Qué es un DataReader?

Sólo hacia delante, sólo lectura

Acceso rápido a datos

Conexión a una fuente de datos

Gestión de la conexión por sí mismo

Gestión de los datos por sí mismo, o vincularlos a un control enlazado a lista

Utiliza menos recursos del servidor

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

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 crítico. Para abordar estas situaciones del uso de memoria, la clase DataReader está diseñada para producir un flujo de datos de sólo lectura y sólo hacia delante que la base de datos devuelve. Por tanto, sólo hay un registro en memoria cada vez en el servidor.

La clase DataReader proporciona una transferencia de datos de sólo lectura y sólo hacia delante que puede vincularse a un control enlazado a lista. Por ejemplo, si sólo 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 más rápidos que los objetos DataSet por la naturaleza ligera de la clase DataReader. En la creación 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 atrás. Hay muy poca sobrecarga en un objeto DataReader ya que es sólo hacia delante y sólo de lectura. Esta relativa falta de sobrecarga supone un acceso a datos más rápido con un objeto DataReader que con un objeto DataSet.

ADO.NET incluye dos tipos de objetos DataReader: el objeto SqlDataReader para datos SQL Server versión 7.0 o posterior, y el objeto OleDbDataReader para datos OLE DB Data Provider. Utilizamos los objetos OleDbCommand y SqlCommand, y el método ExecuteReader, para transferir datos a un objeto DataReader.

Introducción

Sólo hacia delante, sólo lectura

Acceso rápido a datos

Conexión a la fuente de datos

Page 350: Microsoft ASP.net - Curso Completo - Espa Ol

46 Acceso a datos con Microsoft ADO.NET

A diferencia de un objeto DataAdapter que se abre y cierra automáticamente, debemos gestionar la conexión del objeto DataReader por nosotros mismos. La clase DataReader se parece a la clase DataAdapter en que creamos un objeto Command desde una instrucción y una conexión SQL. Sin embargo, con el objeto DataReader Command, debemos abrir y cerrar explícitamente el objeto Connection.

Tenemos la opción de recorrer los datos del objeto DataReader y mostrarlo programáticamente, o podemos vincular un objeto DataReader a un control enlazado a lista. En ambos casos, debemos escribir el código nosotros mismos.

Debido a que el DataReader no es una representación en memoria de los datos, utilizar un DataReader afecta poco a la disponibilidad de los recursos del servidor.

Gestión de la conexión por sí mismo

Gestión de los datos uno mismo

Utiliza menos recursos del servidor

Page 351: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 47

Crear un DataReader

Código de ejemplo

Para utilizar un DataReader:1. Crear y abrir la conexión a la base de datos2. Crear un objeto Command3. Crear un DataReader desde el objeto Command4. Invocar el método ExecuteReader5. Utilizar el objeto DataReader6. Cerrar el objeto DataReader7. Cerrar el objeto ConnectionUtilizar el controlador de errores Try…Catch…Finally

111

222

333

444

555

666

777

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

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 método ExecuteReader que devuelve un objeto SqlDataReader.

Similar a un objeto DataAdapter, creamos un objeto Command desde una instrucción SQL y una conexión. Sin embargo, con el objeto DataReader Command, debemos explícitamente abrir y cerrar el objeto Connection.

Para utilizar un objeto DataReader, debemos codificar manualmente todo el proceso de conexión. Para utilizar un objeto DataReader se requieren los siguientes pasos:

1. Crear y abrir la conexión a la base de datos. 2. Crear un objeto Command. 3. Crear el objeto DataReader desde el objeto Command. 4. Invocar el método ExecuteReader. 5. Utilizar el objeto DataReader. 6. Cerrar el objeto DataReader. 7. Cerrar el objeto Connection.

Introducción

Utilizar un DataReader

Page 352: Microsoft ASP.net - Curso Completo - Espa Ol

48 Acceso a datos con Microsoft ADO.NET

El siguiente código de ejemplo abre una conexión a una base de datos, crea un objeto DataReader desde un objeto Command, y recorre el objeto DataReader y agrega campos de los registros a un control ListBox:

'Create connection and command objects Dim conn As New SqlConnection _ ("data source=localhost;integrated security=true;" & _ "initial catalog=pubs") Dim cmdAuthors As New SqlCommand _ ("select * from Authors", conn) conn.Open() 'create DataReader and display data Dim dr As SqlDataReader dr = cmdAuthors.ExecuteReader() Do While dr.Read() lstBuiltNames.Items.Add(dr("au_lname") + ", " + _ dr("au_fname")) Loop 'close DataReader and Connection dr.Close() conn.Close() // Open Connection and create command SqlConnection conn = new SqlConnection ("data source=localhost; integrated security=true; " + "initial catalog=pubs;"); SqlCommand cmdAuthors = new SqlCommand ("select * from Authors", conn); conn.Open(); // Create DataReader and read data SqlDataReader dr; dr = cmdAuthors.ExecuteReader(); while (dr.Read()) { lstBuiltNames.Items.Add(dr["au_lname"] + ", " + dr["au_fname"]); } // Close DataReader and Connection dr.Close(); conn.Close();

Visual Basic .NET

C#

Page 353: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 49

Cuando se utilizan conexiones con el objeto DataReader, debemos utilizar siempre una instrucción Try…Catch…Finally para garantizar que si algo falla, la conexión se cerrará. De lo contrario, la conexión puede permanecer abierta de forma indefinida.

El siguiente código de un objeto DataReader captura errores y cierra la conexión:

Try conn.Open() dr = cmdAuthors.ExecuteReader() 'use the returned data in the DataReaders Catch e As Exception 'handle the error Finally dr.Close() conn.Close() End Try try { conn.Open(); dr = cmdAuthors.ExecuteReader(); // use the returned data in the DataReaders } catch(Exception e) { // Handle error } finally { dr.Close(); conn.Close(); }

Utilizar el controlador de eventos Try…Catch…Finally

Visual Basic .NET

C#

Page 354: Microsoft ASP.net - Curso Completo - Espa Ol

50 Acceso a datos con Microsoft ADO.NET

Leer datos desde un DataReader

Invocar Read para cada registroDevuelve false cuando no hay más registros

Acceso a camposParámetro es la posición ordinal o nombre del campoLas funciones Get ofrecen un mejor rendimiento

Cerrar el DataReaderCerrar la conexión

Do While myReader.Read()str &= myReader(1)str &= myReader("field") str &= myReader.GetDateTime(2)

Loop

Do While myReader.Read()str &= myReader(1)str &= myReader("field") str &= myReader.GetDateTime(2)

Loop

while (myReader.Read()){

str += myReader[1];str += myReader["field"];str += myReader.GetDateTime(2);

}

while (myReader.Read()){

str += myReader[1];str += myReader["field"];str += myReader.GetDateTime(2);

}

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

Tras invocar el método ExecuteReader del objeto Command, podemos acceder a un registro del objeto DataReader invocando el método Read. El objeto DataReader se posiciona de modo predeterminado antes del primer registro; por tanto, debemos invocar el método Read antes de acceder a algún dato. Cuando ya no hay más registros disponibles, el método Read devuelve un valor nulo.

El siguiente código recorre todos los registros de un objeto DataReader dr, y muestra el campo au_fname en el control Label lblName:

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

Invocar Read para cada registro

Visual Basic .NET

C#

Page 355: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 51

Para obtener los datos de los campos del registro actual, podemos acceder a un campo por su posición ordinal, por su nombre o invocando un método Get adecuado, como GetDateTime, GetDouble, GetInt32 o GetString.

Utilizar un método Get específico es más rápido que acceder por la posición ordinal o por el nombre, porque el DataReader no necesita comprobar el formato de los datos.

Por ejemplo, el siguiente código de ejemplo lee los campos del primer y último nombre, ambos valores de cadena, desde el primer registro del objeto DataReader dr, utilizando el método GetString():

dr.Read() lblName.Text = dr.GetString(1) + ", " + _ dr.GetString(2) dr.Read(); lblName.Text = dr.GetString(1) + ", " + dr.GetString(2); También podemos referenciar, por nombre, los campos de datos del registro actual del objeto DataReader. Seguidamente, podemos invocar una función de conversión apropiada, como muestra el siguiente código de ejemplo:

myReader("au_fname") myReader["au_fname"]; Mientras el objeto DataReader está en uso, la conexión asociada está ocupada dando servicio al objeto DataReader. Por tanto, debemos invocar el método Close para cerrar el objeto DataReader cuando finalicemos su uso, como muestra el siguiente código de ejemplo:

myReader.Close() myReader.Close(); DataReader no cierra automáticamente la conexión. Debemos invocar explícitamente el método Close para cerrar la conexión cuando finalicemos su uso, como muestra el siguiente código de ejemplo:

conn.Close() conn.Close();

Acceso a campos

Sugerencia

Visual Basic .NET

C#

Visual Basic .NET

C#

Cerrar el DataReader

Visual Basic .NET

C#

Cerrar la conexión

Visual Basic .NET

C#

Page 356: Microsoft ASP.net - Curso Completo - Espa Ol

52 Acceso a datos con Microsoft ADO.NET

Vincular un DataReader a un control enlazado a lista

Crear el control

Vincular a un DataReader

dgAuthors.DataSource = drdgAuthors.DataBind()

dgAuthors.DataSource = drdgAuthors.DataBind()

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

dgAuthors.DataSource = dr;dgAuthors.DataBind();

dgAuthors.DataSource = dr;dgAuthors.DataBind();

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

Además de recorrer los datos del objeto DataReader y mostrarlos programáticamente, 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 código de ejemplo crea un objeto DataReader dr, lo vincula a un control ListBox au_lname, y cierra los objetos DataReader y Connection:

Dim conn As New SqlConnection _ ("data source=localhost;integrated security=true;" & _ "initial catalog=pubs") conn.Open() Dim cmdAuthors As New SQLCommand _ ("select * from Authors", conn) 'bind the datareader to a listbox Dim dr As SqlDataReader dr = cmdAuthors.ExecuteReader() lstBoundNames.DataSource = dr lstBoundNames.DataTextField = "au_lname" lstBoundNames.DataBind() 'close the datareader and the connection dr.Close() conn.Close()

Introducción

Visual Basic .NET

Page 357: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 53

SqlConnection conn = new SqlConnection ("data source=localhost; integrated security=true; " + "initial catalog=pubs"); conn.Open(); SqlCommand cmdAuthors = new SqlCommand ("select * from Authors", conn); //bind the datareader to a listbox SqlDataReader dr; dr = cmdAuthors.ExecuteReader(); lstBoundNames.DataSource = dr; lstBoundNames.DataTextField = "au_lname"; lstBoundNames.DataBind(); //close the datareader and the connection dr.Close(); conn.Close();

C#

Page 358: Microsoft ASP.net - Curso Completo - Espa Ol

54 Acceso a datos con Microsoft ADO.NET

Práctica: organizar código para crear un DataReader

Los estudiantes:

Reordenarán líneas de código para crear un DataReader

Tiempo: 5 minutos

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

En esta práctica, reorganizaremos las líneas de código ADO.NET en el orden correcto para crear un objeto DataReader.

Ejecutar la práctica

• Visualizar la página http://localhost/Mod10VB/DataReaderCode.aspx o http://localhost/Mod10CS/DataReaderCode.aspx y colocar las líneas de código ADO.NET en el orden correcto para crear un objeto DataReader.

Hay varias respuestas correctas para esta práctica.

Nota

Page 359: Microsoft ASP.net - Curso Completo - Espa Ol

Acceso a datos con Microsoft ADO.NET 55

Demostración: 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

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

En esta demostración, examinaremos el código 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 demostración

1. Abrir la página DataReader.aspx del proyecto Demo08VB o Demo08CS que se pueden encontrar dentro del fichero demos08.zip.

2. Generar y examinar la página 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 programáticamente cada entrada del control ListBox.

3. En Visual Studio .NET, visualizar el código subyacente de la página DataReader.aspx.

4. En el procedimiento de evento Page_Load, mostrar el código 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 sólo hacia delante y ya habíamos 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.

Introducción

Page 360: Microsoft ASP.net - Curso Completo - Espa Ol

Práctica A: Acceso a datos con Microsoft ADO.NET

MedicalMedical.aspxMedicalMedical.aspx

BenefitsHome PageDefault.aspx

BenefitsHome PageDefault.aspx

Life InsuranceLife.aspxLife InsuranceLife.aspx

RetirementRetirement.aspxRetirementRetirement.aspx

DentalDental.aspxDentalDental.aspx

Dentists

DoctorsDoctors.aspx DoctorsDoctors.aspx

Doctors

Logon PageLogin.aspxLogon PageLogin.aspx

RegistrationRegister.aspxRegistrationRegister.aspx

CohoWinery

ProspectusProspectus.aspxProspectusProspectus.aspx

XML Web ServicedentalService1.asmx

XML Web ServicedentalService1.asmx

Page HeaderHeader.ascxPage HeaderHeader.ascx

ASPState

tempdb

Lab Web Application

User Controlnamedate.ascxUser Controlnamedate.ascx

Menu ComponentClass1.vb or Class1.cs

Menu ComponentClass1.vb or Class1.cs

XML Files

Web.config

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.

Este laboratorio se centra en los conceptos de este módulo. Por ello, podría no cumplir las recomendaciones de seguridad de Microsoft. Por ejemplo, este laboratorio no cumple la recomendación de que todo el acceso a datos se realice a través de procedimientos almacenados.

Para trabajar en este laboratorio, es necesario tener:

Conocimientos sobre cómo utilizar los objetos SqlConnection, SqlDataAdapter, SqlDataReader y DataSet de Microsoft ADO.NET para leer datos de una base de datos SQL Server.

Conocimientos sobre cómo mostrar datos DataSet en un control DataGrid.

Objetivos

Nota

Requisitos previos

Page 361: Microsoft ASP.net - Curso Completo - Espa Ol

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 médico. Cuando se solicita un seguro médico, el usuario debe seleccionar un médico de cuidados primarios. Los doctores aprobados por la compañía aparecen en una lista de una base de datos SQL Server denominada doctors. La base de datos también incluye las direcciones de los doctores. En este laboratorio, mejoraremos la página doctors.aspx del sitio Web de Coho Winery para permitir a los usuarios que generen una lista de los doctores de ciudades concretas.

Escenario

Tiempo estimado para completar el laboratorio: 30 minutos

Page 362: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 0 Configuración del laboratorio

Para realizar este laboratorio, es necesario haber creado el proyecto de la aplicación 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 solución LabApplication

Realizar este procedimiento únicamente si no se ha creado un archivo de solución LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solución en blanco denominada LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Solución en

blanco. b. En el cuadro de diálogo Nuevo proyecto, escribir LabApplication en el

cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

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

1. Crear un nuevo proyecto de aplicación Web ASP.NET, denominado BenefitsVB o BenefitsCS, en la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto. b. En el cuadro de diálogo 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 Aplicación Web ASP.NET,

establecer la ubicación 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 Solución, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solución, es importante el uso de mayúsculas 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 mayúsculas el nombre del proyecto Benefits.

Importante

Importante

Precaución

Page 363: Microsoft ASP.net - Curso Completo - Espa Ol

Actualizar el proyecto Benefits

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

3. Buscar los archivos de proyecto. Ir a la carpeta VB\Starter\BenefitsVB Ir a la carpeta CS\Starter\BenefitsCS. Estas carpetas pueden encontrarse dentro del fichero labs08.zip

4. En el cuadro Archivos de tipo del cuadro de diálogo Agregar elemento existente – BenefitsList, hacer clic en Todos los archivos (*.*).

5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir. 6. Hacer clic en Sí a la pregunta de sobrescribir o recargar los archivos.

Crear la biblioteca de clases BenefitsList

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

1. Crear un nuevo proyecto de biblioteca de clases. Crear un nuevo proyecto de biblioteca de clases Microsoft Visual Basic® .NET con el nombre BenefitsListVB, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de diálogo 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 solución, y clic en Aceptar. Crear un nuevo proyecto de biblioteca de clases Microsoft Visual C#™ .NET con el nombre BenefitsListCS, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de diálogo 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 solución, y clic en Aceptar.

Verificar que se han escrito correctamente las mayúsculas del proyecto BenefitsList.

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Importante

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Precaución

Page 364: Microsoft ASP.net - Curso Completo - Espa Ol

Actualizar el proyecto BenefitsList

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

3. Ir al proyecto BenefitsList. Ir a la carpeta VB\Starter\BenefitsListVB. Ir a la carpeta CS\Starter\BenefitsListCS. Estas carpetas pueden encontrarse dentro del fichero labs08.zip

4. En el cuadro Archivos del tipo del cuadro de diálogo 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 solución LabApplication, completar los siguientes pasos para agregar una referencia al componente BenefitsList que acabamos de crear: a. Hacer clic con el botón derecho en el proyecto BenefitsVB o

BenefitsCS en el Explorador de soluciones y hacer clic en Agregar referencia.

b. En el cuadro de diálogo Agregar referencia, en la pestaña Proyectos, hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.

c. En la lista Componentes seleccionados, seleccionar el componente BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar. El componente se agrega a la carpeta Referencias en el Explorador de soluciones.

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Page 365: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 1 Utilizar un SqlDataReader

En este ejercicio, rellenaremos un cuadro de lista en la página 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 página doctors.aspx del proyecto BenefitsVB o BenefitsCS. 2. Mediante una operación de arrastrar y soltar, ubicar un control

DropDownList en la página doctors.aspx, como muestra la siguiente ilustración. 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 página de código subyacente de la página doctors.aspx, doctors.aspx.vb o doctors.aspx.cs, e ir al procedimiento de evento Page_Load.

2. Si se está utilizando C# para completar este laboratorio, introducir la siguiente instrucción using tras las instrucciones using en la parte superior del archivo doctors.aspx.cs. using System.Data.SqlClient;

3. Localizar el siguiente comentario: 'TODO Lab10: bind the listbox to city field in the doctors table

//TODO Lab10: bind the listbox to city field in the doctors table

4. Escribir código 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 página.

Visual C#

Visual Basic .NET

C#

Page 366: Microsoft ASP.net - Curso Completo - Espa Ol

El comando SqlCommand debería ser "SELECT city FROM doctors." 5. Escribir código para abrir la conexión a la base de datos. 6. Escribir código para crear un objeto SqlDataReader desde el objeto

SqlCommand invocando el método ExecuteReader del objeto SqlCommand.

7. Escribir código para establecer las propiedades de la lista desplegable lstCities como se muestra en la siguiente tabla.

Propiedad Valor DataSource Objeto SqlDataReader

DataTextField "city"

8. Escribir código para invocar el método DataBind del cuadro de lista desplegable lstCities.

9. Escribir código para cerrar los objetos DataReader y Connection. El código debería ser similar al siguiente: Dim cmdCities As New SqlCommand _ ("SELECT city FROM doctors", SqlConnection1) Dim drCities As SqlDataReader SqlConnection1.Open() drCities = cmdCities.ExecuteReader() lstCities.DataSource = drCities lstCities.DataTextField = "city" lstCities.DataBind() drCities.Close() SqlConnection1.Close() SqlCommand cmdCities = new SqlCommand ("Select city FROM doctors", sqlConnection1); sqlDataReader drCities; sqlConnection1.Open(); drCities = cmdCities.ExecuteReader(); lstCities.DataSource = drCities; lstCities.DataTextField = "city"; lstCities.DataBind(); drCities.Close(); sqlConnection1.Close();

Visual Basic .NET

C#

Page 367: Microsoft ASP.net - Curso Completo - Espa Ol

10. Generar y examinar la página doctors.aspx. El cuadro de lista desplegable City debería 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 método funciona, no es la forma más amigable de mostrar la información sobre las ciudades. ¿Qué podemos hacer para mejorarlo? ____________________________________________________________

____________________________________________________________

El Laboratorio “Invocar procedimientos almacenados con Microsoft ADO.NET” presenta una solución 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 código 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.

Nota

Page 368: Microsoft ASP.net - Curso Completo - Espa Ol

8. Invocar el método DataBind del control DataGrid. El código debería ser similar al siguiente: Dim strCity As String = Trim(lstCities.SelectedItem.Value) SqlDataAdapter1.Fill(DsDoctors1) Dim dvDocs As New DataView(DsDoctors1.Tables(0)) dvDocs.RowFilter = "city = '" & strCity & "'" dgDoctors.DataSource = dvDocs dgDoctors.DataBind() string strCity = lstCities.SelectedItem.Value.Trim(); sqlDataAdapter1.Fill(dsDoctors1); DataView dvDocs = new DataView(dsDoctors1.Tables[0]); dvDocs.RowFilter = "City = '" + strCity + "' "; dgDoctors.DataSource = dvDocs; dgDoctors.DataBind();

9. En vista de Diseño, eliminar la configuración de las propiedades DataSource y DataMember para el control DataGrid: a. En la página doctors.aspx, seleccionar el control DataGrid dgDoctors. b. En la ventana Propiedades, seleccionar DataMember, resaltar el valor

doctors, y pulsar SUPRIMIR. c. En la ventana Propiedades, seleccionar DataSource, resaltar el valor

dsDoctors1, y pulsar SUPRIMIR.

Estamos eliminando estas configuraciones de propiedades porque entran en conflicto con el código que hemos agregado en los pasos anteriores. Cuando las propiedades se establecen tanto en el código como en la interfaz de usuario (IU), el resultado obtenido es impredecible.

10. En el procedimiento de evento Page_Load, inmediatamente después del código para rellenar el objeto DataSet dsDoctors1, establecer el DataSource del DataGrid dgDoctors al objeto DataSet DsDoctors1. El código debería ser similar al siguiente, con la línea recién agregada en negrita: SqlDataAdapter1.Fill(DsDoctors1) dgDoctors.DataSource = DsDoctors1 dgDoctors.DataBind() sqlDataAdapter1.Fill(dsDoctors1); dgDoctors.DataSource = dsDoctors1; dgDoctors.DataBind();

11. Generar y examinar la página doctors.aspx. Cuando seleccionamos una ciudad en el cuadro de lista City, el DataGrid dgDoctors muestra únicamente los doctores ubicados en la ciudad seleccionada.

Visual Basic .NET

C#

Nota

Visual Basic .NET

C#

Page 369: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 2 Visualizar doctores de todas las ciudades

En este ejercicio, agregaremos la opción All al cuadro de lista desplegable City y restableceremos la funcionalidad a la página Web doctors.aspx, que restablecerá los controles del cuadro de lista DataGrid y Specialties a una configuración predeterminada.

Agregar un elemento [All] al cuadro lista

1. Abrir la página de código subyacente para la página doctors.aspx, doctors.aspx.vb o doctors.aspx.cs, e ir al procedimiento de evento Page_Load.

2. Localizar el siguiente comentario: 'TODO Lab10: add the "All" item to the list and select it //TODO Lab10: add the "All" item to the list and select it

3. Invocar el método Add de la colección 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 añadir). El código debería ser similar al siguiente: lstCities.Items.Add("[All]") lstCities.SelectedIndex = lstCities.Items.Count – 1 lstCities.Items.Add("[All]"); lstCities.SelectedIndex = lstCities.Items.Count – 1;

Comprobar la selección 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, después de rellenar el DataSet, pero antes de invocar el método 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 función reset para eliminar las páginas o selecciones del DataGrid. La función reset ya está en la página de código subyacente doctors.aspx.vb o doctors.aspx.cs.

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 370: Microsoft ASP.net - Curso Completo - Espa Ol

El procedimiento de evento lstCities_SelectedIndexChanged debería ser similar al siguiente: Private Sub lstCities_SelectedIndexChanged(... Dim strCity As String = _ Trim(lstCities.SelectedItem.Value) SqlDataAdapter1.Fill(DsDoctors1) If strCity = "[All]" Then dgDoctors.DataSource = DsDoctors1 Else Dim dvDocs As New DataView(DsDoctors1.Tables(0)) dvDocs.RowFilter = "city = '" & strCity & "'" dgDoctors.DataSource = dvDocs End If reset() dgDoctors.DataBind() End Sub private void lstCities_SelectedIndexChanged(... { string strCity = lstCities.SelectedItem.Value.Trim(); sqlDataAdapter1.Fill(dsDoctors1); if (strCity == "[All]") { dgDoctors.DataSource = dsDoctors1; } else { DataView dvDocs = new DataView(dsDoctors1.Tables[0]); dvDocs.RowFilter = "city = '" + strCity + "'"; dgDoctors.DataSource = dvDocs; } reset(); dgDoctors.DataBind(); }

6. Generar y examinar la página doctors.aspx. 7. Hacer clic en el cuadro de lista desplegable City.

Deberíamos ver únicamente los doctores de esa ciudad. 8. Hacer clic en [All] en el cuadro de lista desplegable City.

Deberíamos ver todos los doctores de la base de datos doctors.

Paginación con la selección de ciudad

1. En el archivo doctors.aspx.vb o the doctors.aspx.cs, ir al procedimiento de evento dgDoctors_PageIndexChanged existente.

2. Recuperar el elemento actualmente seleccionado del cuadro de lista desplegable lstCities y guardarlo en una variable denominada strCity.

Visual Basic .NET

C#

Page 371: Microsoft ASP.net - Curso Completo - Espa Ol

3. Agregar una prueba, después de rellenar el DataSet, pero antes de invocar el método 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 estén ubicados en esa ciudad, y establecer la propiedad DataSource del DataGrid dgDoctors al DataView. Al finalizar, todo el procedimiento de evento dgDoctors_PageIndexChanged debería ser similar al siguiente: Private Sub dgDoctors_PageIndexChanged(... Dim strCity As String = _ Trim(lstCities.SelectedItem.Value) dgDoctors.CurrentPageIndex = e.NewPageIndex SqlDataAdapter1.Fill(DsDoctors1) If strCity = "[All]" Then dgDoctors.DataSource = DsDoctors1 Else Dim dvDocs As New DataView(DsDoctors1.Tables(0)) dvDocs.RowFilter = "city = '" & strCity & "'" dgDoctors.DataSource = dvDocs End If dgDoctors.DataBind() End Sub private void dgDoctors_PageIndexChanged(... { string strCity = lstCities.SelectedItem.Value.Trim(); dgDoctors.CurrentPageIndex = e.NewPageIndex; sqlDataAdapter1.Fill(dsDoctors1); if (strCity == "[All]") { dgDoctors.DataSource = dsDoctors1; } else { DataView dvDocs = new DataView(dsDoctors1.Tables[0]); dvDocs.RowFilter = "city = '" + strCity + "'"; dgDoctors.DataSource = dvDocs; } dgDoctors.DataBind(); }

6. Generar y examinar la página doctors.aspx. Probar seleccionando una ciudad y, a continuación, un número de página.

Visual Basic .NET

C#

Page 372: Microsoft ASP.net - Curso Completo - Espa Ol

ÍNDICE

Descripción 1

Lección: descripción de los procedimientos almacenados 2

Lección: invocar procedimientos almacenados 9

Invocar procedimientos almacenados con Microsoft ADO.NET

Page 373: Microsoft ASP.net - Curso Completo - Espa Ol
Page 374: Microsoft ASP.net - Curso Completo - Espa Ol

Invocar procedimientos almacenados con Microsoft ADO.NET 1

Descripción

Descripción de los procedimientos almacenados

Invocar procedimientos almacenados

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

Acceder y manipular datos directamente en una base de datos desde un formulario Web Form puede constituir un uso muy ineficaz de los recursos, y puede crear riesgos de seguridad. Una forma de mejorar la eficacia y seguridad del acceso a las bases de datos es crear procedimientos almacenados en el servidor de la base de datos, e invocar estos procedimientos almacenados desde nuestro formulario Web Form. Acceder a una base de datos a través de un procedimiento almacenado limita el código 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 también protege la base de datos al limitar el acceso directo a la base de datos a procedimientos almacenados locales y de confianza.

En este módulo, estudiaremos cómo realizar las tareas de acceso a datos desde las aplicaciones Web utilizando Microsoft® ADO.NET para acceder a procedimientos almacenados.

En este módulo, aprenderemos a:

Explicar qué es un procedimiento almacenado y los motivos para utilizarlos en el acceso a una base de datos.

Invocar procedimientos almacenados.

Introducción

Objetivos

Page 375: Microsoft ASP.net - Curso Completo - Espa Ol

2 Invocar procedimientos almacenados con Microsoft ADO.NET

Lección: descripción de los procedimientos almacenados

¿Qué es un procedimiento almacenado?

¿Por qué utilizar procedimientos almacenados?

Práctica: seleccionar el procedimiento almacenado correcto

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

Una alternativa al acceso directo a bases de datos desde nuestra aplicación 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 protección de la base de datos.

En esta lección, aprenderemos qué es un procedimiento almacenado y los motivos para invocar procedimientos almacenados cuando se accede a una base de datos.

En esta lección, aprenderemos a:

Describir qué es un procedimiento almacenado. Explicar los motivos para utilizar procedimientos almacenados para acceder

y manipular bases de datos.

Introducción

Objetivos de la lección

Page 376: Microsoft ASP.net - Curso Completo - Espa Ol

Invocar procedimientos almacenados con Microsoft ADO.NET 3

¿Qué es un procedimiento almacenado?

Procedimientos comunes de datos que pueden ser invocados por múltiples aplicaciones Web

Acceso programático a una base de datos

Devolver registros

Devolver un valor

Realizar acción

ClienteCliente

SQL ServerSQL Server

FormularioWeb Form

Procedimientoalmacenado

Procedimientoalmacenado

Servidor WebServidor Web

Base datos

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

Un procedimiento almacenado es un procedimiento escrito por un desarrollador de aplicaciones para bases de datos y que está asociado a una base de datos específica. A continuación, 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 invocación de un procedimiento existente en lugar de tener que escribir nuestras propias instrucciones SQL. Los procedimientos almacenados están formados por secuencias de instrucciones Transact-SQL, y funcionan de modo similar a los procedimientos de una aplicación Web en cuanto a que las instrucciones se invocan por su nombre, y pueden tener tanto parámetros 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 específicos, clasificar y filtrar esos registros, y devolver el resultado de las operaciones de búsqueda, clasificación 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 petición de la cantidad, fecha y receptor de los tres últimos movimientos procesados en una cuenta bancaria. Estos datos podrían cargarse en un objeto DataSet para su posterior procesamiento, o mostrarse directamente al usuario en un control ListBox.

Introducción

Acceso programático a una base de datos

Page 377: Microsoft ASP.net - Curso Completo - Espa Ol

4 Invocar procedimientos almacenados con Microsoft ADO.NET

Procedimientos almacenados que retornan un valor, también denominados

procedimientos almacenados escalares Los procedimientos almacenados que retornan un valor se utilizan para ejecutar un comando o función de la base de datos que devuelve un único valor. Debido a que sólo se devuelve un valor, los procedimientos almacenados que retornan un valor a menudo se utilizan en el código y, a continuación, 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 acción Los procedimientos almacenados de acción 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 acción es una petición para actualizar una sola dirección de correo en la base de datos de clientes de una compañía.

Page 378: Microsoft ASP.net - Curso Completo - Espa Ol

Invocar procedimientos almacenados con Microsoft ADO.NET 5

¿Por qué utilizar procedimientos almacenados?

Programación modular

Distribución del trabajo

Seguridad de la base de datos

Ejecución más rápida

Reduce el tráfico de red

Proporciona flexibilidad

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

Es más fácil, más eficaz y más seguro utilizar un procedimiento almacenado que escribir el código requerido para conectarnos directamente a una base de datos y ejecutar nuestras propias instrucciones Transact-SQL. Invocar un procedimiento almacenado no requiere que entendamos cómo está diseñada la base de datos, y sólo se accede a la base de datos mediante un procedimiento ya probado.

Los procedimientos almacenados son ejemplos clásicos de programación 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 múltiples 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 programación de bases de datos puede crear los procedimientos almacenados, mientras que otros desarrolladores pueden crear paralelamente las aplicaciones Web que utilizarán el procedimiento almacenado. Esta distribución 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 demás aplicaciones Web y otros desarrolladores no acceden directamente a la base de datos, el riesgo de daño accidental de la estructura o el contenido de la base de datos es mínimo.

Utilizar instrucciones SQL o Transact-SQL directamente en el código Microsoft ASP.NET también supone un riesgo para la seguridad ya que las instrucciones pueden dar información a un hacker sobre la base de datos y su estructura. Además, con el acceso directo a una base de datos, también tenemos el problema de seguridad al intentar determinar qué clase de permisos deberíamos dar a la cuenta de usuario Web sobre las tablas individuales.

Introducción

Programación modular

Distribución del trabajo

Incremento de la seguridad de la base de datos

Page 379: Microsoft ASP.net - Curso Completo - Espa Ol

6 Invocar procedimientos almacenados con Microsoft ADO.NET

Si un procedimiento requiere una gran cantidad de código Transact-SQL o si se invoca repetidamente, el uso de procedimientos almacenados puede dar lugar a una mayor rapidez de ejecución que acceder directamente a la base de datos con código Transact-SQL. Los procedimientos almacenados son parseados y optimizados cuando se crean, y puede utilizarse una versión en memoria del procedimiento tras su primera ejecución.

El acceso directo mediante instrucciones Transact-SQL requiere que las instrucciones sean enviadas desde el cliente cada vez que se ejecutan. Las instrucciones son compiladas y optimizadas cada vez que son ejecutadas por el servidor de la base de datos.

En ocasiones, una operación que requiere cientos de líneas de código Transact-SQL puede realizarse mediante una única instrucción que invoque un procedimiento almacenado. Enviar una llamada a través de la red, en lugar de cientos de líneas de código, reduce el tráfico de red.

Si el acceso a la base de datos se realiza a través 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 protección permite la continua mejora de la base de datos sin poner en riesgo el resto del sistema.

Ejecución más rápida

Reducción del tráfico de red

Proporciona flexibilidad

Page 380: Microsoft ASP.net - Curso Completo - Espa Ol

Invocar procedimientos almacenados con Microsoft ADO.NET 7

Práctica: seleccionar el procedimiento almacenado correcto

Los estudiantes:

Decidirán, en determinados escenarios, qué tipo de procedimiento almacenado debe utilizarse

Tiempo: 5 Minutos

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

Leer los siguientes escenarios y decidir qué tipo de procedimientos almacenados debería utilizarse:

Devolver registros Devolver valor Realizar acción

Debemos determinar los 10 mejores best sellers de la compañía. ____________________________________________________________

____________________________________________________________

Debemos determinar el beneficio neto de un determinado trimestre. ____________________________________________________________

____________________________________________________________

Debemos cambiar todos los prefijos telefónicos 425 de Estados Unidos por el prefijo 415. ____________________________________________________________

____________________________________________________________

Page 381: Microsoft ASP.net - Curso Completo - Espa Ol

8 Invocar procedimientos almacenados con Microsoft ADO.NET

Debemos determinar qué registros tienen el prefijo telefónico 425 de Estados Unidos. _____________________________________________________________

_____________________________________________________________

Debemos eliminar todos los elementos que se han dejado de fabricar de una determinada categoría. _____________________________________________________________

_____________________________________________________________

Page 382: Microsoft ASP.net - Curso Completo - Espa Ol

Invocar procedimientos almacenados con Microsoft ADO.NET 9

Lección: invocar procedimientos almacenados

Invocar procedimientos almacenados

Demostración: invocar un procedimiento almacenado

Práctica: mostrar datos de un procedimiento almacenado

Utilizar parámetros

Pasar parámetros de entrada

Utilizar parámetros de salida

Demostración: pasar parámetros

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

Antes de poder invocar un procedimiento almacenado, debemos identificar el nombre del procedimiento y los parámetros que utiliza. Una vez identificado el procedimiento almacenado, podemos invocarlo, pasarle los parámetros de entrada que se requieran para procesar nuestra petición y gestionar los parámetros de salida incluidos en la respuesta.

En esta lección, aprenderemos cómo invocar procedimientos almacenados, pasar parámetros de entrada y gestionar parámetros de salida.

En esta lección, aprenderemos a:

Invocar un procedimiento almacenado desde un formulario Web Form. Identificar el tipo de parámetros disponibles cuando se invocan los

procedimientos almacenados. Pasar parámetros de entrada cuando se invocan procedimientos

almacenados desde un formulario Web Form. Utilizar los parámetros de salida de un procedimiento almacenado.

Introducción

Objetivos de la lección

Page 383: Microsoft ASP.net - Curso Completo - Espa Ol

10 Invocar procedimientos almacenados con Microsoft ADO.NET

Invocar procedimientos almacenados

Identificar el procedimiento almacenadoConfigurar la propiedad SelectCommand del DataAdapter

Ejecutar el procedimiento almacenado y almacenar los registros devueltos

Dim daCategory As New SqlDataAdapter()daCategory.SelectCommand = New SqlCommand()daCategory.SelectCommand.Connection = conndaCategory.SelectCommand.CommandText = "ProductCategoryList"daCategory.SelectCommand.CommandType = CommandType.StoredProcedure

Dim daCategory As New SqlDataAdapter()daCategory.SelectCommand = New SqlCommand()daCategory.SelectCommand.Connection = conndaCategory.SelectCommand.CommandText = "ProductCategoryList"daCategory.SelectCommand.CommandType = CommandType.StoredProcedure

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

SqlDataAdapter daCategory = new SqlDataAdapter();daCategory.SelectCommand = new SqlCommand();daCategory.SelectCommand.Connection = conn;daCategory.SelectCommand.CommandText = "ProductCategoryList";daCategory.SelectCommand.CommandType = CommandType.StoredProcedure;

SqlDataAdapter daCategory = new SqlDataAdapter();daCategory.SelectCommand = new SqlCommand();daCategory.SelectCommand.Connection = conn;daCategory.SelectCommand.CommandText = "ProductCategoryList";daCategory.SelectCommand.CommandType = CommandType.StoredProcedure;

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

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

Para invocar un procedimiento almacenado, en primer lugar debemos identificarlo, crear un objeto DataAdapter, y configurar el objeto DataAdapter para que apunte a la conexión 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 método 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 método Fill. Si deseamos utilizar un DataReader, debemos utilizar un objeto Command y el método 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 método ExecuteScalar del objeto Command, y guardamos el resultado en una variable del tipo de datos apropiado.

Procedimientos almacenados que realizan una acción Cuando invocamos un procedimiento almacenado que realiza alguna acción en la base de datos pero no devuelve un conjunto de registros o un valor, utilizamos el método ExecuteNonQuery del objeto Command.

Introducción

Identificar el procedimiento almacenado

Page 384: Microsoft ASP.net - Curso Completo - Espa Ol

Invocar procedimientos almacenados con Microsoft ADO.NET 11

Para configurar la llamada al procedimiento almacenado, debemos crear un objeto SqlCommand y guardarlo como la propiedad SelectCommand de un DataAdapter. A continuación, 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 código para invocar el procedimiento almacenado. Los siguientes ejemplos utilizan código manual para mostrar tanto el código completo como el proceso lógico de invocación de un procedimiento almacenado.

Los siguientes ejemplos invocan el procedimiento almacenado ProductCategoryList. El procedimiento almacenado ProductCategoryList devuelve una lista de IDs y nombres de categorías de la tabla Categories:

Procedure ProductCategoryList As SELECT CategoryID,CategoryName FROM Categories El siguiente código utiliza un objeto Connection y un objeto DataAdapter para invocar el procedimiento almacenado que devuelve registros ProductCategoryList:

Dim daCategory as New SqlDataAdapter() daCategory.SelectCommand = New SqlCommand() daCategory.SelectCommand.Connection = conn daCategory.SelectCommand.CommandText = _ "ProductCategoryList" daCategory.SelectCommand.CommandType = _ CommandType.StoredProcedure SqlDataAdapter daCategory = new SqlDataAdapter(); daCategory.SelectCommand = new SqlCommand(); daCategory.SelectCommand.Connection = conn; daCategory.SelectCommand.CommandText = "ProductCategoryList"; daCategory.SelectCommand.CommandType = CommandType.StoredProcedure;

También podemos establecer directamente la conexión y el texto del comando cuando creamos el objeto SqlDataAdapter. El siguiente código realiza la misma tarea que el código anterior: Dim daCategory As New SqlDataAdapter _ ("ProductCategoryList", conn) daCategory.SelectCommand.CommandType = _ CommandType.StoredProcedure SqlDataAdapter daCategory = new SqlDataAdapter ("ProductCategoryList", conn); daCategory.SelectCommand.CommandType = CommandType.StoredProcedure;

Establecer la propiedad SelectCommand

Visual Basic .NET

C#

Nota

Visual Basic .NET

C#

Page 385: Microsoft ASP.net - Curso Completo - Espa Ol

12 Invocar procedimientos almacenados con Microsoft ADO.NET

Para ejecutar el procedimiento almacenado y guardar los registros devueltos en un DataSet, invocar el método Fill del objeto SqlDataAdapter. Este método rellena un objeto DataTable con los registros devueltos del procedimiento almacenado.

Por ejemplo, el siguiente código rellena el objeto DataSet ds con los registros devueltos desde el procedimiento almacenado ProductCategoryList utilizando el daCategory SqlDataAdapter:

daCategory.Fill(ds, "Categories") daCategory.Fill(ds, "Categories"); Tras rellenar un DataTable con los resultados de un procedimiento almacenado Select, podemos vincular el DataTable a un control enlazado a lista para mostrar los datos.

Ejecutar el procedimiento almacenado

Visual Basic .NET

C#

Page 386: Microsoft ASP.net - Curso Completo - Espa Ol

Invocar procedimientos almacenados con Microsoft ADO.NET 13

Demostración: invocar un procedimiento almacenado

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

En esta demostración, veremos cómo invocar un procedimiento almacenado de una base de datos Microsoft SQL Server™, y vincular los resultados a un DataGrid.

Ejecutar la demostración

1. Abrir la página SPGetRecords.aspx del proyecto Demo09VB o Demo09CS que se pueden encontrar dentro del fichero demos9.zip.

2. Generar y examinar la página. 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 página de código subyacente de la página SPGetRecords.aspx.

4. En el procedimiento de evento Page_Load, mostrar el código 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.

Introducción

Page 387: Microsoft ASP.net - Curso Completo - Espa Ol

14 Invocar procedimientos almacenados con Microsoft ADO.NET

Práctica: mostrar datos de un procedimiento almacenado

Los estudiantes:

Arrastrarán un procedimiento almacenado desde el Explorador de servidores a un formulario Web Form ASP.NET

Crearán un objeto DataReader para leer los datos del procedimiento almacenado

Vincularán un DataGrid al DataReader

Tiempo: 15 minutos

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

En esta práctica, 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 práctica

1. Crear un nuevo proyecto de aplicación Web y establecer su ubicación en http://localhost/Pract09VB http://localhost/Pract09CS

2. Abrir la página WebForm1.aspx. 3. Abrir el Explorador de servidores y expandir las siguientes carpetas:

nombre_máquina, Servidores SQL Server, nombre_máquina, Northwind y Procedimientos almacenados.

4. Hacer clic en el procedimiento almacenado Ten Most Expensive Products y arrastrarlo a la página WebForm1.aspx. Visual Studio .NET crea automáticamente un objeto SqlConnection denominado sqlConnection1 y un objeto SqlCommand denominado sqlCommand1.

5. Utilizando el Cuadro de herramientas, ubicar un control DataGrid en la página WebForm1.aspx.

Introducción

Visual Basic .NET C#

Page 388: Microsoft ASP.net - Curso Completo - Espa Ol

Invocar procedimientos almacenados con Microsoft ADO.NET 15

6. Crear un procedimiento de evento Page_Load y agregar el siguiente código

para crear un DataReader desde el objeto SqlCommand y vincularlo al DataGrid: Dim dr As SqlClient.SqlDataReader SqlConnection1.Open() dr = SqlCommand1.ExecuteReader() DataGrid1.DataSource = dr DataGrid1.DataBind() dr.Close() SqlConnection1.Close() SqlDataReader dr; sqlConnection1.Open(); dr = sqlCommand1.ExecuteReader(); DataGrid1.DataSource = dr; DataGrid1.DataBind(); dr.Close(); sqlConnection1.Close();

7. Si se está utilizando C# para generar este proyecto, debemos introducir el siguiente código al inicio de la página de código subyacente. using System.Data.SqlClient;

8. Generar y examinar la página WebForm1.aspx.

Visual Basic .NET

C#

C#

Page 389: Microsoft ASP.net - Curso Completo - Espa Ol

16 Invocar procedimientos almacenados con Microsoft ADO.NET

Utilizar parámetros

Identificar los parámetros disponibles

Input

Output

InputOutput

ReturnValue

Incluir parámetros en la colección de parámetros

o

Incluir valores de parámetros en la cadena de comando

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

Cuando utilizamos procedimientos almacenados en una base de datos SQL Server o en cualquier otra base de datos basada en procedimientos, se pueden utilizar parámetros para pasar información y recuperar datos del procedimiento almacenado.

Cuando utilizamos parámetros con una base de datos SQL Server, los nombres de los parámetros que se agregan a la colección Parameters del objeto Command deben coincidir con los nombres de los parámetros del procedimiento almacenado; no obstante, el orden de los parámetros es flexible.

Cuando utilizamos parámetros en una base de datos OLE DB, el orden de los parámetros en la colección Parámetros debe coincidir con el orden de los parámetros definidos en el procedimiento almacenado.

La siguiente tabla describe los tipos de parámetros disponibles en los procedimientos almacenados.

Parámetro Uso Input Utilizado por la aplicación Web para enviar valores de datos

específicos a un procedimiento almacenado.

Output Utilizado por un procedimiento almacenado para enviar valores específicos de retorno a la aplicación Web que lo invoca.

InputOutput Utilizado por un procedimiento almacenado tanto para recuperar información enviada por nuestra aplicación Web como para enviar valores de retorno específicos a la aplicación Web.

ReturnValue Utilizado por un procedimiento almacenado para enviar un valor de retorno a la aplicación Web que lo invoca.

Introducción

Nota

Page 390: Microsoft ASP.net - Curso Completo - Espa Ol

Invocar procedimientos almacenados con Microsoft ADO.NET 17

Pasar parámetros de entrada

Crear el parámetro, establecer la dirección y el valor, agregar a la colección de parámetros

Ejecutar el procedimiento almacenado y almacenar los registros devueltos

SqlParameter param = new SqlParameter("@Beginning_Date", SqlDbType.DateTime);

param.Direction = ParameterDirection.Input;param.Value = Convert.ToDateTime

(txtStartDate.Text);da.SelectCommand.parámetros.Add(param);

SqlParameter param = new SqlParameter("@Beginning_Date", SqlDbType.DateTime);

param.Direction = ParameterDirection.Input;param.Value = Convert.ToDateTime

(txtStartDate.Text);da.SelectCommand.parámetros.Add(param);

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

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

Códigos de ejemplo

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

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

param = New SqlParameter _("@Beginning_Date", SQLDbType.DateTime)

param.Direction = ParameterDirection.Inputparam.Value = CDate(txtStartDate.Text)da.SelectCommand.parámetros.Add(param)

param = New SqlParameter _("@Beginning_Date", SQLDbType.DateTime)

param.Direction = ParameterDirection.Inputparam.Value = CDate(txtStartDate.Text)da.SelectCommand.parámetros.Add(param)

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

Una vez identificados los parámetros soportados por un procedimiento almacenado, debemos agregar los parámetros que utilizaremos a la colección Parameters del objeto Command.

Para crear un parámetro, crear un nuevo objeto SqlParameter con el nombre y tipo de datos del parámetro, según lo especificado por el procedimiento almacenado. A continuación, establecer la propiedad Direction del nuevo parámetro para indicar la forma en que el procedimiento almacenado utilizará el parámetro. Si el procedimiento almacenado devuelve un valor de retorno, crear un parámetro denominado returnValue. Si el parámetro es de entrada, establecer la propiedad Value para especificar los datos que deberían enviarse al SQL Server.

Por ejemplo, el procedimiento almacenado ProductsByCategory toma un parámetro de entrada, denominado @CategoryID de tipo int, como muestra el siguiente código:

Procedure ProductsByCategory ( @CategoryID int ) As SELECT ProductID, ModelName, UnitCost, ProductImage, Chairman FROM Products WHERE CategoryID=@CategoryID

Introducción

Crear un parámetro

Page 391: Microsoft ASP.net - Curso Completo - Espa Ol

18 Invocar procedimientos almacenados con Microsoft ADO.NET

Para invocar el procedimiento almacenado ProductsByCategory, crear un parámetro de entrada denominado @CategoryID y establecer su valor con el valor de un cuadro de texto:

Dim workParam1 As New SqlParameter _ ("@CategoryID", SqlDbType.Int) workParam1.Direction = ParameterDirection.Input workParam1.Value = Cint(txtStartDate.Text) SqlParameter workParam1 = new SqlParameter ("@CategoryID", SqlDbType.Int); workParam1.Direction = ParameterDirection.Input; workParam1.Value = Convert.ToInt16(txtStartDate.Text);

Deberíamos validar siempre el contenido de un cuadro de texto antes de enviar la entrada del usuario al procedimiento almacenado. Para una mayor simplicidad, el código anterior no lo hace.

Una vez creado el objeto Parameter, utilizar el método Add de la colección Parameters del objeto SelectCommand. Si un procedimiento almacenado tiene más de un parámetro, no importa en qué orden los agreguemos puesto que los creamos por nombre:

Dim daSales as New SqlDataAdapter() daSales.SelectCommand = New SqlCommand() daSales.SelectCommand.Connection = conn daSales.SelectCommand.CommandText = "ProductsByCategory" daSales.SelectCommand.CommandType = _ CommandType.StoredProcedure daSales.SelectCommand.Parameters.Add(workParam1) SqlDataAdapter daSales = new SqlDataAdapter(); daSales.SelectCommand = new SqlCommand(); daSales.SelectCommand.Connection = conn; daSales.SelectCommand.CommandText = "ProductsByCategory"; daSales.SelectCommand.CommandType = CommandType.StoredProcedure; daSales.SelectCommand.Parameters.Add(workParam1); Una vez creado el objeto Command, utilizamos el método Fill para ejecutar el procedimiento almacenado y recuperar los registros:

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

Visual Basic .NET

C#

Nota

Visual Basic .NET

C#

Ejecutar un procedimiento almacenado

Visual Basic .NET

C#

Page 392: Microsoft ASP.net - Curso Completo - Espa Ol

Invocar procedimientos almacenados con Microsoft ADO.NET 19

Utilizar parámetros de salida

Crear el parámetro, establecer dirección y añadir a la colección Parameters

Ejecutar el procedimiento almacenado y almacenar losregistros devueltos

Leer los parámetros de salida

param = New SqlParameter("@ItemCount", SQLDbType.Int)param.Direction = ParameterDirection.Outputda.SelectCommand.parameters.Add(param)

param = New SqlParameter("@ItemCount", SQLDbType.Int)param.Direction = ParameterDirection.Outputda.SelectCommand.parameters.Add(param)

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

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

iTotal = da.parameters("@ItemCount").ValueiTotal = da.parameters("@ItemCount").Value

param = new SqlParameter("@ItemCount", SqlDbType.Int);param.Direction = ParameterDirection.Output;da.SelectCommand.parameters.Add(param);

param = new SqlParameter("@ItemCount", SqlDbType.Int);param.Direction = ParameterDirection.Output;da.SelectCommand.parameters.Add(param);

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

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

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

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

Para leer el valor de un parámetro de salida o un valor de retorno de un procedimiento almacenado que devuelve registros, debemos acceder al valor del parámetro de salida en la colección Parámetros después de que el procedimiento almacenado se haya ejecutado.

El procedimiento almacenado OrdersCount toma un ID de cliente y devuelve el número de pedidos pendientes que éste tiene, pero no los pedidos actuales. El procedimiento almacenado utiliza los parámetros de entrada @CustomerID, y el parámetro de salida @ItemCount, ambos del tipo int, como muestra el siguiente procedimiento almacenado:

Procedure OrdersCount ( @CustomerID int, @ItemCount int OUTPUT ) As SELECT @ItemCount=COUNT(OrderID) FROM Orders WHERE CustomerID=@CustomerID Como el procedimiento almacenado anterior devuelve el número 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 método ExecuteNonQuery para ejecutar el procedimiento almacenado.

Para invocar el procedimiento almacenado OrdersCount, necesitamos crear un parámetro de entrada denominado @CustomerID y un parámetro de salida denominado @ItemCount y añadirlos a la colección Parameters de un objeto Command, y a continuación invocar a ExecuteNonQuery para ejecutar el procedimiento almacenado:

Introducción

Ejemplo de uso de parámetros de salida

Invocar un procedimiento almacenado que devuelve un valor

Page 393: Microsoft ASP.net - Curso Completo - Espa Ol

20 Invocar procedimientos almacenados con Microsoft ADO.NET

Dim myCmd As SqlCommand = New SqlCommand("OrdersCount", conn) myCmd.CommandType = CommandType.StoredProcedure 'add an input parameter Dim workParam as SqlParameter workParam = New SqlParameter("@CustomerID", SqlDbType.Int) workParam.Direction = ParameterDirection.Input workParam.Value = CInt(txtCustID.Text) myCmd.Parameters.Add (workParam) 'add an output parameter workParam = New SqlParameter("@ItemCount", SqlDbType.Int) workParam.Direction = ParameterDirection.Output myCmd.Parameters.Add (workParam) SqlCommand myCmd = new SqlCommand("OrdersCount", conn); myCmd.CommandType = CommandType.StoredProcedure; // add an input parameter SqlParameter workParam; workParam = new SqlParameter("@CustomerID", SqlDbType.Int); workParam.Direction = ParameterDirection.Input; workParam.Value = Convert.ToInt16(txtCustID.Text); myCmd.Parameters.Add(workParam); // add an output parameter workParam = new SqlParameter("@ItemCount", SqlDbType.Int); workParam.Direction = ParameterDirection.Output; myCmd.Parameters.Add(workParam); El siguiente código ejecuta el procedimiento almacenado MyCmd:

conn.Open() myCmd.ExecuteNonQuery() conn.Close() conn.Open(); myCmd.ExecuteNonQuery(); conn.Close(); Si estamos recuperando un valor de un procedimiento almacenado que devuelve valores o establece un parámetro de salida, necesitamos utilizar el método Value del parámetro devuelto en la colección Parameters. Podemos referenciar el valor del parámetro de salida por el nombre o por el índice. El siguiente ejemplo de código recupera el valor del parámetro de salida @ItemCount por el nombre:

curSales = myCmd.Parameters("@ItemCount").Value curSales = myCmd.Parameters["@ItemCount"].Value;

Visual Basic .NET

C#

Ejecutar el procedimiento almacenado

Visual Basic .NET

C#

Leer parámetros de salida

Visual Basic .NET

C#

Page 394: Microsoft ASP.net - Curso Completo - Espa Ol

Invocar procedimientos almacenados con Microsoft ADO.NET 21

Demostración: pasar parámetros

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

En esta demostración, veremos cómo invocar un procedimiento almacenado con dos parámetros de entrada y a continuación enlazar los resultados a un DataGrid.

Para ejecutar la demostración

1. Abrir la página 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 continuación 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 código subyacente de la página SPUseParameters.aspx.

4. En el procedimiento de evento cmdSale_Click, mostrar el código 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 parámetros de entrada.

• Crear un nuevo DataSet y rellenar el DataSet desde el DataAdapter.

Introducción

Page 395: Microsoft ASP.net - Curso Completo - Espa Ol

Práctica A: invocar procedimientos almacenados con Microsoft ADO.NET

MedicalMedical.aspxMedicalMedical.aspx

BenefitsHome PageDefault.aspx

BenefitsHome PageDefault.aspx

Life InsuranceLife.aspxLife InsuranceLife.aspx

RetirementRetirement.aspxRetirementRetirement.aspx

DentalDental.aspxDentalDental.aspx

Dentists

DoctorsDoctors.aspx DoctorsDoctors.aspx

Doctors

Logon PageLogin.aspxLogon PageLogin.aspx

RegistrationRegister.aspxRegistrationRegister.aspx

CohoWinery

ProspectusProspectus.aspxProspectusProspectus.aspx

XML Web ServicedentalService1.asmx

XML Web ServicedentalService1.asmx

Page HeaderHeader.ascxPage HeaderHeader.ascx

ASPState

tempdb

Lab Web Application

User Controlnamedate.ascxUser Controlnamedate.ascx

Menu ComponentClass1.vb or Class1.cs

Menu ComponentClass1.vb or Class1.cs

XML Files

Web.config

En este laboratorio, aprenderemos a:

Recuperar datos de una base de datos Microsoft® SQL Server™ utilizando procedimientos almacenados.

Acceder a procedimientos almacenados utilizando objetos SqlCommand y SqlDataReader.

Vincular un objeto SqlDataReader a un cuadro de lista.

Este laboratorio se centra en los conceptos de este módulo. Por ello, podría no cumplir las recomendaciones de seguridad de Microsoft.

Para trabajar en este laboratorio, es necesario tener:

Conocimientos sobre cómo 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 cómo crear procedimientos de evento para controles de servidor.

Conocimientos sobre cómo mostrar datos DataSet y DataReader en un control enlazado a lista.

Objetivos

Nota

Requisitos previos

Page 396: Microsoft ASP.net - Curso Completo - Espa Ol

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 médico. Cuando se solicita un seguro médico, el usuario debe seleccionar un médico de cuidados primarios. Los doctores aprobados por la compañía aparecen en una lista de una base de datos SQL Server denominada doctors. La base de datos también incluye las especialidades de los doctores. En este laboratorio, mejoraremos la página doctors.aspx del sitio Web de Coho Winery para permitir a los usuarios ver la lista de especialidades de un doctor seleccionado.

Escenario

Tiempo estimado para completar el laboratorio: 30 minutos

Page 397: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 0 Configuración del laboratorio

Para realizar este laboratorio, es necesario haber creado el proyecto de la aplicación 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 solución LabApplication

Realizar este procedimiento únicamente si no se ha creado un archivo de solución LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solución en blanco denominada LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Solución en

blanco. b. En el cuadro de diálogo Nuevo proyecto, escribir LabApplication en el

cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

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

1. Crear un nuevo proyecto de aplicación Web ASP.NET, denominado BenefitsVB o BenefitsCS, en la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto. b. En el cuadro de diálogo 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 Aplicación Web ASP.NET,

establecer la ubicación 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 Solución, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solución, es importante el uso de mayúsculas 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 mayúsculas el nombre del proyecto Benefits.

Importante

Importante

Precaución

Page 398: Microsoft ASP.net - Curso Completo - Espa Ol

Actualizar el proyecto Benefits

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

3. Buscar los archivos de proyecto: Ir a la carpeta VB\Starter\BenefitsVB para los archivos de Visual Basic .NET. Ir a la carpeta CS\Starter\BenefitsCS para los archivos de Visual C#. Estas carpetas pueden encontrarse dentro del fichero labs09.zip

4. En el cuadro Archivos de tipo del cuadro de diálogo Agregar elemento existente – BenefitsList, hacer clic en Todos los archivos (*.*).

5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir. 6. Hacer clic en Sí a la pregunta de si sobrescribir o recargar los archivos.

Crear la biblioteca de clases BenefitsList

Realizar este procedimiento únicamente si no se ha creado anteriormente un proyecto BenefitsList, o si se ha eliminado el proyecto BenefitsList siguiendo los pasos del Apéndice A, “Recuperación del laboratorio”.

1. Crear un nuevo proyecto de biblioteca de clases Crear un nuevo proyecto de biblioteca de clases Visual Basic .NET con el nombre BenefitsListVB, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de diálogo 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 solución, y clic en Aceptar. Crear un nuevo proyecto de biblioteca de clases Visual C# .NET con el nombre BenefitsListCS, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de diálogo 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 solución, y clic en Aceptar.

Verificar que se han escrito correctamente las mayúsculas del proyecto BenefitsList.

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

Importante

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Precaución

Page 399: Microsoft ASP.net - Curso Completo - Espa Ol

Actualizar el proyecto BenefitsList

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

3. Ir al proyecto BenefitsList. Ir a la carpeta VB\Starter\BenefitsListVB. Ir a la carpeta CS\Starter\BenefitsListCS. Estas carpetas pueden encontrarse dentro del fichero labs09.zip

4. En el cuadro Archivos de tipo del cuadro de diálogo 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 solución LabApplication, completar los siguientes pasos para agregar una referencia al componente BenefitsList que acabamos de crear: a. Hacer clic con el botón derecho en el proyecto BenefitsVB o

BenefitsCS en el Explorador de soluciones y hacer clic en Agregar referencia.

b. En el cuadro de diálogo Agregar referencia, en la pestaña Proyectos, hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.

c. En la lista Componentes seleccionados, seleccionar el componente BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar. El componente se agrega a la carpeta Referencias en el Explorador de soluciones.

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Page 400: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 1 Obtener nombres de ciudades únicos

En este ejercicio, vincularemos el cuadro de lista desplegable lstCities de la página doctors.aspx de forma que muestre los nombres de ciudades únicos de la base de datos doctors. Cuando el usuario seleccione una ciudad, el código 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 vinculación 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 vinculación antes de utilizar el procedimiento almacenado.

Eliminar el código de vinculación existente

1. Abrir la página doctors.aspx.vb del proyecto BenefitsVB o la página doctors.aspc.cs del proyecto BenefitsCS.

2. En el procedimiento de evento Page_Load, buscar el siguiente código: 'TODO: Lab10: bind the listbox to city field 'in the doctors table Dim cmdCities As New SqlCommand _ ("Select city from doctors", SqlConnection1) Dim drCities As SqlDataReader SqlConnection1.Open() drCities = cmdCities.ExecuteReader() lstCities.DataSource = drCities lstCities.DataTextField = "city" lstCities.DataBind() drCities.Close() SqlConnection1.Close() //TODO Lab10: bind the listbox to city field //in the doctors table SqlCommand cmdCities = new SqlCommand ("Select city from doctors", sqlConnection1); sqlDataReader drCities; sqlConnection1.Open(); drCities = cmdCities.ExecuteReader(); lstCities.DataSource = drCities; lstCities.DataTextField = "City"; lstCities.DataBind(); drCities.Close(); sqlConnection1.Close();

3. Comentar este código seleccionando todas las líneas del código y haciendo

clic en el icono Comentario de la Barra de herramientas.

Visual Basic .NET

C#

Page 401: Microsoft ASP.net - Curso Completo - Espa Ol

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 método ExecuteReader del objeto SqlCommand. Poner el nombre drCities al objeto SqlDataReader.

6. En el código, establecer las propiedades del cuadro de lista desplegable lstCities como muestra la siguiente tabla. Propiedad Valor DataSource drCities

DataTextField "City"

7. Invocar el método DataBind del cuadro de lista desplegable lstCities. 8. Cerrar los objetos DataReader y Connection.

El código debería ser similar al siguiente: Dim cmdCities As SqlCommand = New _ SqlCommand("getUniqueCities", SqlConnection1) cmdCities.CommandType = CommandType.StoredProcedure SqlConnection1.Open() Dim drCities As SqlDataReader drCities = cmdCities.ExecuteReader() lstCities.DataSource = drCities lstCities.DataTextField = "City" lstCities.DataBind() drCities.Close() SqlConnection1.Close() SqlCommand cmdCities = new SqlCommand ("getUniqueCities", sqlConnection1); cmdCities.CommandType = CommandType.StoredProcedure; sqlConnection1.Open(); sqlDataReader drCities; drCities = cmdCities.ExecuteReader(); lstCities.DataSource = drCities; lstCities.DataTextField = "City"; lstCities.DataBind(); drCities.Close(); sqlConnection1.Close();

9. Generar y examinar la página doctors.aspx. El cuadro de lista desplegable City muestra la lista de ciudades donde se encuentran los doctores. No hay ciudades duplicadas en la lista.

Visual Basic .NET

C#

Page 402: Microsoft ASP.net - Curso Completo - Espa Ol

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. Abrir el código subyacente de la página doctors.aspx y crear un procedimiento de evento SelectedIndexChanged para el control DataGrid: a. En la página de código subyacente, en la lista desplegable Nombre de

clase, hacer clic en dgDoctors. b. En la lista desplegable Nombre de método, hacer clic en

SelectedIndexChanged. En las propiedades del control dgDoctors DataGrid, hacer clic en Events. Desplazarse hacia abajo en la lista de eventos y hacer doble clic en el evento SelectedIndexChanged.

2. Crear una variable de tipo cadena denominada strDrID para guardar el valor de la columna dr_id para la fila seleccionada por el usuario.

3. Utilizando la colección Cells del objeto SelectedItem del DataGrid dgDoctors, leer el valor del campo dr_id y almacenarlo en la variable strDrID. El código debería ser similar al siguiente: Dim strDrID As String strDrID = dgDoctors.SelectedItem.Cells.Item(1).Text string strDrID; strDrID = dgDoctors.SelectedItem.Cells[1].Text;

4. Crear un nuevo objeto SqlCommand denominado cmdSpecialty que utilice el objeto sqlConnection1 para invocar el procedimiento almacenado getDrSpecialty.

5. Establecer el tipo de comando SqlCommand a un procedimiento almacenado. El código debería ser similar al siguiente: Dim cmdSpecialty As New _ SqlCommand("getDrSpecialty", SqlConnection1) cmdSpecialty.CommandType = CommandType.StoredProcedure SqlCommand cmdSpecialty = new SqlCommand( "getDrSpecialty", sqlConnection1); cmdSpecialty.CommandType = CommandType.StoredProcedure;

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

Visual Basic .NET

C#

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 403: Microsoft ASP.net - Curso Completo - Espa Ol

Nombre de parámetro Tipo de datos Tamaño @dr_id SqlDbType.Char 4

7. Establecer la propiedad Direction del SqlParameter a Input. 8. Establecer el valor del SqlParameter a la variable strDrID. 9. Agregar el parámetro al objeto SqlCommand utilizando el método Add.

El código debería ser similar al siguiente: Dim paramSpecialty As New SqlParameter _ ("@dr_id", SqlDbType.Char, 4) paramSpecialty.Direction = ParameterDirection.Input paramSpecialty.Value = strDrID cmdSpecialty.Parameters.Add(paramSpecialty) SqlParameter paramSpecialty = new SqlParameter ("@dr_id", SqlDbType.Char, 4); paramSpecialty.Direction = ParameterDirection.Input; paramSpecialty.Value = strDrID; cmdSpecialty.Parameters.Add(paramSpecialty);

10. Abrir el objeto SqlConnection sqlConnection1. 11. Crear un nuevo objeto SqlDataReader denominado drSpecialty. 12. Rellenar el objeto SqlDataReader desde el objeto SqlCommand

invocando el método ExecuteReader del objeto SqlCommand. El código debería ser similar al siguiente: SqlConnection1.Open() Dim drSpecialty As SqlDataReader drSpecialty = cmdSpecialty.ExecuteReader() sqlConnection1.Open(); sqlDataReader drSpecialty; drSpecialty = cmdSpecialty.ExecuteReader();

Vincular el cuadro de lista lstSpecialties al DataReader drSpecialties y hacer que esté visible

1. En el código, establecer las propiedades del cuadro de lista lstSpecialties como muestra la siguiente tabla.

Propiedad Valor DataSource drSpecialty

DataTextField "Specialty"

2. Invocar el método DataBind del cuadro de lista.

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 404: Microsoft ASP.net - Curso Completo - Espa Ol

3. Cerrar los objetos SqlDataReader y SqlConnection. El código debería ser similar al siguiente: lstSpecialties.DataSource = drSpecialty lstSpecialties.DataTextField = "Specialty" lstSpecialties.DataBind() drSpecialty.Close() SqlConnection1.Close() lstSpecialties.DataSource = drSpecialty; lstSpecialties.DataTextField = "Specialty"; lstSpecialties.DataBind(); drSpecialty.Close(); sqlConnection1.Close();

4. Agregar código para hacer que el cuadro de lista lstSpecialties y la etiqueta lblSpecialties estén visibles, pero sólo si hay especialidades en el DataReader. El código debería ser similar al siguiente: If Not IsDBNull(drSpecialty) Then lstSpecialties.Visible = True lblSpecialties.Visible = True End If if (drSpecialty != null) { lstSpecialties.Visible = true; lblSpecialties.Visible = true; }

5. Generar y examinar la página 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 código funciona correctamente.

c. Hacer clic en Submit. Seremos redireccionados a la página medical.aspx, y el nombre del doctor seleccionado aparece en el cuadro de texto Primary Care Physician.

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 405: Microsoft ASP.net - Curso Completo - Espa Ol

Índice

Descripción 1

Lección: Descripción de la arquitectura XML en ASP.NET 2

Lección: XML y el objeto DataSet 10

Lección: trabajar con datos XML 25

Lección: uso del control de servidor Web XML 35

Leer y escribir datos XML

Page 406: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 1

Descripción

Descripción de la arquitectura XML en ASP.NET

XML y el objeto DataSet

Trabajar con datos XML

Utilizar el control de servidor Web XML

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

Aunque se almacena una gran cantidad de datos en bases de datos Microsoft®

SQL Server™ y se gestionan mediante Microsoft ADO.NET, recientemente Extensible Markup Language (XML) se ha convertido en un sólido estándar para el almacenamiento, gestión y transferencia de datos. XML tiene dos grandes ventajas en el almacenamiento y transferencia de datos:

XML es un estándar aceptado por el mercado. XML utiliza únicamente texto plano.

En este módulo, estudiaremos cómo leer, escribir y mostrar datos XML.

En este módulo, aprenderemos a:

Describir la arquitectura XML en Microsoft ASP.NET. Leer y escribir datos XML en un objeto DataSet. Identificar cómo 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.

Introducción

Objetivos

Page 407: Microsoft ASP.net - Curso Completo - Espa Ol

2 Leer y escribir datos XML

Lección: descripción de la arquitectura XML en ASP.NET

¿Qué es XML?

Principales tecnologías XML

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

ASP.NET proporciona varios tipos de clases y objetos que pueden utilizarse para acceder y sincronizar con datos XML. Estas clases y objetos representan componentes para procesar XML a bajo nivel que permiten integrar XML en las aplicaciones Web ASP.NET.

En esta lección, estudiaremos cómo está compuesto un documento XML. También estudiaremos las principales tecnologías XML. Estudiaremos las clases y objetos que se utilizan para leer y escribir datos XML.

En esta lección, aprenderemos a:

Distinguir entre XML válido y XML con un formato correcto. Describir las principales tecnologías XML.

Introducción

Objetivos de la lección

Page 408: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 3

¿Qué es XML?

<?xml version="1.0"?> <authors><author ID="1"><name>Jay</name>

</author><!-- There are more authors. --></authors>

<?xml version="1.0"?> <authors><author ID="1"><name>Jay</name>

</author><!-- There are more authors. --></authors>

Proporciona un método uniforme para describir e intercambiar datos estructurados

Podemos definir nuestros propios elementos y atributos

Los elementos pueden anidarse

XML válido frente a XML con un formato correcto

Instrucción de procesamientoInstrucción de procesamiento

ElementosElementos

AtributosAtributos

ComentariosComentarios

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

Actualmente, las empresas se enfrentan a numerosos problemas en la organización 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 presentación. La estructura de los datos debe ser abierta y extensible.

XML satisface todos estos requerimientos, y por tanto es una ayuda para la organización de datos en las empresas.

XML es el formato universal utilizado para describir e intercambiar documentos y datos estructurados en Internet. XML es un subconjunto del Standard Generalized Markup Language (SGML), y está definido por el World Wide Web Consortium (W3C), y garantiza que los datos estructurados son uniformes e independientes de las aplicaciones Web y de los fabricantes.

XML define la estructura de los datos de un modo abierto y autodescriptivo. Este modo abierto y autodescriptivo permite que los datos sean fácilmente transferidos a través de una red y que el receptor los procese de modo coherente. XML describe cómo se estructuran los datos, no cómo deberían mostrarse o utilizarse, de forma similar a Hypertext Markup Language (HTML). Los documentos XML contienen etiquetas que otorgan significado al contenido del documento. Estas etiquetas permiten a los programadores encontrar los datos que necesitan en el documento XML.

Las partes de un documento XML incluyen:

Instrucciones de procesamiento Elementos Atributos Comentarios

Introducción

Definición

Partes de un documento XML

Page 409: Microsoft ASP.net - Curso Completo - Espa Ol

4 Leer y escribir datos XML

La mayoría de documentos XML empiezan con una instrucción de procesamiento para el procesador XML indicando que el documento sigue las recomendaciones XML del W3C.

A continuación de la instrucción 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 raíz.

El resto de elementos, tras el primero, pero dentro del elemento raíz, se denominan elementos secundarios.

Los elementos secundarios pueden anidar otros elementos secundarios. La mayoría de los datos del contenido XML se almacenan entre la etiqueta de inicio y la etiqueta de cierre de los elementos secundarios.

Cualquier elemento puede contener atributos. El uso de atributos es una alternativa al uso de elementos para almacenar el contenido. Los atributos definen datos que pertenecen a un único elemento. Respecto a los atributos:

Crear un atributo en la etiqueta de inicio de un elemento. Declarar el nombre del atributo, seguido de una asignación del valor. Utilizar comillas simples o dobles para establecer el valor de un atributo.

Los comentarios son opcionales.

Un documento XML con un formato correcto cumple las especificaciones listadas en la Recomendación W3C de XML 1.0. Un documento XML se considera con el formato correcto si:

Contiene exactamente un elemento raíz (el elemento documento). Todos los elementos secundarios están 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>.

Instrucción de procesamiento

Elementos

Atributos

Comentarios

XML de formato correcto

Page 410: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 5

El XML es válido si su vocabulario cumple con una serie de requisitos descritos en un esquema:

En XML, un esquema es la descripción 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 definición del esquema, el documento instancia se considera válido.

Existen tres tipos de esquemas que pueden utilizarse para validar un documento instancia XML, como muestra la siguiente tabla.

Tipo de esquema Descripción Document Type Definition (DTD)

DTD es el método de validación original descrito en la Recomendación XML versión 1.0 del W3C. XML Schema Definition (XSD) ha sustituido a DTD. Los DTDs no están basados en XML.

XML-Data Reduced (XDR schema)

XDR es una tecnología de esquema provisional desarrollada por Microsoft. XDR es similar a XSD, pero los esquemas XDR están escritos en XML.

XML Schema Definition language (XSD)

XSD es la recomendación del W3C para validar esquemas XML. XSD sustituye a ambos esquemas, DTDs y XDR. Los esquemas XSD están escritos en XML.

XSD es el esquema utilizado más frecuentemente en el .NET Framework.

XML válido

Page 411: Microsoft ASP.net - Curso Completo - Espa Ol

6 Leer y escribir datos XML

Principales tecnologías XML

Definición de esquemas XML (XSD)Define la estructura requerida de un documento XML válido

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 programáticamente con documentos XML en memoria

XML Query (XQuery)Lenguaje de fácil implementación en el que las consultas son concisas y se entienden fácilmente

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

Desde el principio, XML ha generado otras innovaciones tecnológicas y desarrollos que funcionan con XML para manipular datos. Las principales tecnologías relacionadas con XML, todas ellas recomendaciones del W3C, incluyen:

Definición de esquemas XML (XSD) Extensible Stylesheet Language Transformation (XSLT) Lenguaje XML Path (XPath) Document Object Model (DOM) Consulta XML (XQuery)

XSD es el estándar actual para la definición de esquemas, y define la estructura que requiere un documento XML válido. 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. También podemos incluir un esquema XSD en un documento XML. La extensión 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 múltiples espacios de nombres (xmlns). Por ejemplo, la siguiente definición 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">

Introducción

XSD

Definición de esquema

Page 412: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 7

Utilizamos declaraciones de elemento y atributo para definir el uso de los elementos y los atributos en un documento XML. Podemos definir las siguientes propiedades para un elemento o atributo: nombre, contenido, número, 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 más veces. El tipo de elemento es una cadena:

<xsd:element name="LastName" minOccurs="0" maxOccurs="*" type="string"></xsd:element> Por muchas razones, los datos XML deben transformarse en otras formas y variantes. El W3C ha generado XSLT como uno de los lenguajes de programación 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 transformación. Por ejemplo, el siguiente código es una muestra de un documento origen XML: <?xml version="1.0" ?> <?xml-stylesheet type="text/xsl" href="Employees1.xsl"?> <employees> <employee> <name>Stuart Munson</name> <jobtitle>Programmer</jobtitle> </employee> <employee> <name>Robert Brown</name> <jobtitle>Tester</jobtitle> </employee> </employees>

Declaraciones de elemento y atributo

XSLT

Page 413: Microsoft ASP.net - Curso Completo - Espa Ol

8 Leer y escribir datos XML

Documento de hoja de estilo XSLT

El documento de hoja de estilo XSLT es un documento XML que utiliza el vocabulario de XSLT para expresar las normas de transformación. Por ejemplo, el siguiente código es el documento de hoja de estilo XSLT (Employees1.xsl) que se aplicará al documento origen del código 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 ejecución del documento origen a través de las transformaciones que se encuentran en la hoja de estilo XSLT. Por ejemplo, ejecutando el documento origen del código anterior a través de la hoja de estilo XSLT anterior Employees1.xsl, se produce el siguiente documento resultante:

Page 414: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 9

XPath es un lenguaje completo utilizado para referenciar elementos en los documentos XML. XPath versión 2.0 es una recomendación del W3C.

El lenguaje XPath especifica un modelo de objetos para los documentos XML. En el modelo de objetos XPath, un documento XML está representado como un árbol de nodos. Consultamos una fuente XML utilizando las propiedades de sus nodos XPath.

DOM es una representación en forma de árbol en el caché de memoria de un documento XML. DOM permite la navegación y edición de un documento XML. W3C define las propiedades, métodos 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. También podemos escribir un script del lado del cliente que genere un documento XML en el cliente envíe los datos XML al servidor Web, cuando resulte apropiado.

A medida que va aumentando la cantidad de información que se almacena, intercambia y presenta mediante XML, la capacidad de consultar inteligentemente las fuentes de datos XML es cada vez más importante. XQuery proporciona características para recuperar e interpretar información desde estas fuentes de datos:

XQuery ha sido diseñado como un lenguaje de fácil implementación en el que las consultas son concisas y se entienden fácilmente.

La flexibilidad de XQuery permite consultar un amplio espectro de fuentes de información XML, incluyendo tanto bases de datos como documentos.

XQuery se basa en otras tecnologías del W3C. Por ejemplo, XQuery utiliza sentencias de ruta de la recomendación XPath 2.0.

XQuery depende en gran medida de XPath para dirigir sus consultas dentro de un determinado origen XML. XQuery también toma prestado el modelo de objetos de XPath.

Para más información sobre las principales tecnologías XML, acceder al sitio Web del W3C en http://www.w3c.org.

XPath

DOM

XQuery

Nota

Page 415: Microsoft ASP.net - Curso Completo - Espa Ol

10 Leer y escribir datos XML

Lección: XML y el objeto DataSet

¿Por qué utilizar XML con DataSets?

Descripción de XML y DataSets

Métodos basados en XML del objeto DataSet

Demostración: leer y escribir XML a/desde un DataSet

Práctica: uso del método ReadXml

Crear datos XML anidados

Demostración: crear XML anidado

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

XML y los DataSets comparten una estrecha conexión. Los DataSets son la base para el almacenamiento en modo desconectado y la manipulación de datos relacionales. Los DataSets también son un contenedor para una o más tablas de datos. XML es el formato estándar para los datos presentes en DataSets.

En esta lección, aprenderemos a:

Describir el uso de XML con DataSets. Identificar la relación de XML con DataSets. Identificar el uso de los métodos ReadXml, WriteXml y GetXml. Crear datos XML anidados.

Introducción

Objetivos de la lección

Page 416: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 11

¿Por qué utilizar XML con DataSets?

XML es el formato universal para intercambiar datos en InternetLos Datasets serializan datos en forma de XML XML proporciona un formato cómodo para transferir el contenido de un Dataset a/desde clientes remotosLos objetos XML sincronizan y transforman datos

Legible por una personaLegible por una persona

Legible por un mainframeLegible por un mainframe

Archivo XML

o

Flujo

Legible por el navegadorLegible por el navegador

Servidor WebServidor Web

DataSet

CortafuegosCortafuegos

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

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 cómodo 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 están representados por DataSets.

Introducción

Page 417: Microsoft ASP.net - Curso Completo - Espa Ol

12 Leer y escribir datos XML

Descripción de XML y DataSets

ArchivoXML

ObjetoDataSetObjeto

DataSetObjeto

XmlDataDocumentObjeto

XmlDataDocument

ObjetoXslTransform

ObjetoXslTransform

ArchivoXML o HTML

Base de datos

DataAdapterDataAdapter

ReadXMLReadXML

Doc.SaveDoc.Save

WriteXMLWriteXML

ArchivoXSLT

ArchivoXML

ArchivoXML

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

XML desempeña 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 características 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 estándares del W3C que pueden utilizarse para definir la estructura de datos XML.

Generar una clase DataSet Podemos generar una clase DataSet que incorpore información de esquema para definir sus estructuras de sus datos (como tablas y columnas) como miembros de clase.

Métodos DataSet Podemos leer un documento XML o generar un flujo en un DataSet utilizando el método ReadXML del DataSet y a continuación escribir un DataSet en XML utilizando el método WriteXML del DataSet. Como XML es un formato estándar para intercambiar datos entre distintas aplicaciones Web, podemos cargar un DataSet con información 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.

Introducción

Page 418: Microsoft ASP.net - Curso Completo - Espa Ol

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 métodos relacionales (mediante el DataSet) o métodos XML. Las dos vistas se sincronizan automáticamente cuando se modifican.

Transformación de datos Podemos utilizar el objeto XSLTransform para cargar una hoja de estilo .xsl y aplicar la transformación. El documento resultante puede ser un archivo XML o HTML.

Los DataSets pueden leer y escribir esquemas que almacenan información estructurada utilizando los métodos ReadXmlSchema y WriteXmlSchema. Si no hay ningún esquema disponible, el DataSet puede producir uno, mediante su método InferXmlSchema, a partir de los datos existentes en un documento XML que esté estructurado en un modo relacional.

Nota

Page 419: Microsoft ASP.net - Curso Completo - Espa Ol

14 Leer y escribir datos XML

Los métodos basados en XML del objeto DataSet

Utilizan ReadXml para cargar datos de un archivo o flujo

Utilizan WriteXml para escribir datos XML a un archivo o flujo

Utilizan GetXml para escribir datos a una variable de cadena

DataSet ds = new DataSet();

ds.ReadXml(Server.MapPath("filename.xml"));

DataSet ds = new DataSet();

ds.ReadXml(Server.MapPath("filename.xml"));

DataSet ds = new DataSet();SqlDataAdapter da = new SqlDataAdapter("select * from

Authors", conn);da.Fill(ds);ds.WriteXml(Server.MapPath("filename.xml"));

DataSet ds = new DataSet();SqlDataAdapter da = new SqlDataAdapter("select * from

Authors", conn);da.Fill(ds);ds.WriteXml(Server.MapPath("filename.xml"));

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

Código de ejemplo de Visual Basic .NET *****************************

El contenido de un DataSet puede crearse desde un flujo o un documento XML. Además, con el .NET Framework, tenemos una gran flexibilidad sobre qué información se carga desde XML, y cómo se crea el esquema o estructura relacional del DataSet.

Para rellenar un DataSet con datos de XML, utilizamos el método ReadXml del objeto DataSet. El método ReadXml lee de un archivo, un flujo o un XmlReader.

El método ReadXml lee el contenido del flujo o documento XML y carga el DataSet con esos datos. ReadXml también crea el esquema relacional del DataSet, dependiendo del XmlReadMode especificado y de si existe ya o no un esquema relacional.

El siguiente código muestra cómo rellenar un DataSet con datos:

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

El método Server.MapPath devuelve la ruta de archivo física que corresponde a la ruta virtual especificada en el servidor Web.

Para escribir un DataSet a un archivo, flujo o XmlWriter, utilizamos el método WriteXml. El primer parámetro 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 parámetro opcional de un XmlWriteMode para especificar cómo debe escribirse la salida XML.

Introducción

ReadXML

Microsoft Visual Basic® .NET

C#

Nota

WriteXML

Page 420: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 15

El siguiente código es un ejemplo de cómo escribir un DataSet:

Dim ds As New DataSet() Dim da As New SqlDataAdapter( _ "select * from Authors", conn) da.Fill(ds) ds.WriteXml(Server.MapPath("filename.xml")) DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter ("select * from Authors", conn); da.Fill(ds); ds.WriteXml(Server.MapPath("filename.xml")); La representación 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 representación XML del DataSet. Para obtener la representación XML del DataSet como una cadena, utilizaríamos el método GetXml, como muestran los siguientes ejemplos de código:

Dim strXmlDS As String = ds.GetXml() string strXmlDS = ds.GetXml(); GetXml devuelve la representación XML del DataSet sin información de esquema. Para escribir la información de esquema desde el DataSet (como el esquema XML) a una cadena, utilizamos GetXmlSchema.

Visual Basic .NET

C#

GetXML

Visual Basic .NET

C#

Page 421: Microsoft ASP.net - Curso Completo - Espa Ol

16 Leer y escribir datos XML

Demostración: 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

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

En esta demostración, veremos cómo leer y escribir XML a/desde un DataSet.

Los archivos de esta demostración se encuentran en los proyectos Demo10CS y Demo10VB que se pueden encontrar dentro del fichero demos10.zip

Ejecutar la demostración

1. Abrir el archivo Books.xml en Microsoft Visual Studio® .NET. Este archivo contiene los datos que se mostrarán.

2. Generar y examinar la página 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 código subyacente DisplayXML.aspx.vb o

DisplayXML.aspx.cs en Visual Studio .NET.

Introducción

Leer datos XML

Page 422: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 17

6. En el procedimiento de evento cmdLoad_Click, mostrar el código que lee

un archivo XML en un DataSet y vincula el DataGrid al DataSet.

El DataGrid únicamente puede gestionar un único nivel de elementos en un archivo XML.

Si hay demasiada anidación de elementos, los datos no se mostrarán. Podemos demostrar una anidación 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 página DisplayXML.aspx. No se muestran los datos debido a la excesiva anidación.

8. Generar y examinar la página SaveAsXML.aspx. El DataGrid muestra los datos del DataSet que se guardarán 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 código subyacente SaveAsXml.aspx.vb o SaveAsXml.aspc.cs en Visual Studio .NET. Hay una función denominada CreateDataSet que genera el DataSet desde una base de datos SQL Server.

11. Para crear un archivo XML, mostrar el código en el procedimiento de evento cmdSave_Click que invoca el método WriteXml del DataSet.

12. Para crear un archivo de esquema XSD, mostrar el código en el procedimiento de evento cmdSchema_Click que invoca el método WriteXmlSchema del DataSet.

Nota

Escribir datos XML

Page 423: Microsoft ASP.net - Curso Completo - Espa Ol

18 Leer y escribir datos XML

Práctica: uso del método ReadXml

Los estudiantes:

Crearán un DataSet

Cargarán un DataSet desde un archivo XML

Lo mostrarán en un DataGrid

Tiempo: 5 Minutos

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

En esta práctica, aprenderemos a utilizar el método ReadXml.

Los archivos de esta práctica se encuentran en los proyectos Demo10CS y Demo10VB que se pueden encontrar dentro del fichero demos10.zip

Ejecutar la práctica

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 código debería ser similar al siguiente: Dim ds As New DataSet() ds.ReadXml(Server.MapPath("Employees.xml")) dgEmployees.DataSource = ds dgEmployees.DataBind() DataSet ds = new DataSet(); ds.ReadXml(Server.MapPath("Employees.xml")); dgEmployees.DataSource = ds; dgEmployees.DataBind();

5. Generar y examinar la página.

Introducción

Visual Basic .NET

C#

Page 424: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 19

Crear datos XML anidados

De forma predeterminada, la salida de DataTable es secuencial Para anidar XML, anidar DataRelation

Secuencial Anidado

Dim dr As New DataRelation _("name", parentCol, childCol)

dr.Nested = Trueds.Relations.Add(dr)

Dim dr As New DataRelation _("name", parentCol, childCol)

dr.Nested = Trueds.Relations.Add(dr)

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

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

<Publisher name="pub1" ><Title name="title1" /><Title name="title3" />

</Publisher><Publisher name="pub2" >

<Title name="title2" /></Publisher>

<Publisher name="pub1" ><Title name="title1" /><Title name="title3" />

</Publisher><Publisher name="pub2" >

<Title name="title2" /></Publisher>

DataRelation dr = new DataRelation("name", parentCol, childCol);

dr.Nested = true;ds.Relations.Add(dr);

DataRelation dr = new DataRelation("name", parentCol, childCol);

dr.Nested = true;ds.Relations.Add(dr);

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

En una representación 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 relación entre tablas se implementa utilizando una DataRelation.

Cuando creamos una DataRelation, las relaciones primario-secundario se gestionan únicamente mediante la relación entre las filas y las columnas. Tablas y columnas son entidades distintas. En la representación jerárquica de datos que proporciona XML, las relaciones primario-secundario están representadas por elementos primarios que contienen elementos secundarios anidados.

Cuando se utilizan relaciones anidadas, un elemento secundario sólo puede tener un elemento primario.

Para facilitar la anidación 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 relación serán 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.

Introducción

DataRelation

Nota

Page 425: Microsoft ASP.net - Curso Completo - Espa Ol

20 Leer y escribir datos XML

En la siguiente ilustración de un DataSet, veremos cómo escribir el código cuando la propiedad Nested del DataRelation está establecida a false, además cuando la propiedad Nested del DataRelation está establecida a true. También veremos la salida del resultado de invocar WriteXml en el DataSet.

DataSet

El siguiente código muestra cómo establecer la propiedad Nested de DataRelation a false:

Dim ds As New DataSet() 'fill the DataSet ... Dim parentCol As DataColumn = _ ds.Tables("Publishers").Columns("pub_id") Dim childCol As DataColumn = _ ds.Tables("Titles").Columns("pub_id") Dim dr As New DataRelation _ ("TitlePublishers", parentCol, childCol) ds.Relations.Add(dr) ds.WriteXml(Server.MapPath("PubTitlesNotNested.xml"), _ XmlWriteMode.IgnoreSchema) DataSet ds = new DataSet(); //fill the DataSet ... DataColumn parentCol = ds.Tables["Publishers"].Columns["pub_id"]; DataColumn childCol= ds.Tables["Titles"].Columns["pub_id"]; DataRelation dr = new DataRelation ("TitlePublishers", parentCol, childCol); ds.Relations.Add(dr); ds.WriteXml(Server.MapPath("PubTitlesNotNested.xml"), XmlWriteMode.IgnoreSchema); La propiedad Nested del objeto DataRelation no está establecida a true para el anterior DataSet; por tanto, los objetos secundarios no se anidarán dentro de los elementos primarios cuando este DataSet esté representado como datos XML.

Visual Basic .NET

C#

title1

title2

title3

title pub_id

1

2

1

price

40,00

60,00

30,00

1

2

pub1

pub2

pub_id pub_name

DDaattaaTTaabbllee PPuubblliisshheerrss

DDaattaaTTaabbllee TTiittlleess

Secundaria Primaria

Page 426: Microsoft ASP.net - Curso Completo - Espa Ol

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 debería estar establecida a true y deberíamos añadir el siguiente código:

… Dim dr As New DataRelation _ ("TitlePublishers", parentCol, childCol) dr.Nested = True ds.Relations.Add(dr) ds.WriteXML(Server.MapPath("PubTitlesNested.xml"), _ XmlWriteMode.IgnoreSchema) … DataRelation dr = new DataRelation("TitlePublishers", parentCol, childCol); dr.Nested = true; ds.Relations.Add(dr); ds.WriteXML(Server.MapPath("PubTitlesNested.xml"), XmlWriteMode.IgnoreSchema);

Visual Basic .NET

C#

Page 427: Microsoft ASP.net - Curso Completo - Espa Ol

22 Leer y escribir datos XML

El siguiente XML muestra el aspecto que tendría 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>

Page 428: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 23

Demostración: crear XML anidado

WriteXml fuera de un DataSet sin anidación

Visualizar el archivo XML resultante

WriteXml fuera de un DataSet con anidación

Visualizar el archivo XML resultante

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

En esta demostración, aprenderemos a crear un documento XML anidado.

Los archivos de esta demostración se encuentran en los proyectos Demo10CS y Demo10VB que se pueden encontrar dentro del fichero demos10.zip

Ejecutar la demostración

1. Abrir la página SaveNestedXML.aspx en Visual Studio .NET. 2. Visualizar la página de código subyacente, explicar el código y anotar lo

siguiente: a. En la función CreateDataSet, se ha creado un DataSet con dos

DataTables. b. En la función MakeDataRelation, se ha creado una DataRelation entre

las dos tablas, estableciendo la propiedad Nested a True o False, dependiendo del argumento a la función.

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 página 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 están listados, seguidos de los elementos Publishers.

5. Hacer clic en Save as Nested XML, y clic en el hiperenlace View Nested XML.

Introducción

Page 429: Microsoft ASP.net - Curso Completo - Espa Ol

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 están anidados dentro de los elementos Publishers relacionados.

Page 430: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 25

Lección: trabajar con datos XML

Descripción de la sincronización de un DataSet con un XmlDataDocument

Cómo sincronizar un DataSet con un XmlDataDocument

Trabajar con un XmlDataDocument

Transformar datos XML con XSLT

Demostración: transformar datos con XSLT

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

La clase XmlDataDocument permite que los documentos XML sean almacenados, recuperados y manipulados mediante un DataSet relacional. XmlDataDocument tiene una estrecha afiliación 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 transformación XSLT.

En esta lección, estudiaremos cómo sincronizar un DataSet con un XmlDataDocument. También aprenderemos a utilizar XmlDataDocument. Finalmente, estudiaremos cómo transformar datos XML utilizando el objeto XslTransform.

En esta lección, aprenderemos a:

Identificar las diferentes formas disponibles para sincronizar un DataSet con un XmlDataDocument.

Identificar cómo sincronizar un DataSet con un XmlDataDocument. Utilizar un XmlDataDocument. Transformar datos XML utilizando el objeto XslTransform.

Introducción

Objetivos de la lección

Page 431: Microsoft ASP.net - Curso Completo - Espa Ol

26 Leer y escribir datos XML

Sincronización de un DataSet con un XmlDataDocument

Base de datos

DataAdapter

DataSet

Tablas

XmlDataDocument

Transformaciones XML

Otros tipos de documentos XML

Navegación por documentos XML

Sincronizado

System.Data System.Xml

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

Los DataSets proporcionan una representación relacional de los datos. Para el acceso jerárquico a datos, podemos utilizar las clases XML disponibles en el .NET Framework. Antes, las representaciones jerárquicas y relacionales de datos se utilizaban por separado. Sin embargo, el .NET Framework permite el acceso síncrono en tiempo real a las representaciones relacionales y jerárquicas 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 relación entre el DataSet y el XmlDataDocument crea gran flexibilidad permitiendo que una sola aplicación, 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 información jerárquica, 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 cumplían el esquema del DataSet. Sincronizar un XmlDataDocument con un DataSet permite mantener el formato y la estructura jerárquica de los elementos del documento XML original en el XmlDataDocument, mientras que el DataSet contiene únicamente los datos y la información de esquema apropiados para el DataSet.

Introducción

Un único conjunto de datos

Page 432: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 27

Cómo sincronizar un DataSet con un XmlDataDocument

Almacenar datos XML en un XmlDataDocument

Almacenar un DataSet en un XmlDataDocumentDim ds As New DataSet()'fill in dsDim objXmlDataDoc As New XmlDataDocument(ds)

Dim ds As New DataSet()'fill in dsDim objXmlDataDoc As New XmlDataDocument(ds)

XmlDataDocument objXmlDataDoc = new XmlDataDocument();objXmlDataDoc.Load(Server.MapPath ("file.xml"));

-or-objXmlDataDoc.DataSet.ReadXml(Server.MapPath ("file.xml"));

XmlDataDocument objXmlDataDoc = new XmlDataDocument();objXmlDataDoc.Load(Server.MapPath ("file.xml"));

-or-objXmlDataDoc.DataSet.ReadXml(Server.MapPath ("file.xml"));

DataSet ds = new DataSet();//fill in dsobjXmlDataDoc = new XmlDataDocument(ds);

DataSet ds = new DataSet();//fill in dsobjXmlDataDoc = new XmlDataDocument(ds);

Dim objXmlDataDoc As New XmlDataDocument()objXmlDataDoc.Load(Server.MapPath ("file.xml"))

-or-objXmlDataDoc.DataSet.ReadXml(Server.MapPath ("file.xml"))

Dim objXmlDataDoc As New XmlDataDocument()objXmlDataDoc.Load(Server.MapPath ("file.xml"))

-or-objXmlDataDoc.DataSet.ReadXml(Server.MapPath ("file.xml"))

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

Existen dos modos de sincronizar un DataSet con un XmlDataDocument. Podemos:

Almacenar datos XML en un XmlDataDocument. Almacenar un DataSet en un XmlDataDocument.

El siguiente código de ejemplo muestra cómo 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 línea del código anterior crea un objeto XmlDataDocument, y la segunda línea carga el archivo XML en el objeto XmlDataDocument.

También podemos almacenar datos XML en un XmlDataDocument utilizando una línea de código como muestran los siguientes ejemplos:

objXmlDataDoc.DataSet.ReadXml(Server.MapPath("file.xml")) objXmlDataDoc.DataSet.ReadXml(Server.MapPath("file.xml"));

Introducción

Almacenar datos XML en un XmlDataDocument

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 433: Microsoft ASP.net - Curso Completo - Espa Ol

28 Leer y escribir datos XML

El siguiente código de ejemplo muestra cómo almacenar un DataSet en un XmlDataDocument:

Dim ds As New DataSet() 'fill in ds ... Dim objXmlDataDoc As New XmlDataDocument(ds) DataSet ds = new DataSet(); //fill in ds ... XmlDataDocument objXmlDataDoc = new XmlDataDocument(ds); La primera línea del código anterior crea un nuevo DataSet denominado ds. La última línea crea un objeto denominado XmlDataDocument y pasa ds, un DataSet, como parámetro. El proceso de rellenar ds se ha omitido del ejemplo.

Almacenar un DataSet en un XmlDataDocument

Visual Basic .NET

C#

Page 434: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 29

Trabajar con un XmlDataDocument

Mostrar datos en un control enlazado a lista

Extraer filas del Dataset como XML

Utilizar métodos XML DOMXmlDataDocument hereda de XmlDocument

Aplicar una transformación XSLTObjeto XslTransform

dg.DataSource = objXmlDataDoc.DataSetdg.DataSource = objXmlDataDoc.DataSet

Dim elem As XmlElementelem = objXmlDataDoc.GetElementFromRow _

(ds.Tables(0).Rows(1))

Dim elem As XmlElementelem = objXmlDataDoc.GetElementFromRow _

(ds.Tables(0).Rows(1))

XmlElement elem;elem = objXmlDataDoc.GetElementFromRow(ds.Tables[0].Rows[1]);

XmlElement elem;elem = objXmlDataDoc.GetElementFromRow(ds.Tables[0].Rows[1]);

dg.DataSource = objXmlDataDoc.DataSet;dg.DataSource = objXmlDataDoc.DataSet;

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

El DataSet representa una fuente de datos relacional en ADO.NET. El XmlDocument implementa el DOM en XML, y el XmlDataDocument unifica ADO.NET y XML representando datos relacionales de un DataSet y sincronizando esos datos con el modelo de documento XML.

El control DataGrid muestra todas las filas de la tabla del DataSet. El siguiente código muestra cómo asignar el objeto DataSet (objXmlDataDoc.DataSet) al control DataGrid (dg):

dg.DataSource = objXmlDataDoc.DataSet dg.DataSource = objXmlDataDoc.DataSet; Para extraer filas individuales como XML, necesitamos consultar el DataSet. Para consultar el DataSet, utilizamos el método GetElementFromRow. El siguiente código muestra cómo el método 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]);

Introducción

Mostrar datos en un control enlazado a lista

Visual Basic .NET

C#

Extraer filas del DataSet

Visual Basic .NET

C#

Page 435: Microsoft ASP.net - Curso Completo - Espa Ol

30 Leer y escribir datos XML

El .NET Framework implementa el XML DOM para proporcionar acceso a datos de documentos XML y proporcionar acceso a las clases adicionales para poder leer, escribir y navegar en documentos XML. XmlDataDocument proporciona un acceso relacional a datos con su capacidad de sincronizar con los datos relacionales del DataSet.

La clase XmlDataDocument extiende la clase XmlDocument. La clase XmlDocument implementa el DOM; por tanto, nos permite cargar datos relacionales o datos XML. XmlDataDocument también nos permite manipular esos datos utilizando el DOM.

Si los datos se almacenan en una estructura relacional y deseamos que sean la entrada en una transformación XSLT, podemos cargar los datos relacionales en un DataSet y asociarlos con el XmlDataDocument.

Tomando datos relacionales, cargándolos en un DataSet y utilizando la sincronización dentro del XmlDataDocument, los datos relacionales pueden sufrir transformaciones XSLT. El objeto XslTransform transforma datos XML utilizando una hoja de estilo XSLT.

Utilizar métodos XML DOM

Aplicar una transformación XSLT

Page 436: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 31

Transformar datos XML con XSLT

Crear un XmlDataDocument

Crear el objeto XSLTransform e invocar el método Transform

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

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

Dim xslTran As New XslTransform()xslTran.Load(Server.MapPath("PubTitles.xsl"))Dim writer As New XmlTextWriter _

(Server.MapPath("PubTitles_output.html"), _ System.Text.Encoding.UTF8)

xslTran.Transform(xmlDoc, Nothing, writer)writer.Close()

Dim xslTran As New XslTransform()xslTran.Load(Server.MapPath("PubTitles.xsl"))Dim writer As New XmlTextWriter _

(Server.MapPath("PubTitles_output.html"), _ System.Text.Encoding.UTF8)

xslTran.Transform(xmlDoc, Nothing, writer)writer.Close()

Código de ejemplo de # *****************************

El objetivo de la transformación 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 aplicación.

En el .NET Framework, la clase XslTransform es el procesador XSLT que transforma un documento XML en otro.

Antes de transformar datos XML, es necesario crear un DataSet y un objeto XmlDataDocument:

Dim ds As New DataSet() 'fill in DataSet ... Dim xmlDoc As New XmlDataDocument(ds) DataSet ds = new DataSet(); //fill in DataSet ... XmlDataDocument xmlDoc = new XmlDataDocument(ds); La primera línea del código anterior crea el DataSet. La siguiente línea de código (el código no se muestra; en lugar de ello, el comentario está presente) rellena el DataSet. La última línea del código anterior crea un objeto XmlDataDocument denominado xmlDoc y pasa un parámetro a xmlDoc, el DataSet ds.

Introducción

Crear XmlDataDocument

Visual Basic .NET

C#

Page 437: Microsoft ASP.net - Curso Completo - Espa Ol

32 Leer y escribir datos XML

Los siguientes pasos muestran el proceso de transformar datos XML creando un objeto XslTransform e invocando el método Transform:

1. Crear un objeto XslTransform: Dim xslTran As New XslTransform() XslTransform xslTran = new XslTransform();

2. Utilizar el método Load para cargar el archivo de hoja de estilo .xsl para la transformación: xslTran.Load(Server.MapPath("PubTitles.xsl")) xslTran.Load(Server.MapPath("PubTitles.xsl"));

3. Crear un objeto XmlTextWriter para la salida del documento: Dim writer As New XmlTextWriter _ (Server.MapPath("PubTitles_output.html"), _ System.Text.Encoding.UTF8) XmlTextWriter writer = new XmlTextWriter (Server.MapPath("PubTitles_output.html"), System.Text.Encoding.UTF8);

4. Utilizar el método Transform del objeto XslTransform para transformar los datos. El método Transform tiene múltiples sobrecargas y puede gestionar distintos tipos de entradas y salidas. La variable XmlDoc del tipo XmlDataDocument es uno de los parámetros que se pasan al método Transform: xslTran.Transform(xmlDoc, Nothing, writer) xslTran.Transform(xmlDoc, null, writer);

5. Cerrar XmlTextWriter: writer.Close() writer.Close();

El proceso de transformación está especificado por la Recomendación XSLT versión 1.0 del W3C. Para más información, ver www.w3c.org/TR/xslt.

Crear el objeto XslTransform e invocar el método Transform

Visual Basic .NET

C#

Visual Basic .NET

C#

Visual Basic .NET

C#

Visual Basic .NET

C#

Visual Basic .NET

C#

Nota

Page 438: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 33

Demostración: transformar datos con XSLT

Crear un DataSet con dos DataTables

Crear XslTransform

Transformar el documento DataSet enHTML

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

En esta demostración, veremos cómo transformar datos utilizando el objeto XslTranform.

Los archivos de esta demostración se encuentran en los proyectos Demo10CS y Demo10VB que se pueden encontrar dentro del fichero demos10.zip

Ejecutar la demostración

1. Abrir la página TransformPubTitles.aspx. Los dos controles DataGrid muestran las dos DataTables en el DataSet.

2. Visualizar la página de código subyacente. 3. Mostrar el código del procedimiento de evento cmdTransform_Click y

explicar el código: 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 método Transform del objeto XslTransform para aplicar

la hoja de estilo al XmlDocument.

El método Transform únicamente puede enviar la salida a un XmlReader, un TextReader o a objetos XmlWriter.

Introducción

Nota

Page 439: Microsoft ASP.net - Curso Completo - Espa Ol

34 Leer y escribir datos XML

4. Visualizar la página en un navegador. 5. Hacer clic en Transform Data, y clic en el hiperenlace View Transform

Output. Ésta es la página HTML creada a partir de los datos del DataSet.

6. Abrir la página Transform.aspx en Visual Studio .NET. 7. Visualizar la página de código subyacente. 8. Mostrar el código en el procedimiento de evento cmdTransform_Click y

explicar el código: 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 método Transform del objeto XslTransform para aplicar

la hoja de estilos al XmlDocument. 9. Abrir la hoja de estilos PubTitles.xsl para mostrar cómo funciona.

Page 440: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 35

Lección: uso del control de Servidor Web XML

¿Qué es el control de Servidor Web XML?

Cargar y guardar datos XML

Demostración: uso del control de Servidor Web XML

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

La información en un archivo XML es plana, únicamente contiene los datos y no indica cómo formatearlos o mostrarlos. Para mostrar datos XML en la página de un formulario Web Form, debemos proporcionar la información de formato y presentación.

En esta lección, aprenderemos cómo mostrar, cargar y guardar datos XML.

En esta lección, aprenderemos a:

Describir el control de Servidor Web XML. Cargar y guardar datos XML.

Introducción

Objetivos de la lección

Page 441: Microsoft ASP.net - Curso Completo - Espa Ol

36 Leer y escribir datos XML

¿Qué es el control de Servidor Web XML?

<asp:Xml id="Xml1" Document="XmlDocument object to display"DocumentContent="String of XML" DocumentSource="Path to XML Document" Transform="XslTransform object" TransformSource="Path to XSL Document" runat="server"/>

<asp:Xml id="Xml1" Document="XmlDocument object to display"DocumentContent="String of XML" DocumentSource="Path to XML Document" Transform="XslTransform object" TransformSource="Path to XSL Document" runat="server"/>

Escribe a un documento XML

Escribe el resultado de una transformación XSLT a una página Web

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

Para presentar datos XML en una página de un formulario Web Form, debemos especificar las etiquetas, como <TABLE>, <P>, o cualquier otra etiqueta que deseemos utilizar para mostrar los datos. También debemos proporcionar instrucciones sobre cómo los datos del archivo XML se muestran en estas etiquetas; por ejemplo, si cada elemento del archivo XML debería mostrarse como una fila o una columna de tabla, etc.

Una forma de proporcionar todas estas instrucciones es utilizar el lenguaje de transformación 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 información XML formateada según el archivo de transformación.

Podemos utilizar el control de Servidor Web XML para escribir un documento XML, o para escribir el resultado de una transformación XSLT, en una página Web. El resultado XML aparece en la ubicación del control de la página Web.

La información del XML y de XSLT puede encontrarse en documentos externos, o podemos incluir el XML en línea. 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 línea, debemos escribirlo entre las etiquetas de apertura y cierre del control.

El siguiente código de ejemplo muestra cómo utilizar el control de Servidor Web XML para mostrar el contenido de un documento XML o el resultado de una transformación XSLT:

Introducción

Lenguaje de transformación XSLT

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

Page 442: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 37

<asp:Xml id="Xml1" Document="XmlDocument object to display" DocumentContent="String of XML" DocumentSource="Path to XML Document" Transform="XslTransform object" TransformSource="Path to XSL Transform Document" runat="server">

Page 443: Microsoft ASP.net - Curso Completo - Espa Ol

38 Leer y escribir datos XML

Cargar y guardar datos XML

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

Control de Servidor Web XML (en el formulario Web Form)

Cargar datos dinámicamente (en la página de código subyacente)

Guardar datos (en la página de código subyacente)

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

<asp:Xml id="xmlCtl" runat="server" /><asp:Xml id="xmlCtl" runat="server" />

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

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

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

Antes de cargar y guardar datos XML en una aplicación Web, debemos agregar el control de servidor Web XML a la página del formulario Web Form, en la ubicación donde deseamos que aparezca el resultado.

Existen dos formas de agregar un control de servidor Web XML a la página de un formulario Web Form:

1. Arrastrar un control XML desde la ficha Web Forms del Cuadro de herramientas a la vista de Diseño, como muestra la siguiente ilustración.

Introducción

Agregar un control de Servidor Web XML a la página de un formulario Web Form

Page 444: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 39

2. Para agregar un control de servidor Web XML programáticamente, en la

vista HTML, agregar la siguiente línea de código: <asp:Xml id="xmlCtl" runat="server" />

Existen varias formas de cargar datos XML en una aplicación 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 método Load del evento Page_Load, y asignar el documento a la propiedad Document del control XML.

Incluir el contenido XML en línea, entre las etiquetas de apertura y cierre del control de Servidor Web XML.

Para proporcionar una ruta a un documento XML externo, seguir estos pasos:

1. Establecer la propiedad DocumentSource del control de Servidor Web XML a la ruta del documento fuente XML.

2. El documento XML se escribirá directamente al flujo de salida a menos que también especifiquemos la propiedad TransformSource. TransformSource debe ser un documento válido de transformación 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 cómo hacer referencia a documentos origen utilizando una ruta relativa: <body> <h3>XML Example</h3> <form runat="server"> <asp:Xml id="xml1" DocumentSource="MySource.xml" TransformSource="MyStyle.xsl" runat="server" /> </form> </body>

Para cargar un documento XML como un objeto y pasarlo al control, seguir estos pasos:

1. En el menú Ver, hacer clic en Código. En el Editor de código, buscar el procedimiento de evento Page_Load.

2. Agregar código para cargar el documento fuente XML, y asignar la fuente a la propiedad Document del control. Por ejemplo: Private Sub Page_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Dim xmlDoc As System.Xml.XmlDocument = _ New System.Xml.XmlDocument() xmlDoc.Load(Server.MapPath("MySource.xml")) Dim xslTran As System.Xml.Xsl.XslTransform = _ New System.Xml.Xsl.XslTransform() xslTran.Load(Server.MapPath("MyStyle.xsl")) Xml1.Document = xmlDoc Xml1.Transform = xslTran End Sub

Cargar datos XML en el control de Servidor Web XML

Proporcionar una ruta a un documento XML externo

Cargar un documento XML como un objeto y pasarlo al control

Visual Basic .NET

Page 445: Microsoft ASP.net - Curso Completo - Espa Ol

40 Leer y escribir datos XML

private void Page_Load(object sender, System.EventArgs e) { System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); xmlDoc.Load(Server.MapPath("MySource.xml")); System.Xml.Xsl.XslTransform xslTran = new System.Xml.Xsl.XslTransform(); xslTran.Load(Server.MapPath("MyStyle.xsl")); Xml1.Document = xmlDoc; Xml1.Transform = xslTran; }

Para incluir el contenido XML en línea, seguir estos pasos:

1. En la visa HTML, buscar las etiquetas <asp:xml> y </asp:xml> . 2. Agregar nuestro código XML entre ambas etiquetas. Por ejemplo:

<asp:xml TransformSource="MyStyle.xsl" runat="server"> <clients> <name>Frank Miller</name> <name>Judy Lew</name> </clients> </asp:xml>

Podemos guardar los datos XML utilizando el método Save, como muestra el siguiente código de ejemplo:

XmlCtl.Document.Save(Server.MapPath("xmlResult.xml")) XmlCtl.Document.Save(Server.MapPath("xmlResult.xml"));

C#

Incluir el contenido XML en línea

Guardar datos XML

Visual Basic .NET

C#

Page 446: Microsoft ASP.net - Curso Completo - Espa Ol

Leer y escribir datos XML 41

Demostración: uso del control de servidor Web XML

Agregar el control de Servidor Web XML a un formulario Web Form

Establecer la propiedad DocumentSourcepara leer un archivo XML

Ver el resultado

Establecer la propiedad TransformSourcepara leer un archivo XSLT

Ver el resultado

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

En esta demostración, estudiaremos cómo utilizar el control de Servidor Web XML.

Los archivos de esta demostración se encuentran en los proyectos Demo10CS y Demo10VB que se pueden encontrar dentro del fichero demos10.zip

El código completo para esta demostración se encuentra en el archivo UseXmlControl.aspx.

Ejecutar la demostración

1. Abrir el archivo PubTitlesData.xml. Este archivo contiene los datos que se mostrarán de la página 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 según 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 página de nuevo. Ésta es la vista de los datos según lo establecido por la hoja de estilos PubTitles.xsl.

Introducción

Page 447: Microsoft ASP.net - Curso Completo - Espa Ol

Práctica A: Leer datos XML

MedicalMedical.aspxMedicalMedical.aspx

BenefitsHome PageDefault.aspx

BenefitsHome PageDefault.aspx

Life InsuranceLife.aspxLife InsuranceLife.aspx

RetirementRetirement.aspxRetirementRetirement.aspx

DentalDental.aspxDentalDental.aspx

Dentists

DoctorsDoctors.aspx DoctorsDoctors.aspx

Doctors

Logon PageLogin.aspxLogon PageLogin.aspx

RegistrationRegister.aspxRegistrationRegister.aspx

CohoWinery

ProspectusProspectus.aspxProspectusProspectus.aspx

XML Web ServicedentalService1.asmx

XML Web ServicedentalService1.asmx

Page HeaderHeader.ascxPage HeaderHeader.ascx

ASPState

tempdb

Lab Web Application

User Controlnamedate.ascxUser Controlnamedate.ascx

Menu ComponentClass1.vb or Class1.cs

Menu ComponentClass1.vb or Class1.cs

XML Files

Web.config

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

En este laboratorio, aprenderemos a:

Leer un archivo Extensible Markup Language (XML) y almacenarlo en un DataSet.

Aplicar una transformación a un archivo XML.

Para trabajar en este laboratorio, es necesario tener:

Conocimientos sobre cómo utilizar un control DataGrid. Conocimientos sobre cómo crear procedimientos de evento para controles

de servidor Web.

Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios de este curso, crearemos un sitio Web que permita a los empleados seleccionar y configurar los beneficios que elijan.

Uno de los beneficios que ofrece Coho Winery es la jubilación. Cuando solicitan este beneficio, los empleados pueden ver los prospectos de varios fondos comunes de inversión que ofrece Coho Winery.

Objetivos

Requisitos previos

Escenario

Tiempo estimado para completar el laboratorio: 30 minutos

Page 448: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 0 Configuración del laboratorio

Para realizar este laboratorio, es necesario haber creado el proyecto de la aplicación 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 solución LabApplication

Realizar este procedimiento únicamente si no se ha creado un archivo de solución LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solución en blanco denominada LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Solución en

blanco. b. En el cuadro de diálogo Nuevo proyecto, escribir LabApplication en el

cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

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

1. Crear un nuevo proyecto de aplicación Web ASP.NET, denominado BenefitsVB o BenefitsCS, en la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto. b. En el cuadro de diálogo 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 Aplicación Web ASP.NET,

establecer la ubicación 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 Solución, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solución, es importante el uso de mayúsculas 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 mayúsculas el nombre del proyecto Benefits.

Importante

Importante

Precaución

Page 449: Microsoft ASP.net - Curso Completo - Espa Ol

Actualizar el proyecto Benefits

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

3. Buscar los archivos de proyecto: Ir a la carpeta VB\Starter\BenefitsVB para los archivos de Visual Basic .NET. Ir a la carpeta CS\Starter\BenefitsCS para los archivos de Visual C#. Estas carpetas pueden encontrarse dentro del fichero labs10.zip

4. En el cuadro Archivos de tipo del cuadro de diálogo Agregar elemento existente – Benefits, hacer clic en Todos los archivos (*.*).

5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir. 6. Hacer clic en Sí a la pregunta de si sobrescribir o recargar los archivos.

Crear la biblioteca de clases BenefitsList

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

1. Crear un nuevo proyecto de biblioteca de clases: Crear un nuevo proyecto de biblioteca de clases Visual Basic .NET con el nombre BenefitsListVB, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de diálogo 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 solución, y clic en Aceptar. Crear un nuevo proyecto de biblioteca de clases Visual C# .NET con el nombre BenefitsListCS, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de diálogo 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 solución, y clic en Aceptar.

Verificar que se han escrito correctamente las mayúsculas del proyecto BenefitsList.

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

Importante

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Precaución

Page 450: Microsoft ASP.net - Curso Completo - Espa Ol

Actualizar el proyecto BenefitsList

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

3. Ir al proyecto BenefitsList. Ir a la carpeta VB\Starter\BenefitsListVB. Ir a la carpeta CS\Starter\BenefitsListCS. Estas carpetas pueden encontrarse dentro del fichero labs10.zip

4. En el cuadro Archivos de tipo del cuadro de diálogo 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 solución LabApplication, completar los siguientes pasos para agregar una referencia al componente BenefitsList que acabamos de crear: a. Hacer clic con el botón derecho en el proyecto BenefitsVB o

BenefitsCS en el Explorador de soluciones y hacer clic en Agregar referencia.

b. En el cuadro de diálogo Agregar referencia, en la pestaña Proyectos, hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.

c. En la lista Componentes seleccionados, seleccionar el componente BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar. El componente se agrega a la carpeta Referencias en el Explorador de soluciones.

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Page 451: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 1 Leer una lista de fondos comunes de inversión de un archivo XML

En este ejercicio, leeremos una lista de los fondos comunes de inversión del archivo mutual_funds.xml y los almacenaremos en un DataSet. A continuación, mostraremos el DataSet en un control DataGrid.

Leer una lista de fondos comunes de inversión

1. Abrir el proyecto Benefits en la solución LabApplication Visual Studio .NET.

2. Agregar archivos al proyecto Benefits: a. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsVB o BenefitsCS, seleccionar Agregar, y escoger Agregar elemento existente.

b. Ir a la carpeta de beneficios: VB\Starter\BenefitsVB. CS\Starter\BenefitsCS. Estas carpetas pueden encontrarse dentro del fichero labs10.zip

c. En el cuadro de lista desplegable Archivos de tipo, hacer clic en Todos los archivos (*.*).

d. Seleccionar los siguientes archivos y hacer clic en Abrir:

• retirement.aspx

• prospectus.aspx

• mutual_funds.xml

• lgcap.xml

• growth.xml

• midcap.xml

• smcap.xml

• prospectus_style.xsl 3. Abrir el archivo mutual_funds.xml y examinar su contenido. ¿Cuáles 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 página. Este DataGrid tiene dos columnas personalizadas, una columna Name para mostrar el nombre de un fondo común de inversión, y una columna Link to prospectus, que contiene un hiperenlace al formulario Web Form prospectus.aspx. En los siguientes pasos, llenaremos este DataGrid con datos de un archivo XML.

Visual Basic .NET C#

Page 452: Microsoft ASP.net - Curso Completo - Espa Ol

5. Abrir la página de código subyacente retirement.aspx.vb o retirement.aspx.cs y localizar el siguiente comentario en el procedimiento de evento Page_Load: 'TODO Lab 12: Create a DataSet, fill it with the 'XML file, and display it //TODO Lab 12: Create a DataSet, fill it with the //XML file, and display it

6. Llenar el DataSet con los datos del archivo XML y mostrar el DataSet en el control DataGrid dgRetirement: a. Crear un DataSet denominado dsRetirement. b. Invocar el método ReadXml del DataSet para leer el archivo

mutual_funds.xml. c. Establecer la fuente de datos del DataGrid dgRetirement en

dsRetirement. d. Invocar el método DataBind del DataGrid. El código debería ser similar al siguiente: Dim dsRetirement As New DataSet() dsRetirement.ReadXml( _ Server.MapPath("mutual_funds.xml")) dgRetirement.DataSource = dsRetirement dgRetirement.DataBind() DataSet dsRetirement = new DataSet(); dsRetirement.ReadXml( Server.MapPath("mutual_funds.xml")); dgRetirement.DataSource = dsRetirement; dgRetirement.DataBind(); ¿Para qué se utiliza el método Server.MapPath? ____________________________________________________________

____________________________________________________________

7. Guardar los cambios. 8. Generar y examinar la página retirement.aspx.

Deberíamos ver todos los nombres de los fondos comunes de inversión, además de enlaces a los prospectos de fondos comunes de inversión del DataGrid. Aunque los enlaces a los prospectos no funcionan en este momento, abrirán una página denominada prospectus.aspx y le pasarán un identificador id de prospecto en el parámetro ProspID. Generaremos la página prospectus.aspx para mostrar el prospecto solicitado en el Ejercicio 2.

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 453: Microsoft ASP.net - Curso Completo - Espa Ol

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 común de inversión.

Leer y mostrar un prospecto

1. Abrir el archivo lgcap.xml y examinar su contenido. ¿Cuáles 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. ¿Cuál será el título de la página del prospecto? ¿Qué color se utilizará para mostrar el texto General Description? _____________________________________________________________

_____________________________________________________________

3. Abrir el formulario Web Form prospectus.aspx. Esta página actualmente contiene el control de usuario header.ascx y un único hiperenlace.

4. Arrastrar un control Xml del Cuadro de herramientas en la página prospectus.aspx, para que la página sea similar a la siguiente ilustración.

Page 454: Microsoft ASP.net - Curso Completo - Espa Ol

5. Establecer las propiedades del control Xml en la ventana Propiedades, como muestra la siguiente tabla. Propiedad Valor ID xmlProspectus

DocumentSource lgcap.xml

6. Generar y examinar la página prospectus.aspx. Deberíamos ver el contenido del prospecto lgcap.xml como una cadena de texto continua y sin formato.

Aplicar una transformación 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 página prospectus.aspx.

Deberíamos ver el contenido del prospecto lgcap.xml como Hypertext Markup Language (HTML) con formato.

Modificar la propiedad DocumentSource del control Xml dinámicamente

Ahora utilizaremos un parámetro de cadena denominado ProspID para seleccionar qué prospectos se mostrarán:

1. Abrir el formulario Web Form prospectus.aspx. 2. En la ventana Propiedades, eliminar la propiedad DocumentSource del

control xmlProspectus. 3. Abrir la página de código subyacente de prospectus.aspx.

Abrir la página prospectus.aspx.vb y localizar el siguiente comentario en el procedimiento de evento Page_Load: 'TODO Lab 12: Dynamically select the prospectus Abrir la página 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 parámetro ProspID de la cadena de consulta solicitada y almacenar el parámetro en una variable denominada strProspID. El código debería ser similar al siguiente: Dim strProspID As String = Request.Params("ProspID") string strProspID = Request.Params["ProspID"];

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 455: Microsoft ASP.net - Curso Completo - Espa Ol

5. En el código, establecer la propiedad DocumentSource del control xmlProspectus con el valor de la variable strProspID, concatenado con una extensión .xml. El código debería ser similar al siguiente: xmlProspectus.DocumentSource = strProspID & ".xml" xmlProspectus.DocumentSource = strProspID + ".xml";

6. Guardar los cambios de la página prospectus.aspx. 7. Generar y examinar la página retirement.aspx. 8. Hacer clic en el enlace Prospectus junto a Large cap stocks.

Deberíamos ver el prospecto del fondo común de inversión Large cap stocks.

9. Hacer clic en el enlace Back to retirement page. 10. Probar los enlaces Prospectus para Growth stocks, Mid-cap stocks y

Small-cap stocks.

Visual Basic .NET

C#

Page 456: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 3 (si se dispone de tiempo) Datos anidados

En este ejercicio, experimentaremos con la generación de datos XML anidados de una base de datos Microsoft SQL Server™.

Generar datos secuenciales

1. Agregar el formulario Web Form nestedData.aspx de la carpeta Benefits. Este archivo puede encontrarse en la carpeta del proyecto Benefits: VB\Starter\BenefitsVB. CS\Starter\BenefitsCS. Estas carpetas pueden encontrarse dentro del fichero labs10.zip

2. Abrir el formulario Web Form nestedData.aspx. 3. Abrir la página de código subyacente nestedData.aspx.vb o

nestedData.aspx.cs y examinar el código. El código genera un DataSet denominado dsDoctorsSpecialities, que contiene tres objetos DataTable: doctors, drspecialties y specialties. El código crea relaciones entre las tres tablas. ¿Qué columna vincula los objetos DataTable doctors y drspecialties en la DataRelation relation1? ¿Cuál es la DataTable primaria de esta relación? ____________________________________________________________

____________________________________________________________

4. Generar y examinar la página nestedData.aspx y analizar el XML creado. ¿Son datos anidados? ____________________________________________________________

____________________________________________________________

5. Localizar el siguiente comentario en el procedimiento de evento Page_Load: 'TODO Lab 12: Create a nested relationship between the doctors and drspecialties DataTable objects //TODO Lab 12: Create a nested relationship between the doctors and drspecialties DataTable objects

Visual Basic .NET C#

Visual Basic .NET

C#

Page 457: Microsoft ASP.net - Curso Completo - Espa Ol

6. Quitar el comentario de la siguiente línea de código para crear una relación anidada entre los objetos DataTable doctors y drspecialties: 'dr1.Nested = True //dr1.Nested = true;

7. Generar, examinar nestedData.aspx y analizar el XML creado.

Es posible que sea necesario actualizar el explorador después de que se haya cargado la página para ver los cambios de los datos XML.

¿Qué ha cambiado respecto a la respuesta XML anterior? _____________________________________________________________

_____________________________________________________________

8. Eliminar la línea de código de la que quitamos el comentario en el Paso 6. 9. Localizar el siguiente comentario en el procedimiento de evento

Page_Load: 'TODO Lab 12: Create a nested relationship between the specialties and drspecialties DataTable objects //TODO Lab 12: Create a nested relationship between the specialties and drspecialties DataTable objects

10. Quitar el comentario de la siguiente línea de código para crear una relación anidada entre los objetos DataTable specialties y drspecialties: 'dr2.Nested = True //dr2.Nested = true;

11. Generar y examinar la página nestedData.aspx y analizar el XML creado.

Es posible que sea necesario actualizar el navegador después de que se haya cargado la página para ver los cambios de los datos XML.

¿Qué ha cambiado respecto a la respuesta XML anterior? _____________________________________________________________

_____________________________________________________________

No podemos utilizar las dos relaciones anidadas al mismo tiempo debido a que el mismo objeto DataTable (drspecialties) no puede ser secundario en dos relaciones anidadas.

Visual Basic .NET

C#

Sugerencia

Visual Basic .NET

C#

Visual Basic .NET

C#

Sugerencia

Nota

Page 458: Microsoft ASP.net - Curso Completo - Espa Ol

Índice

Descripción 1

Lección: descripción del uso de servicios Web XML 2

Lección: invocar un servicio Web XML utilizando HTTP 11

Lección: utilizar un proxy para invocar un servicio Web XML 16

Lección: crear un servicio Web XML 28

Crear y consumir servicios Web XML

Page 459: Microsoft ASP.net - Curso Completo - Espa Ol
Page 460: Microsoft ASP.net - Curso Completo - Espa Ol

Crear y consumir servicios Web XML 1

Descripción

Introducción 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

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

Internet ha contribuido a facilitar a las empresas una mejor comunicación interna y entre empresas proporcionando un rápido acceso a la información. Sin embargo, la navegación por páginas basadas en datos no responde adecuadamente a las necesidades de negocio de muchas empresas. Satisfacería mejor sus necesidades disponer de sitios Web programables que enlazaran directamente organizaciones, aplicaciones y servicios. Este enlace directo entre aplicaciones es el papel que desempeñan 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 módulo, estudiaremos cómo invocar un servicio Web XML directamente con un navegador y mediante un proxy desde un formulario Web Form. También estudiaremos cómo crear y publicar servicios Web XML utilizando Microsoft® Visual Studio® .NET.

En este módulo, aprenderemos a:

Describir la utilidad y el proceso existente tras la invocación 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 método de un Servicio Web XML, e invocar ese método Web desde un formulario Web Form.

Utilizar las plantillas de Visual Studio .NET para crear un servicio Web XML.

Introducción

Objetivos

Page 461: Microsoft ASP.net - Curso Completo - Espa Ol

2 Crear y consumir servicios Web XML

Lección: descripción 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 ejecución del servicio Web XML

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

Uno de los retos con los que podemos enfrentarnos en la creación de sitios Web con rica funcionalidad es la integración de aplicaciones. A menudo, necesitamos combinar varias aplicaciones para formar una solución única y fácil de utilizar. El problema de intentar conseguir una solución de este tipo es que las aplicaciones que necesitamos combinar pueden encontrarse en distintas plataformas, cada una ejecutando un sistema operativo distinto. Además, es posible que las aplicaciones se hayan creado en diferentes lenguajes de programación.

Los servicios Web XML proporcionan un modelo simple, flexible y basado en estándares para conectar aplicaciones a través de Internet. Los servicios Web XML nos permiten aprovechar la infraestructura existente en Internet, y enlazar aplicaciones, con independencia de las plataformas, lenguajes de programación o modelos de objetos que se hayan utilizado para implementarlas.

En esta lección, estudiaremos la utilidad y el proceso que existe tras invocar un servicio Web XML desde un formulario Web Form.

En esta lección, 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 cómo encontrar servicios Web XML existentes. Identificar el proceso de integración de servicios Web XML en sitios Web.

Introducción

Objetivos de la lección

Page 462: Microsoft ASP.net - Curso Completo - Espa Ol

Crear y consumir servicios Web XML 3

¿Qué es un servicio Web XML?

Lógica programable accesible por protocolos Web estándares

Permite a las aplicaciones enviar y recibir información a través de Internet

Independiente de lenguaje, protocolo y plataforma

Arquitectura sin estado

Puede ser asíncrono

Basado en un estándar W3C desarrollado

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

Los servicios Web XML se parecen a los componentes en la medida en que representan una funcionalidad de caja negra que los desarrolladores pueden utilizar para agregar características a un formulario Web Form, a aplicaciones Microsoft Windows® o incluso a otro servicio Web XML, sin preocuparse de cómo esté implementado el servicio de soporte.

Los servicios Web XML están diseñados para interactuar directamente con otras aplicaciones a través de Internet. En consecuencia, los servicios Web XML no tienen interfaz de usuario (IU), sino que proporcionan interfaces definidos por estándares denominados contratos que describen los servicios que proporcionan.

Un servicio Web XML puede ser utilizado internamente por una sola aplicación o externamente por muchas aplicaciones accediendo a él a través de Internet.

La conexión 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 tecnologías de componentes actuales, los servicios Web XML no utilizan protocolos específicos 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 estándares, como HTTP, XML o SOAP (Simple Object Access Protocol). Los servidores que soporten estos estándares Web pueden acceder u hospedar servicios Web XML.

Es posible acceder a los servicios Web XML mediante una interfaz estándar, lo cual permite que sistemas distintos puedan trabajar juntos. Los servidores que pueden soportar formularios Web Form también pueden soportar servicios Web XML.

Introducción

Comunicación aplicación a aplicación a través de Internet

Independencia del lenguaje

Independencia del protocolo

Independencia de la plataforma

Page 463: Microsoft ASP.net - Curso Completo - Espa Ol

4 Crear y consumir servicios Web XML

El modelo de servicios Web XML asume una arquitectura de servicios sin estado. Las arquitecturas sin estado generalmente son más 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 gestión 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 asíncronos, ya que el objeto que realiza la petición en la aplicación cliente y el objeto de respuesta del servicio Web XML son sobres SOAP únicos que no requieren una conexión compartida. Las interacciones entre la aplicación cliente y el servicio Web XML pueden ser posteriormente divididas en una petición y respuesta inicial para invocar el método del servicio Web XML, y una segunda petición para recoger los resultados. Esta comunicación asíncrona permite tanto a la aplicación que realiza la petición como al servicio Web XML la oportunidad de seguir procesándose mientras la interacción está en funcionamiento.

Los servicios Web XML están basados en un estándar del World Wide Web Consortium (W3C) que sigue evolucionando. De tal modo, las características genéricas de los servicios Web XML están fijadas; sin embargo, pueden agregarse nuevas características en el futuro.

Para más información sobre el estándar del servicio Web XML del W3C, ver el sitio Web oficial de W3C en http://www.w3c.org.

Arquitectura sin estado

Asíncrono

Basado en W3C

Nota

Page 464: Microsoft ASP.net - Curso Completo - Espa Ol

Crear y consumir servicios Web XML 5

¿Por qué utilizar los servicios Web XML?

InternetInternet

Servicio Web XML meteorológico

Servicio Web XML meteorológico

Servicio Web XMLtipo de cambio

Servicio Web XMLtipo de cambio

Seleccionar destino:

La previsiónmeteorológica es:

El tipo de cambio es:

El billete de avión sólo cuesta:

LluviaLluvia

Redmond

$1.56

$1,999.98

Base de datos deprecios de billetesBase de datos deprecios de billetes

Servicio Web XMLprecio del billete

Servicio Web XMLprecio del billete

Sitio de viajesNorthwind TradersSitio de viajesNorthwind Traders

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

Los servicios Web XML permiten compartir la lógica y las capacidades de programación 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 métodos a través de la Web.

Los servicios Web XML se basan también en estándares del W3C. Los servicios Web XML permiten además el uso de protocolos Web estándares y herramientas de soporte que están disponibles en Visual Studio .NET. Con Visual Studio .NET, es muy fácil desarrollar y consumir servicios Web XML.

Podemos imaginar un número infinito de servicios Web XML que podemos utilizar para agregar características a nuestras aplicaciones Web. La siguiente tabla muestra una lista de algunos de los servicios Web XML que pueden utilizarse.

Servicio Web XML Características Servicios de autenticación

Proporciona autenticación de usuarios.

Por ejemplo, Microsoft Passport.

Informes meteorológicos

Proporciona informes meteorológicos actualizados para ubicaciones seleccionadas.

Por ejemplo, un sitio Web podría proporcionar previsiones meteorológicas locales para una determinada ciudad o área consumiendo un servicio Web XML sobre información meteorológica.

Tipos de cambio Proporciona el tipo de cambio actualizado para todas las monedas.

Por ejemplo, un sitio Web de viajes podría proporcionar tipos de cambio para posibles destinos de vacaciones basándose en perfiles de usuario, consumiendo un servicio Web XML sobre tipos de cambio.

Introducción

Agregar servicios Web XML a aplicaciones Web

Page 465: Microsoft ASP.net - Curso Completo - Espa Ol

6 Crear y consumir servicios Web XML

(continuación) Servicio Web XML Características Precios de billetes de avión

Proporciona precios de billetes actualizados de una o varias líneas aéreas.

Por ejemplo, un sitio Web de viajes podría ofrecer automáticamente precios con descuento de las principales líneas aéreas consumiendo un servicio Web XML sobre los precios de billetes de avión.

Valores de cotización Proporciona valores de cotización actualizados.

Por ejemplo, una empresa podría publicar su propio valor de cotización en su sitio Web mediante el consumo de un servicio Web XML sobre valores bursátiles.

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 podrían ofrecer servicios de reservas de hotel.

Resumen de noticias Proporciona resúmenes de noticias actualizados.

Por ejemplo, una empresa podría 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 gestión 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 daría a los clientes una visión completa del estado de sus pedidos.

La ilustración anterior muestra un sitio Web hipotético 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 parámetro 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 código, el sitio Web es más un interfaz gráfico que combina varios servicios Web XML de compañías no relacionadas.

Este sitio Web de una agencia de viajes, al utilizar servicios Web XML, proporciona múltiples 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 están limitadas por los conocimientos de programación 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 meteorológicos o los tipos de cambio.

Ejemplo de servicio Web XML

Page 466: Microsoft ASP.net - Curso Completo - Espa Ol

Crear y consumir servicios Web XML 7

• Los servicios Web XML utilizan Internet; por tanto, la agencia de viajes

no necesita crear ni mantener conexiones dedicadas para ofrecer el servicio.

• Los servicios Web XML son independientes del lenguaje, protocolo y plataforma; por tanto, los desarrolladores de la agencia de viajes no necesitan aprender cómo 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 aplicación, 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 público 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.

Page 467: Microsoft ASP.net - Curso Completo - Espa Ol

8 Crear y consumir servicios Web XML

Buscar un servicio Web XML

Publicar la URL del servicio Web XML y su descripción

.disco

.wsdl

Servicio WebProxyProxy

WebForm

UDDI

111222

333

444

555 666

111

222

333

444

555

Descubrir el servicio Web XML

Localizar la URL del servicio Web XML

Leer la descripción .wsdl

Vincular el servicio Web XML al proxy

Invocar el servicio Web XML desde el formulario Web FormMediante el proxy

666

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

Podemos encontrar servicios Web XML existentes para agregar a nuestro sitio Web utilizando uno o más servicios de descubrimiento. Estos servicios de descubrimiento están evolucionando y cambiando rápidamente a medida que el desarrollo y uso de los servicios Web XML va ganando aceptación 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 descripción de servicios Web (Web Services Description Language, WSDL).

4. Generar un objeto proxy a partir del documento WSDL. Una clase proxy es un código que tiene exactamente el mismo aspecto que la clase que representa; sin embargo, la clase proxy no contiene ninguna lógica de aplicación. En lugar de ello, la clase proxy contiene la lógica 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.

Introducción

Buscar un servicio Web XML

Page 468: Microsoft ASP.net - Curso Completo - Espa Ol

Crear y consumir servicios Web XML 9

La especificación UDDI define un modo de publicar y descubrir información sobre servicios Web XML y las empresas que los suministran.

Las empresas registran individualmente la información sobre los servicios Web XML que exponen para que otras empresas puedan a continuación utilizarlos. Una vez que los datos han sido registrados, están disponibles libremente para cualquier persona que necesite descubrir cuales son los servicios Web XML que expone un determinado negocio.

Para más información sobre UDDI, conectarse al sitio Web UDDI en http://www.uddi.org o al sitio Web de proyectos UDDI de Microsoft en http://uddi.microsoft.com.

Los archivos de descubrimiento (DISCO) se utilizan para agrupar servicios comunes en un servidor Web. Los archivos de descubrimiento, .disco y .vsdisco, son archivos basados en XML que contienen enlaces en forma de URLs a recursos que proporcionan información de descubrimiento para un servicio Web XML. Estos archivos permiten el descubrimiento programático de los servicios Web XML. Los siguientes ejemplos muestran la diferencia entre los archivos estáticos y dinámicos de descubrimiento:

Archivos .disco Un archivo de descubrimiento estático (.disco) es un documento XML que contiene enlaces a otros recursos que describen los servicios Web XML. Los archivos .disco se generan automáticamente para un servicio Web XML cuando se accede al servicio utilizando una URL con ?DISCO en la cadena de consulta. El siguiente código 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 dinámicos (.vsdisco) son documentos de descubrimiento dinámico que Visual Studio .NET genera automáticamente durante la fase de desarrollo de un servicio Web XML. Un archivo .vsdisco es un archivo basado en XML con un nodo raíz denominado <dynamicDiscovery>. Este nodo puede contener nodos <exclude>. Cada nodo <exclude> contiene una ruta que el proceso de descubrimiento dinámico no debería buscar.

Para mantener el control sobre los servicios Web XML que pueden descubrir los clientes, deberíamos utilizar únicamente el descubrimiento dinámico en los servidores Web de desarrollo.

UDDI

Nota

Archivos DISCO

Precaución

Page 469: Microsoft ASP.net - Curso Completo - Espa Ol

10 Crear y consumir servicios Web XML

El siguiente código muestra un ejemplo de un archivo .vsdisco:

<?xml version="1.0" encoding="utf-8" ?> <dynamicDiscovery xmlns="urn:schemas-dynamicdiscovery:disco.2000-03-17"> <exclude path="_vti_cnf" /> <exclude path="_vti_pvt" /> <exclude path="_vti_log" /> <exclude path="_vti_script" /> <exclude path="_vti_txt" /> <exclude path="Web References" /> </dynamicDiscovery>

Un archivo WSDL define la gramática XML que se utiliza para la comunicación 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 información sobre un servicio Web XML:

Dónde encontrar la URL. Los métodos y propiedades del servicio Web XML. Tipos de datos utilizados. Protocolos de comunicación.

Para más información sobre los archivos DISCO y WSDL, ver “Descubrimiento de servicios Web XML” en la documentación de Visual Studio .NET.

Archivos WSDL

Nota

Page 470: Microsoft ASP.net - Curso Completo - Espa Ol

Crear y consumir servicios Web XML 11

Lección: invocar un servicio Web XML mediante HTTP

Cómo invocar un servicio Web XML mediante HTTP

Práctica: invocar un servicio Web XML mediante HTTP

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

En esta lección, estudiaremos cómo 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 diseño para identificar y probar los servicios Web XML. El acceso directo permite visualizar los métodos, propiedades y el resultado de un servicio Web XML en un entorno amigable para el desarrollador.

En esta lección, aprenderemos a:

Invocar un servicio Web XML con un explorador utilizando acceso directo al protocolo HTTP-Get.

Identificar los métodos Web que están disponibles desde un servicio Web XML.

Invocar métodos Web desde un servicio Web XML utilizando acceso directo al protocolo HTTP-Get, y visualizar la respuesta.

Introducción

Objetivos de la lección

Page 471: Microsoft ASP.net - Curso Completo - Espa Ol

12 Crear y consumir servicios Web XML

Cómo invocar un servicio Web XML utilizando HTTP

1. Ir a la URL del servicio Web XML

2. Seleccionar un método delservicio Web XML

3. Invocar el método del servicio Web XML

4. Ver la respuesta XML

111

222

333

444

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

Cuando accedemos a un servicio Web XML directamente con un navegador, accedemos en primer lugar a la página de descripción HTML, DefaultWsdlHelpGenerator.aspx. Desde esta página, podemos seleccionar entre los métodos del servicio Web XML disponibles e invocar un método con parámetros. Recibiremos una respuesta en formato XML.

También podemos utilizar el protocolo HTTP-Post para acceder a un servicio Web XML. No accederemos a la página predeterminada, DefaultWsdlHelpGenerator.aspx; sin embargo, la respuesta final del servicio Web XML será idéntica a una petición HTTP-Get.

Tras haber encontrado un servicio Web XML en UDDI, utilizamos la URL .asmx para navegar a la página de descripción HTML. Esta página de descripción proporciona información sobre el propósito de un servicio Web XML, los métodos Web disponibles que contiene, los parámetros del método Web, y las respuestas. Además, podemos utilizar la página de descripción HTML para probar la funcionalidad del servicio Web XML.

La siguiente ilustración muestra la vista del navegador con un servicio Web XML Stocks que se utilizará en las demostraciones de este módulo.

Introducción

Navegar hasta la URL del servicio Web XML

Page 472: Microsoft ASP.net - Curso Completo - Espa Ol

Crear y consumir servicios Web XML 13

Cuando accedemos a la página de descripción HTML de un servicio Web XML, el navegador muestra los métodos disponibles del servicio Web XML. Podemos hacer clic en un método Web para visualizar los parámetros disponibles para ese método Web.

La siguiente ilustración muestra la vista del navegador resultante de la selección del método Web GetRating en el servicio Web XML Stocks.

También podemos hacer clic en el enlace Service Description de la parte superior de la página de descripción HTML para ver el contrato WSDL, que contiene una descripción XML del servicio Web XML y su contenido.

Para invocar un método Web, rellenamos el formulario y hacemos clic en Invoke. El formulario Web Form pasa el nombre del método, los parámetros requeridos y los valores de los parámetros a la URL del servicio Web XML.

Los servicios Web XML siempre devuelven los datos en formato XML. La siguiente ilustración muestra la vista del navegador con el resultado de invocar el servicio Web XML Stocks con el parámetro Contoso.

Seleccionar un método del servicio Web XML

Invocar el método Web

Ver la respuesta XML

Page 473: Microsoft ASP.net - Curso Completo - Espa Ol

14 Crear y consumir servicios Web XML

Práctica: invocar un servicio Web XML utilizando HTTP

Los estudiantes:

Introducirán la URL de un servicio Web XML en el equipo del instructor

Seleccionarán el método del servicio Web XML para invocar

Introducirán valores para los parámetros

Visualizarán el XML devuelto

Tiempo: 5 Minutos

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

En esta práctica, accederemos a un servicio Web XML en el equipo del instructor y probaremos los tres métodos Web disponibles.

Acceder a este servicio Web XML

1. Abrir http://EquipoInstructor/Mod13VB/WeatherService.asmx o http://EquipoInstructor/Mod13CS/WeatherService.asmx en un navegador.

2. Hacer clic en WeatherByCity. 3. En el campo City, escribir el nombre de una ciudad, como Seattle, de la que

deseemos conocer la predicción meteorológica de mañana. 4. Hacer clic en Invoke.

Introducir la respuesta XML en las siguientes líneas. _____________________________________________________________

_____________________________________________________________

5. Invocar de nuevo el método Web WeatherByCity, esta vez pasando otro nombre de ciudad, como London, como parámetro en el campo City. Observar la respuesta XML. Observar también que con nombres de ciudades distintos de Seattle, se recibe una previsión meteorológica aleatoria de sol, nublado, o lluvia. Cuando se introduce Seattle en el campo City, siempre se recibe la previsión meteorológica de sol.

Introducción

Invocar el método Web WeatherByCity

Page 474: Microsoft ASP.net - Curso Completo - Espa Ol

Crear y consumir servicios Web XML 15

6. Regresar a la página 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 debería ser un valor aleatorio entre 31 y 60 grados Fahrenheit.

10. Regresar a la página 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 método Web TravelAdviceByCity, esta vez el nombre

de otra ciudad, como London, como parámetro en el campo City. 15. Observar la respuesta XML.

Invocar el método Web TemperatureByCity

Invocar el método Web TravelAdviceByCity

Page 475: Microsoft ASP.net - Curso Completo - Espa Ol

16 Crear y consumir servicios Web XML

Lección: utilizar un proxy para invocar un servicio Web XML

Utilizar proxies para invocar servicios Web XML

Cómo utilizar un proxy para invocar un servicio Web XML

Práctica dirigida por el instructor: utilizar un proxypara invocar un servicio Web XML

Controlador de errores del servicio Web XML

Demostración: probar la disponibilidad de un servicio Web XML

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

Para invocar programáticamente un servicio Web XML desde un formulario Web Form, debemos crear un proxy para controlar la invocación. En esta lección, estudiaremos cómo crear un proxy de referencia Web para un método de un servicio Web XML, y cómo invocar el método Web desde un formulario Web Form.

En esta lección, 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.

Introducción

Objetivos de la lección

Page 476: Microsoft ASP.net - Curso Completo - Espa Ol

Crear y consumir servicios Web XML 17

Utilizar proxies para invocar servicios Web XML

Parecen idénticos que la clase original, pero no contienen la lógica de la aplicaciónUtilizan 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 asíncronas

InternetInternet Servicio Web XML Servicio

Web XML

ProxyProxy

WebForm

SOAP

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

Para invocar un servicio Web XML desde un formulario Web Form, debemos crear una referencia Web al servicio Web XML en nuestro proyecto de aplicación Web. La referencia Web crea el objeto proxy que se utiliza para comunicar con el servicio Web XML utilizando SOAP.

Una clase proxy es código que parece exactamente igual a la clase que representa, pero no contiene lógica de aplicación. En lugar de ello, la clase proxy contiene la lógica de combinación 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 aplicación Web.

Visual Studio .NET crea automáticamente 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 código proxy.

Los proxies y los servicios Web XML interactúan utilizando SOAP, que es un protocolo XML utilizado para intercambiar información estructurada y tipada.

Para tener una vista previa de los mensajes SOAP de un servicio Web XML, acceder al servicio Web XML URL directamente y examinar el código que muestra la página de descripción HTML.

El proceso de acceder a un servicio Web XML mediante un proxy es el siguiente:

1. El usuario envía una petición 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 petición SOAP para el método Web GetRating en un servicio Web XML Stocks y que pasa el argumento Contoso:

Introducción

¿Qué es un proxy?

Interactuar con SOAP

Nota

Page 477: Microsoft ASP.net - Curso Completo - Espa Ol

18 Crear y consumir servicios Web XML

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <GetRating xmlns="http://tempuri.org/"> <Ticker>Contoso</Ticker> </GetRating> </soap:Body> </soap:Envelope>

3. El servicio Web XML envía una respuesta al proxy utilizando SOAP. La siguiente es la respuesta SOAP del servicio Web XML GetRating: <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <GetRatingResponse xmlns="http://tempuri.org/"> <GetRatingResult>Buy</GetRatingResult> </GetRatingResponse> </soap:Body> </soap:Envelope>

4. El formulario Web Form ASP.NET consume la respuesta del servicio Web XML.

Visual Studio .NET crea automáticamente 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 métodos y parámetros Web disponibles en el servicio Web XML.

Creado desde el archivo .asmx.wsdl

Page 478: Microsoft ASP.net - Curso Completo - Espa Ol

Crear y consumir servicios Web XML 19

Cuando creamos un proxy utilizando Visual Studio .NET, hay disponibles varios métodos y propiedades que soportan un acceso programático al servicio Web XML. Los miembros disponibles para el proxy incluyen:

Miembros creados dentro del proxy La infraestructura para realizar llamadas asíncronas desde un formulario Web Form a un servicio Web XML está generada en la clase proxy que Visual Studio .NET crea automáticamente cuando agregamos una referencia Web. Por cada método Web del servicio Web XML, se crea automáticamente un método BeginNombreMétodoWeb y un método EndNombreMétodoWeb en el proxy:

• BeginNombreMétodoWeb El método Begin se utiliza para iniciar la comunicación asíncrona con el método NombreMétodoWeb de un servicio Web XML.

• EndNombreMétodoWeb El método End se utiliza para finalizar una comunicación asíncrona con el método NombreMétodoWeb de un servicio Web XML, y recuperar la respuesta completa del método del servicio Web XML.

Por ejemplo, crear una referencia Web al servicio Web XML Stocks crea un proxy con dos métodos adicionales: BeginGetRating y EndGetRating.

Para más información sobre la invocación asíncrona de un servicio Web XML, ver “Comunicación con servicios Web XML de modo asíncrona”, en la documentación de Visual Studio .NET.

Miembros heredados de SoapHttpClientProtocol Un proxy hereda varios métodos 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 síncrono.

• Url La propiedad Url obtiene o establece la URL base del servicio Web XML que el cliente está solicitando.

Para más información sobre los miembros SoapHttpClientProtocol, ver “SoapHttpClientProtocol (Miembros de)”, en la documentación de Visual Studio .NET.

Agregar miembros para gestionar las interacciones con el servicio Web XML y soportar llamadas asíncronas

Nota

Note

Page 479: Microsoft ASP.net - Curso Completo - Espa Ol

20 Crear y consumir servicios Web XML

Cómo utilizar un proxy para invocar un servicio Web XML

1. Crear una referencia Web para el servicio Web XML

2. Crear una instancia del servicio Web XML

3. Invocar los métodos Web del servicio Web XML

4. Generar la aplicación Web ASP.NET

Sub Button1_Click(s As Object, e As EventArgs)...Dim ProxyGetStocks As New _

GetStocks.localhost.Service1()lblResults.Text = _

ProxyGetStocks.GetRating("Contoso")End Sub

Sub Button1_Click(s As Object, e As EventArgs)...Dim ProxyGetStocks As New _

GetStocks.localhost.Service1()lblResults.Text = _

ProxyGetStocks.GetRating("Contoso")End Sub

111

222

333

444

Código de ejemplo en C# *****************************

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 aplicación 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 Dirección del cuadro de diálogo Agregar referencia Web,

escribir la URL del servicio Web XML al que se está accediendo, pulsar ENTER, y hacer clic en Agregar referencia. Visual Studio .NET crea una referencia Web al servicio Web XML, con el nombre del servidor que hospeda el servicio Web XML. Por ejemplo, si creamos una referencia Web a http://localhost/Stocks/Service1.asmx, de forma predeterminada Visual Studio .NET pondrá el nombre localhost a la referencia Web.

Visual Studio .NET está optimizado para los servicios Web XML creados por Visual Studio .NET. Es posible que ASP.NET no lea los archivos .wsdl creados con otros programas, si los archivos incluyen cadenas terminadas nulas.

Introducción

Nota

Page 480: Microsoft ASP.net - Curso Completo - Espa Ol

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 botón invoca el método GetRating del servicio Web XML Stocks, utilizar el siguiente código en el procedimiento de evento Click GetStocks.localhost.Service1: Dim ProxyGetStocks As New GetStocks.localhost.Service1() GetStocks.localhost.Service1 ProxyGetStocks = new GetStocks.localhost.Service1(); GetStocks es el nombre de la aplicación Web, localhost es el nombre de la referencia Web, y Service1 el nombre del servicio Web.

3. Invocar los métodos Web del servicio Web XML: Label1.Text = ProxyGetStocks.GetRating("Contoso") Label1.Text = ProxyGetStocks.GetRating("Contoso"); El código completo en un procedimiento de evento button_Click sería similar al siguiente: Sub Button1_Click(s As Object, e As EventArgs) _ Handles Button1.Click Dim ProxyGetStocks As New _ GetStocks.localhost.Service1() lblResults.Text = ProxyGetStocks.GetRating("Contoso") End Sub private void Button1_Click(object sender, System.EventArgs e) { GetStocks.localhost.Service1 ProxyGetStocks = new GetStocks.localhost.Service1(); lblResults.Text = ProxyGetStocks.GetRating("Contoso"); }

4. Generar el proyecto de aplicación Web ASP.NET. Compilar la aplicación Web haciendo clic en Generar en el menú Generar.

Visual Basic .NET

C#

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 481: Microsoft ASP.net - Curso Completo - Espa Ol

22 Crear y consumir servicios Web XML

Práctica dirigida por el instructor: utilizar un proxy para invocar un servicio Web XML

Crear un nuevo proyecto de aplicación Web ASP.NET

Crear un proxy para un servicio Web XML

Probar con un navegador

Visualizar el archivo reference.vb o reference.cs

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

En esta práctica, utilizaremos un proxy para invocar un servicio Web XML.

Ejecutar la práctica dirigida por el instructor

1. Crear un nuevo proyecto de aplicación 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 automáticamente por Visual Studio .NET.

4. Cambiar el nombre de la referencia Web en el Explorador de soluciones por WeatherWebRef.

5. Abrir la página predeterminada Webform1.aspx en vista de Diseño y agregar un control Text Box, un control Button y un control Label al formulario Web Form. Conservar las propiedades predeterminadas de cada control.

Introducción

Crear un nuevo proyecto

Crear un proxy

Page 482: Microsoft ASP.net - Curso Completo - Espa Ol

Crear y consumir servicios Web XML 23

6. Crear un procedimiento de evento Click para el botón Button1 y agregar el

siguiente código: Private Sub Button1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim ProxyGetWeather As New _ GetWeatherVB.WeatherWebRef.WeatherService() Label1.Text = _ ProxyGetWeather.WeatherByCity(TextBox1.Text) End Sub private void Button1_Click(object sender, System.EventArgs e) { GetWeatherCS.WeatherWebRef.WeatherService ProxyGetWeather = new GetWeatherCS.WeatherWebRef.WeatherService(); Label1.Text = ProxyGetWeather.WeatherByCity(TextBox1.Text); }

7. Generar y examinar Webform1.aspx. 8. Para probar el servicio Web XML, escribir Seattle en el cuadro de texto y

hacer clic en el botón. A continuación, escribir en el cuadro de texto el nombre de otra ciudad, como London, y hacer clic de nuevo en el botón. Si se introduce Seattle la previsión meteorológica será sol. Si se introduce el nombre de otra ciudad, el resultado de la previsión meteorológica será aleatorio: sol, nublado o lluvia.

9. Visualizar el archivo reference.vb o reference.cs. El archivo Reference.vb o Reference.cs puede encontrarse haciendo clic en Mostrar todos los archivos en el Explorador de soluciones y expandiendo Referencias Web, WeatherWebRef, y Reference map. Observar que el archivo de referencia es el código fuente del proxy que Visual Studio .NET ha generado automáticamente. El proxy tiene métodos Begin y End para la invocación asíncrona de cada método Web del servicio Web XML.

Visual Basic .NET

C#

Probar con un explorador

Visualizar el archivo de referencia

Page 483: Microsoft ASP.net - Curso Completo - Espa Ol

24 Crear y consumir servicios Web XML

Control de errores del servicio Web XML

Servicio no disponible

Excepciones SOAP de servicios Web XML

GetStocks.StockWebRef.Service1 ProxyGetStocks = new GetStocks.StockWebRef.Service1();

ProxyGetStocks.Timeout = 10000;try{

lblMessage.Text = ProxyGetStocks.GetRating(TextBox1.Text);

}catch (Exception err){

lblMessage.Text = err.Message;}

GetStocks.StockWebRef.Service1 ProxyGetStocks = new GetStocks.StockWebRef.Service1();

ProxyGetStocks.Timeout = 10000;try{

lblMessage.Text = ProxyGetStocks.GetRating(TextBox1.Text);

}catch (Exception err){

lblMessage.Text = err.Message;}

Código de ejemplo en Visual Basic .NET *****************************

Existen tres fuentes principales de errores cuando se utiliza un servicio Web XML: servicio no disponible, largos retrasos de respuesta y errores internos del servicio Web XML, produciendo mensajes de error del servicio en forma de excepciones SOAP. Nuestro formulario Web Form necesita ser capaz de identificar y gestionar los tres tipos de errores.

Para probar la disponibilidad de un servicio Web XML desde un formulario Web Form ASP.NET, debemos establecer un tiempo de espera para el proxy del servicio Web XML. Debemos utilizar una instrucción Try…Catch…Finally para gestionar la excepción del tiempo de espera:

Establecer el parámetro 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 código: ProxyName.Timeout = valor en milisegundos

Controlar las excepciones del tiempo de espera El siguiente código invoca el servicio Web XML, captura cualquier excepción y muestra un mensaje de error en Label1: Try 'call the XML Web service Catch err As Exception Label1.Text = err.Message End Try

Introducción

Servicio Web XML no disponible

Visual Basic .NET

Page 484: Microsoft ASP.net - Curso Completo - Espa Ol

Crear y consumir servicios Web XML 25

try { //call the XML Web service } catch (Exception err) { Label1.Text = err.Message; }

Si un servicio Web XML no puede procesar una petición, 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 instrucción Try…Catch…Finally.

El siguiente código captura la excepción y muestra un mensaje de error en Label1:

Try 'call your XML Web service Catch err As SoapException Label1.Text = "Unable to process your request" End Try try { //call your XML Web service } catch (SoapException err) { Label1.Text = "Unable to process your request"; }

C#

Excepciones SOAP de servicios Web XML

Visual Basic .NET

C#

Page 485: Microsoft ASP.net - Curso Completo - Espa Ol

26 Crear y consumir servicios Web XML

Demostración: probar la disponibilidad de un servicio Web XML

Establecer una instrucción Try…Catch para el control de errores del tiempo de espera

Ralentizar el servicio Web

Evaluar la excepción

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

En esta demostración, estudiaremos cómo probar si el servicio Web XML está disponible.

Ejecutar la demostración

1. Volver a abrir el proyecto GetWeather de la práctica anterior. 2. Establecer el tiempo de espera de try…catch 3. Modificar el código del controlador de evento del botón para establecer un

tiempo de espera de 10 segundos (10.000) y agregar código al controlador de evento del botón para añadir una instrucción try…catch sobre la llamada al servicio Web XML. El código debería ser similar al siguiente: Private Sub Button1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim ProxyGetWeather As New _ GetWeatherVB.WeatherWebRef.WeatherService() ProxyGetWeather.Timeout = 10000 Try Label1.Text = _ ProxyGetWeather.WeatherByCity(TextBox1.Text) Catch err As Exception Label1.Text = err.Message End Try End Sub

Introducción

Visual Basic .NET

Page 486: Microsoft ASP.net - Curso Completo - Espa Ol

Crear y consumir servicios Web XML 27

private void Button1_Click(object sender, System.EventArgs e) { GetWeatherCS.WeatherWebRef.WeatherService ProxyGetWeather = new GetWeatherCS.WeatherWebRef.WeatherService(); ProxyGetWeather.Timeout = 10000; try { Label1.Text = ProxyGetWeather.WeatherByCity(TextBox1.Text); } catch (Exception err) { Label1.Text = err.Message; } }

4. Generar y examinar WebForm1.aspx. 5. Probar el servicio Web XML introduciendo Seattle en el cuadro de texto y

haciendo clic en el botón para verificar que la aplicación sigue funcionando como antes.

6. Abrir el proyecto Mod13 de la solución 2310Demos que contiene el servicio Web XML.

7. En la parte superior de la página WeatherService.asmx.vb o WeatherService.asmx.cs, agregar la siguiente instrucción de importación: Imports System.Threading using System.Threading;

8. En la parte inicial del método Web WeatherByCity, agregar el siguiente código para retrasar la respuesta a 40 segundos: Thread.Sleep(40000) Thread.Sleep(40000); Este código hará que el servicio Web XML funcione muy despacio para simular un servicio Web XML que no está en línea o que opera con mucha lentitud.

9. Generar la aplicación Web haciendo clic con el botón derecho Mod13VB o Mod13CS en el Explorador de soluciones, y hacer clic en Generar.

10. En el proyecto GetWeather, visualizar la página WebForm1.aspx en el navegador.

11. Para probar el servicio Web XML, escribir Seattle en el cuadro de texto y hacer clic en el botón. Transcurridos 10 segundos, debería aparecer el mensaje en la etiqueta “The operation has timed-out”.

C#

Ralentizar el servicio Web XML

Visual Basic .NET

C#

Visual Basic .NET

C#

Probar la excepción

Page 487: Microsoft ASP.net - Curso Completo - Espa Ol

28 Crear y consumir servicios Web XML

Lección: crear un servicio Web XML

Cómo crear un servicio Web XML

Código del servicio Web XML

Práctica dirigida por el instructor: crear un servicio Web XML

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

Visual Studio .NET proporciona plantillas que facilitan el desarrollo de los servicios Web XML. En esta lección, estudiaremos cómo utilizar estas plantillas para crear un servicio Web XML.

En esta lección, 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 código generado cuando se crea un nuevo proyecto de servicio

Web XML utilizando ASP.NET.

Introducción

Objetivos de la lección

Page 488: Microsoft ASP.net - Curso Completo - Espa Ol

Crear y consumir servicios Web XML 29

Cómo crear un servicio Web XML

1. Crear un nuevo proyecto de servicio Web XML en Visual Studio .NET

2. Declarar las funciones WebMethod

3. Generar el proyecto de servicio Web XML

4. Probarcon unnavegador

111

222

333

444

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

Visual Studio .NET proporciona plantillas y un método de servicio Web XML predeterminado que nos sirven de ayuda para iniciar la creación 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á automáticamente las carpetas necesarias, y la página 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 invocarán a través del Web. Visual Studio .NET crea una función predeterminada “Hello World” en la página del servicio Web XML. La función puede activarse eliminando las etiquetas de comentario. Casi cualquier tipo de función puede ser escrita como una función de métodos de un servicio Web XML, desde un sencillo cálculo 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 lógica. Al igual que los formularios Web Forms, ASP.NET compila el servicio Web XML en Microsoft Intermediate Language (MSIL) para su posterior ejecución.

Introducción

Page 489: Microsoft ASP.net - Curso Completo - Espa Ol

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 botón derecho en Servicio Web XML en el Explorador de soluciones y clic en Ver en el navegador. También puede probarse el servicio Web XML con un navegador remoto, desde Visual Studio .NET, haciendo clic con el botón 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

Page 490: Microsoft ASP.net - Curso Completo - Espa Ol

Crear y consumir servicios Web XML 31

Código del servicio Web XML

Página .asmx

Página .asmx.vb

<%@ WebService Language="vb" Codebehind="Service1.asmx.vb" Class="XMLWebServiceName.Service1" %>

<%@ WebService Language="vb" Codebehind="Service1.asmx.vb" Class="XMLWebServiceName.Service1" %>

Imports SystemImports System.Web.Services

Class Service1<WebMethod()> Public Function function1() As type

'function_hereEnd FunctionEnd Class

Imports SystemImports System.Web.Services

Class Service1<WebMethod()> Public Function function1() As type

'function_hereEnd FunctionEnd Class

Código de ejemplo en C# *****************************

Cuando creamos un servicio Web XML con Visual Studio .NET, se crean dos archivos principales que constituyen el servicio Web XML: el archivo .asmx y el archivo .asmx.vb o .asmx.cs. El archivo .asmx identifica la página Web como un servicio Web XML, y el archivo .asmx.vb o .asmx.cs, también denominado página de código subyacente, contiene la lógica del servicio Web XML.

Como un servicio Web XML no tiene ninguna interfaz de usuario, la página .asmx únicamente contiene información del tipo de archivo y una directiva a la página de código subyacente.

El código de una página .asmx es como sigue:

<%@ WebService Language="vb" Codebehind="Service1.asmx.vb" Class="XMLWebServiceName.Service1" %> <%@ WebService Language="c#" Codebehind="Service1.asmx.cs" Class="XMLWebServiceName.Service1" %> Las páginas .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 página Web. Algunos valores de este atributo son: vb, c# y JScript™.

Introducción

Página .asmx

Visual Basic .NET

C#

Page 491: Microsoft ASP.net - Curso Completo - Espa Ol

32 Crear y consumir servicios Web XML

Codebehind

El atributo Codebehind identifica el nombre y la ubicación de la página de código subyacente .asmx.vb o .asmx.cs que contiene la lógica 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 debería ser pública, y debería heredarse de la clase base del servicio Web XML. La clase predeterminada del servicio Web XML es: Class Service1 class Service1

El archivo de código subyacente es la página que contiene la lógica del servicio Web XML.

El código predeterminado de una página de código subyacente es:

Imports System.Web.Services <WebService(Namespace := "http://tempuri.org/")> _ Public Class Service1 Inherits System.Web.Services.WebService '<WebMethod()> Public Function HelloWorld() As String ' HelloWorld = "Hello World" ' End Function End Class

Visual Basic .NET

C#

Página de código subyacente

Visual Basic .NET

Page 492: Microsoft ASP.net - Curso Completo - Espa Ol

Crear y consumir servicios Web XML 33

using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Web; using System.Web.Services; namespace Service1 { public class Service1 : System.Web.Services.WebService { public Service1() { //CODEGEN: This call is required by the ASP.NET Web Services Designer InitializeComponent(); } // [WebMethod] // public string HelloWorld() // { // return "Hello World"; // } } } Las páginas de código subyacente tienen los siguientes atributos:

Espacios de nombres Los servicios Web XML importan los espacios de nombres System y System.Web.Services:

• Imports System El espacio de nombres ASP.NET System contiene las clases que soportan las clases ASP.NET generales.

• Imports System.Web.Services El espacio de nombres ASP.NET Web.Services contiene los métodos y las clases de propiedades que soportan los servicios Web XML.

C#

Visual Basic .NET

Page 493: Microsoft ASP.net - Curso Completo - Espa Ol

34 Crear y consumir servicios Web XML

Los servicios Web XML importan los espacios de nombres System y System.Web.Services:

• using System El espacio de nombres ASP.NET System contiene las clases que soportan las clases ASP.NET generales.

• using System.Web.Services El espacio de nombres ASP.NET Web.Services contiene los métodos 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.

Métodos del servicio Web XML Cada método que se exponga desde el servicio Web XML debe estar marcado con un atributo <WebMethod()> personalizado. Este atributo se requiere para crear un método que pueda ser invocado a través del Web. Si el método no tiene el atributo personalizado <WebMethod()>, el método no será expuesto desde el servicio Web XML. Visual Studio .NET crea un método Web "Hello World" predeterminado, que puede activarse eliminando las etiquetas comentadas en la página del servicio Web XML. Podemos modificar la función predeterminada, o agregar nuestras propias funciones. El siguiente código es el método predeterminado del servicio Web XML de Visual Studio .NET: <WebMethod()> Public Function HelloWorld() As String HelloWorld = "Hello World" End Function [WebMethod] public string HelloWorld() { return "Hello World"; }

C#

Visual Basic .NET

C#

Page 494: Microsoft ASP.net - Curso Completo - Espa Ol

Crear y consumir servicios Web XML 35

Práctica dirigida por el instructor: crear un servicio Web XML

Crear un servicio Web XML

Probar el servicio Web XML

Cambiar el espacio de nombres

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

En esta práctica, 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 compañía Contoso como parámetro de entrada. El resto de nombres de compañías deberían devolver un valor Sell.

Ejecutar esta práctica

1. Crear un nuevo proyecto de servicio Web ASP.NET en Visual Studio .NET y especificar la ubicación del servicio Web en http://localhost/StocksVB http://localhost/StockCS. Automáticamente se crea una carpeta StocksVB o StocksCS en la carpeta \Inetpub\wwwroot.

2. Abrir el archivo predeterminado .asmx, Service1.asmx, en vista de Código haciendo clic con el botón derecho sobre el archivo en el Explorador de soluciones y clic en Ver código. Observar que el nombre predeterminado de la clase es Service1, y que Visual Studio .NET ha abierto automáticamente el archivo de código subyacente Sevice1.asmx.vb o Sevice1.asmx.cs.

Introducción

Crear un servicio Web XML Visual Basic .NET C#

Page 495: Microsoft ASP.net - Curso Completo - Espa Ol

36 Crear y consumir servicios Web XML

3. Crear una función GetRating como sigue:

<WebMethod()> Public Function GetRating( _ ByVal Ticker As String) As String If Ticker ="Contoso" Then Return "Buy" Else Return "Sell" End If End Function [WebMethod] public string GetRating(String Ticker) { if (Ticker == "Contoso") return "Buy"; else return "Sell"; }

4. Guardar el archivo. 5. Generar y examinar el servicio Web XML en Microsoft Internet Explorer

visualizando http://localhost/StocksVB/Service1.asmx. http://localhost/StocksCS/Service1.asmx. Para abrir el servicio Web XML, también puede hacerse clic con el botón 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

recomendación de una cotización, como Contoso o Northwind Traders, en el campo Ticker, y hacer clic en Invoke. Para evitar que aparezca el comentario sobre el espacio de nombres cuando se examina el servicio Web XML, debe cambiarse la URL del espacio de nombres. Si se está utilizando Visual Basic .NET, cambiar la URL predeterminada que proporciona Visual Studio .NET. Si se está utilizando C#, Visual Studio .NET no genera un espacio de nombres predeterminado. Debemos agregar un atributo WebService y agregarle la directiva del espacio de nombres.

8. Agregar o modificar el atributo WebService. Modificar la directiva del espacio de nombres en Sevice1.asmx.vb para que utilice http://microsoft.com/webservices/: <WebService(Namespace:= _ "http://microsoft.com/webservices/")> _ Agregar el atributo WebService y la directiva del espacio de nombres debajo de la información de resumen en Service1.asmx.cs. El código C# debería ser como el siguiente (con el código nuevo que debe añadirse en negrita):

Visual Basic .NET

C#

Probar el servicio Web XML Visual Basic .NET C#

Cambiar o agregar el espacio de nombres

Visual Basic .NET

C#

Page 496: Microsoft ASP.net - Curso Completo - Espa Ol

Crear y consumir servicios Web XML 37

/// Summary description for WeatherService /// </summary> /// [WebService(Namespace="http://microsoft.com/webservices/")] public class Service1 : System.Web.Services.WebService

9. Guardar y volver a generar el archivo. 10. Examinar el servicio Web en Internet Explorer visualizando

http://localhost/StocksVB/Service1.asmx. http://localhost/StocksCS/Service1.asmx. Observar que desaparece el comentario sobre el espacio de nombres.

11. Agregar una descripción para Class. El código debería ser similar al siguiente: <WebService(Namespace:= _ "http://microsoft.com/webservices/", _ Description:="My class description...")> _ [WebService(Namespace= "http://microsoft.com/webservices/", Description="My class description...")]

12. Agregar una descripción a la directiva WebMethod. El código debería ser similar al siguiente: <WebMethod(Description:="My WebMethod description...")> [WebMethod(Description="My WebMethod description...")]

13. Guardar y volver a generar el archivo. 14. Examinar el servicio Web en Internet Explorer en

http://localhost/StocksVB/Service1.asmx. http://localhost/StocksCS/Service1.asmx. Verificar que aparecen las descripciones.

Visual Basic .NET C#

Agregar una descripción para la clase y el método Web

Visual Basic .NET

C#

Visual Basic .NET

C#

Visual Basic .NET C#

Page 497: Microsoft ASP.net - Curso Completo - Espa Ol

Práctica A: Crear y consumir servicios Web XML

MedicalMedical.aspxMedicalMedical.aspx

BenefitsHome PageDefault.aspx

BenefitsHome PageDefault.aspx

Life InsuranceLife.aspxLife InsuranceLife.aspx

RetirementRetirement.aspxRetirementRetirement.aspx

DentalDental.aspxDentalDental.aspx

Dentists

DoctorsDoctors.aspx DoctorsDoctors.aspx

Doctors

Logon PageLogin.aspxLogon PageLogin.aspx

RegistrationRegister.aspxRegistrationRegister.aspx

CohoWinery

ProspectusProspectus.aspxProspectusProspectus.aspx

XML Web ServicedentalService1.asmx

XML Web ServicedentalService1.asmx

Page HeaderHeader.ascxPage HeaderHeader.ascx

ASPState

tempdb

Lab Web Application

User Controlnamedate.ascxUser Controlnamedate.ascx

Menu ComponentClass1.vb or Class1.cs

Menu ComponentClass1.vb or Class1.cs

XML Files

Web.config

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

En este laboratorio, aprenderemos a:

Crear un servicio Web XML que devuelva tipos de datos complejos. Probar un servicio Web XML utilizando un explorador.

Para trabajar en este laboratorio, es necesario tener:

Conocimientos sobre cómo agregar una tabla Microsoft® SQL Server™ a un proyecto.

Conocimientos sobre Microsoft ADO.NET. Conocimientos sobre cómo agregar una referencia Web a un formulario Web

Form. Conocimientos sobre cómo utilizar un DataGrid. Conocimientos sobre cómo crear procedimientos de evento para controles de

servidor.

Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios de este curso, crearemos un sitio Web que permita a los empleados seleccionar y configurar los beneficios que elijan.

En este laboratorio:

Crearemos un servicio Web XML que nos permita recuperar la lista de todos los dentistas utilizados por Coho Winery.

Recuperar la lista de dentistas de un determinado código postal. Consumir el servicio Web de la página dental.aspx.

Objetivos

Requisitos previos

Escenario

Tiempo estimado para completar el laboratorio: 60 minutos

Page 498: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 0 Configuración del laboratorio

Para realizar este laboratorio, es necesario haber creado el proyecto de la aplicación 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 solución LabApplication

Realizar este procedimiento únicamente si no se ha creado un archivo de solución LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solución en blanco denominada LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Solución en

blanco. b. En el cuadro de diálogo Nuevo proyecto, escribir LabApplication en el

cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

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

1. Crear un nuevo proyecto de aplicación Web ASP.NET, denominado BenefitsVB o BenefitsCS, en la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto. b. En el cuadro de diálogo 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 Aplicación Web ASP.NET, establecer

la ubicación 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 Solución, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solución, es importante el uso de mayúsculas 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 mayúsculas el nombre del proyecto Benefits.

Importante

Importante

Precaución

Page 499: Microsoft ASP.net - Curso Completo - Espa Ol

Actualizar el proyecto Benefits

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en BenefitsVB

o BenefitsCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

3. Buscar los archivos de proyecto: Ir a la carpeta VB\Starter\BenefitsVB. Ir a la carpeta Starter\BenefitsCS. Estas carpetas pueden encontrarse dentro del fichero labs11.zip

4. En el cuadro Archivos de tipo del cuadro de diálogo Agregar elemento existente – Benefits, hacer clic en Todos los archivos (*.*).

5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir. 6. Hacer clic en Sí a la pregunta de si sobrescribir o recargar los archivos.

Crear la biblioteca de clases BenefitsList

Realizar este procedimiento únicamente si no se ha creado anteriormente un proyecto BenefitsList, o si se ha eliminado el proyecto BenefitsList siguiendo los pasos del Apéndice A, “Recuperación del laboratorio”.

1. Crear un nuevo proyecto de biblioteca de clases Crear un nuevo proyecto de biblioteca de clases Visual Basic .NET con el nombre BenefitsListVB, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de diálogo 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 solución, y clic en Aceptar. Crear un nuevo proyecto de biblioteca de clases Visual C# .NET con el nombre BenefitsListCS, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de diálogo 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 solución, y clic en Aceptar.

Verificar que se han escrito correctamente las mayúsculas del proyecto BenefitsList.

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Importante

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Precaución

Page 500: Microsoft ASP.net - Curso Completo - Espa Ol

Actualizar el proyecto BenefitsList

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 1. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

2. Ir al proyecto BenefitsList: Ir a la carpeta VB\Starter\ BenefitsListVB. Ir a la carpeta CS\Starter\ BenefitsListCS. Estas carpetas pueden encontrarse dentro del fichero labs11.zip

2. En el cuadro Archivos de tipo del cuadro de diálogo 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 solución LabApplication, completar los siguientes pasos para agregar una referencia al componente BenefitsList que acabamos de crear: a. Hacer clic con el botón derecho en el proyecto BenefitsVB o BenefitsCS

en el Explorador de soluciones y hacer clic en Agregar referencia. b. En el cuadro de diálogo Agregar referencia, en la pestaña Proyectos,

hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS. c. En la lista Componentes seleccionados, seleccionar el componente

BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar. El componente se agrega a la carpeta Referencias en el Explorador de soluciones.

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

Page 501: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 1 Crear el método 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 solución LabApplication. 2. Crear un nuevo proyecto de servicio Web ASP.NET, denominado

DentalServiceVB o DentalServiceCS, en la solución LabApplication: a. En el menú Archivo, hacer clic en Nuevo y clic en Proyecto. b. En el cuadro de diálogo 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

ubicación 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 solución, y clic en Aceptar. 3. En el Explorador de soluciones, hacer clic con el botón derecho en

Service1.asmx y cambiar el nombre por DentalService1.asmx 4. En el Explorador de soluciones, asegurémonos de que el archivo

DentalService1.asmx está abierto y hacer doble clic en la superficie de diseño para abrir la página de código subyacente.

5. Cambiar el nombre de la clase: En el archivo DentalService1.asmx.vb, cambiar el nombre de la clase Service1 por DentalService1. En el archivo DentalService1.asmx.cs, cambiar el nombre de la clase y el constructor Service1 por DentalService1.

Crear los objetos Connection y DataAdapter

1. En Server Explorer, expandir Servidores, expandir nombreequipo, expandir Servidores SQL Server, expandir nombreequipo, expandir dentists, y expandir tablas para ver las tablas de la base de datos dentists.

2. En modo de Diseño, mediante una operación de arrastrar y soltar, ubicar la tabla Dentists de la base de datos dentists en la página DentalService1.asmx. Se crea un objeto SqlConnection1 y un objeto SqlDataAdapter1 y se ubican en la superficie de diseño del servicio Web XML DentalService1.asmx. Se crea un objeto sqlConnection1 y un objeto sqlDataAdapter1 y se ubican en la superficie de diseño del servicio Web XML DentalService1.asmx.

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 502: Microsoft ASP.net - Curso Completo - Espa Ol

Crear el DataSet

1. Hacer clic en cualquier lugar de la superficie de diseño para deseleccionar los objetos SqlConnection1 y SqlDataAdapter1.

2. Hacer clic con el botón derecho en el objeto SqlDataAdapter1 en la página DentalService1.asmx y hacer clic en Generar Dataset.

3. En el cuadro de diálogo Generar Dataset, crear un nuevo DataSet denominado dsDentists, asegurarse de que está seleccionada la opción Agregar este Dataset al diseñador, y hacer clic en Aceptar. Se crea un objeto dsDentists y se ubica en la vista de Diseño de la página DentalService1.asmx, y se agrega un nuevo archivo esquema denominado dsDentists.xsd al proyecto DentalService en el Explorador de soluciones.

Cuando se cree el DataSet dsDentists, Visual Basic .NET creará una instancia dsDentists denominada “DsDentists1” y Visual C# creará una instancia dsDentists denominada “dsDentists1”.

Crear el método de servicio Web XML GetAllDentists

1. En la página de código subyacente de la página DentalService1.asmx, DentalService1.asmx.vb o DentalService1.asmx.cs, crear un método del servicio Web XML denominado GetAllDentists, que devuelve un objeto DataSet.

2. En el método del servicio Web XML, invocar el método Fill del objeto SqlDataAdapter1 para rellenar el DataSet, dsDentists1, y retornar el DataSet. El código debería ser similar al siguiente: <WebMethod()> _ Public Function GetAllDentists() As DataSet SqlDataAdapter1.Fill(DsDentists1) Return DsDentists1 End Function [WebMethod()] public DataSet GetAllDentists() { sqlDataAdapter1.Fill(dsDentists1); return dsDentists1; }

3. Guardar los cambios.

Nota

Visual Basic .NET

C#

Page 503: Microsoft ASP.net - Curso Completo - Espa Ol

4. Generar y examinar la página DentalService1.asmx. Se muestra la página de descripción del servicio Web XML. ¿De dónde proviene esta página de descripción? _____________________________________________________________

_____________________________________________________________

Hay un mensaje de aviso en la parte inferior de la página 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. ¿Cuál es la utilidad del contenido entre las etiquetas <xs:schema> y </xs:schema>? _____________________________________________________________

_____________________________________________________________

Modificar el resultado del servicio Web XML

1. En la página de código subyacente DentalService1.asmx, establecer los atributos del servicio Web de acuerdo con la siguiente tabla. Si se está trabajando en C#, se deberá crear el atributo WebService. Atributo Valor Namespace http://microsoft.com/webservices/

Description Este servicio Web XML contiene información sobre los dentistas

El código debería ser similar al siguiente: <WebService( _ Namespace:="http://microsoft.com/webservices/", _ Description:="This XML Web service contains " & _ "information about the dentists.")> _ Public Class DentalService1 Inherits System.Web.Services.WebService [WebService(Namespace="http://microsoft.com/webservices/", Description="This XML Web service contains " + "information about the dentists.")] public class DentalService1 : System.Web.Services.WebService

Nota

Visual Basic .NET

C#

Page 504: Microsoft ASP.net - Curso Completo - Espa Ol

2. Agregar un atributo description al método de servicio Web XML GetAllDentists y establecerlo a This XML Web service method returns all the dentists. El código debería ser similar al siguiente: <WebMethod(Description:= _ "This XML Web service method returns all the dentists")> _ Public Function GetAllDentists() As DataSet [WebMethod(Description= "This XML Web service method returns all the dentists")] public DataSet GetAllDentists()

3. Generar y examinar la página DentalService1.asmx. 4. En el navegador, observar que la descripción del servicio Web XML y que la

descripción del método de servicio Web XML han cambiado. Además, observar que el mensaje de aviso de la parte inferior de la página, 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 compañero

1. En Microsoft Internet Explorer, ir al servicio Web XML DentalService de un compañero en la siguiente URL, siendo NombreEquipo el nombre del equipo de otro estudiante: http://NombreEquipo/DentalServiceVB/DentalService1.asmx o http://NombreEquipo/DentalServiceCS/DentalService1.asmx

También puede utilizarse el equipo del instructor, denominado London.

2. Invocar el método de servicio Web XML GetAllDentists.

Visual Basic .NET

C#

Nota

Page 505: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 2 Crear el método GetDentistsByPostalCode del servicio Web XML

En este ejercicio, agregaremos otro método al servicio Web XML DentistService. El nuevo método del servicio Web XML se denomina GetDentistsByPostalCode y devuelve un DataSet que contiene todos los dentistas en un determinado código postal. En este ejercicio, escribiremos código utilizado por ADO.NET para invocar un procedimiento almacenado SQL Server.

Crear el método 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 código debería ser similar al siguiente: Imports System.Data.SqlClient using System.Data.SqlClient;

2. Crear un método de servicio Web XML denominado GetDentistsByPostalCode que tenga un parámetro String pasado por el valor denominado strPostalCode y que devuelve un DataSet.

3. Establecer la descripción del método de servicio Web XML a This XML Web service method returns the dentists from a supplied postal code. El código debería ser similar al siguiente: <WebMethod(Description:= _ "This XML Web service method returns the " & _ "dentists from a supplied postal code.")> _ Public Function GetDentistsByPostalCode( _ ByVal strPostalCode As String) As DataSet End Function [WebMethod(Description= "This XML Web service method returns the " + "dentists from a supplied postal code.")] public DataSet GetDentistsByPostalCode( String strPostalCode) { }

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 506: Microsoft ASP.net - Curso Completo - Espa Ol

4. En el método GetDentistsByPostalCode del servicio Web XML, agregar código para rellenar un nuevo DataSet, con los dentistas que se encuentran en un determinado código postal, invocando el procedimiento almacenado DentistByPostalCode. El código debería ser similar al siguiente:

Podemos copiar y pegar este código desde el archivo VB\Starter\DentalServiceVB\DentistsPoCode.txt, o CS\Starter\DentalServiceCS\DentistsPoCode.txt. Los dos archivos se pueden encontrar dentro del fichero labs11.zip

Dim conn As New SqlConnection _ ("data source=localhost; " & _ "initial catalog=Dentists; " & _ "integrated security=true") Dim daDentistsPoCode As SqlDataAdapter Dim dsDentistsPoCode As New DataSet() Dim workParam As SqlParameter = Nothing 'call the DentistsByState stored procedure daDentistsPoCode = _ New SqlDataAdapter("DentistsByPostalCode", conn) daDentistsPoCode.SelectCommand.CommandType = _ CommandType.StoredProcedure 'add the postal code input parameter workParam = New SqlParameter("@PostalCode", _ System.Data.SqlDbType.NVarChar) workParam.Direction = ParameterDirection.Input workParam.Value = strPostalCode daDentistsPoCode.SelectCommand.Parameters.Add(workParam) 'run the stored procedure and fill a dataset daDentistsPoCode.Fill(dsDentistsPoCode, _ "DentistsPoCode") 'close the connection conn.Close() Return dsDentistsPoCode

Nota

Visual Basic .NET

Page 507: Microsoft ASP.net - Curso Completo - Espa Ol

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 página DentalService1.asmx. 7. En el navegador, hacer clic en el enlace GetDentistsByPostalCode, escribir

98052 en el campo strPostalCode y hacer clic en Invoke. Deberíamos ver todos los dentistas del código postal 98052. Debería haber seis dentistas para este código postal.

8. Probar de nuevo el método GetDentistsByPostalCode del servicio Web XML con el código postal 94111. Ahora, deberíamos ver todos los dentistas del código postal 94111. Debería haber tres dentistas para este código postal.

9. Probar de nuevo el método GetDentistsByPostalCode del servicio Web XML con el código postal 02703. No deberíamos ver ningún dentista.

C#

Page 508: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 3 Consumir el método de servicio Web XML GetAllDentists

En este ejercicio, invocaremos el método GetAllDentists del servicio Web XML DentalService. A continuación, mostraremos el DataSet resultante en un control DataGrid.

Consumir el servicio Web XML DentalService

1. Abrir el proyecto BenefitsVB o BenefitsCS de la solución 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 debería estar ubicado en http://localhost/DentalServiceVB/DentalService1.asmx o http://localhost/DentalServiceCS/DentalService1.asmx a. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsVB o BenefitsCS, y hacer clic en Agregar referencia Web. b. En el campo Dirección del cuadro de diálogo Agregar referencia Web,

escribir http://localhost/DentalServiceVB/DentalService1.asmx o http://localhost/DentalServiceCS/DentalService1.asmx, y pulsar ENTER.

c. Hacer clic en Agregar referencia. Automáticamente, se crea una nueva carpeta denominada Referencias Web en el proyecto BenefitsVB o BenefitsCS, dentro del Explorador de soluciones. La carpeta Referencias Web contiene un proxy y una nueva referencia Web denominada localhost.

El proxy se crea en el lenguaje predeterminado de las opciones de configuración de nuestro proyecto. Por ejemplo, si estamos utilizando Visual Basic .NET, se creará el proxy en Visual Basic .NET, y su nombre será Referencia.vb.

4. Hacer clic en el icono Mostrar todos los archivos del Explorador de soluciones.

5. En el Explorador de soluciones, cambiar el nombre de la Referencia Web localhost por DentalWebRef.

6. Expandir Referencias Web, expandir DentalWebRef, y hacer clic en el icono Reference.map en el Explorador de soluciones.

Nota

Page 509: Microsoft ASP.net - Curso Completo - Espa Ol

7. Abrir el archivo Reference.vb o Reference.cs. ¿Cuál es la utilidad de los métodos BeginGetAllDentists y EndGetAllDentists? _____________________________________________________________

_____________________________________________________________

8. Cerrar Reference.vb o Reference.cs.

Invocar el método GetAllDentists del servicio Web XML

1. Abrir el formulario Web Form dental.aspx. La página ya incluye controles TextBox, Button y DataGrid.

2. Abrir la página de código subyacente dental.aspx y localizar el siguiente comentario en el procedimiento de evento cmdGetAllDentists_Click: 'TODO Lab 13: call the XML Web service method 'GetAllDentists //TODO Lab 13: call the XML Web service method //GetAllDentists

3. Escribir el código para consumir el método de servicio Web XML GetAllDentists: a. Crear un proxy DentalService denominado ProxyGetAllDentists. b. Crear un DataSet denominado dsAllDentists. c. Invocar el método GetAllDentists del servicio Web XML y guardar el

resultado en dsAllDentists. d. Establecer la fuente de datos del DataGrid dgDentists a dsAllDentists. e. Generar el DataSet en el DataGrid.

Visual Basic .NET

C#

Page 510: Microsoft ASP.net - Curso Completo - Espa Ol

El código debería ser similar al siguiente: Dim ProxyGetAllDentists As New _ BenefitsVB.DentalWebRef.DentalService1() Dim dsAllDentists As New DataSet() dsAllDentists = _ ProxyGetAllDentists.GetAllDentists() dgDentists.DataSource = dsAllDentists.Tables(0) dgDentists.DataBind() BenefitsCS.DentalWebRef.DentalService1 ProxyGetAllDentists = new BenefitsCS.DentalWebRef.DentalService1(); DataSet dsAllDentists = new DataSet(); dsAllDentists = ProxyGetAllDentists.GetAllDentists(); dgDentists.DataSource = dsAllDentists.Tables[0]; dgDentists.DataBind();

Si DentalWebRef se muestra como localhost en Microsoft IntelliSense®, debemos cerrar Visual Studio .NET y volver a abrirlo antes de escribir el código para consumir los métodos de servicio Web XML de la Referencia Web.

4. Guardar los cambios. 5. Generar y examinar la página dental.aspx. 6. En el navegador, hacer clic en Get All Dentists.

Deberíamos ver todos los dentistas en el DataGrid.

Visual Basic .NET

C#

Nota

Page 511: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 4 Consumir el método GetDentistsByPostalCode del servicio Web XML

En este ejercicio, invocaremos el método GetDentistsByPostalCode del servicio Web XML Dentists.asmx. Utilizaremos un DataGrid para mostrar el DataSet resultante de los dentistas de un determinado código postal.

Invocar el método GetDentistsByPostalCode del servicio Web XML

1. Abrir la página de código subyacente dental.aspx y localizar el siguiente comentario en el procedimiento de evento cmdSubmit_Click: 'TODO Lab 13: call the XML Web service methods 'GetDentistsByPostalCode //TODO Lab 13: call the XML Web service methods //GetDentistsByPostalCode

2. Escribir el código para invocar el método de servicio Web XML GetDentistsByPostalCode: a. Crear un proxy denominado ProxyGetDentistsByPostalCode. b. Crear un DataSet denominado dsDentistsByPostalCode. c. Invocar el método 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 código debería ser similar al siguiente: Dim ProxyGetDentistsByPostalCode As New _ BenefitsVB.DentalWebRef.DentalService1() Dim dsDentistsByPostalCode As New DataSet() dsDentistsByPostalCode = _ ProxyGetDentistsByPostalCode. _ GetDentistsByPostalCode(txtPostalCode.Text) dgDentists.DataSource = dsDentistsByPostalCode.Tables(0) dgDentists.DataBind() BenefitsCS.DentalWebRef.DentalService1 ProxyGetDentistsByPostalCode = new BenefitsCS.DentalWebRef.DentalService1(); DataSet dsDentistsByPostalCode = new DataSet(); dsDentistsByPostalCode = ProxyGetDentistsByPostalCode.GetDentistsByPostalCode (txtPostalCode.Text); dgDentists.DataSource = dsDentistsByPostalCode.Tables[0]; dgDentists.DataBind();

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 512: Microsoft ASP.net - Curso Completo - Espa Ol

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.

Deberíamos ver todos los dentistas del código 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 código postal 94111 en el DataGrid.

THIS PAGE INTENTIONALLY LEFT BLANK

Page 513: Microsoft ASP.net - Curso Completo - Espa Ol

1

Práctica A: Almacenar datos de aplicación y sesión

MedicalMedical.aspxMedicalMedical.aspx

BenefitsHome PageDefault.aspx

BenefitsHome PageDefault.aspx

Life InsuranceLife.aspxLife InsuranceLife.aspx

RetirementRetirement.aspxRetirementRetirement.aspx

DentalDental.aspxDentalDental.aspx

Dentists

DoctorsDoctors.aspx DoctorsDoctors.aspx

Doctors

Logon PageLogin.aspxLogon PageLogin.aspx

RegistrationRegister.aspxRegistrationRegister.aspx

CohoWinery

ProspectusProspectus.aspxProspectusProspectus.aspx

XML Web ServicedentalService1.asmx

XML Web ServicedentalService1.asmx

Page HeaderHeader.ascxPage HeaderHeader.ascx

ASPState

tempdb

Lab Web Application

User Controlnamedate.ascxUser Controlnamedate.ascx

Menu ComponentClass1.vb or Class1.cs

Menu ComponentClass1.vb or Class1.cs

XML Files

Web.config

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

En este laboratorio, aprenderemos a:

Crear variables de sesión y de aplicación y utilizarlas para almacenar y recuperar información.

Crear, leer y escribir desde cookies persistentes. Almacenar variables de sesión en una base de datos Microsoft® SQL

Server™.

Este laboratorio se centra en los conceptos de este módulo. Por ello, podría no cumplir las recomendaciones de seguridad de Microsoft.

Para trabajar en este laboratorio, es necesario tener:

Conocimientos sobre cómo crear variables de sesión y de aplicación. Conocimientos sobre cómo crear cookies.

Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios de este curso, crearemos un sitio Web que permita a los empleados seleccionar y configurar los beneficios que elijan.

En este laboratorio, utilizaremos variables de sesión y de aplicación para mejorar la experiencia de los usuarios cuando navegan por el sitio Web Benefits.

Objetivos

Nota

Requisitos previos

Escenario

Tiempo estimado para completar el laboratorio: 90 minutos

Page 514: Microsoft ASP.net - Curso Completo - Espa Ol

2

Ejercicio 0 Configuración del laboratorio

Para realizar este laboratorio, es necesario haber creado el proyecto de la aplicación 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 solución LabApplication

Realizar este procedimiento únicamente si no se ha creado un archivo de solución LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solución en blanco denominada LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Solución en

blanco. b. En el cuadro de diálogo Nuevo proyecto, escribir LabApplication en el

cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

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

1. Crear un nuevo proyecto de aplicación Web ASP.NET, denominado BenefitsVB o BenefitsCS, en la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto. b. En el cuadro de diálogo 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 Aplicación Web ASP.NET,

establecer la ubicación 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 Solución, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solución, es importante el uso de mayúsculas 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 mayúsculas el nombre del proyecto Benefits.

Importante

Importante

Precaución

Page 515: Microsoft ASP.net - Curso Completo - Espa Ol

3

Actualizar el proyecto Benefits

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

3. Buscar los archivos de proyecto: Ir a la carpeta VB\Starter\BenefitsVB. Ir a la carpeta CS\Starter\BenefitsCS. Estas carpetas pueden encontrarse dentro del fichero labs12.zip

4. En el cuadro Archivos de tipo del cuadro de diálogo Agregar elemento existente – Benefits, hacer clic en Todos los archivos (*.*).

5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir. 6. Hacer clic en Sí a la pregunta de si sobrescribir o recargar los archivos.

Crear la biblioteca de clases BenefitsList

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

1. Crear un nuevo proyecto de biblioteca de clases. Crear un nuevo proyecto de biblioteca de clases Visual Basic .NET con el nombre BenefitsListVB, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de diálogo 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 solución, y clic en Aceptar. Crear un nuevo proyecto de biblioteca de clases Visual C# .NET con el nombre BenefitsListCS, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de diálogo 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 solución, y clic en Aceptar.

Verificar que se han escrito correctamente las mayúsculas del proyecto BenefitsList.

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Importante

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Precaución

Page 516: Microsoft ASP.net - Curso Completo - Espa Ol

4

Actualizar el proyecto BenefitsList

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

3. Ir al proyecto BenefitsList. Ir a la carpeta VB\Starter\BenefitsListVB. Ir a la carpeta CS\Starter\BenefitsListCS. Estas carpetas pueden encontrarse dentro del fichero labs12.zip

4. En el cuadro Archivos de tipo del cuadro de diálogo 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 solución LabApplication, completar los siguientes pasos para agregar una referencia al componente BenefitsList que acabamos de crear: a. Hacer clic con el botón derecho en el proyecto BenefitsVB o

BenefitsCS en el Explorador de soluciones y hacer clic en Agregar referencia.

b. En el cuadro de diálogo Agregar referencia, en la pestaña Proyectos, hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.

c. En la lista Componentes seleccionados, seleccionar el componente BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar. El componente se agrega a la carpeta Referencias en el Explorador de soluciones.

Crear el Servicio Web XML Dental

Realizar este procedimiento únicamente si no se ha creado anteriormente el proyecto DentalService, o si se ha eliminado el proyecto DentalService siguiendo los pasos del Apéndice A “Recuperación del laboratorio”.

1. Crear un nuevo proyecto de Servicio Web XML. Crear un nuevo proyecto de Servicio Web XML en Visual Basic .NET, denominado DentalServiceVB, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de diálogo 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 ubicación en http://localhost/DentalServiceVB. d. Hacer clic en Agregar a solución, y clic en Aceptar.

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Importante

Para el proyecto Visual Basic .NET

Page 517: Microsoft ASP.net - Curso Completo - Espa Ol

5

Verificar que se han utilizado correctamente las mayúsculas en el proyecto DentalServiceVB.

Crear un nuevo proyecto de Servicio Web XML Visual C#, denominado DentalServiceCS, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de diálogo 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 ubicación en http://localhost/DentalServiceCS. d. Hacer clic en Agregar a solución, y clic en Aceptar.

Verificar que se han utilizado correctamente las mayúsculas en el proyecto DentalServiceVB.

Actualizar el proyecto DentalService

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

DentalServiceVB o DentalServiceCS, seleccionar Agregar, y hacer clic en Agregar elemento existente.

3. Buscar los archivos de proyecto: Ir a la carpeta VB\Starter\DentalServiceVB. Ir a la carpeta CS\Starter\DentalServiceCS. Estas carpetas pueden encontrarse dentro del fichero labs12.zip

4. En el cuadro Archivos de tipo del cuadro de diálogo 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 botón

derecho en el proyecto DentalServiceVB o DentalServiceCS en el Explorador de soluciones y hacer clic en Generar.

Precaución

Para el proyecto Visual C# .NET

Precaución

Para el proyecto Visual Basic .NET

Para el proyecto Visual C# .NET

Page 518: Microsoft ASP.net - Curso Completo - Espa Ol

6

Agregar una referencia Web en el proyecto Benefits al servicio Web DentalService

1. En el proyecto Benefits de la solución 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 botón derecho en

BenefitsVB o BenefitsCS y clic en Agregar referencia Web. b. En el cuadro de texto Dirección, 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 botón derecho en localhost, y seleccionar Cambiar nombre.

3. Escribir DentalWebRef, y pulsar ENTER. 4. Generar la solución haciendo clic en Generar solución en el menú

Generar.

Page 519: Microsoft ASP.net - Curso Completo - Espa Ol

7

Ejercicio 1 Utilizar variables de sesión

En este ejercicio, almacenaremos el nombre y la fecha de nacimiento del usuario en variables de sesión. Tanto el control de usuario namedate.ascx como la página life.aspx buscarán las variables de sesión y rellenarán los cuadros de texto adecuados con la información, si está disponible. Si las variables de sesión no existen todavía, una de las páginas las creará.

En la aplicación Web actual, un usuario debe introducir información redundante en múltiples páginas. Por ejemplo, el usuario debe suministrar su nombre y fecha de nacimiento en la página médica y en la página de seguro de vida. Para simplificar el uso de la aplicación Web, utilizaremos una cookie para almacenar esta información en variables de sesión y así el usuario sólo deberá introducir esta información una única vez.

Obtener y establecer variables de sesión en life.aspx

1. En Visual Studio .NET, abrir la página de código subyacente life.aspx del proyecto Benefits.

2. Agregar código al procedimiento de evento Page_Load que obtiene las variables de sesión Name y Birth.

3. Establecer la propiedad Text del cuadro de texto txtName con el contenido de la variable de sesión Name, y establecer la propiedad Text del cuadro de texto txtBirth con el contenido de la variable de sesión Birth.

4. El código debería ser similar al siguiente: If Not (Page.IsPostBack) Then Dim strName As String = CStr(Session("Name")) Dim strBirth As String = CStr(Session("Birth")) txtName.Text = strName txtBirth.Text = strBirth End If if (!Page.IsPostBack) { string strName = (string)Session["Name"]; string strBirth = (string)Session["Birth"]; txtName.Text = strName; txtBirth.Text = strBirth; }

5. En el procedimiento de evento cmdSave_Click, buscar el siguiente comentario: 'TODO Lab 14: Set Session variables //TODO Lab 14: Set Session variables

Si esta sección de código no se encuentra en nuestro archivo life.aspx, podemos copiar el código del archivo life.aspx en la carpeta VB\Starter\BenefitsVB o CS\Starter\BenefitsCS. Estos archivos pueden encontrarse dentro del fichero labs12.zip

Escenario

Visual Basic .NET

Visual C#

Visual Basic .NET

Visual C#

Nota

Page 520: Microsoft ASP.net - Curso Completo - Espa Ol

8

6. Agregar el código bajo este comentario que asigna el texto del cuadro de texto txtName a la variable de sesión Name, y asigna el texto del cuadro de texto txtBirth a la variable de sesión Birth.

7. El código debería ser similar al siguiente: Session("Name") = txtName.Text Session("Birth") = txtBirth.Text Session["Name"] = txtName.Text; Session["Birth"] = txtBirth.Text;

Obtener y establecer variables de sesión en la página de código 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 código al procedimiento de evento Page_Load que recupera las variables de sesión Name y Birth.

3. Establecer la propiedad Text para el cuadro de texto txtName con el contenido de la variable de sesión Name, y establecer la propiedad Text del cuadro de texto txtBirth con el contenido de la variable de sesión Birth.

4. El código debería ser similar al siguiente: If Not (Page.IsPostBack) Then Dim strName As String = CStr(Session("Name")) Dim strBirth As String = CStr(Session("Birth")) txtName.Text = strName txtBirth.Text = strBirth End If if (!Page.IsPostBack) { string strName = (string)Session["Name"]; string strBirth = (string)Session["Birth"]; txtName.Text = strName; txtBirth.Text = strBirth; }

Visual Basic .NET

Visual C#

Visual Basic .NET

Visual C#

Page 521: Microsoft ASP.net - Curso Completo - Espa Ol

9

5. En la instrucción Get de la propiedad pública strName, agregar una línea de código precediendo a la instrucción Return que establezca la variable de sesión Name con el texto del cuadro de texto txtName. La instrucción Get debería ser similar a la siguiente: Get Session("Name") = txtName.Text Return txtName.Text End Get get { Session["Name"] = txtName.Text; return txtName.Text; }

6. En la instrucción Get de la propiedad pública dtDate, agregar una línea de código precediendo a la instrucción Return que establezca la variable de sesión Birth con el texto del cuadro de texto txtBirth. La instrucción Get debería ser similar a la siguiente: Get Session("Birth") = txtBirth.Text Return CDate(txtBirth.Text) End Get get { Session["Birth"] = txtBirth.Text; return Convert.ToDateTime(txtBirth.Text); }

Evaluar el código

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 sesión.

5. Cambiar nuestro nombre en el cuadro de texto, y hacer clic en Save. 6. Hacer clic en el enlace a Life Insurance y comprobar que nuestro nombre

ha cambiado en el formulario Web Form life.aspx.

Visual Basic .NET

Visual C#

Visual Basic .NET

Visual C#

Page 522: Microsoft ASP.net - Curso Completo - Espa Ol

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 página default.aspx, sus selecciones aparecerán en la página.

Antes de que el usuario finalice el proceso de selección de beneficios, debería poder ver estas selecciones en una sola página. Hemos escogido ver una lista de los beneficios seleccionados en la página default.aspx. Mostraremos todos los beneficios seleccionados en la página default.aspx utilizando una cookie persistente.

Para ambas páginas, medical.aspx y life.aspx, agregaremos código que lea los valores existentes de la cookie, los actualice y rescriba la cookie.

Configurar la página de inicio

1. Abrir la página 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 ilustración.

Escenario

Page 523: Microsoft ASP.net - Curso Completo - Espa Ol

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 código para leer de una

cookie denominada Benefits. Este código debería añadirse tras la condición Page.IsPostBack existente.

6. Declarar dos variables, strDoc y strLife, que almacenarán los valores doctors y life de la cookie Benefits.

7. Si la cookie existe y no está vacía, establecer la propiedad Text del cuadro de texto txtDoctors en strDoc, y establecer la propiedad de texto de txtLife en strLife. El código debería ser similar al siguiente: Dim objGetCookie As HttpCookie = _ Request.Cookies("Benefits") Dim strDoc As String Dim strLife As String If Not objGetCookie Is Nothing Then strDoc = objGetCookie.Values("doctor") strLife = objGetCookie.Values("life") txtDoctor.Text = strDoc txtLife.Text = strLife End If HttpCookie objGetCookie = Request.Cookies["Benefits"]; string strDoc; string strLife; if (objGetCookie != null) { strDoc = objGetCookie.Values["doctor"]; strLife = objGetCookie.Values["life"]; txtDoctor.Text = strDoc; txtLife.Text = strLife; }

8. Guardar default.aspx.

Visual Basic .NET

Visual C#

Page 524: Microsoft ASP.net - Curso Completo - Espa Ol

12

Almacenar la selección de doctores

1. Abrir medical.aspx.vb o medical.aspx.cs. 2. En el procedimiento de evento cmdSave_Click, agregar código que

recupere toda la información de la cookie Benefits, pero sólo si la cookie existe y contiene información. Este código añadido debería incluir dos variables de tipo cadena que almacenarán los valores de los doctores y del seguro de vida de la cookie. El código debería ser similar al siguiente: Dim objCookie As HttpCookie = Request.Cookies("Benefits") Dim strDoc As String Dim strLife As String If Not objCookie Is Nothing Then strDoc = objCookie.Values("doctor") strLife = objCookie.Values("life") End If HttpCookie objGetCookie = Request.Cookies["Benefits"]; string strDoc =""; string strLife =""; if (objGetCookie != null) { strDoc = objGetCookie.Values["doctor"]; strLife = objGetCookie.Values["life"]; }

3. Agregar código 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 información actualizada.

c. Establecer la fecha de expiración de la cookie Benefits a 30 días a partir de la fecha actual.

d. Agregar a la cookie dos valores, denominados doctor y life. Estos valores contendrán strDoc y strLife, respectivamente.

e. Escribir la cookie objNewCookie.

Visual Basic .NET

Visual C#

Page 525: Microsoft ASP.net - Curso Completo - Espa Ol

13

El código debería ser similar al siguiente: strDoc = txtDoctor.Text Dim objNewCookie As New HttpCookie("Benefits") objNewCookie.Expires = DateTime.Now.AddDays(30) objNewCookie.Values.Add("doctor", strDoc) objNewCookie.Values.Add("life", strLife) Response.Cookies.Add(objNewCookie) strDoc = txtDoctor.Text; HttpCookie objNewCookie = new HttpCookie("Benefits"); objNewCookie.Expires = DateTime.Now.AddDays(30); objNewCookie.Values.Add("doctor", strDoc); objNewCookie.Values.Add("life", strLife); Response.Cookies.Add(objNewCookie);

4. Finalmente, debemos agregar código al procedimiento de evento cmdSave_Click que redirecciona al usuario de regreso a la página default.aspx. El código agregado debería ser similar al siguiente: Response.Redirect("default.aspx") Response.Redirect("default.aspx");

5. Guardar el archivo medical.aspx.vb o medical.aspx.cs.

Almacenar las selecciones de seguro de vida (life insurance)

1. Abrir life.aspx.vb o life.aspx.cs. 2. En el procedimiento de evento cmdSave_Click, agregar código que

recupere toda la información de la cookie Benefits, pero sólo si la cookie existe y contiene información. Este código es idéntico al código agregado a medical.aspx.

3. Buscar la siguiente línea de código: 'TODO Lab 14: Build the string //TODO Lab 14: Build the string

Si esta sección de código no se encuentra en nuestro archivo life.aspx, podemos copiar el código del archivo life.aspx file de la carpeta carpeta_instalación\Labfiles\Lab14\VB\Starter\BenefitsVB o carpeta_instalación\Labfiles\Lab14\CS\Starter\BenefitsCS.

Visual Basic .NET

Visual C#

Visual Basic .NET

Visual C#

Visual Basic .NET

Visual C#

Note

Page 526: Microsoft ASP.net - Curso Completo - Espa Ol

14

4. Eliminar el comentario del código bajo este comentario. Este código 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 código para crear y escribir la cookie Benefits. Este código es idéntico al código agregado a medical.aspx.

6. Agregar código para redireccionar la página de regreso a la página default.aspx.

7. Una vez finalizado, todo el procedimiento de evento cmdSave_Click de life.aspx debería ser similar al siguiente: If Page.IsValid Then lblMessage.Text = "Valid!" 'TODO Lab 14: Set Session variables Session("Name") = txtName.Text Session("Birth") = txtBirth.Text Dim objCookie As HttpCookie = _ Request.Cookies("Benefits") Dim strDoc As String Dim strLife As String If Not objCookie Is Nothing Then strDoc = objCookie.Values("doctor") strLife = objCookie.Values("life") End If If (chkShortTerm.Checked) Then If (chkLongTerm.Checked) Then strLife = "Short Term and Long Term" Else strLife = "Short Term" End If ElseIf (chkLongTerm.Checked) Then strLife = "Long Term" End If strLife &= ": Coverage = $" & txtCoverage.Text Dim objNewCookie As New HttpCookie("Benefits") objNewCookie.Expires = DateTime.Now.AddDays(30) objNewCookie.Values.Add("doctor", strDoc) objNewCookie.Values.Add("life", strLife) Response.Cookies.Add(objNewCookie) Response.Redirect("default.aspx") End If

Podemos copiar y pegar este código desde el archivo VB\Starter\life.txt. Este archivo puede encontrarse dentro del fichero

labs12.zip

Visual Basic .NET

Nota

Page 527: Microsoft ASP.net - Curso Completo - Espa Ol

15

if (Page.IsValid) { lblMessage.Text = "Valid!"; //TODO Lab 14: Set Session variables Session["Name"] = txtName.Text; Session["Birth"] = txtBirth.Text; HttpCookie objCookie = Request.Cookies["Benefits"]; string strDoc = ""; string strLife = ""; if (objCookie != null) { strDoc = objCookie.Values["doctor"]; strLife = objCookie.Values["life"]; } if (chkShortTerm.Checked) { if (chkLongTerm.Checked) { strLife = "Short Term and Long Term"; } else { strLife = "Short Term"; } } else if (chkLongTerm.Checked) { strLife = "Long Term"; } strLife += ": Coverage = $" + txtCoverage.Text; HttpCookie objNewCookie = new HttpCookie("Benefits"); objNewCookie.Expires = DateTime.Now.AddDays(30); objNewCookie.Values.Add("doctor", strDoc); objNewCookie.Values.Add("life", strLife); Response.Cookies.Add(objNewCookie); Response.Redirect("default.aspx"); }

Podemos copiar y pegar este código desde el archivo CS\Starter\life.txt. Este archivo puede encontrarse dentro del

fichero labs12.zip

8. Guardar el archivo life.aspx.vb o life.aspx.cs.

Visual C#

Nota

Page 528: Microsoft ASP.net - Curso Completo - Espa Ol

16

Probar la cookie

1. Generar y examinar la página default.aspx. 2. Hacer clic en el enlace a Medical. 3. Rellenar la información requerida y hacer clic en Save. 4. Seremos retornados a default.aspx, y la información de doctores se ha

cumplimentado. 5. Hacer clic en el enlace a Life Insurance. 6. Rellenar la información requerida, seleccionar una o ambas opciones de

periodo de cobertura, y hacer clic en Save. 7. Seremos retornados a default.aspx y la información relativa al seguro de

vida se ha cumplimentado.

Page 529: Microsoft ASP.net - Curso Completo - Espa Ol

17

Ejercicio 3 Utilizar variables de aplicación

En este ejercicio, agregaremos un contador de páginas a la página retirement.aspx.

Deseamos proporcionar una forma rápida y sencilla para que los directivos puedan ver cuántos empleados acceden al sitio Web Benefits. Para ello, hemos decidido implementar un contador de páginas en la página default.aspx utilizando una variable de aplicación. Debemos asegurarnos de que el contador no se incrementa cuando tiene lugar el postback de una página, y que sólo cuenta las visitas únicas a la página.

Agregar componentes de la interfaz de usuario (IU)

1. Abrir la página retirement.aspx. 2. Agregar dos etiquetas y un cuadro de texto en la parte inferior del

formulario, para que éste tenga un aspecto similar al siguiente.

3. Ponerle el nombre txtVisits al nuevo cuadro de texto.

Escenario

Page 530: Microsoft ASP.net - Curso Completo - Espa Ol

18

Agregar el código

1. En el procedimiento de evento Page_Load, agregar código que incremente el valor de la variable de aplicación Visits en una unidad.

2. El código debería bloquear la variable de aplicación antes de incrementarla, y debería desbloquearla después de incrementarla. Insertar el código de modo que se ejecute únicamente cuando la página no envíe información de retorno en el postback.

3. Agregar código para establecer la propiedad Text de txtVisits al valor almacenado en la variable de aplicación Visits. Este código debería ejecutarse cada vez que se cargue la página.

4. Una vez finalizado, el procedimiento de evento Page_Load debería ser similar al siguiente: If Not Page.IsPostBack Then Dim dsRetirement As New DataSet() dsRetirement.ReadXml( _ Server.MapPath("mutual_funds.xml")) dgRetirement.DataSource = dsRetirement dgRetirement.DataBind() Application.Lock() Application("Visits") = CInt(Application("Visits")) + 1 Application.UnLock() End If txtVisits.Text = CStr(Application("Visits")) if (!Page.IsPostBack) { DataSet dsRetirement = new DataSet(); dsRetirement.ReadXml( Server.MapPath["mutual_funds.xml"]); dgRetirement.DataSource = dsRetirement; dgRetirement.DataBind(); Application.Lock(); Application["Visits"] =Convert.ToInt16(Application["Visits"]) + 1; Application.UnLock(); } txtVisits.Text = Application["Visits"].ToString();

Probar la variable de aplicación

1. Generar y examinar la página retirement.aspx. 2. Actualizar el navegador. 3. El contador de páginas se incrementa cada vez que actualizamos la página.

Visual Basic .NET

Visual C#

Page 531: Microsoft ASP.net - Curso Completo - Espa Ol

19

Ejercicio 4 Almacenar variables de sesión en una base de datos

En este ejercicio, almacenaremos las variables de sesión de nombre de usuario y fecha de nacimiento en una base de datos SQL Server.

Para preparar nuestro sitio Web a una implantación en una granja Web, las variables de sesión se almacenarán en una ubicación centralizada. Hemos decidido utilizar una base de datos SQL Server como solución de almacenamiento a corto plazo.

Configurar Web.config

1. Abrir el archivo Web.config de la aplicación Web Benefits. 2. Buscar el elemento sessionState. 3. Cambiar el modo de sessionState por SQLServer, y establecer la cadena de

conexión para utilizar la seguridad integrada para conectarse a localhost. Una vez finalizado, el elemento sessionState debería ser similar al siguiente: <sessionState mode="SQLServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1; Integrated Security=SSPI" cookieless="false" timeout="20" />

Debido a que el archivo Web.config es un archivo Extensible Markup Language (XML), es importante el uso correcto de mayúsculas 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 sesión están 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 Línea de comandos. Se abrirá una ventana de comandos.

2. En la línea de comandos, escribir el siguiente comando, siendo version la última versión del .NET Framework instalada en nuestro equipo, y pulsar ENTER: cd \WINDOWS\Microsoft.NET\Framework\version\ La línea de comandos cambia al nuevo directorio.

Escenario

Importante

Page 532: Microsoft ASP.net - Curso Completo - Espa Ol

20

3. En la línea de comandos, escribir el siguiente comando y pulsar ENTER: OSQL –S localhost –E <InstallSqlState.sql La ventana de comandos muestra una serie de números y mensajes, y regresa a la línea de comandos. Las bases de datos ASPState y tempdb se han restablecido.

4. Cerrar la línea de comandos, y abrir Windows Explorer. 5. Ir al siguiente directorio:

VB\Starter CS\Starter Estas carpetas pueden encontrarse dentro del fichero labs12.zip

6. Hacer doble clic en Lab12.bat. Este archivo por lotes ejecuta una consulta SQL que configura la seguridad de las bases de datos ASPState y tempdb.

7. Cerrar Windows Explorer.

Probar la aplicación Web

1. Generar y examinar la página default.aspx para probar la aplicación Web Benefits.

2. Hacer clic en el enlace a Medical, introducir la información necesaria, y hacer clic en Save.

3. Hacer clic en el enlace a Life Insurance. Comprobar que las variables de sesión que contienen nuestro nombre y fecha de nacimiento funcionan correctamente.

Visual Basic .NET Visual C#

Page 533: Microsoft ASP.net - Curso Completo - Espa Ol

Índice

Descripción 1

Lección: administración del estado 2

Lección: variables de aplicación y de sesión 17

Lección: cookies y sesiones que no utilizan cookies 29

Administración del estado

Page 534: Microsoft ASP.net - Curso Completo - Espa Ol
Page 535: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 1

Descripción

Administración del estado

Variables de aplicación y de sesión

Cookies y sesiones que no utilizan cookies

***

Microsoft® ASP.NET permite administrar el estado de una aplicación Web. El estado es la capacidad de una aplicación Web de conservar la información del usuario.

En este módulo, estudiaremos cómo administrar el estado de una aplicación Web ASP.NET.

En este módulo, aprenderemos a:

Describir la administración del estado y las distintas opciones disponibles para administrar el estado en una aplicación Web ASP.NET.

Utilizar variables de aplicación y de sesión 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.

Introducción

Objetivos

Page 536: Microsoft ASP.net - Curso Completo - Espa Ol

2 Administración del estado

Lección: administración del estado

¿Qué es la administración del estado?

Tipos de administración del estado

Administración del estado en el lado del servidor

Administración del estado en el lado del cliente

El archivo Global.asax

***

La conexión que se establece entre un usuario (el equipo cliente) y un servidor Web se denomina sesión. Las sesiones pueden abarcar múltiples páginas Web y su seguimiento se realiza mediante la administración del estado.

La administración del estado es el proceso por el cual mantenemos la misma información a través de múltiples peticiones para las mismas o distintas páginas Web.

En esta lección, empezaremos a conocer en detalle qué es la administración del estado y por qué es importante administrar el estado. Estudiaremos la administración del estado en el lado del servidor y la administración del estado en el lado del cliente. También estudiaremos el archivo global.asax.

En esta lección, aprenderemos a:

Describir la administración del estado. Identificar los distintos tipos de opciones de administración del estado. Describir la administración del estado en el lado del servidor. Describir la administración del estado en el lado del cliente. Describir los distintos eventos que controla el archivo global.asax.

Introducción

Objetivos de la lección

Page 537: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 3

¿Qué es la administración del estado?

Nombre

Apellido

Introduzca su información de inicio de sesión:

John

EnviarEnviar

Chen

Servidor WebServidor Web

Login.aspx Login.aspx

Servidor WebServidor Web

Hola John Chen

Greetings.aspx

Introduzca su información de inicio de sesión:

John

EnviarEnviar

Chen

Hola

Greetings.aspx

¡¡He olvidado quién eres!!

¡¡He olvidado quién eres!!

Nombre

Apellido

Sin administración del estado

Con administración del estado

***

Al igual que las tecnologías basadas en Hypertext Transfer Protocol (HTTP), los formularios Web Forms no tienen estado, lo que significa que no indican automáticamente si las peticiones de una secuencia son todas del mismo cliente ni si una única instancia de navegador sigue visualizando de forma activa una página Web o un sitio Web. Además, las páginas Web se destruyen y vuelven a crearse a continuación con cada nueva petición al servidor Web; por tanto, la información de las páginas no existe más allá del ciclo de vida de una única página.

ASP.NET ofrece una administración del estado que guarda información en el servidor entre páginas, que ayuda a mantener la continuidad de la información del usuario (estado) durante una visita a un sitio Web.

Si se mantiene el estado entre páginas, la información suministrada originalmente por los usuarios puede ser reutilizada; por ello, los usuarios no necesitan volver a introducir la misma información varias veces cada vez que se envía una página de retorno al servidor.

Por ejemplo, en la ilustración anterior, el usuario, John Chen, introduce su nombre en el formulario login.aspx. Después de introducir sus datos personales, esa información se envía al servidor y se muestra la página siguiente, el formulario greetings.aspx. Sin administración del estado, la información que el usuario ha introducido en la primera página se ha perdido.

Sin embargo, si se utiliza administración del estado en la aplicación Web, puede mantenerse el estado a través de varias páginas Web. Por tanto, cuando la información personal del usuario se envía al servidor, la segunda página, el formulario greetings.aspx, da la bienvenida al usuario con su nombre, John

Introducción

Administración del estado

Ejemplo

Page 538: Microsoft ASP.net - Curso Completo - Espa Ol

4 Administración del estado

Chen, que el usuario introdujo en el formulario login.aspx, la primera página de la aplicación Web.

Page 539: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 5

Tipos de administración del estado

Cadenas de consulta Información añadida al final de una URL

Base de datosEn algunos casos, se utiliza el soporte de base de datos para mantener el estado en el sitio Web

Propiedad ViewStateConserva valores entre múltiples peticiones para la misma página

Estado de sesiónLa información está disponible únicamente para el usuario de una sesión específica

CookiesArchivo de texto que almacena información para mantener el estado

Estado de la aplicaciónLa información está disponible para todos los usuarios de una aplicación Web

AdministraciAdministracióón del estado en n del estado en el lado del clienteel lado del cliente

AdministraciAdministracióón del estado en n del estado en el lado del servidorel lado del servidor

***

ASP.NET proporciona dos tipos de administración del estado que pueden utilizarse para mantener el estado entre envíos y respuestas al servidor. La elección de uno de los dos tipos de administración del estado disponibles en ASP.NET depende principalmente de la naturaleza de la aplicación Web.

Los dos tipos de administración del estado son:

Lado servidor Las opciones de la administración del estado en el lado del servidor utilizan recursos del servidor para almacenar la información del estado. La seguridad de estas opciones es mayor que en el lado del cliente.

Lado cliente La administración del estado en el lado del cliente no utiliza recursos del servidor para almacenar la información del estado. Las opciones en el lado del cliente tienden a tener seguridad mínima, pero ofrecen un rápido rendimiento del servidor porque no existe demanda en el servidor para mantener el estado.

La administración del estado en el lado del servidor contiene diferentes opciones a escoger, incluyendo:

Estado de aplicación En el estado de aplicación, la información está disponible para todos los usuarios de una aplicación Web; por ejemplo, almacenar el número de visitantes a una aplicación Web.

Estado de sesión

Introducción

Administración del estado en el lado del cliente y en el lado del servidor

Lado servidor

Page 540: Microsoft ASP.net - Curso Completo - Espa Ol

6 Administración del estado

En el estado de sesión, la información está disponible únicamente para un usuario de una sesión específica de una aplicación Web; por ejemplo, almacenar el esquema de colores preferido de un usuario.

Page 541: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 7

Base de datos Microsoft SQL Server™ o un servidor de estado Otra opción de la administración del estado en el lado del servidor es utilizar la tecnología de bases de datos. Podemos utilizar una base de datos SQL Server o un servidor de estado para almacenar información específica del usuario cuando el almacén de información es de gran tamaño. La base de datos SQL Server o un servidor de estado pueden utilizarse conjuntamente con el estado de sesión y cookies.

El objeto Cache También podemos utilizar el objeto Cache para administrar el estado a nivel de aplicación.

La administración del estado en el lado del cliente también ofrece distintas opciones para mantener el estado. Estas opciones incluyen:

Cookies Una cookie es un archivo de texto que puede utilizarse para almacenar pequeñas cantidades de información necesarias para mantener el estado.

La propiedad ViewState Los formularios Web Forms proporcionan la propiedad ViewState como una estructura incluida para conservar automáticamente valores entre múltiples peticiones a la misma página. La propiedad ViewState se mantiene como un campo oculto en la página.

Cadenas de consulta Una cadena de consulta es información que se añade al final de una URL (Uniform Resource Locator). Un ejemplo típico podría 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 interrogación (?) e incluye dos pares atributo-valor, categoría y precio.

Este módulo cubre información que pertenece únicamente a cookies. Para más información sobre ViewState y cadenas de consulta, consultar la documentación de Microsoft Visual Studio® .NET.

Lado cliente

Nota

Page 542: Microsoft ASP.net - Curso Completo - Espa Ol

8 Administración del estado

Administración del estado en el lado del servidor

El estado de la aplicación es un mecanismo de almacenamiento global accesible desde todas las páginas de la aplicación Web

El estado de sesión está limitado a la sesión de explorador actual

Los valores se conservan mediante el uso de variables de aplicación y de sesiónEscalabilidad

La sesión ASP.NET se identifica con la cadena SessionIDServidor WebServidor Web

Equipo clienteEquipo cliente

Variables de aplicación y de sesión

SessionID

***

ASP.NET ofrece varias opciones para administrar el estado en el lado del servidor. Los estados de aplicación y de sesión son dos de estas opciones. Esta sección trata de los estados de aplicación y de sesión en mayor detalle.

ASP.NET proporciona el estado de aplicación utilizando una instancia de la clase HttpApplicationState para cada aplicación Web activa. El estado de aplicación es un mecanismo de almacenamiento global al que se puede acceder desde todas las páginas de la aplicación Web, y por tanto es útil para almacenar información del usuario que debe preservarse entre transferencias al servidor y viajes entre páginas.

El estado de la aplicación es una estructura de diccionario clave-valor que se crea en cada petición a una URL específica. Podemos agregar la información específica de la aplicación a esta estructura para almacenarla entre peticiones de páginas. Después de agregar la información específica de aplicación al estado de la aplicación, el servidor la gestiona.

ASP.NET proporciona las variables de aplicación que mantienen el estado de aplicación. Los datos ideales para insertar en variables de aplicación son los datos compartidos por múltiples sesiones y que no cambian a menudo.

ASP.NET proporciona estado de sesión utilizando una instancia de la clase HttpSessionState para cada sesión de aplicación Web activa.

El estado de sesión es similar al estado de aplicación, salvo en que está limitado a la sesión actual del navegador. Si distintos usuarios están utilizando una aplicación Web, cada usuario tendrá un estado de sesión distinto. Además, si el mismo usuario abandona la aplicación Web y regresa más tarde, ese usuario también tendrá un estado de sesión distinto al que tenía antes.

Introducción

Estado de aplicación

Variables de aplicación

Estado de sesión

Page 543: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 9

El estado de sesión está almacenado como una estructura de diccionario clave-valor que se utiliza par almacenar información específica de la sesión que debe mantenerse entre transferencias de páginas al servidor y entre peticiones de páginas. Tras agregar la información específica de la aplicación al estado de sesión, el servidor la gestiona. Podemos configurar ASP.NET para automáticamente serialice y almacene la información de sesión en una base de datos SQL Server o en un servidor de estado.

ASP.NET proporciona las variables de sesión necesarias para mantener el estado de sesión. Los datos ideales para almacenar en las variables de estado de sesión son datos fugaces o confidenciales, específicos de una sesión individual.

Los estados de aplicación y de sesión se implementan como una tabla hash, y almacenan datos basándose en combinaciones de pares clave/valor. Una tabla hash es similar al concepto de un objeto dictionary.

Con ASP.NET, el estado de sesión puede utilizarse tanto en configuraciones de múltiples equipos como de múltiples procesos; optimizando por tanto los escenarios de escalabilidad de una aplicación Web.

Cada sesión de aplicación 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 están comunicadas a través 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 configuración de la aplicación Web.

La administración 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, sólo lo que dura una sesión, el mecanismo que ASP.NET utiliza para almacenar la información de sesión, en una base de datos SQL Server o en un servidor de estado, también se utiliza para permitir que la aplicación sea escalable, pero no para un almacenamiento a largo plazo. Si deseamos implementar el almacenamiento a largo plazo de la información de sesión del usuario, debemos requerir a los usuarios que introduzcan su información personal, y deberemos implementar nuestra propia solución de almacenamiento utilizando una base de datos que almacene permanentemente la información personal de usuarios registrados.

Variables de sesión

Nota

Escalabilidad

Identificar y hacer el seguimiento de una sesión

Page 544: Microsoft ASP.net - Curso Completo - Espa Ol

10 Administración del estado

Administración 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 administración del estado en el lado del servidor

El usuario puede eliminar cookies

Menos seguro que las opciones de administración del estado en el lado del servidor

Cantidad de información limitada

Restricciones en el lado del cliente en el tamaño de los archivos Servidor WebServidor Web

Equipo clienteEquipo cliente

Cookies

***

La mayoría de aplicaciones Web utilizan cookies para la administración del estado en el lado del cliente.

Una cookie es una pequeña cantidad de datos que se almacena en un archivo de texto en el sistema de archivos del equipo cliente o en memoria en la sesión cliente-navegador. Una cookie contiene información específica de la página que el servidor envía al cliente, junto con la salida de la página.

Podemos utilizar cookies para almacenar información sobre un determinado cliente, sesión o aplicación. Las cookies se almacenan en el equipo cliente, y cuando el navegador solicita una página, envía la información de la cookie, junto con la información solicitada. El servidor está autorizado a leer la cookie y extraer su valor. Cada cookie contiene la información del dominio que invocó la cookie. Podemos tener varias cookies invocadas para un dominio.

Los dos tipos de cookies son:

Temporales Las cookies temporales, también denominadas cookies de sesión o no persistentes, existen únicamente en la memoria del navegador. Cuando el éste se apaga, las cookies temporales que se han añadido se pierden.

Persistentes Las cookies persistentes son similares a las cookies temporales, excepto en que las cookies persistentes tienen un periodo de expiración fijo. Cuando un navegador solicita una página 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 años, en el equipo cliente. Con Microsoft Internet Explorer, las cookies persistentes se almacenan en un

Introducción

Cookies

Tipos de cookies

Page 545: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 11

archivo denominado [email protected], que se crea en el disco duro del cliente.

Page 546: Microsoft ASP.net - Curso Completo - Espa Ol

12 Administración del estado

Las cookies pueden expirar cuando finaliza la sesión del explorador (cookies temporales), o pueden existir indefinidamente en el equipo cliente, dependiendo de las reglas de expiración del cliente (cookies persistentes).

Los usuarios también pueden decidir eliminar cookies de su equipo antes de que éstas expiren. Por tanto, no existe garantía de que una cookie persistente permanecerá en el equipo de un usuario durante el periodo de tiempo especificado.

Las cookies son menos seguras si las comparamos con las opciones de administración del estado en el lado del servidor. Las cookies también están sujetas a la manipulación. Lo usuarios pueden manipular cookies en su equipo, lo que puede representar potencialmente un compromiso de seguridad o puede hacer que la aplicación que depende de la cookie pueda fallar.

También existe un límite sobre cuánta información puede almacenarse en una cookie ya que los equipos cliente tienen restricciones en el tamaño de los archivos. Además, cada cookie individual puede contener una cantidad limitada de información, no más de 4 kilobytes (KB).

Vencimiento

Seguridad

Información limitada

Page 547: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 13

El archivo Global.asax

Sólo un archivo Global.asax por aplicación Web

Almacenado en la raíz del directorio virtual de la aplicación Web

Utilizado para gestionar eventos de aplicación y de sesión

El archivo Global.asax es opcional

***

El archivo global.asax es un archivo declarativo que se utiliza para la gestión de eventos mientras la aplicación Web se está ejecutando.

Algunas de las características del archivo global.asax son:

Por cada aplicación Web ASP.NET se soporta un archivo global.asax. El archivo global.asax se almacena en la raíz del directorio virtual de la

aplicación Web. El archivo global.asax puede gestionar eventos de aplicación y de sesión

(inicio y final) que pueden utilizarse para inicializar variables de aplicación y de sesión.

El archivo global.asax es opcional. Si no definimos el archivo, el marco de trabajo de las páginas ASP.NET asume que no hemos definido ningún controlador de eventos de aplicación o sesión.

Introducción

Page 548: Microsoft ASP.net - Curso Completo - Espa Ol

14 Administración del estado

El archivo global.asax (continuación)

Servidor Web ASP.NET

Cliente

ASP.NET HTTP RuntimeASP.NET HTTP Runtime

IISIIS

Application_BeginRequestApplication_BeginRequest

Application_AuthenticateRequestApplication_AuthenticateRequest

Application_AuthorizeRequestApplication_AuthorizeRequest

Application_ResolveRequestCacheApplication_ResolveRequestCache

Application_AquireRequestStateApplication_AquireRequestState

Application_PreRequestHandlerExecuteApplication_PreRequestHandlerExecute

Application_EndRequestApplication_EndRequest

Application_UpdateRequestCacheApplication_UpdateRequestCache

Application_ReleaseRequestStateApplication_ReleaseRequestState

Application_PostRequestHandlerExecuteApplication_PostRequestHandlerExecute

Ejecución de la páginaEjecución de la página

PeticiónPetición RespuestaRespuesta

***

El archivo global.asax es un archivo declarativo que se utiliza para gestionar eventos mientras la aplicación Web se está ejecutando.

El archivo global.asax soporta tres categorías de eventos:

Eventos que se invocan cuando se solicita una página. Eventos que se invocan cuando se envía la página solicitada. Eventos de aplicación condicionales.

La siguiente tabla lista los eventos que se invocan cuando se solicita una página.

Nombre del evento Descripción Application_BeginRequest Este evento se invoca cada vez que se

recibe una nueva petición.

Application_AuthenticateRequest Este evento indica que la petición está preparada para ser autenticada.

Application_AuthorizeRequest Este evento indica que la petición está preparada para ser autorizada.

Application_ResolveRequestCache Este evento es utilizado por el módulo de la caché de salida para detener el procesamiento de peticiones que han sido almacenadas en caché.

Application_AcquireRequestState Este evento indica que debería obtenerse el estado para cada petición.

Introducción

Categorías de eventos

Eventos invocados cuando se solicita una página

Page 549: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 15

Application_PreRequestHandlerExecute Este evento indica que el gestor de peticiones está a punto de ejecutarse.

Page 550: Microsoft ASP.net - Curso Completo - Espa Ol

16 Administración del estado

Global.asax también incluye eventos invocados cuando la página solicitada se envía de vuelta al cliente. La siguiente tabla lista estos eventos.

Nombre del evento Descripción Application_PostRequestHandlerExecute Este evento es el primero disponible

después de que el controlador, como una página ASP.NET o un servicio Web, haya finalizado su trabajo.

Application_ReleaseRequestState Este evento se invoca cuando el estado de la petición debe almacenarse, porque la aplicación Web ASP.NET finaliza con él.

Application_UpdateRequestCache Este evento indica que el procesamiento de código ha finalizado y que el archivo está preparado para ser agregado a la caché de ASP.NET.

Application_EndRequest Este evento es el último evento que se invoca cuando finaliza la aplicación Web ASP.NET.

Los eventos de aplicación condicionales son eventos que pueden o no ser lanzados durante le procesamiento de una petición. La siguiente tabla muestra algunos de los eventos de aplicación condicionales más habituales.

Nombre del evento Descripción Application_Start Este evento se invoca cuando se inicia

una aplicación Web ASP.NET.

Application_End Este evento es otro evento de ocurrencia única. Es el evento recíproco de Application_Start; se invoca cuando se cierra la aplicación Web ASP.NET.

Session_Start Este evento se invoca cuando se inicia la Session de un usuario en una aplicación Web ASP.NET.

Session_End Este evento es un evento reciproco de Session_Start; este evento se invoca cuando finaliza la sesión de un usuario.

Application_Error Este evento se invoca cuando ocurre un error no controlado en una aplicación Web ASP.NET.

Eventos invocados cuando se envía la página solicitada

Eventos de aplicación condicionales

Page 551: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 17

Lección: variables de aplicación y de sesión

Inicializar variables de aplicación y de sesión

Utilizar variables de aplicación y de sesión

Demostración: uso de las variables de sesión

Duración de las variables de aplicación y de sesión

Almacenamiento escalable de variables de aplicación y de sesión

Almacenar las variables de aplicación y de sesión en una base de datos

***

Podemos utilizar las variables de aplicación y de sesión para compartir información entre las páginas de una aplicación Web ASP.NET. En esta lección, estudiaremos cómo inicializar y utilizar las variables de aplicación y de sesión. También estudiaremos cómo especificar la duración de las variables de aplicación y de sesión y cómo afectan al almacenamiento escalable. Finalmente, estudiaremos cómo almacenar las variables de aplicación y de sesión en una base de datos.

En esta lección, aprenderemos a:

Inicializar variables de aplicación y de sesión. Establecer y leer variables de aplicación y de sesión. Modificar la duración de la variable de aplicación y de sesión. Describir los métodos en el proceso y fuera del proceso utilizados para

almacenar el estado de sesión. Almacenar variables de aplicación y de sesión en una base de datos.

Introducción

Objetivos de la lección

Page 552: Microsoft ASP.net - Curso Completo - Espa Ol

18 Administración del estado

Inicializar variables de aplicación y de sesión

Las variables se inicializan en Global.asaxEl objeto Application comparte información entre todos los usuarios de una aplicación Web

El objeto Session almacena información para una sesión de usuario concreta

Sub Application_Start(s As Object,e As EventArgs) Application("NumberofVisitors") = 0

End Sub

Sub Application_Start(s As Object,e As EventArgs) Application("NumberofVisitors") = 0

End Sub

protected void Application_Start(Object sender,EventArgs e){

Application["NumberofVisitors"] = 0;}

protected void Application_Start(Object sender,EventArgs e){

Application["NumberofVisitors"] = 0;}

***

Inicializamos las variables de aplicación y de sesión en los procedimientos de eventos Start de los objetos Application y Session del archivo global.asax.

Utilizamos el objeto Session para almacenar la información necesaria de una sesión de usuario concreta. Las variables que se almacenan en el objeto Session no se desecharán cuando el usuario viaje por las distintas páginas de la aplicación Web. En lugar de ello, estas variables persistirán durante toda la sesión del usuario.

El siguiente código de ejemplo muestra cómo se utilizan las variables de sesión para almacenar el esquema de colores preferido de una determinada sesión de usuario:

Sub Session_Start(ByVal Sender As Object, _ ByVal e As EventArgs) Session("BackColor") = "beige" Session("ForeColor") = "black" End Sub protected void Session_Start(Object sender, EventArgs e) { Session["BackColor"] = "beige"; Session["ForeColor"] = "black"; }

Introducción

Variables de sesión

Visual Basic® .NET

C#

Page 553: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 19

Podemos utilizar el objeto Application para compartir información de estado entre todos los usuarios de una aplicación Web. Cuando el primer usuario de la aplicación Web solicita un archivo .aspx, se crea un objeto Application. El objeto Application se destruye cuando todos los usuarios han abandonado la aplicación Web y, a continuación, se descarga la aplicación Web.

Por ejemplo, podríamos almacenar el número total de visitantes de un sitio Web en una variable de nivel de aplicación:

Sub Application_Start(ByVal Sender As Object, _ ByVal e As EventArgs) Application("NumberofVisitors") = 0 End Sub protected void Application_Start(Object sender, EventArgs e) { Application["NumberofVisitors"] = 0; }

Variables de aplicación

Visual Basic .NET

C#

Page 554: Microsoft ASP.net - Curso Completo - Espa Ol

20 Administración del estado

Utilizar variables de aplicación y de sesión

Establecer variables de aplicación y sesión

Leer variables de aplicación y de sesión

Session("BackColor") = "blue"Application.Lock()Application("NumberOfVisitors") += 1

Application.UnLock()

Session("BackColor") = "blue"Application.Lock()Application("NumberOfVisitors") += 1

Application.UnLock()

strBgColor = Session("BackColor")lblNbVisitor.Text = Application("NumberOfVisitors")

strBgColor = Session("BackColor")lblNbVisitor.Text = Application("NumberOfVisitors")

Session["BackColor"] = "blue";Application.Lock();Application["NumberOfVisitors"] =

(int)Application["NumberOfVisitors"] + 1;Application.UnLock();

Session["BackColor"] = "blue";Application.Lock();Application["NumberOfVisitors"] =

(int)Application["NumberOfVisitors"] + 1;Application.UnLock();

strBgColor = (string)Session["BackColor"];lblNbVisitor.Text = Application["NumberOfVisitors"].ToString();

strBgColor = (string)Session["BackColor"];lblNbVisitor.Text = Application["NumberOfVisitors"].ToString();

***

Para utilizar variables de aplicación y de sesión en ASP.NET, simplemente utilizamos una clave de cadena y establecemos un valor.

Para establecer la variable de sesión, debemos proporcionar una clave que identifique el elemento que estamos almacenando, utilizando una instrucción como la siguiente:

Session("BackColor") = "blue" La instrucción anterior agrega una clave, denominada BackColor, al estado de sesión con el valor blue.

Puede accederse a las variables de aplicación en un entorno de múltiples usuarios; por ello, cuando se actualicen los datos de Application, debemos evitar que otros usuarios o aplicaciones actualicen los datos simultáneamente. ASP.NET proporciona un sencillo conjunto de métodos de bloqueo, Application.Lock() y Application.UnLock(), que pueden utilizarse para evitar el acceso múltiple y simultáneo de la variable de aplicación. El siguiente código muestra el uso de los métodos Application.Lock() y Application.UnLock():

Application.Lock() Application("NumberOfVisitors") += 1 Application.UnLock() Application.Lock(); Application["NumberofVisitors"] = (int)Application["NumberOfVisitors"] + 1; Application.UnLock();

Introducción

Establecer variables de aplicación y de sesión

Visual Basic .NET

C#

Page 555: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 21

Para utilizar una variable de sesión o de aplicación en una página ASP.NET, simplemente necesitamos leer el valor del objeto Session o Application:

strBgColor = Session("BackColor") lblNbVisitor.Text = Application("NumberOfVisitors") strBgColor = (string)Session["BackColor"]; lblNbVistitor.Text = Application["NumberofVisitors"].ToString();

Leer variables de aplicación y de sesión

Visual Basic.NET

C#

Page 556: Microsoft ASP.net - Curso Completo - Espa Ol

22 Administración del estado

Demostración: uso de las variables de sesión

Inicializar una variable de sesión (un número) en global.asax

Acceder a la variable de sesión desde una página

Acceder a la variable de sesión desde otra página y modificarla

Volver a acceder a la variable de sesión desde la primera página

***

En esta demostración, aprenderemos a utilizar variables de sesión.

El código para esta demostración se encuentra en los proyectos Demo12VB y Demo12CS que se pueden encontrar dentro del fichero demos12.zip.

Ejecutar la demostración

1. Abrir el proyecto Demo12VB o Demo12CS. 2. Abrir la página de código subyacente de global.asax. 3. Inicializar una variable de sesión, denominada intNumber a 3, agregando el

siguiente código al procedimiento de evento Session_Start: Session("intNumber") = 3 Session["intNumber"] = 3;

4. Abrir los archivos UsingSessionVar1.aspx y UsingSessionVar2.aspx. Se recupera la variable de sesión y se muestra en el procedimiento de evento Page_Load.

5. Generar y examinar la página UsingSessionVar1.aspx. Se muestra el valor de la variable de sesión, 3.

6. Hacer clic en Next Page. Se abre la página UsingSessionVar2.aspx, incrementa la variable de sesión 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 sesión.

Introducción

Visual Basic .NET

C#

Page 557: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 23

Duración de la variable de sesión y de aplicación

Las variables de sesión tienen una duración establecida tras el último acceso

20 minutos es la duración predeterminadaLa duración de la sesión puede modificarse en Web.config:

Las variables de aplicación persisten hasta que se provoca el evento Application_End

<configuration><system.web>

<sessionState timeout="10" /></system.web>

</configuration>

<configuration><system.web>

<sessionState timeout="10" /></system.web>

</configuration>

***

HTTP es un protocolo sin estado. Un servidor Web no tiene medios para detectar cuando un usuario abandona un sitio Web. En cambio, el servidor Web detecta que ha transcurrido un determinado periodo de tiempo sin que el usuario solicite una página. En ese momento, el servidor Web asume que el usuario ha abandonado el sitio Web y elimina todos los elementos del estado de sesión asociados a ese usuario.

De forma predeterminada, el tiempo de una sesión finaliza cuando un usuario no ha solicitado ninguna página durante más de 20 minutos. Si el mismo usuario solicita una página transcurridos 20 minutos, será tratado como un nuevo usuario.

Establecer duraciones de sesión más cortas permite al sitio Web ahorrar recursos en el servidor Web. En cambio, si nuestra previsión es que el usuario pase más de 20 minutos en nuestro sitio Web, deberíamos establecer una duración de sesión más larga.

Podemos modificar la duración de la sesión en el archivo Web.config. Los archivos Web.config son archivos Extensible Markup Language (XML) estándares 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 duración de la sesión está establecida en 10 minutos:

<configuration> <system.web> <sessionState timeout="10" /> </system.web> </configuration>

Introducción

Duración predeterminada de la sesión

Nota

Modificar la duración de la sesión

Page 558: Microsoft ASP.net - Curso Completo - Espa Ol

24 Administración del estado

Las variables de aplicación persisten hasta que se invoca el evento Application_End. Application_End se invoca inmediatamente antes del final de todas las instancias de la aplicación.

Variable de aplicación

Page 559: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 25

Almacenamiento escalable de variables de aplicación y de sesión y

Por defecto, el estado de sesión se administra en proceso (in process)Inconveniente del almacenamiento en proceso:

No escalableASP.NET proporciona almacenamiento fuera del proceso (out of process)del estado de sesión

El estado puede almacenarse en una base de datos SQL Server o unservidor de estado

Ventajas del almacenamiento fuera del proceso:Escalabilidad

SQL

Variables de sesión y de aplicación

Cliente

Granja Web

Variables de sesión y de aplicación

-O-

Servidor de estado

***

Por defecto, el estado de sesión se administra en proceso (in process). En proceso significa que toda la información que se agrega a un estado de sesión se almacena en el mismo servidor Web que está ejecutando la aplicación Web ASP.NET. Sin embargo, el almacenamiento en proceso del estado de sesión tiene algunos inconvenientes importantes.

Uno de los principales inconvenientes del almacenamiento del estado de sesión en proceso es que limita la escalabilidad de nuestro sitio Web. No podemos configurar múltiples servidores para gestionar peticiones.

ASP.NET ofrece dos métodos que pueden utilizarse para almacenar estado de sesión fuera de proceso (out of process). Podemos:

Administrar el estado de sesión en una base de datos SQL Server. Administrar el estado de sesión en un servidor de estado distinto.

Cualquier servidor basado en Microsoft Windows® puede ser un servidor de estado.

Para almacenar el estado de sesión fuera de proceso, debemos modificar el archivo Web.config para establecer el modo sessionstate con el valor sqlserver o stateserver, y especificar la ubicación del servidor. La opción sqlserver es similar a la opción stateserver, salvo en que en la primera la información persiste en SQL Server en lugar de almacenarse en la memoria del equipo.

La principal ventaja de separar el almacenamiento del estado de sesión de la aplicación Web es que podemos utilizar un servidor de estado externo o un equipo que ejecute SQL Server para almacenar el estado de sesión, haciendo por tanto que la aplicación Web sea escalable. Para conseguir aplicaciones Web

Introducción

Inconveniente del almacenamiento en proceso

Fuera de proceso

Ventaja del almacenamiento fuera de proceso

Page 560: Microsoft ASP.net - Curso Completo - Espa Ol

26 Administración del estado

ASP.NET escalables, el estado de sesión debe estar compartido por múltiples servidores que soporten el escenario de granja Web. En un escenario de granja Web, múltiples servidores están configurados para gestionar las peticiones de los usuarios y, en consecuencia, éstas pueden ser ruteadas dinámicamente desde un servidor a otro sin perder las variables de aplicación y de sesión. Además, las variables de sesión pueden recuperarse desde cualquier servidor de la granja Web, ya que están almacenadas en un equipo distinto que ejecuta SQL Server o en un servidor de estado.

Page 561: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 27

Almacenar variables de aplicación y de sesión en una base de datos

Configurar el estado de sesión en Web.configModo establecido a sqlserver o stateserver

A continuación, configurar el servidor SQL Server

OSQL crea varios procedimientos almacenados y bases de datos temporales para almacenar las variables

<sessionState mode="SQLServer" sqlConnectionString="data source=SQLServerName; Integrated security=true" />

<sessionState mode="SQLServer" sqlConnectionString="data source=SQLServerName; Integrated security=true" />

c:\> OSQL –S SQLServerName –E <InstallSqlState.sqlc:\> OSQL –S SQLServerName –E <InstallSqlState.sql

111

222

***

Para almacenar variables de aplicación y de sesión en una base de datos SQL Server o en un servidor de estado, debemos seguir los siguientes pasos:

1. Configurar el estado de sesión en el archivo Web.config del servidor Web. 2. Configurar el servidor SQL Server o el servidor de estado.

En el archivo Web.config, debemos modificar la configuración para establecer el atributo mode de sessionstate a sqlserver o stateserver. A confinuación, 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 sesión en Web.config como muestra el siguiente código:

<sessionState mode="SQLServer" sqlConnectionString="data source=SQLServerName; Integrated security=true" /> Para configurar el servidor SQL Server, debemos utilizar la herramienta desde línea 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 aplicación y de sesión.

Para instalar la base de datos ASPState utilizado seguridad integrada, utilizar la siguiente sintaxis:

Introducción

Configura el estado de sesión en el archivo Web.config de nuestro servidor Web ASP.NET

Configurar el servidor SQL Server

Page 562: Microsoft ASP.net - Curso Completo - Espa Ol

28 Administración del estado

c:\> OSQL –S SQLServerName -E <InstallSqlState.sql

Las opciones del comando OSQL son sensibles a mayúsculas.

Si se utiliza un servidor de estado en lugar de un servidor SQL Server, se debe iniciar el servicio ASP.NET de Windows en lugar de instalar una base de datos.

Importante

Page 563: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 29

Lección: sesiones con y sin cookies

Utilizar cookies para almacenar datos de sesión

Práctica dirigida por el instructor: utilizar variables y cookies

Recuperar información de una cookie

Uso de sesiones que no utilizan cookies

Configurar sesiones que no utilizan cookies

***

Las cookies son un medio por el cual la aplicación Web que se ejecuta en el servidor Web puede hacer que un cliente devuelva información al servidor Web con cada solicitud HTTP. La devolución de información puede utilizarse para mantener el estado con el cliente entre múltiples peticiones. Las cookies se envían al cliente como parte del encabezado HTTP en una solicitud del cliente, o se envían en una respuesta del servidor.

En esta lección, estudiaremos cómo utilizar cookies para almacenar datos de sesión, y cómo recuperar esos datos de una cookie. También estudiaremos las sesiones que no utilizan cookies y cómo se establecen.

En esta lección, aprenderemos a:

Utilizar cookies para almacenar datos de sesión. Recuperar información de una cookie. Describir sesiones que no utilizan cookies. Establecer una sesión que no utiliza cookies.

Introducción

Objetivos de la lección

Page 564: Microsoft ASP.net - Curso Completo - Espa Ol

30 Administración del estado

Utilizar cookies para almacenar datos de sesión

Crear una cookie:

La cookie contiene información sobre el nombre de dominio

HttpCookie objCookie = new HttpCookie("myCookie");DateTime now = DateTime.Now;

objCookie.Values.Add("Time", now.ToString());objCookie.Values.Add("ForeColor", "White");objCookie.Values.Add("BackColor", "Blue");

Response.Cookies.Add(objCookie);

HttpCookie objCookie = new HttpCookie("myCookie");DateTime now = DateTime.Now;

objCookie.Values.Add("Time", now.ToString());objCookie.Values.Add("ForeColor", "White");objCookie.Values.Add("BackColor", "Blue");

Response.Cookies.Add(objCookie);

HttpCookie objCookie = new HttpCookie("myCookie");DateTime now = DateTime.Now;

objCookie.Values.Add("Time", now.ToString());objCookie.Values.Add("ForeColor", "White");objCookie.Values.Add("BackColor", "Blue");

objCookie.Expires = now.AddHours(1);

Response.Cookies.Add(objCookie);

HttpCookie objCookie = new HttpCookie("myCookie");DateTime now = DateTime.Now;

objCookie.Values.Add("Time", now.ToString());objCookie.Values.Add("ForeColor", "White");objCookie.Values.Add("BackColor", "Blue");

objCookie.Expires = now.AddHours(1);

Response.Cookies.Add(objCookie); Para crear una cookie persistente, especificar el tiempo de expiración

Set-Cookie: Username=John+Chen; path=/; domain=microsoft.com;Expires=Tuesday, 01-Feb-05 00.00.01 GMT

Set-Cookie: Username=John+Chen; path=/; domain=microsoft.com;Expires=Tuesday, 01-Feb-05 00.00.01 GMT

***

Podemos crear cookies utilizando la propiedad Cookies del objeto Response y la clase Request. La propiedad Cookies representa una colección de cookies y es una instancia de la clase HttpCookieCollection.

El siguiente código crea una nueva cookie denominada myCookie:

Dim objCookie As New HttpCookie("myCookie") Dim now As DateTime = DateTime.Now HttpCookie objCookie = new HttpCookie("MyCookie"); DateTime now = DateTime.Now; El siguiente código agrega un par de claves y valores:

objCookie.Values.Add("Time", now.ToString()) objCookie.Values.Add("ForeColor", "White") objCookie.Values.Add("BackColor", "Blue") objCookie.Values.Add("Time", now.ToString()); objCookie.Values.Add("ForeColor", "White"); objCookie.Values.Add("BackColor", "Blue"); El siguiente código establece en una hora el tiempo de expiración de la cookie:

objCookie.Expires = now.AddHours(1)

Introducción

Crear una cookie

Visual Basic .NET

C#

Visual Basic .NET

C#

Hacer una cookie persistente

Visual Basic .NET

C#

Page 565: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 31

objCookie.Expires = now.AddHours(1);

Page 566: Microsoft ASP.net - Curso Completo - Espa Ol

32 Administración del estado

Si no agregamos el código anterior cuando creamos una cookie, ésta será una cookie temporal. La cookie temporal se añade 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 código sobre el tiempo de expiración 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 página Web otra vez hasta que la cookie persistente expire. La expiración de la cookie persistente depende del tiempo de expiración establecido en el código. En el código anterior, la cookie persistente se eliminará transcurrida una hora.

Frecuentemente, las cookies persistentes a menudo se utilizan para almacenar información sobre nombres e identificadores de usuario para que el servidor pueda identificar a los usuarios cuando regresen al sitio Web.

El siguiente código agrega la nueva cookie a la colección de cookies del objeto Response:

Response.Cookies.Add(objCookie) Response.Cookies.Add(objCookie); Supongamos que deseamos crear una cookie, denominada Username, que contiene el nombre de un visitante a nuestro sitio Web. Para crear esta cookie, el servidor Web enviará un encabezado HTTP como muestra el siguiente código:

Set-Cookie: Username=John+Chen; path=/; domain=microsoft.com; Expires=Tuesday, 01-Feb-05 00.00.01 GMT El encabezado del código 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 código de ejemplo anterior limita el dominio dónde el navegador puede enviar la cookie. En el código de ejemplo anterior, la cookie únicamente puede enviarse al sitio Web Microsoft.com. La cookie nunca se enviará a ningún otro sitio Web de Internet.

Después de que el servidor Web cree una cookie, el navegador la devuelve en cada petición 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:

[email protected]

Nota

Visual Basic .NET

C#

Cómo funcionan las cookies

Page 567: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 33

Práctica dirigida por el instructor: utilizar variables y cookies

Los estudiantes:

Aprenderán a utilizar las variables de aplicación y de sesión, y las cookiespersistentes, para almacenar información del usuario

Tiempo: 15 Minutos

***

En esta práctica, veremos cómo se utilizan las variables de aplicación y de sesión, y las cookies persistentes, para almacenar información del usuario.

Iniciar sesión en la aplicación Web

1. Abrir Internet Explorer e ir a: http://máquinaprofesor/Mod14VB/default.aspx o http://máquinaprofesor/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 también muestra el número de visitantes.

3. Actualizar el explorador varias veces. Cada actualización produce un aumento en el número de visitantes, pero nuestro nombre y selección de color permanecen.

4. Cerrar Internet Explorer. 5. Volver a abrir Internet Explorer e ir a:

http://máquinaprofesor/Mod14VB/results.aspx o http://máquinaprofesor/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 también se muestra.

Introducción

Probar la funcionalidad

Page 568: Microsoft ASP.net - Curso Completo - Espa Ol

34 Administración del estado

6. Cerrar Internet Explorer. ¿Por qué se recuerda nuestro nombre cuando volvemos a visitar el sitio, pero no el color seleccionado? _____________________________________________________________

_____________________________________________________________

¿Cómo hace la página el seguimiento del número de visitantes? _____________________________________________________________

_____________________________________________________________

Visualizar el código

1. En el cuadro de dirección de Windows Explorer, escribir: \\máquinaprofesor\c$\inetpub\wwwroot\mod14VB o \\máquinaprofesor\c$\inetpub\wwwroot\mod14CS Y pulsar ENTER.

2. Abrir la página de código subyacente de la página 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 página de código subyacente results.aspx en Visual Studio .NET. En el procedimiento de evento Page_Load, ¿cómo se almacena el número de visitas en la página almacenada? _____________________________________________________________

_____________________________________________________________

¿Por qué el código se ubica en una instrucción If en el procedimiento de evento Page_Load? _____________________________________________________________

_____________________________________________________________

4. Cerrar Visual Studio .NET.

Page 569: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 35

Visualizar la cookie

1. En Windows Explorer, ir al siguiente directorio del equipo: c:\Documents and Settings\Student\Cookies <<Note>>

Si se ha iniciado sesión 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 número de instancia. ¿Qué información podemos encontrar en esta cookie? ____________________________________________________________

____________________________________________________________

3. Cerrar Notepad y Windows Explorer.

Nota

Page 570: Microsoft ASP.net - Curso Completo - Espa Ol

36 Administración del estado

Recuperar información de una cookie

Leer la cookie

Recuperar valores de la cookie lblTime.Text = objCookie.Values("Time")lblTime.ForeColor = System.Drawing.Color.FromName _

(objCookie.Values("ForeColor"))lblTime.BackColor = System.Drawing.Color.FromName _

(objCookie.Values("BackColor"))

lblTime.Text = objCookie.Values("Time")lblTime.ForeColor = System.Drawing.Color.FromName _

(objCookie.Values("ForeColor"))lblTime.BackColor = System.Drawing.Color.FromName _

(objCookie.Values("BackColor"))

Dim objCookie As HttpCookie = Request.Cookies("myCookie")Dim objCookie As HttpCookie = Request.Cookies("myCookie")

HttpCookie objCookie = Request.Cookies["myCookie"];HttpCookie objCookie = Request.Cookies["myCookie"];

lblTime.Text = objCookie.Values["Time"];lblTime.ForeColor = System.Drawing.Color.FromName

(objCookie.Values["ForeColor"]);lblTime.BackColor = System.Drawing.Color.FromName

(objCookie.Values["BackColor"]);

lblTime.Text = objCookie.Values["Time"];lblTime.ForeColor = System.Drawing.Color.FromName

(objCookie.Values["ForeColor"]);lblTime.BackColor = System.Drawing.Color.FromName

(objCookie.Values["BackColor"]);

***

Recuperar información 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 múltiples cookies, separadas por punto y coma. Para leer una cookie existente, podemos acceder a la colección de cookies del objeto Request, como muestra el siguiente código:

Dim objCookie As HttpCookie = Request.Cookies("myCookie") HttpCookie objCookie = Request.Cookies["myCookie"]; El siguiente código 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"]);

Introducción

Leer una cookie

Visual Basic

C#

Recuperar valores de la cookie

Visual Basic .NET

C#

Page 571: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 37

Uso de sesiones que no utilizan cookies

Cada sesión activa está identificada y se realiza su seguimiento utilizando IDs de sesiónLos IDs de sesión se comunican entre peticiones cliente-servidor utilizando una cookie HTTP o incluyéndolos en la URLSesiones que no utilizan cookies

La información de ID de sesión está codificada en URLs

No pueden utilizar URLs absolutas La mayoría de navegadores limitan el tamaño de la URL a 255 caracteres, lo cual limita el uso de IDs para las sesiones que no utilizan cookies

http://server/(h44a1e55c0breu552yrecobl)/page.aspxhttp://server/(h44a1e55c0breu552yrecobl)/page.aspx

***

Cada sesión activa está identificada y se realiza su seguimiento utilizando un identificador de sesión SessionID. El SessionID se comunica entre peticiones cliente-servidor utilizando una cookie HTTP o incluyéndolo en la URL. De forma predeterminada, SessionID se almacena en cookies.

Sin embargo, los usuarios pueden deshabilitar cookies mediante una configuración en sus navegadores. Si la cookie no puede agregarse al navegador de un usuario, cada petición que realice el usuario iniciará una nueva sesión de usuario. Los datos de sesión asociados a ese usuario se pierden cuando se solicita una nueva página.

El marco de trabajo de las páginas ASP.NET incluye una opción que habilita sesiones que no utilizan cookies. Las sesiones que no utilizan cookies permiten aprovechar el estado de sesión incluso con navegadores que tienen deshabilitado el soporte de cookies.

Cuando un usuario realiza la primera petición a un sitio Web teniendo habilitado sesiones que no utilizan cookies, la URL que se utiliza para la petición se modifica automáticamente para incluir el SessionID del usuario. Por ejemplo, cuando un usuario solicita http://server/page.aspx, la solicitud se modifica automáticamente a:

http://server/(h44a1e55c0breu552yrecobl)/page.aspx la parte de la URL que aparece en paréntesis es el SessionID del usuario actual.

Después de que el SessionID se incluya en la URL de la petición de la primera página, el SessionID hace seguimiento del usuario durante su visita al sitio Web.

Introducción

Sesiones que no utilizan cookies

Page 572: Microsoft ASP.net - Curso Completo - Espa Ol

38 Administración del estado

Existen algunas limitaciones en el uso sesiones que no utilizan cookies:

Si decidimos utilizar sesiones que no utilizan cookies, no podemos utilizar URLs absolutas para los enlaces entre páginas. El sitio Web debe diseñarse de forma que cada enlace utilice una URL relativa a la página actual.

La mayoría de navegadores limitan el tamaño de la URL a 255 caracteres.

Limitación de las sesiones que no utilizan cookies

Page 573: Microsoft ASP.net - Curso Completo - Espa Ol

Administración del estado 39

Configuración de sesiones que no utilizan cookies

El estado de sesión se configura en la sección <SessionState> de Web.config

Configurar cookieless = true

<sessionState cookieless="true" /><sessionState cookieless="true" />

***

Para habilitar sesiones que no utilizan cookies, es necesario modificar un único atributo del archivo Web.config.

En la sección <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 código:

<sessionState cookieless="true" />

Introducción

Configurar una sesión que no utiliza cookies

Page 574: Microsoft ASP.net - Curso Completo - Espa Ol

Índice

Descripción 2

Lección: uso del objeto Cache 3

Lección: uso de la caché de resultados de ASP.NET 15

Lección: configurar una aplicación Web ASP.NET 25

Lección: implementar una aplicación Web ASP.NET 43

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

Page 575: Microsoft ASP.net - Curso Completo - Espa Ol
Page 576: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 2

Descripción

Uso del objeto Cache

Uso de la caché de resultados ASP.NET

Configurar una aplicación Web ASP.NET

Implementar una aplicación Web ASP.NET

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

Una vez finalizado el desarrollo de nuestra aplicación Web con Microsoft®

ASP.NET, podemos implementarla en un servidor de producción. Sin embargo, antes de la implementación, podríamos optimizar la aplicación Web para mejorar su rendimiento.

Podemos optimizar e implementar a continuación la aplicación Web:

Configurando el objeto Cache y la caché de resultados para optimizar los tiempos de respuesta de la aplicación Web.

Organizando la configuración de la aplicación 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 copiándolos en el servidor de producción.

En este módulo, aprenderemos a:

Utilizar el objeto Cache para almacenar información. Utilizar la caché de resultados ASP.NET para almacenar páginas Web y

fragmentos de páginas Web. Configurar una aplicación Web ASP.NET utilizando los archivos

Machine.config y Web.config. Implementar una aplicación Web ASP.NET.

Introducción

Objetivos

Page 577: Microsoft ASP.net - Curso Completo - Espa Ol

3 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

Lección: uso del objeto Cache

¿Qué es el objeto Cache?

Ventajas de utilizar el objeto Cache

Cómo utilizar el objeto Cache

Eliminar elementos del objeto Cache

Demostración: utilizar el objeto Cache

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

Una de las formas más eficaces de incrementar el rendimiento de una aplicación 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 rápidamente. 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 lección, estudiaremos cómo configurar el objeto Cache para optimizar los tiempos de respuesta de una aplicación Web.

En esta lección, 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 aplicación Web. Eliminar elementos de un objeto Cache transcurrido un periodo de tiempo,

o cuando cambie el elemento, para limitar el uso de memoria.

Introducción

Objetivos de la lección

Page 578: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 4

¿Qué es el objeto Cache?

Un objeto utilizado para almacenar información

Un objeto Cache por aplicación Web

Una alternativa a las variables de aplicación

No se utiliza para almacenar información en variables de sesión

Utiliza pares clave-valor para almacenar y recuperar elementos

Cache("myKey") = myValueCache("myKey") = myValue

Cache["myKey"] = myValue;Cache["myKey"] = myValue;

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

Un aspecto con el que nos encontraremos cuando generemos aplicaciones Web de alto rendimiento es la necesidad de evitar duplicidad. Un objeto Cache permite almacenar en caché elementos en memoria la primera vez que son solicitados, y utilizar la copia en caché para posteriores peticiones. El uso de la copia en caché evita volver a crear información que satisfizo una solicitud anterior, especialmente información que exige un tiempo significativo del procesador en el servidor cada vez que se crea.

Además 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 páginas Web y controles de usuario. El objeto Cache y la caché de resultados son objetos distintos con roles y propiedades únicos.

ASP.NET proporciona un motor de caché completo que puede utilizarse para almacenar y recuperar porciones de información. El objeto Cache no tiene información 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 políticas de expiración.

El objeto Cache también proporciona un método para pasar valores entre páginas de la misma aplicación Web. Los métodos de caché implementan un bloqueo automático; por tanto, existe seguridad al acceder a los valores simultáneamente desde más de una página.

El proceso para utilizar el objeto Cache es:

Introducción

Un objeto utilizado para almacenar información

Cómo funciona el objeto Cache

Page 579: Microsoft ASP.net - Curso Completo - Espa Ol

5 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

1. Una página solicita un elemento que se ha identificado como almacenado en

el objeto Cache. 2. ASP.NET comprueba el objeto Cache y utiliza la versión en caché si está

disponible. 3. Si no hay una versión en caché disponible, ASP.NET vuelve a crear el

elemento, lo utiliza y lo almacena en el objeto Cache para utilizarlo en el futuro.

ASP.NET crea un único objeto Cache por cada aplicación Web. Los elementos almacenados en el objeto Cache son exclusivos para la aplicación Web y otras aplicaciones Web ejecutándose 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 aplicación Web no es escalable por encima del nivel de una única aplicación Web.

El ciclo de vida de la caché es el mismo que el de la aplicación Web. Cuando la aplicación Web se reinicia, la caché vuelve a crearse.

El objeto Cache puede utilizarse para almacenar información que también podría almacenarse en variables de aplicación. En lugar de volver a crear el valor cada vez que lo utilizamos, cualquier página de la aplicación Web puede acceder a un valor en la caché.

El objeto Cache no puede utilizarse para almacenar información que se encuentra en variables de sesión. Las variables de sesión pueden almacenarse en cookies, la URL (Uniform Resource Locator) de la página, o el control ViewState oculto.

Para más información sobre las variables de aplicación y de sesión, consultar el Módulo “Administración del estado”.

El objeto Cache utiliza pares clave-valor para almacenar y recuperar objetos. La clave es la cadena de la clave de la caché utilizada para referenciar el objeto. El valor es el objeto a almacenar en la caché. En el caso más sencillo, ubicar un elemento en la caché y recuperarlo es exactamente igual que agregar un elemento a un diccionario.

Agregar un elemento a un objeto Cache:

Cache("mykey") = myValue Cache["mykey"] = myValue; Recuperar un elemento de un objeto Cache:

myValue = Cache("myKey") myValue = Cache["myKey"];

Un objeto Cache por aplicación Web

Almacenar variables

Nota

Utiliza pares clave-valor

Microsoft Visual Basic® .NET C#

Visual Basic .NET

C#

Page 580: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 6

Ventajas de utilizar el objeto Cache

Es más rápido que crear un nuevo objeto para cada petición

Soporta el bloqueo interno

Administración automática de los recursos de caché

Soporta funciones callback

Soporta el borrado basado en dependencias

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

El objeto Cache proporciona una sencilla interfaz de diccionario que permite insertar valores fácilmente y recuperarlos posteriormente. El uso del objeto Cache para almacenar valores tiene varias ventajas.

Es mucho más rápido 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 petición de página. Ubicar el DataSet en el objeto Cache facilita un acceso mucho más rápido a esos datos.

El objeto Cache proporciona una gestión automática de bloqueos para los elementos que se encuentran en la caché; por tanto, las peticiones simultáneas de un mismo elemento no pueden modificar el objeto. La gestión automática de bloqueos protege las transacciones en curso cuando se actualizan los elementos.

ASP.NET elimina regularmente y de forma automática elementos de la caché. Este borrado automático constituye una mejora respecto a las versiones de caché anteriores en las que el desarrollador tenía que administrar manualmente los recursos de la caché.

Las funciones callback son código que se ejecuta cuando se elimina un elemento de la caché. Por ejemplo, podemos utilizar una función callback para insertar la última versión de un objeto en la caché tan pronto como se elimine la versión 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.

Introducción

Más rápido que crear un nuevo objeto para cada solicitud

Soporta bloqueo interno

Administra automáticamente los recursos de caché

Soporte de funciones callback

Soporta la eliminación basada en dependencias

Page 581: Microsoft ASP.net - Curso Completo - Espa Ol

7 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

Cómo utilizar el objeto Cache

Escribir en el objeto Cache:

Recuperar valores del objeto Cache:

myValue = Cache("myKey")myValue = Cache("myKey")

'Implicit methodCache("myKey") = myValue

'Explicit methodCache.Insert("myKey", myValue, Dependency, AbsoluteExpiration, _SlidingExpiration, CacheItemPriority, CacheItemRemovedCallBack)

'Implicit methodCache("myKey") = myValue

'Explicit methodCache.Insert("myKey", myValue, Dependency, AbsoluteExpiration, _SlidingExpiration, CacheItemPriority, CacheItemRemovedCallBack)

//Implicit methodCache["myKey"] = myValue;

//Explicit methodCache.Insert("myKey", myValue, Dependency, AbsoluteExpiration,SlidingExpiration, CacheItemPriority, CacheItemRemovedCallBack);

//Implicit methodCache["myKey"] = myValue;

//Explicit methodCache.Insert("myKey", myValue, Dependency, AbsoluteExpiration,SlidingExpiration, CacheItemPriority, CacheItemRemovedCallBack);

myValue = Cache["myKey"];myValue = Cache["myKey"];

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

Para utilizar el objeto Cache, utilizamos pares clave-valor para almacenar y recuperar elementos. La clave es la cadena de la clave de Cache que se utiliza para referenciar el elemento. El valor es el elemento que se va a almacenar en la caché.

Podemos escribir un elemento en un objeto Cache implícitamente, como muestra el siguiente código:

Cache("mykey") = myValue Cache["mykey"] = myValue; También podemos proporcionar parámetros, como un límite de tiempo para el almacenamiento en el objeto Cache, cuando insertemos un elemento en el objeto Cache. El siguiente código muestra el método Insert explícito con parámetros:

Cache.Insert("myKey", myValue, _ Dependency, AbsoluteExpiration, SlidingExpiration, _ CacheItemPriority, CacheItemRemovedCallBack) Cache.Insert("myKey", myValue, Dependency, AbsoluteExpiration, SlidingExpiration, CacheItemPriority, CacheItemRemovedCallBack);

Introducción

Escribir en el objeto Cache

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 582: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 8

Recuperar valores del objeto Cache es igual de fácil. Únicamente debemos proporcionar la clave correcta para recibir el valor.

El siguiente código utiliza la clave myKey para recuperar el valor myValue y, a continuación, muestra myValue si no está vacío:

myValue = Cache("mykey") If myValue <> Nothing Then DisplayData(myValue) End If myValue = Cache["mykey"]; if (myValue != null) DisplayData(myValue);

Recuperar valores del objeto Cache

Visual Basic .NET

C#

Page 583: Microsoft ASP.net - Curso Completo - Espa Ol

9 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

Eliminar elementos del objeto Cache

Tiempo AbsoluteExpiration

Tiempo SlidingExpiration

Depende de un valor modificado

Prioridad del elemento en caché

DateTime.Now.AddMinutes(5)DateTime.Now.AddMinutes(5)

TimeSpan.FromSeconds(20)TimeSpan.FromSeconds(20)

AddCacheItemDependency("Variable.Value") AddCacheItemDependency("Variable.Value")

CacheItemPriority.High CacheItemPriority.High

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

El objeto Cache de ASP.NET está diseñado para garantizar que no utiliza demasiada memoria del servidor. Por ello, el objeto Cache elimina automáticamente 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 límites 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 límite de tiempo. Los intentos de recuperar los elementos eliminados devolverán un valor null a menos que el elemento se agregue nuevamente al objeto Cache.

Podemos definir la duración máxima absoluta de un elemento utilizando el parámetro AbsoluteExpiration. Este parámetro es un tipo de parámetro DateTime que permite especificar el tiempo de expiración del elemento.

El siguiente código especifica que myValue se eliminará del objeto Cache exactamente cinco minutos después de su creación:

Cache.Insert("myKey", myValue, Nothing, _ DateTime.Now.AddMinutes(5), Nothing) Cache.Insert("myKey", myValue, null, _ DateTime.Now.AddMinutes(5), Cache.NoSlidingExpiration);

Introducción

AbsoluteExpiration

Visual Basic .NET

C#

Page 584: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 10

Podemos definir la duración relativa máxima de un elemento utilizando el parámetro SlidingExpiration. Éste es un parámetro 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 expiración del objeto.

El siguiente código especifica que myValue se eliminará del objeto Cache exactamente 20 segundos después del último acceso:

Cache.Insert("myKey", myValue, Nothing, _ Nothing, TimeSpan.FromSeconds(20)) Cache.Insert("myKey", myValue, null, _ null, TimeSpan.FromSeconds(20)); En ocasiones, deseamos que un objeto sea eliminado del objeto Cache porque un elemento de soporte, como un archivo, ha cambiado. ASP.NET permite definir la validez de un elemento en caché, basándose 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 código especifica que myValue se eliminará del objeto Cache cuando cambie el archivo myDoc.xml:

Cache.Insert("myKey", myValue, _ new CacheDependency(Server.MapPath("myDoc.xml"))) Cache.Insert("myKey", myValue, new CacheDependency(Server.MapPath("myDoc.xml"))); Cuando al servidor Web le queda poca memoria, el objeto Cache elimina, de forma selectiva, elementos para liberar memoria del sistema. Los elementos que tengan asignados valores de alta prioridad tienen una menor probabilidad de ser eliminados de la caché; es más probable que se eliminen los elementos que tengan asignados valores de menor prioridad.

El siguiente código especifica que myValue tiene una prioridad alta y debería ser uno de los últimos elementos eliminados del objeto Cache cuando la memoria de servidor es limitada:

Cache.Insert("myKey", myValue, Nothing, Nothing, _ Nothing, CacheItemPriority.High, onRemove) Cache.Insert("myKey", myValue, null, null, Cache.NoSlidingExpiration, CacheItemPriority.High, onRemove);

SlidingExpiration

Visual Basic .NET

C#

Dependencias

Visual Basic .NET

C#

Prioridad de elementos en Cache

Visual Basic .NET

C#

Page 585: Microsoft ASP.net - Curso Completo - Espa Ol

11 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

El siguiente código inserta un valor para MyBook en el objeto Cache con varios argumentos de parámetros. La dependencia o el evento con tiempo de expiración que ocurra antes será el elemento eliminado del objeto Cache:

Eliminar el elemento 5 minutos después de ser almacenado. Eliminar el elemento 30 segundos después 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 función de

callback onRemove.

Cache.Insert("MyBook.CurrentBook", CurrentBook, _ new CacheDependency(Server.MapPath("Books.xml")), _ DateTime.Now.AddMinutes(5), _ TimeSpan.FromSeconds(30), _ CacheItemPriority.High, onRemove) Cache.Insert("MyBook.CurrentBook", CurrentBook, new CacheDependency(Server.MapPath("Books.xml")), DateTime.Now.AddMinutes(5), TimeSpan.FromSeconds(30), CacheItemPriority.High, onRemove);

Ejemplo de establecer los parámetros en Cache.Insert

Visual Basic .NET

C#

Page 586: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 12

Demostración: uso del objeto Cache

Ejecutar la página CacheTest.aspx sin el objeto Cache habilitado

Ejecutar la página CacheTest.aspx con el objeto Cache habilitado

Ejecutar la página CacheTest.aspx con el objeto Cache habilitado y con una dependencia

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

En esta demostración, veremos cómo utilizar el objeto Cache con un DataGrid.

Todos los archivos de esta demostración se encuentran en el proyecto Demo13CS o Demo13VB que se pueden encontrar dentro del fichero demos13.zip.

Ejecutar la demostración

1. Abrir la página CacheTest.aspx. 2. Mostrar la página de código 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 página CacheTest.aspx como Página de inicio del proyecto, e visualizar la página en Microsoft Internet Explorer.

Debido a las diferencias de funcionalidades entre el navegador incluido en Microsoft Visual Studio® .NET e Internet Explorer, es importante utilizar Internet Explorer en esta demostración.

4. En CacheTest.aspx.vb o CacheTest.aspx.cs, eliminar el comentario de las líneas 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

Introducción

Ejecutar sin almacenamiento en caché

Nota

Habilitar el almacenamiento en caché

Visual Basic .NET C#

Page 587: Microsoft ASP.net - Curso Completo - Espa Ol

13 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

5. Eliminar el comentario en el código restante en ambos procedimientos de

evento, Page_Load y dgXML_PageIndexChanged. Explicar cómo este código 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 página CacheTest.aspx y visualizarla en Internet Explorer. Verificar que el DataGrid está poblado con los datos XML y que funciona la funcionalidad de paginación.

7. Dejar abierto Internet Explorer, y en Visual Studio .NET, abrir el archivo pubs.xml.

8. Cambiar el título del primer libro listado por un título que los estudiantes puedan detectar fácilmente y, a continuación, guardar el archivo.

9. En Internet Explorer, cambiar a la Página 1 del DataGrid. Si ya se está visualizando la Página 1, cambiar a otra página y regresar a la Página 1.

10. Mostrar a los estudiantes que el título del primer libro listado no ha cambiado porque la información proviene de la caché.

11. Cambiar a otra página, esperar al menos dos minutos, y regresar a la primera página. El DataGrid mostrará ahora el nuevo título para el primer libro.

12. Cerrar Internet Explorer. 13. Abrir la página CacheTest.aspx.vb o CacheTest.aspx.cs. 14. Para las dos líneas de código Cache.Insert de las páginas CacheTest.aspx.vb

o CacheTest.aspx.cs, agregar una dependencia en el archivo pubs.xml. El código debería ser similar al siguiente: Cache.Insert("dsCache", dsXML, New _ System.Web.Caching.CacheDependency _ (Server.MapPath("pubs.xml")), _ DateTime.Now.AddMinutes(1), Nothing) Cache.Insert("dsCache", dsXML, new System.Web.Caching.CacheDependency (Server.MapPath("pubs.xml")), DateTime.Now.AddMinutes(1), Cache.NoSlidingExpiration);

Probar el almacenamiento en caché

Agregar una dependencia

Visual Basic .NET

C#

Page 588: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 14

15. Hacer clic con el botón derecho en el proyecto Demo13VB o Demo13CS

de Explorador de soluciones y hacer clic en Generar. 16. Hacer clic con el botón derecho en CacheTest.aspx, y clic en Examinar

con … En el cuadro de diálogo Examinar con, hacer clic en Microsoft Internet Explorer, y clic en Examinar.

17. Hacer clic en Start para generar la página 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 título del primer libro listado por un título que los estudiantes puedan detectar fácilmente. Guardar el archivo pubs.xml.

20. En Internet Explorer, cambiar a la Página 1 del DataGrid. Si ya se está visualizando la Página 1, cambiar a otra página y regresar a la Página 1.

21. Mostrar a los estudiantes que la información del DataGrid ha cambiado para reflejar la modificación del archivo pubs.xml, puesto que la caché depende de ese archivo.

Page 589: Microsoft ASP.net - Curso Completo - Espa Ol

15 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

Lección: uso de la caché de resultados de ASP.NET

Multimedia: caché de resultados

Tipos de caché de resultados

Cómo utilizar la caché de resultados de páginas

Demostración: caché de resultados de páginas

Cómo utilizar la caché de fragmentos de páginas

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

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 páginas. Si se almacena en memoria una página, o partes de una página, la primera vez que se solicita, y a continuación se utiliza esa página almacenada, o las partes de la página, en posteriores solicitudes, podemos evitar el tiempo de proceso necesario para crear la página de nuevo.

En esta lección, estudiaremos cómo configurar la caché de resultados para minimizar los tiempos de respuesta de las páginas en una aplicación Web.

En esta lección, 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 páginas. Utilizar almacenamiento en la caché de resultados de fragmentos de

páginas.

Introducción

Objetivos de la lección

Page 590: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 16

Multimedia: almacenamiento en caché de resultados

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

En esta animación, veremos cómo afecta la caché de resultados de página a los tiempos de respuesta del servidor cuando se solicita un formulario Web Form ASP.NET más de una vez. Para iniciar la animación abrir el fichero media13.swf.

Introducción

Page 591: Microsoft ASP.net - Curso Completo - Espa Ol

17 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

Tipos de caché de resultados

Almacenamiento en caché de páginas

Almacenamiento en caché de fragmentos de páginas como controles de usuario

Almacenamiento en caché de servicios Web XML

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

ASP.NET proporciona almacenamiento en caché de los resultados de páginas, lo que permite almacenar formularios Web Forms completos y controles de usuario en la memoria del servidor. Tras la primera petición, no se ejecuta el código del formulario Web Form, del control de usuario o del servicio Web XML; se utilizan los resultados de la caché para satisfacer la petición.

ASP.NET crea una única caché de resultados por cada servidor Web. Las páginas y fragmentos de página que están almacenados en la caché de resultados son exclusivos del servidor Web y los demás servidores de una granja de servidores Web no pueden acceder a ellos. Por tanto, el uso de la caché de resultados para incrementar el rendimiento del servidor no es escalable por encima del nivel de un único servidor.

El almacenamiento en la caché de páginas permite almacenar contenido dinámico en la caché. Cuando se solicita por primera vez un formulario Web Form, la página se compila y se almacena en la caché de resultados, y está disponible para la próxima petición. Esta página en caché se elimina cuando el archivo fuente se modifica o se alcanza el tiempo de expiración de la caché.

En ocasiones, es poco viable almacenar en caché una página completa, pues es posible que algunas partes de la página deban crearse dinámicamente para cada petición. En estas situaciones, puede resultar útil identificar los objetos o datos asociados a la petición de página 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 página creándolos como controles de usuario y, a continuación, almacenar en caché los controles de usuario con la caché de resultados de la página.

Introducción

Almacenamiento en caché de páginas

Almacenamiento en caché de fragmentos de páginas como un control de usuario

Page 592: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 18

Un ejemplo de un fragmento de página que sería útil almacenar en caché es un encabezado de página que contiene gráficos estáticos, o un sistema de menú en una barra lateral.

Los servicios Web XML también 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 método del servicio Web XML permanecerán en la caché de resultados.

Por ejemplo, el siguiente código ubica los resultados del WebMethod CachedInfo en la caché de resultados durante cinco minutos:

<WebMethod(CacheDuration:=300)> _ Public Function CachedInfo() As String ... End Function [WebMethod(CacheDuration=300)] public string CachedInfo() { ... }

Crear una caché de resultados para una aplicación debería ser la última tarea en el desarrollo de una aplicación Web. De lo contrario, cuando depurásemos las páginas, podríamos obtener páginas obsoletas que estuviesen almacenadas en la caché de resultados en lugar de obtener páginas nuevas y modificadas.

Almacenamiento en caché de servicios Web XML

Visual Basic .NET

C#

Importante

Page 593: Microsoft ASP.net - Curso Completo - Espa Ol

19 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

Cómo utilizar la caché de resultados de páginas

El contenido de la caché se genera desde páginas dinámicas

Toda la página Web está disponible en la caché

Establecer la duración de la caché en segundos

Establecer la propiedad VaryByParampara controlar el número de variaciones de página en la caché

<%@ OutputCache Duration="900" VaryByParam="none" %>

<%@ OutputCache Duration="900" VaryByParam="none" %>

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

ASP.NET proporciona almacenamiento en la caché de los resultados de páginas, lo que nos permite almacenar en la memoria del servidor los formularios Web Forms solicitados. Tras la primera petición, el código del formulario Web Form no se ejecuta, sino que se utilizan los resultados de la caché para satisfacer la petición.

Para cargar una página 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 máximo de almacenamiento en caché para la página, y una propiedad VaryByParam que determina cuándo crear una nueva copia de la página en la caché, basándose en parámetros pasados a la página.

El almacenamiento en la caché de resultados permite satisfacer peticiones de una determinada página desde la caché, de forma que no es necesario ejecutar el código creado inicialmente por la página en posteriores peticiones de la página. El uso del almacenamiento en la caché de resultados para almacenar las páginas del sitio Web accedidas con mayor frecuencia puede reducir considerablemente el tiempo de respuesta de la página del servidor Web.

Podemos especificar el valor de tiempo de expiración de la caché para una página estableciendo la directiva de páginas OutputCache. Por ejemplo, para almacenar en caché una página ASP.NET durante 15 minutos, agregar la siguiente directiva de páginas OutputCache a la página .aspx:

Introducción

Contenido de la caché de páginas dinámicas

Toda la página Web está disponible en caché

Establecer la duración de la caché

Page 594: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 20

<%@ OutputCache Duration="900" VaryByParam="None"%> La unidad de tiempo para la propiedad Duration es en segundos. El valor predeterminado son 0 segundos, lo cual significa que la respuesta no está almacenada en la caché.

La propiedad VaryByParam se utiliza para determinar si ASP.NET debería crear distintas versiones de la página en caché en situaciones en las que las peticiones de la página pasen parámetros específicos. Establecer la propiedad VaryByParam en "none" significa que únicamente se almacenará en caché una versión de la página. Establecer la propiedad en "*" significa que cualquier variación de los parámetros de la página generará una nueva versión de la página almacenada en la caché. Identificar uno o más parámetros significa que únicamente los cambios a estos parámetros producirán nuevas páginas 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 página generada dinámicamente y, por tanto, requiere la creación de una nueva página en la caché de resultados por cada nuevo productID:

<%@ OutputCache Duration="60" VaryByParam="productID"%>

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 página se solicita por primera vez. Si no deseamos utilizar la funcionalidad que proporciona el atributo VaryByParam, debemos establecer su valor en "none".

Establecer VaryByParam

Precaución

Page 595: Microsoft ASP.net - Curso Completo - Espa Ol

21 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

Demostración: caché de resultados de páginas

Mostrar cómo una página no almacenada en la caché cambia con cada actualización

Mostrar cómo una página almacenada en la caché no cambia con cada actualización

Mostrar cómo cambiar un parámetro puede provocar que una nueva página se almacene en la caché

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

En esta demostración, veremos cómo afecta a la experiencia del usuario el almacenamiento en la caché de resultados de páginas. En primer lugar, veremos una página ejecutando una función de reloj que no se almacena en la caché. A continuación, veremos la misma página con una duración de 10 segundos de la caché de resultados. Finalmente, veremos cómo cambiar la propiedad VaryByParam controla el almacenamiento en caché de distintas versiones de la página.

Todos los archivos para esta demostración se encuentran en el proyecto Demo13CS o Demo13VB que se pueden encontrar dentro del fichero demos13.zip.

Ejecutar la demostración

1. Abrir la página OutputCache.aspx en el proyecto Mod15 en Visual Studio .NET.

2. Mostrar el código que obtiene la hora y fecha actuales, y muestra el código en una etiqueta.

3. Generar y examinar la página. 4. Volver a cargar la página varias veces consecutivamente para mostrar que

los segundos cambian. 5. Agregar la siguiente directiva a la página, tras la línea de código que

contiene la directiva de página. <%@ OutputCache Duration="10" VaryByParam="none"%>

6. Generar y examinar la página.

Introducción

Mostrar cómo una página no almacenada en caché cambia con cada actualización

Mostrar cómo una página almacenada en caché no cambia con cada actualización

Page 596: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 22

7. Volver a cargar la página varias veces de forma consecutiva para mostrar

que los segundos cambian únicamente tras un intervalo de 10 segundos. 8. Podemos agregar un parámetro ficticio ?Name=Someone para mostrar que

no afecta al almacenamiento en caché. La página se almacena en caché con independencia del valor del parámetro.

9. Abrir la página OutputCacheVaryByParam.aspx. 10. Mostrar la directiva OutputCache con la propiedad VaryByParam. 11. Generar y examinar la página. 12. Al final de la URL, agregar el parámetro ?Name=Someone. 13. Mostrar el efecto en la caché de resultados cuando se cambie el valor del

parámetro ?Name=Someone por un parámetro ?Name=Someone2.

Mostrar cómo cambiar un parámetro puede hacer que una nueva página se almacene en caché

Page 597: Microsoft ASP.net - Curso Completo - Espa Ol

23 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

Cómo utilizar la caché de fragmentos de páginas

Convertir el fragmento de página en un control de usuario

Establecer las propiedades Duration y varyByParam

<%@ OutputCache Duration="120" VaryByParam="none" %>

<%@ OutputCache Duration="120" VaryByParam="none" %>

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

Para almacenar en caché sólo partes de una página, debemos aislar esas partes del resto de la página insertándolas en un control de usuario. A continuación, 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 página (como consultas a bases de datos, que requieren un valioso tiempo de procesador) del resto de la página. Con el almacenamiento en caché de fragmentos, podemos hacer que únicamente se generen dinámicamente para cada petición las partes de la página que requieren menos recursos del servidor, o las partes de una página que deben crearse con cada petición.

Los elementos que son buenos candidatos para el almacenamiento en la caché de fragmentos incluyen encabezados, pies y listas desplegables que son utilizados por múltiples páginas.

Tras identificar las partes de la página que deseamos almacenar en caché, debemos crear controles de usuario que encapsulen cada uno de estos fragmentos.

Para más información sobre la creación de controles de usuario, consultar el Módulo “Crear controles de usuario”.

Las políticas de almacenamiento en la caché para los controles de usuario, como la duración y el número de variaciones almacenadas, se establecen del mismo modo que las políticas del almacenamiento en la caché de resultados de

Introducción

Convertir el fragmento en un control de usuario

Nota

Establecer las propiedades Duration y VaryByParam

Page 598: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 24

las páginas. Las políticas 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 versión del mismo se almacena en la caché de resultados durante dos minutos, y únicamente una versión se almacenará en la caché del control de usuario:

<%@ OutputCache Duration="120" VaryByParam="none"%>

Page 599: Microsoft ASP.net - Curso Completo - Espa Ol

25 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

Lección: configurar una aplicación Web ASP.NET

Descripción de los métodos de configuraciónConfigurar un servidor Web utilizando Machine.configConfigurar una aplicación utilizando Web.configDescripción de la herencia de configuraciónDemostración: herencia de configuraciónPráctica: determinar la herencia de configuraciónAlmacenar y recuperar datos en Web.configUso de propiedades dinámicasDemostración: uso de propiedades dinámicas

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

Antes de poder implementar nuestra aplicación Web ASP.NET, debemos organizar la configuración de la aplicación Web en los archivos Machine.config y Web.config. En esta lección, estudiaremos cómo configurar una aplicación Web con ASP.NET.

En esta lección, aprenderemos a:

Explicar cómo configurar una aplicación Web. Configurar un servidor Web utilizando el archivo Machine.config. Configurar una aplicación utilizando archivos Web.config. Explicar cómo 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 dinámicas para almacenar valores de propiedades.

Introducción

Objetivos de la lección

Page 600: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 26

Descripción de los métodos de configuración

Archivo Machine.config

Configuración a nivel de equipo

Archivos Web.config

Configuración a nivel de aplicación y directorio

Los archivos Machine.config y Web.config son:

XML con un formato correcto

Mayúsculas y minúsculas Camel

Extensibles

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

La información de configuración para los recursos de ASP.NET está contenida en una colección de archivos de configuración. Cada archivo de configuración contiene una jerarquía anidada de etiquetas y sub-etiquetas XML con atributos que especifican las opciones de configuración.

La infraestructura de configuración de ASP.NET no hace ninguna suposición sobre los tipos de datos de configuración que soporta la infraestructura.

La configuración a nivel de equipo se almacena en el archivo Machine.config. Sólo hay un archivo Machine.config en cada servidor Web. Por tanto, el archivo Machine.config puede ser utilizado para almacenar las opciones de configuración aplicables a todas las aplicaciones Web ASP.NET que residen en ese servidor Web.

Las opciones a nivel de aplicación y directorio se almacenan en archivos Web.config. Cada aplicación Web tiene al menos un archivo Web.config. Los directorios virtuales pueden tener sus propios archivos Web.config que contienen las opciones de configuración específicas 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 mayúsculas. Los nombres de las etiquetas y los nombres de los atributos utilizan la combinación de mayúsculas y minúsculas Camel, es decir, la primera letra de un nombre de etiqueta es minúscula y la primera letra de cada palabra subsiguiente concatenada es mayúscula. Toda la información de configuración de un archivo .config se incluye entre las etiquetas XML raíz <configuration> y </configuration>.

Introducción

Machine.config

Web.config

Atributos del archivo .config

Page 601: Microsoft ASP.net - Curso Completo - Espa Ol

27 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

Configurar un servidor Web utilizando Machine.config

Las opciones de configuración en el archivo Machine.config afectan a todas las aplicaciones Web del servidor

Un único archivo Machine.config por servidor Web

La mayoría de opciones de configuración pueden sobrecargarse a nivel de aplicación utilizando archivos Web.config

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

El archivo de configuración del equipo, Machine.config, contiene las opciones de configuración 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 versión del .NET Framework instalada en el servidor Web:

C:\Windows\Microsoft .NET \Framework\version\CONFIG\Machine.config

Las opciones de configuración del archivo Machine.config afectan a todas las aplicaciones Web ubicadas en el servidor. El sistema de configuración busca primero en el archivo Machine.config el elemento <appSettings>, y busca las principales configuraciones locales en los archivos Web.config de la aplicación.

Ubicar la configuración de la aplicación Web en el archivo Machine.config tiene ventajas e inconvenientes:

Ventajas del archivo Machine.config Ubicar las opciones de configuración en el archivo Machine.config puede facilitar el mantenimiento de nuestro sistema, ya que únicamente tendrá un archivo de configuración que buscar, editar y mantener.

Inconvenientes del archivo Machine.config Cuando implementamos una aplicación Web en un nuevo servidor, la configuración de la aplicación Web que se encuentra en el archivo Machine.config no se copiará al nuevo servidor Web.

Introducción

Las opciones de configuración afectan a todas las aplicaciones Web

Page 602: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 28

Configurar una aplicación utilizando Web.config

Uno o más archivos Web.config por aplicación Web

Los archivos Web.config contienen toda la información de configuración de la aplicación

Contienen una sección por cada categoría principal de funcionalidad ASP.NET

Seguridad

Modo

Configuración general de la aplicación

Seguimiento

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

En ASP.NET, podemos compartir la información y las opciones de configuración entre páginas Web almacenando la configuración de la aplicación Web en una ubicación central denominada archivo Web.config. También podemos almacenar información local y las opciones de configuración en directorios virtuales creando archivos Web.config locales adicionales.

La carpeta raíz de la aplicación Web siempre contiene un único archivo Web.config. Puede haber archivos Web.config adicionales ubicados en la carpeta del directorio virtual al que pertenecen.

La presencia de un archivo Web.config en un determinado directorio es opcional. Si un archivo Web.config no está presente, todas las opciones de configuración del directorio se heredan automáticamente del directorio primario, el archivo Web.config.

En un archivo Web.config, hay secciones para cada categoría principal de funcionalidad ASP.NET, como muestra la siguiente tabla.

Nombre de sección Descripción <browserCaps> Responsable de controlar las opciones de configuración del

componente de capacidades del explorador.

<compilation> Responsable de todas las opciones de compilación que utiliza ASP.NET.

<globalization> Responsable de configurar las opciones de globalización de una aplicación.

Introducción

Uno o más archivos Web.config por aplicación Web

Contiene una sección para cada categoría principal de funcionalidad ASP.NET

Page 603: Microsoft ASP.net - Curso Completo - Espa Ol

29 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

(continuación) Nombre de sección Descripción <httpModules> Responsable de configurar los módulos Hypertext Transfer

Protocol (HTTP) en una aplicación. Los módulos HTTP participan en el procesamiento de cada petición a una aplicación. Los usos habituales incluyen seguridad y registro.

<httpHandlers> Responsable de mapear URLs entrantes a clases IHttpHandler. Los subdirectorios no heredan estas opciones.

<processModel> Responsable de configurar las opciones del modelo de proceso ASP.NET en servidores Web Internet Información Services (IIS).

<authentication> <identity> <authorization>

Responsable de todas las opciones de seguridad que utiliza el módulo httpModule de seguridad ASP.NET.

<sessionState> Responsable de configurar el estado de sesión httpModule.

<trace> Responsable de configurar el servicio de seguimiento de ASP.NET.

Page 604: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 30

Descripción de la herencia de configuración

El archivo Web.config a nivel de aplicación hereda las opciones del archivo Machine.config

Las opciones en el archivo Web.config que están en conflicto anulan las opciones heredadas

Directorios individuales pueden tener archivos Web.config que heredan de (y pueden anular) las opciones a nivel de aplicación

Machine.config

Web.config

Web.config

CONFIGCONFIG

VirtualDirVirtualDir

SubDirSubDir

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

Cuando un servidor Web recibe una petición para un determinado recurso Web, ASP.NET determina las opciones de configuración de ese recurso jerárquicamente. ASP.NET utiliza todos los archivos de configuración ubicados en la ruta del directorio virtual para el recurso solicitado. La opción de configuración de nivel más bajo puede sobrecargar las opciones que proporcionan los archivos de configuración del directorio primario.

Las reglas de herencia para los archivos de configuración son las siguientes:

Los archivos Web.config a nivel de aplicación 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 aplicación.

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 opción predeterminada de la sección de configuración 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 opción se sobrecargue en Web.config.

Introducción

Machine.config

Page 605: Microsoft ASP.net - Curso Completo - Espa Ol

31 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

Los archivos de configuración Web.config contienen información de configuración adicional para una aplicación Web ASP.NET. Estos archivos están ubicados en los mismos directorios que los archivos de la aplicación. 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 raíz (VirtualDir) de una aplicación Web contiene una sección de configuración de seguridad que permite el acceso únicamente a determinados usuarios, el subdirectorio SubDir hereda esa opción de seguridad. Por tanto, todos los usuarios tienen acceso a los recursos ASP.NET del directorio raíz de la aplicación, VirtualDir, pero sólo determinados usuarios tienen acceso a los recursos ASP.NET de SubDir.

Los archivos Web.config de la aplicación en VirtualDir y el subdirectorio SubDir se encuentran en:

C:\Inetpub\wwwroot\VirtualDir\Web.config

C:\Inetpub\wwwroot\VirtualDir\SubDir\Web.config

Web.config

Page 606: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 32

Demostración: herencia de configuración

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 cómo el formulario Web Form lee información de los archivos Web.config

Eliminar el archivo Web.config de la subcarpeta y actualizar el formulario Web Form

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

En esta demostración, veremos cómo un segundo archivo Web.config que se encuentra en un subdirectorio hereda las opciones de configuración de un archivo Web.config primario.

Todos los archivos para esta demostración se encuentran en el proyecto Demo13CS o Demo13VB que se pueden encontrar dentro del fichero demos13.zip.

Ejecutar la demostración

1. En Visual Studio .NET, mostrar el código del archivo Web.config y GetConfigMainFolder.aspx en la carpeta principal. Observar el valor almacenado en el archivo Web.config.

2. Mostrar el código 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 página GetConfigMainFolder.aspx, y resaltar el valor que ha sido recuperado del archivo Web.config.

4. Hacer clic en Siguiente para abrir la página GetConfigSubFolder.aspx que se encuentra en la carpeta SubFolder y destacar el hecho de que el valor aquí es distinto.

5. En la carpeta SubFolder, cambiar el nombre del archivo Web.config por oldWeb.config.

6. Generar y examinar la página GetConfigMainFolder.aspx, y destacar el valor que ha sido recuperado del archivo Web.config.

Introducción

Crear una subcarpeta que contenga Web.config Mostrar las diferencias entre el Web.config principal y el Web.config de la subcarpeta

Eliminar Web.config de la subcarpeta y actualizar el formulario Web Form

Page 607: Microsoft ASP.net - Curso Completo - Espa Ol

33 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

7. Hacer clic en Siguiente para abrir la página GetConfigSubFolder.aspx en la

carpeta SubFolder, y observar que el valor es el mismo que el valor del archivo Web.config del directorio principal.

Page 608: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 34

Práctica: determinar la herencia de configuración

Los estudiantes:

Determinar las opciones de configuración de una aplicación Web basándonos en distintas variables

Tiempo: 5 Minutos

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

En esta práctica, examinaremos un archivo Machine.config y dos archivos Web.config para determinar las opciones de configuración del servidor Web, la aplicación Web y el subdirectorio de la aplicación Web.

Examinar el siguiente código del archivo Machine.config. A continuación, responder las preguntas a continuación.

Introducción

Page 609: Microsoft ASP.net - Curso Completo - Espa Ol

35 Configurar, optimizar e implementar una aplicación 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, ¿cuál es la opción de configuración para el mecanismo de autenticación? ____________________________________________________________

____________________________________________________________

¿Existe una opción de configuración para una cadena de conexión? Si es así, ¿cuál es? ____________________________________________________________

____________________________________________________________

¿Hay otras opciones de configuración de aplicación? Si es así, ¿qué valores tienen? ____________________________________________________________

____________________________________________________________

¿Existen una opción de configuración que permita el seguimiento de la aplicación Web? Si es así, ¿es posible hacer el seguimiento desde un equipo externo? ____________________________________________________________

____________________________________________________________

Page 610: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 36

Examinar el código siguiente de un archivo Web.config ubicado en la raíz del directorio virtual de la aplicación Web. A continuación, responder a las preguntas siguientes. Considerar el código 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 autenticación? _____________________________________________________________

_____________________________________________________________

¿Existe una cadena de conexión? Si es así, ¿qué es? _____________________________________________________________

_____________________________________________________________

¿Hay otras opciones de aplicación? Si es así, ¿qué valores tienen? _____________________________________________________________

_____________________________________________________________

¿Está habilitado el seguimiento para la aplicación Web? Si es así, ¿es posible realizar el seguimiento desde un equipo externo? _____________________________________________________________

_____________________________________________________________

Page 611: Microsoft ASP.net - Curso Completo - Espa Ol

37 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

Examinar el siguiente código de un archivo Web.config ubicado en una subcarpeta de la aplicación Web. A continuación, responder las preguntas. Considerar el código 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, ¿cuál es el mecanismo de autenticación? ____________________________________________________________

____________________________________________________________

¿Existe una cadena de conexión? Si es así, ¿cuál es? ____________________________________________________________

____________________________________________________________

Hay otras opciones de aplicación? Si es así, ¿qué valores tienen? ____________________________________________________________

____________________________________________________________

¿Está habilitado el seguimiento para la aplicación Web? Si es así, ¿es posible realizar el seguimiento desde un equipo externo? ____________________________________________________________

____________________________________________________________

Page 612: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 38

Almacenar y recuperar datos en Web.config

Almacenar la configuración de la aplicación en un archivo Web.config

Recuperar la configuración de la aplicación de un archivo Web.config

<configuration><appSettings><add key="pubs" value="server=localhost; integrated security=true; database=pubs"/>

</appSettings></configuration>

<configuration><appSettings><add key="pubs" value="server=localhost; integrated security=true; database=pubs"/>

</appSettings></configuration>

Dim strPubs As String = _ConfigurationSettings.AppSettings("pubs")

Dim strPubs As String = _ConfigurationSettings.AppSettings("pubs")

AppSettingsReader App = new AppSettingsReader();

string strPubs = (string)App.GetValue("pubs", typeof(string));

AppSettingsReader App = new AppSettingsReader();

string strPubs = (string)App.GetValue("pubs", typeof(string));

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

Podemos utilizar la sección <appSettings> del archivo Web.config como repositorio de las opciones de configuración de la aplicación. En la sección <appSettings>, podemos crear pares clave-valor para los datos que se utilicen habitualmente en nuestra aplicación Web. La creación de pares clave-valor para los datos resulta muy útil, pues nos permite definir todos los datos de configuración de la aplicación en una ubicación central. Por ejemplo, podemos almacenar una cadena de conexión a una base de datos para una aplicación en una ubicación centralizada, en lugar de ubicarla en cada página ASP.NET.

Para almacenar las opciones de configuración de la aplicación, introducimos un par clave-valor para la información que deseamos almacenar. El siguiente archivo Web.config crea dos pares clave-valor para las cadenas de conexión de las bases de datos utilizadas en una aplicación 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>

Introducción

Almacenar las opciones de configuración de la aplicación en Web.config

Page 613: Microsoft ASP.net - Curso Completo - Espa Ol

39 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

Para recuperar las opciones de configuración de la aplicación de los archivos Web.config, se utiliza la colección de cadenas estáticas ConfigurationSettings.AppSettings.

Por ejemplo, el siguiente código de ejemplo lee el valor de la clave pubs en la sección <appSettings>:

Dim strPubs As String = _ ConfigurationSettings.AppSettings("pubs") string strPubs = System.Configuration. ConfigurationSettings.AppSettings["pubs"];

Recuperar las opciones de configuración de la aplicación de Web.config

Visual Basic .NET

C#

Page 614: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 40

Uso de propiedades dinámicas

Almacenar los valores de las propiedades en archivos Web.config en lugar de almacenarlos en el código compilado de la aplicación

Permite actualizaciones sencillas sin recompilar la aplicación

Habilitar y configurar las propiedades en el objeto

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

Las propiedades dinámicas permiten configurar la aplicación de forma que los valores de sus propiedades se almacenen en un archivo de configuración externo, por ejemplo Web.config, en lugar de almacenarse en el código compilado de la aplicación. Almacenar en un archivo de configuración externo puede reducir el coste total de mantenimiento de una aplicación, 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 mayoría de componentes y controles de una aplicación Web pueden gestionarse dinámicamente, este tipo de gestión es más conveniente para algunas propiedades que para otras. Por ejemplo, probablemente utilizaremos propiedades dinámicas para almacenar y recuperar las propiedades que estén conectadas a recursos externos que podrían cambiar, como bases de datos.

Por ejemplo, supongamos que estamos generando una aplicación Web que utiliza una base de datos de prueba durante el proceso de desarrollo y debemos trasladar la aplicación Web a una base de datos en producción cuando la implementemos. Si almacenamos los valores de las propiedades en la aplicación Web, deberemos cambiar manualmente toda la configuración de la base de datos para poder implementar la base de datos, y deberemos recompilar el código fuente. Si almacenamos los valores de estas propiedades externamente, podremos realizar un solo cambio en el archivo externo y la aplicación Web utilizará los nuevos valores la próxima vez que se ejecute.

Configuramos un objeto para utilizar propiedades dinámicas en la ventana Propiedades del objeto en Visual Studio .NET. Seleccionar la casilla de verificación DynamicProperties en la sección de configuración de la ventana Propiedades, y establecer la propiedad en una clave en Web.config.

Introducción

Almacenar los valores de las propiedades en Web.config

Permite actualizaciones sencillas

Habilitar y configurar las propiedades del objeto

Page 615: Microsoft ASP.net - Curso Completo - Espa Ol

41 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

Demostración: uso de propiedades dinámicas

Configurar un objeto SqlConnection para utilizar propiedades dinámicas

Mostrar el código que acaba de generarse en la página de código subyacente

Abrir el archivo Web.config y mostrar la clave SqlConnection1.ConnectionString en la sección appSettings

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

En esta demostración, veremos cómo habilitar y configurar un objeto SqlConnection para utilizar propiedades dinámicas.

Todos los archivos para esta demostración se encuentran en el proyecto Demo13CS o Demo13VB que se pueden encontrar dentro del fichero demos13.zip.

Ejecutar la demostración

1. Abrir la página 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 dinámica.

4. Seleccionar la propiedad ConnectionString y hacer clic en el botón “...”. 5. En el cuadro de diálogo Propiedad dinámica, convertir la propiedad en una

propiedad dinámica con el nombre de clave predeterminado seleccionando Asignar la propiedad a una clave en el archivo de configuración, 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 dinámica.

Introducción

Configurar un objeto SqlConnection para utilizar propiedades dinámicas

Page 616: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 42

7. Visualizar el código que acaba de generarse en la página de código

subyacente y buscar la línea de código que establece la propiedad ConnectionString del objeto SqlConnection: Me.SqlConnection1.ConnectionString = _ CType(configurationAppSettings.GetValue _ ("SqlConnection1.ConnectionString", _ GetType(System.String)), String) this.SqlConnection1.ConnectionString = ((string)(configurationAppSettings.GetValue("SqlConnection1.ConnectionString", typeof(string))));

8. Abrir el archivo Web.config y buscar la clave SqlConnection1.ConnectionString en la sección appSettings.

Mostrar el código que se ha generado

Visual Basic .NET

C#

Mostrar la clave SqlConnection1. ConnectionString

Page 617: Microsoft ASP.net - Curso Completo - Espa Ol

43 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

Lección: implementar una aplicación Web ASP.NET

Implementar una aplicación Web

Preparar una aplicación Web para su implementación

Práctica: seleccionar los archivos necesarios

Compartir ensamblados en la caché de ensamblados global

Actualizar la aplicación Web

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

Después de haber configurado los objetos Cache y la caché de resultados, y de haber organizado las opciones de configuración de la aplicación Web entre los archivos Machine.config y Web.config, estamos preparados para implementar la aplicación Web ASP.NET.

En esta lección, estudiaremos cómo seleccionar los archivos necesarios para ejecutar la aplicación Web y utilizaremos XCOPY o FTP (file transfer protocol) para copiar estos archivos en el directorio de producción.

En esta lección, aprenderemos a:

Implementar una aplicación Web. Preparar la aplicación Web para su implementación seleccionando

únicamente los archivos necesarios para ejecutar la aplicación Web. Compartir los ensamblados en la Caché de Ensamblados Global (Global

Assembly Cache, GAC). Actualizar una aplicación Web ASP.NET.

Introducción

Objetivos de la lección

Page 618: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 44

Implementar una aplicación 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

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

Para implementar una aplicación Web ASP.NET en un directorio o servidor en producción, debemos copiar todos los archivos necesarios en la ubicación 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 implementación XCOPY, por la utilidad XCOPY de Microsoft MS-DOS®, y copia todos los archivos y carpetas de un directorio.

Antes de poder implementar una aplicación Web en un directorio en producción, la carpeta en la que se implementará la aplicación 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 botón 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 botón derecho en la carpeta y clic en Propiedades. 5. En la ficha Directorio, en la sección de configuración de la aplicación,

hacer clic en Crear. 6. Hacer clic en Aceptar.

Introducción

Configurar la carpeta de destino como un directorio virtual en IIS

Page 619: Microsoft ASP.net - Curso Completo - Espa Ol

45 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

Para ejecutar la aplicación Web en el directorio de producción, únicamente se necesita un subconjunto de los archivos requeridos para generar una aplicación Web. El paso final antes de copiar la aplicación Web sería generar la aplicación 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 después de copiar archivos. La aplicación Web está preparada para aceptar peticiones después de ser copiada a una carpeta que se ha configurado en IIS como un directorio de aplicación Web.

Copiar todos los archivos necesarios

Page 620: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 46

Preparar una aplicación Web para su implementación

1. Generar la aplicación Web

2. No seleccionar archivos innecesarios

Archivos de solución de Visual Studio .NET (.vbproj, .vbproj.webinfo, .csproj, .csproj.webinfo, etc.)

Archivos de recursos (.resx)

Páginas de código subyacente (.vb, .cs)

3. Copiar o FTP archivos necesarios en el directorio de producción

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

Hay tres pasos importantes que son necesarios para trasladar la aplicación Web desde el entorno de desarrollo a un directorio o servidor en producción:

1. Generar la aplicación Web. 2. Eliminar todos los archivos innecesarios de la aplicación Web. 3. Copiar los archivos en el entorno de producción.

El primer paso es generar, o compilar, la aplicación Web. Esta compilación crea un archivo DLL (dynamic-link library) en el directorio \bin que contiene todo el código de la aplicación Web. Se crea un archivo NombreAplicación.dll por cada aplicación Web; este archivo contiene el código de todos los recursos y archivos de código subyacente.

El segundo paso en la implementación de una aplicación Web es seleccionar únicamente los archivos necesarios del directorio que contiene la aplicación Web. Al no copiar archivos innecesarios, se incrementa la seguridad del entorno de producción limitando la exposición de código no compilado.

Introducción

Generar la aplicación

No seleccionar archivos innecesarios

Page 621: Microsoft ASP.net - Curso Completo - Espa Ol

47 Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

Los archivos que no son necesarios en el directorio de producción son:

Archivos de solución de Visual Studio .NET (.vbproj, .vbproj.webinfo, .csproj, etc.) Visual Studio .NET necesita estos archivos únicamente para desarrollar la aplicación Web y no son necesarios para ejecutar la aplicación Web en producción.

Archivos de recursos (.resx) Estos archivos están compilados en el archivo DLL.

Páginas de código subyacente (.vb, .cs) Estos archivos están compilados en el archivo DLL.

Si se utiliza la compilación dinámica en la aplicación Web, deben copiarse las páginas de código subyacente. La compilación dinámica se habilita utilizando el atributo src en la directiva @ Page.

Los archivos necesarios en el servidor de producción incluyen:

El directorio \bin y los archivos DLL que incluye. Estos archivos son los archivos de recursos compilados y las páginas de código 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 aplicación.

Archivos de configuración, incluyendo Web.config y global.asax. Si se han modificado las opciones de configuración en el archivo Machine.config en el equipo de desarrollo, deben realizarse los mismos cambios en el archivo Machine.config en el servidor de producción.

Los archivos de soporte adicionales que existan en el directorio (como archivos XML).

Una vez compilada la aplicación Web y eliminados todos los archivos innecesarios, debemos utilizar FTP o copiar en el directorio de producción únicamente los archivos restantes de la aplicación Web del directorio de desarrollo.

Nota

Archivos necesarios

Copiar o utilizar FTP

Page 622: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 48

Práctica: seleccionar los archivos necesarios

Los estudiantes:

Seleccionarán los archivos necesarios para una implementación

Tiempo: 5 Minutos

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

En esta práctica, seleccionaremos los archivos necesarios que debemos copiar en el directorio de producción.

Archivo Visual Basic .NET

Archivo Microsoft Visual C#™

Conservar Eliminar

.vbproj .csproj

.vbproj.webinfo .csproj.webinfo

.resx .resx

.dll .dll

.aspx .aspx

directorio \bin y contenido directorio \bin y contenido

.aspx.vb .aspx.cs

.csproj .vbproj

Global.asax Global.asax

.exe .exe

.ascx .ascx

.xml .xml

Web.config Web.config

Page 623: Microsoft ASP.net - Curso Completo - Espa Ol

49 Configurar, optimizar e implementar una aplicación 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 código a nivel de equipo

Los archivos DLL no están registrados, por ello, no se comparten fácilmente entre aplicaciones Web

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

Los equipos que tengan instalado el .NET Framework también tienen una caché de código a nivel de equipo denominada Caché de Ensamblados Global (Global Assembly Cache - GAC). Después de implementar nuestra aplicación Web en un servidor Web en producción, podemos utilizar la GAC para compartir código entre las aplicaciones Web en el servidor Web.

Aunque el objeto Cache de ASP.NET se utiliza para el almacenamiento de información a corto plazo de una aplicación Web, la GAC puede utilizarse para compartir código en todo el servidor Web. La GAC almacena ensamblados diseñados específicamente para ser compartidos por varias aplicaciones Web en un servidor. Un ensamblado es una colección de recursos en un único archivo (por ejemplo, un archivo dll).

Existen varios motivos para instalar un ensamblado en la GAC, incluyendo:

Ubicación compartida Los ensamblados utilizados por múltiples 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 Múltiples copias de ensamblados con el mismo nombre, pero con diferente información de versión, pueden mantenerse en la GAC.

Introducción

Almacenamiento para ensamblados que deben compartirse

Page 624: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET 50

Actualizar la aplicación Web

Copiar o FTP archivos para actualizar la aplicación Web

No es necesario detener y volver a iniciar IIS

Los archivos .dll pueden actualizarse mientras el sitio sigue ejecutándose

La caché de resultados protege a los usuarios existentes

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

Una vez que nuestra aplicación Web se esté ejecutando en un directorio en producción, podemos actualizar la aplicación Web en cualquier momento sin necesidad de volver a iniciar el servidor, IIS o la aplicación Web.

Con ASP.NET, cuando tenemos una nueva versión de la aplicación Web, únicamente necesitamos copiar los nuevos archivos en el directorio, sobrescribiendo los archivos existentes. Cuando el siguiente usuario se conecta a nuestra aplicación Web, recibe los archivos más 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 páginas para los formularios Web Forms, los usuarios seguirán recibiendo las versiones antiguas de las páginas hasta que venza la caché. Cuando expiren las páginas en caché, los usuarios recibirán una versión actualizada de esa página.

Introducción

Copiar o FTP archivos

La caché de resultados protege a los usuarios existentes

Page 625: Microsoft ASP.net - Curso Completo - Espa Ol

Práctica A: Configurar, optimizar e implementar una aplicación Web con Microsoft ASP.NET

MedicalMedical.aspxMedicalMedical.aspx

BenefitsHome PageDefault.aspx

BenefitsHome PageDefault.aspx

Life InsuranceLife.aspxLife InsuranceLife.aspx

RetirementRetirement.aspxRetirementRetirement.aspx

DentalDental.aspxDentalDental.aspx

Dentists

DoctorsDoctors.aspx DoctorsDoctors.aspx

Doctors

Logon PageLogin.aspxLogon PageLogin.aspx

RegistrationRegister.aspxRegistrationRegister.aspx

CohoWinery

ProspectusProspectus.aspxProspectusProspectus.aspx

XML Web ServicedentalService1.asmx

XML Web ServicedentalService1.asmx

Page HeaderHeader.ascxPage HeaderHeader.ascx

ASPState

tempdb

Lab Web Application

User Controlnamedate.ascxUser Controlnamedate.ascx

Menu ComponentClass1.vb or Class1.cs

Menu ComponentClass1.vb or Class1.cs

XML Files

Web.config

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

En este laboratorio, aprenderemos a:

Utilizar el objeto Cache para almacenar en caché un DataSet. Utilizar propiedades dinámicas. Utilizar la caché de resultados de página para almacenar en la caché un

formulario Web Form y un control de usuario. Utilizar la propiedad VaryByParam para manipular la caché de páginas. Implementar una aplicación Web Microsoft® ASP.NET en un servidor

remoto.

Este laboratorio se centra en los conceptos de este módulo. Por ello, podría no cumplir las recomendaciones de seguridad de Microsoft.

Para trabajar en este laboratorio, es necesario tener:

Conocimientos sobre cómo utilizar el objeto Cache. Conocimientos sobre cómo funciona la caché de resultados de página. Conocimientos sobre el uso de Internet Information Services (IIS).

Objetivos

Nota

Requisitos previos

Page 626: Microsoft ASP.net - Curso Completo - Espa Ol

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 dinámicas para almacenar la URL (Uniform

Resource Locator) de un servicio Web XML. Implementar el sitio Web LabApplication en un servidor remoto.

Escenario

Tiempo estimado para completar el laboratorio: 90 minutos

Page 627: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 0 Configuración del laboratorio

Para realizar este laboratorio, es necesario haber creado el proyecto de la aplicación 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 solución LabApplication

Realizar este procedimiento únicamente si no se ha creado un archivo de solución LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solución en blanco denominada LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Solución en

blanco. b. En el cuadro de diálogo Nuevo proyecto, escribir LabApplication en el

cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

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

1. Crear un nuevo proyecto de aplicación Web ASP.NET, denominado BenefitsVB o BenefitsCS, en la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto. b. En el cuadro de diálogo 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 Aplicación Web ASP.NET,

establecer la ubicación 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 Solución, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solución, es importante el uso de mayúsculas 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 mayúsculas el nombre del proyecto Benefits.

Importante

Importante

Precaución

Page 628: Microsoft ASP.net - Curso Completo - Espa Ol

Actualizar el proyecto Benefits

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

3. Buscar los archivos de proyecto: Ir a la carpeta VB\Starter\BenefitsVB. Ir a la carpeta CS\Starter\BenefitsCS. Estas carpetas pueden encontrarse dentro del fichero labs13.zip

4. En el cuadro Archivos de tipo del cuadro de diálogo Agregar elemento existente – Benefits, hacer clic en Todos los archivos (*.*).

5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir. 6. Hacer clic en Sí a la pregunta de sobrescribir o recargar los archivos.

Crear la biblioteca de clases BenefitsList

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

1. Crear un nuevo proyecto de biblioteca de clases. Crear un nuevo proyecto de biblioteca de clases Visual Basic .NET con el nombre BenefitsListVB, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de diálogo 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 solución, y clic en Aceptar. Crear un nuevo proyecto de biblioteca de clases Visual C# .NET con el nombre BenefitsListCS, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de diálogo 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 solución, y clic en Aceptar.

Verificar que se han escrito correctamente las mayúsculas del proyecto BenefitsList.

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Importante

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Precaución

Page 629: Microsoft ASP.net - Curso Completo - Espa Ol

Actualizar el proyecto BenefitsList

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

3. Ir al proyecto BenefitsList. Ir a la carpeta VB\Starter\BenefitsListVB. Ir a la carpeta CS\Starter\BenefitsListCS. Estas carpetas pueden encontrarse dentro del fichero labs13.zip

4. En el cuadro Archivos de tipo del cuadro de diálogo 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 solución LabApplication, completar los siguientes pasos para agregar una referencia al componente BenefitsList que acabamos de crear: a. Hacer clic con el botón derecho en el proyecto BenefitsVB o

BenefitsCS en el Explorador de soluciones y hacer clic en Agregar referencia.

b. En el cuadro de diálogo Agregar referencia, en la pestaña Proyectos, hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.

c. En la lista Componentes seleccionados, seleccionar el componente BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar. El componente se agrega a la carpeta Referencias en el Explorador de soluciones.

Crear el Servicio Web XML Dental

Realizar este procedimiento únicamente si no se ha creado anteriormente el proyecto DentalService, o si se ha eliminado.

1. Crear un nuevo proyecto de Servicio Web XML, denominado DentalServiceVB o DentalServiceCS, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de diálogo 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 ubicación en http://localhost/DentalServiceVB o en http://localhost/DentalServiceCS.

d. Hacer clic en Agregar a solución, y clic en Aceptar.

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Importante

Page 630: Microsoft ASP.net - Curso Completo - Espa Ol

Verificar que se han utilizado correctamente las mayúsculas en el proyecto DentalServiceVB.

Actualizar el proyecto DentalService

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

DentalServiceVB o DentalServiceCS, seleccionar Agregar, y hacer clic en Agregar elemento existente.

3. Buscar la carpeta DentalService: Ir a VB\Starter\DentalServiceVB. Ir a CS\Starter\DentalServiceCS. Estas carpetas pueden encontrarse dentro del fichero labs13.zip

4. Agregar archivos al proyecto: En el cuadro Archivos de tipo del cuadro de diálogo Agregar elemento existente – DentalServiceVB, hacer clic en Todos los archivos (*.*). En el cuadro Archivos de tipo del cuadro de diálogo 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 botón

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 solución 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 botón derecho en

BenefitsVB o BenefitsCS y clic en Agregar referencia Web. b. En el cuadro de texto Dirección, escribir:

http://localhost/DentalServiceVB/DentalService.asmx http://localhost/DentalServiceCS/DentalService.asmx Pulsar ENTER. Se mostrará la referencia Web DentalService.

c. Hacer clic en Agregar referencia. La referencia Web se agrega al proyecto en la carpeta Referencias Web.

2. En el Explorador de soluciones, expandir Referencias Web, hacer clic con el botón derecho en localhost, y seleccionar Cambiar nombre.

3. Escribir DentalWebRef, y pulsar ENTER. 4. Generar la solución haciendo clic en Generar solución en el menú

Generar.

Precaución

Visual Basic .NET Visual C#

Visual Basic .NET

Visual C#

Visual Basic .NET Visual C#

Page 631: Microsoft ASP.net - Curso Completo - Espa Ol

Instalar y configurar las bases de datos del estado de sesión

1. En el menú Inicio, seleccionar Todos los programas, seleccionar Accesorios, y hacer clic en Línea de comandos. Se abre una ventana de comandos.

2. En la línea de comandos, escribir el siguiente comando, siendo version la última versión del .NET Framework instalada en el equipo, y pulsar ENTER: cd\Windows\Microsoft.NET\Framework\version\ La línea de comandos cambia al nuevo directorio.

3. En la línea de comandos, escribir el siguiente comando, y pulsar ENTER: OSQL –S localhost –E <InstallSqlState.sql La ventana de comandos muestra una serie de números y mensajes, y regresa a la línea de comandos. Se han restablecido las bases de datos ASPState y tempdb.

4. Cerrar la línea de comandos y abrir Windows Explorer. 5. Ir al siguiente directorio:

VB\Starter CS\Starter Estas carpetas pueden encontrarse dentro del fichero labs13.zip

6. Hacer doble clic en Lab13.bat. Este archivo de proceso por lotes ejecuta una consulta SQL que configura la seguridad para las bases de datos ASPState y tempdb.

7. Cerrar Windows Explorer.

Visual Basic .NET Visual C#

Page 632: Microsoft ASP.net - Curso Completo - Espa Ol

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 número 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 también implementa paginado. Para reducir la cantidad de código que agregaremos en este laboratorio, deshabilitaremos esta característica del DataGrid.

Cancelar la paginación

1. Abrir el archivo doctors.aspx. 2. Hacer clic con el botón derecho en el objeto DataGrid dgDoctors, y

seleccionar Property Builder. 3. Seleccionar la ficha Paging, y deseleccionar la casilla de verificación de

Allow paging. De esta forma, se deshabilitará el paginado del DataGrid. Se mostrarán 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 línea de

código: If Not Page.IsPostBack Then if (!Page.IsPostBack)

3. Agregar código, justo antes de esta línea, que compruebe la caché de una clave denominada doctors. El código debería comprobar si esta clave está vacía o no existe.

4. Si la clave doctors de la caché está vacía 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 información en la siguiente tabla para escribir el código.

Propiedad Valor Visual Basic .NET C#

Key name doctors doctors

Value DsDoctors1 dsDoctors1

Visual Basic .NET

C#

Page 633: Microsoft ASP.net - Curso Completo - Espa Ol

Dependencies Nothing null

Absolute Expiration Four minutes Four minutes

Sliding Expiration Nothing Caching.Cache.NoSlidingExpiration El código debería ser similar al siguiente: If (Cache("doctors") Is Nothing) Then SqlDataAdapter1.Fill(DsDoctors1) Cache.Insert("doctors", DsDoctors1, Nothing, _ DateTime.Now.AddMinutes(4), Nothing) End If if (Cache["doctors"] == null) { sqlDataAdapter1.Fill(dsDoctors1); Cache.Insert("doctors", dsDoctors1, null, DateTime.Now.AddMinutes(4), System.Web.Caching.Cache.NoSlidingExpiration); }

5. En el procedimiento de evento Page_Load, buscar el siguiente comentario: TODO Lab 9: bind the datagrid to the doctors table Debajo del comentario, eliminar el comentario de la siguiente línea de código: SqlDataAdapter1.Fill(DsDoctors1) sqlDataAdapter1.Fill(dsDoctors1);

6. En el procedimiento de evento Page_Load, buscar la siguiente línea de código: dgDoctors.DataSource = DsDoctors1 dgDoctors.DataSource = dsDoctors1;

7. Establecer la propiedad DataSource de dgDoctors en el DataSet almacenado en la caché. El código debería ser similar al siguiente: dgDoctors.DataSource = Cache("doctors") dgDoctors.DataSource = Cache["doctors"];

Visual Basic .NET

C#

Visual Basic .NET

C#

Visual Basic .NET

C#

Visual Basic .NET

C#

Page 634: Microsoft ASP.net - Curso Completo - Espa Ol

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 línea de código: SqlDataAdapter1.Fill(DsDoctors1) sqlDataAdapter1.Fill(DsDoctors1);

2. Eliminar esta línea de código y sustituirla con el mismo código que hemos agregado al procedimiento de evento Page_Load. Este código comprueba la presencia de la clave de caché doctors, y crea una nueva clave si la clave doctors no existe o está vacía.

3. En el código 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 debería ser similar al siguiente: Dim strCity As String = _ Trim(lstCities.SelectedItem.Value) If (Cache("doctors") Is Nothing) Then SqlDataAdapter1.Fill(DsDoctors1) Cache.Insert("doctors", DsDoctors1, Nothing, _ DateTime.Now.AddMinutes(4), Nothing) End If If strCity = "[All]" Then dgDoctors.DataSource = Cache("doctors") Else Dim dvDocs As New DataView(CType(Cache("doctors"), _ DataSet).Tables(0)) dvDocs.RowFilter = "city = '" & strCity & "'" dgDoctors.DataSource = dvDocs End If reset() dgDoctors.DataBind()

Visual Basic .NET

C#

Visual Basic .NET

Page 635: Microsoft ASP.net - Curso Completo - Espa Ol

string strCity = (lstCities.SelectedItem.Text).Trim(); if (Cache["doctors"] == null) { sqlDataAdapter1.Fill(dsDoctors1); Cache.Insert("doctors",dsDoctors1, null, DateTime.Now.AddMinutes(4), System.Web.Caching.Cache.NoSlidingExpiration); } if (strCity == "[All]") dgDoctors.DataSource = Cache["doctors"]; else { DataView dvDocs = new DataView(((DataSet)Cache["doctors"]).Tables[0]); dvDocs.RowFilter = "city = '" + strCity + "'"; dgDoctors.DataSource = dvDocs; } reset(); dgDoctors.DataBind();

Cuando se utiliza una clave de la caché con un objeto DataView, debemos realizar una conversión de tipo de datos explícita porque el proyecto Benefits tiene habilitado Option Strict.

Probar la página

1. Guardar doctors.aspx.vb o doctors.aspx.cs, y generar y examinar la página. 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 añadido. Observar que ele elemento eliminado todavía aparece en el DataGrid. Si esperamos cuatro minutos y actualizamos la página, veremos que el elemento eliminado ya no aparece.

C#

Nota

Page 636: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 2 Utilizar la caché de resultados de página

En este ejercicio, almacenaremos en la caché un formulario Web Form utilizando la directiva OutputCache. También modificaremos el atributo VaryByParam.

La página medical.aspx muestra el nombre del usuario, fecha de nacimiento y el doctor que el usuario ha seleccionado en la página doctors.aspx. Para reducir los tiempos de respuesta de esta página, deberíamos almacenar en caché toda la página utilizando la caché de resultados de página.

Almacenar en caché la página medical.aspx

1. Abrir la página 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 página. La página debería permanecer en la caché durante dos minutos y no se debería actualizar basándose en los parámetros pasados a la página. El código debería ser similar al siguiente: <%@ OutputCache Duration="120" VaryByParam="none"%>

3. Guardar y examinar la página medical.aspx. 4. Hacer clic en el enlace Select a doctor. 5. En la página doctors.aspx, seleccionar un doctor del DataGrid, y hacer clic

en Submit. Regresamos a la página 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 página medical.aspx. 2. Editar la directiva OutputCache que hemos agregado, y cambiar el código

para crear una nueva versión de la página en la caché cuando se seleccione un doctor distinto en la página doctors.aspx. ¿Cuál es el nombre del parámetro que se ha pasado de la página doctors.aspx a la página medical.aspx? ____________________________________________________________

____________________________________________________________

Escenario

Page 637: Microsoft ASP.net - Curso Completo - Espa Ol

El código debería ser similar al siguiente: <%@ OutputCache Duration="120" VaryByParam="pcp"%>

3. Guardar la página 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.

Page 638: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 3 Caché de página parcial

En este ejercicio, utilizaremos la caché de resultados de páginas para almacenar en la caché el control de usuario header.ascx. Agregaremos en primer lugar una marca de tiempo al encabezado para verificar que la caché funciona correctamente.

El control de usuario header.ascx muestra un titular en la parte superior de cada página de nuestra aplicación Web. Normalmente, esta información no cambia y es requerida para cada petición de página, por ello deberíamos almacenarla en caché para una rápida recuperación.

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 página de código subyacente de header.ascx, al final del

procedimiento de evento Page_Load, agregar código para que la etiqueta lblTime muestre la hora actual. El código debería ser similar al siguiente: lblTime.Text = DateTime.Now.TimeOfDay.ToString() lblTime.Text = DateTime.Now.TimeOfDay.ToString();

4. Guardar y generar header.ascx. 5. Ir a la página doctors.aspx.

Debido a que header.ascx no puede visualizarse en un navegador, debemos visualizar una página 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 página doctors.aspx.

Escenario

Visual Basic .NET

C#

Page 639: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar caché al archivo del encabezado

1. Abrir header.ascx y cambiar a la vista HTML. 2. Agregar una directiva Output Cache a la página para habilitar caché de

páginas con una duración de dos minutos. La caché no debería cambiar basándose en ninguno de los parámetros que se pasen. El código debería ser similar al siguiente: <%@ OutputCache Duration="120" VaryByParam="none"%>

3. Guardar y generar header.ascx. 4. Ir a la página 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 actualización. Si se dispone de tiempo, esperar más de dos minutos y actualizar la página una vez más. El encabezado mostrará la hora actual.

Page 640: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 4 Utilizar propiedades dinámicas

En este ejercicio, utilizaremos propiedades dinámicas para colocar la URL del servicio Web XML DentalService en el archivo Web.config.

Un servicio Web XML puede tener una URL que cambie con el tiempo. Si nuestra aplicación Web conecta con un servicio Web XML, podemos insertar la URL de ese servicio Web en el archivo Web.config de nuestra aplicación Web. Si la URL del servicio Web XML cambia, únicamente deberemos actualizar el archivo Web.config, no es necesario cambiar la información del proxy y volver a generar el proyecto. La modificación del archivo Web.config no requiere volver a generar la aplicación Web.

Visualizar la configuración actual del proxy

1. Abrir el archivo proxy del servicio Web XML DentalService. El archivo proxy se denomina Reference.vb o Reference.cs, y se encuentra en el Explorador de soluciones bajo WebReferences\DentalWebRef\ Reference.map.

Si no podemos visualizar el archivo listado bajo del archivo Reference.map, hacer clic en el icono Mostrar todos los archivos de la parte superior del Explorador de soluciones o clic en Mostrar todos los archivos del menú Proyecto.

2. En Reference.vb, buscar el constructor denominado New. En Reference.cs, buscar el constructor denominado DentalService. ¿Qué hace este método? ____________________________________________________________

____________________________________________________________

3. En el Explorador de soluciones, hacer clic con el botón 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 configuración de la propiedad URL Behavior de Static a Dynamic.

5. Cuando se abra el cuadro de diálogo 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 código añadido? ____________________________________________________________

____________________________________________________________

Escenario

Sugerencia

Page 641: Microsoft ASP.net - Curso Completo - Espa Ol

7. En el Explorador de soluciones, abrir el archivo Web.config del proyecto Benefits.

Asegurémonos 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é información se incluye en el elemento appSettings? _____________________________________________________________

_____________________________________________________________

Nota

Page 642: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 5 Implementar nuestro sitio

En este ejercicio, implementaremos nuestro sitio Web en otro servidor. Utilizaremos el equipo de un compañero como servidor de implementación.

Preparar la carpeta para la implementación

Debemos completar tres pasos en el equipo del compañero.

1. Abrir Windows Explorer e ir al directorio C:\Inetpub\wwwroot. 2. Hacer clic con el botón derecho en LabApplication, y clic en Compartir. 3. En la ventana Propiedades de LabApplication, hacer clic en Compartir

esta carpeta, y clic en Aceptar.

Los permisos de compartición 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 configuración aceptable. En un servidor de producción, no debería concederse acceso a carpetas compartidas al grupo Todos.

Preparar el proyecto para la implementación

1. En Visual Studio .NET, en el menú de acceso directo a la barra de

herramientas Depurar, , hacer clic en Release. 2. En el menú Generar, hacer clic en Generar de nuevo la solución. 3. Cerrar Visual Studio .NET.

Seleccionar y copiar archivos para la implementación

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ú Edición, hacer clic en Copiar. 4. En el cuadro de dirección de Windows Explorer, escribir \\partner\

LabApplication, siendo partner el nombre del equipo de nuestro compañero, y pulsar ENTER.

5. En el menú Edición, hacer clic en Pegar. Si se recibe un error de “Acceso denegado” mientras se copian los archivos, deberemos, junto con nuestro compañero, completar los siguientes pasos: a. Abrir Windows Explorer e ir a la carpeta C:\Inetpub\wwwroot. b. Hacer clic con el botón derecho en LabApplication, y seleccionar

Propiedades. c. Eliminar el atributo Sólo lectura, y hacer clic en Aceptar. d. En el cuadro de diálogo de confirmación de los cambios de los atributos,

hacer clic en Aplicar cambios a esta carpeta, subcarpeta y archivos, y hacer clic en Aceptar.

Importante

Page 643: Microsoft ASP.net - Curso Completo - Espa Ol

Una vez nuestro compañero 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 implementación. Los archivos que pueden eliminarse incluyen todos los archivos con las siguientes extensiones:

• .resx

• .vbproj

• .vb

• .webinfo

• .vsdisco

• .csproj

• .cs

Normalmente, eliminaríamos estos archivos ante de copiarlos al servidor de producción. En este laboratorio, se eliminan después de copiarlos para no eliminar archivos que podrían ser necesarios en otros laboratorios del curso.

8. Cerrar Windows Explorer.

Probar la implementación

1. Abrir Internet Explorer. 2. En la barra de dirección, escribir http://partner/ LabApplication, siendo

partner el equipo de nuestro compañero. Se muestra la página Default.aspx.

3. Explorar el sitio para estar seguro de que todas las páginas aparecen y funcionan según lo previsto.

La carpeta LabApplication se configuró como directorio de aplicación durante la configuración del aula. Generalmente, deberíamos acceder al servidor Web para configurar esta carpeta como una aplicación Web.

Nota

Nota

Page 644: Microsoft ASP.net - Curso Completo - Espa Ol

Práctica A: seguridad de una aplicación Web Microsoft ASP.NET

MedicalMedical.aspxMedicalMedical.aspx

BenefitsHome PageDefault.aspx

BenefitsHome PageDefault.aspx

Life InsuranceLife.aspxLife InsuranceLife.aspx

RetirementRetirement.aspxRetirementRetirement.aspx

DentalDental.aspxDentalDental.aspx

Dentists

DoctorsDoctors.aspx DoctorsDoctors.aspx

Doctors

Logon PageLogin.aspxLogon PageLogin.aspx

RegistrationRegister.aspxRegistrationRegister.aspx

CohoWinery

ProspectusProspectus.aspxProspectusProspectus.aspx

XML Web ServicedentalService1.asmx

XML Web ServicedentalService1.asmx

Page HeaderHeader.ascxPage HeaderHeader.ascx

ASPState

tempdb

Lab Web Application

User Controlnamedate.ascxUser Controlnamedate.ascx

Menu ComponentClass1.vb or Class1.cs

Menu ComponentClass1.vb or Class1.cs

XML Files

Web.config

En este laboratorio, aprenderemos a:

Securizar una aplicación Web Microsoft® ASP.NET utilizando la autenticación basada en Microsoft Windows®.

Securizar una aplicación Web utilizando la autenticación basada en formularios.

Crear páginas de inicio de sesión y de registro.

Para trabajar en este laboratorio, es necesario tener:

Conocimientos sobre cómo está estructurado un archivo. Conocimientos sobre cómo utilizar procedimientos almacenados para

controles de servidor. Conocimientos sobre cómo funcionan los controles de validación.

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 aplicación Web. En primer lugar, securizaremos el sitio utilizando la autenticación basada en Windows, y a continuación la cambiaremos a autenticación basada en formularios. Seguidamente, implementaremos la página de registro para ofrecer a los nuevos empleados la oportunidad de registrarse en el sitio Web de beneficios de Coho Winery. Finalmente, implementaremos la página para cerrar sesión.

Objetivos

Requisitos previos

Escenario

Tiempo estimado para completar el laboratorio: 45 minutos

Page 645: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 0 Configuración del laboratorio

Para realizar este laboratorio, es necesario haber creado el proyecto de la aplicación 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 solución LabApplication

Realizar este procedimiento únicamente si no se ha creado un archivo de solución LabApplication.

1. Utilizando Visual Studio .NET, crear una nueva solución en blanco denominada LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Solución en

blanco. b. En el cuadro de diálogo Nuevo proyecto, escribir LabApplication en el

cuadro de texto Nombre y hacer clic en Aceptar.

Crear el proyecto Benefits

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

1. Crear un nuevo proyecto de aplicación Web ASP.NET, denominado BenefitsVB o BenefitsCS, en la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo, y hacer clic en Proyecto. b. En el cuadro de diálogo 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 Aplicación Web ASP.NET,

establecer la ubicación 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 Solución, y hacer clic en Aceptar.

Cuando se agregan proyectos a la solución, es importante el uso de mayúsculas 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 mayúsculas el nombre del proyecto Benefits.

Importante

Importante

Precaución

Page 646: Microsoft ASP.net - Curso Completo - Espa Ol

Actualizar el proyecto Benefits

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

3. Buscar los archivos de proyecto: Ir a la carpeta VB\Starter\BenefitsVB . Ir a la carpeta CS\Starter\BenefitsCS . Estas carpetas pueden encontrarse dentro del fichero labs14.zip

4. En el cuadro Archivos de tipo del cuadro de diálogo Agregar elemento existente – Benefits, hacer clic en Todos los archivos (*.*).

5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir. 6. Hacer clic en Sí a la pregunta de sobrescribir o recargar los archivos.

Crear la biblioteca de clases BenefitsList

Realizar este procedimiento únicamente si no se ha creado anteriormente un proyecto BenefitsList, o si se ha eliminado

1. Crear un nuevo proyecto de biblioteca de clases. Crear un nuevo proyecto de biblioteca de clases Visual Basic .NET con el nombre BenefitsListVB, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de diálogo 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 solución, y clic en Aceptar. Crear un nuevo proyecto de biblioteca de clases Visual C# .NET con el nombre BenefitsListCS, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de diálogo 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 solución, y clic en Aceptar.

Verificar que se han escrito correctamente las mayúsculas del proyecto BenefitsList.

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Importante

Para el proyecto Visual Basic .NET

Para el proyecto Visual C#

Precaución

Page 647: Microsoft ASP.net - Curso Completo - Espa Ol

Actualizar el proyecto BenefitsList

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente.

3. Ir al proyecto BenefitsList: Ir a la carpeta VB\Starter\BenefitsListVB. Ir a la carpeta CS\Starter\BenefitsListCS. Estas carpetas pueden encontrarse dentro del fichero labs14.zip

4. En el cuadro Archivos de tipo del cuadro de diálogo 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 solución LabApplication, completar los siguientes pasos para agregar una referencia al componente BenefitsList que acabamos de crear: a. Hacer clic con el botón derecho en el proyecto BenefitsVB o

BenefitsCS en el Explorador de soluciones y hacer clic en Agregar referencia.

b. En el cuadro de diálogo Agregar referencia, en la pestaña Proyectos, hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.

c. En la lista Componentes seleccionados, seleccionar el componente BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar. El componente se agrega a la carpeta Referencias en el Explorador de soluciones.

Crear el Servicio Web XML Dental

Realizar este procedimiento únicamente si no se ha creado el proyecto DentalService, o si se ha eliminado

2. Crear un nuevo proyecto de servicio Web XML. Crear un nuevo proyecto de Servicio Web XML de Visual Basic .NET denominado DentalServiceVB, y agregarlo a la solución LabApplication: a. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de diálogo 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 ubicación en http://localhost/DentalServiceVB. b. Hacer clic en Agregar a solución, y clic en Aceptar.

Verificar que se han utilizado correctamente las mayúsculas en

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

Importante

Para el proyecto Visual Basic .NET

Precaución

Page 648: Microsoft ASP.net - Curso Completo - Espa Ol

el proyecto DentalServiceVB.

Crear un nuevo proyecto de Servicio Web XML con Visual C# .NET denominado DentalServiceCS, y agregarlo a la solución LabApplication: c. En el menú Archivo, seleccionar Nuevo y hacer clic en Proyecto. d. En el cuadro de diálogo 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 ubicación en http://localhost/DentalServiceCS. b. Hacer clic en Agregar a solución, y clic en Aceptar.

Verificar que se han utilizado correctamente las mayúsculas en el proyecto DentalServiceVB.

Actualizar el proyecto DentalService

1. En Visual Studio .NET, abrir el archivo de solución LabApplication. 2. En el Explorador de soluciones, hacer clic con el botón derecho en

DentalServiceVB o DentalServiceCS, seleccionar Agregar, y hacer clic en Agregar elemento existente.

3. Buscar los archivos de proyecto: 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 diálogo 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 botón

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 solución 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 botón derecho en

BenefitsVB o BenefitsCS y clic en Agregar referencia Web. b. En el cuadro de texto Dirección, escribir

http://localhost/DentalServiceVB/DentalService1.asmx http://localhost/DentalServiceCS/DentalService1.asmx y pulsar ENTER..

Para el proyecto Visual C# .NET

Precaución

Para el proyecto Visual Basic .NET

Para el proyecto Visual C# .NET

Proyecto Visual Basic .NET

Proyecto Visual C#

Page 649: Microsoft ASP.net - Curso Completo - Espa Ol

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 botón derecho en localhost, y seleccionar Cambiar nombre. 3. Escribir DentalWebRef, y pulsar ENTER. 4. Generar la solución haciendo clic en Generar solución en el menú

Generar.

Instalar y configurar las bases de datos del estado de sesión

1. En el menú Inicio, seleccionar Todos los programas, seleccionar Accesorios, y hacer clic en Línea de comandos. Se abre una ventana de comandos.

2. En la línea de comandos, escribir el siguiente comando, siendo version la última versión del .NET Framework instalada en el equipo, y pulsar ENTER: cd \WINDOWS\Microsoft.NET\Framework\version\ La línea de comandos cambia al nuevo directorio.

3. En la línea de comandos, escribir el siguiente comando, y pulsar ENTER: OSQL –S localhost –E <InstallSqlState.sql La ventana de comandos muestra una serie de números y mensajes, y regresa a la línea de comandos. Se han restablecido las bases de datos ASPState y tempdb.

4. Cerrar la línea de comandos y abrir Windows Explorer. 5. Ir al siguiente directorio:

VB\Starter

CS\Starter Estas carpetas pueden encontrarse dentro del fichero labs14.zip

6. Hacer doble clic en Lab14.bat. Este archivo de proceso por lotes ejecuta una consulta SQL que configura la seguridad para las bases de datos ASPState y tempdb.

7. Cerrar Windows Explorer.

Proyecto Visual Basic .NET

Proyecto Visual C#

Page 650: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 1 Securizar nuestro sitio Web utilizando la autenticación basada en Windows

En este ejercicio, configuraremos Internet Information Services (IIS) para que utilice la autenticación básica y obtener acceso a páginas seguras, y la autenticación anónima para obtener acceso a páginas no seguras. A continuación, editaremos el archivo Web.config para denegar el acceso a los usuarios no autenticados a las páginas medical.aspx y doctors.aspx. Finalmente, denegaremos el acceso a usuarios no autenticados a cualquier página del sitio Coho Winery Web.

Configurar la autenticación de IIS

1. En el menú Inicio, hacer clic con el botón derecho en Mi PC y clic en Administrar.

2. En la consola Administración 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 botón derecho en la aplicación Web BenefitsVB o BenefitsCS y clic en Propiedades.

4. En el cuadro de diálogo Propiedades de BenefitsVB o BenefitsCS, en la ficha Seguridad de directorios, en la sección Control de autenticación y acceso anónimo, hacer clic en Modificar.

5. En el cuadro de diálogo Métodos de autenticación, comprobar que está seleccionado Acceso anónimo, y que no está seleccionado Autenticación integrada de Windows, y seleccionar la casilla de verificación de Autenticación básica (la contraseña se envía en texto claro).

6. Cuando recibamos el aviso de seguridad sobre la habilitación de la autenticación básica, hacer clic en Sí. El aspecto de la configuración es como el de la siguiente ilustración.

Page 651: Microsoft ASP.net - Curso Completo - Espa Ol

Se ha habilitado el acceso anónimo, permitiéndonos acceder a páginas seguras y no seguras de la misma aplicación Web. Para este ejercicio, se ha habilitado la autenticación básica sin utilizar Secure Sockets Layer (SSL), lo cual significa que las contraseñas se envían utilizando texto claro. En un escenario del mundo real, para estar seguro, debemos obtener un certificado de servidor y utilizar SSL cuando utilicemos la autenticación básica.

7. Hacer clic en Aceptar, clic de nuevo en Aceptar y cerrar la consola Administración de equipos.

Nota de seguridad

Page 652: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar una página para mostrar los resultados de la información sobre seguridad

1. Abrir el proyecto BenefitsVB o BenefitsCS en la solución LabApplication Visual Studio .NET.

2. Agregar el formulario Web Form securitytest.aspx al proyecto Benefits desde la carpeta VB\Starter\BenefitsVB. CS\Starter\BenefitsCS. Estas carpetas pueden encontrarse dentro del fichero labs14.zip

3. Abrir el archivo securitytest.aspx.vb o securitytest.aspx.cs y examinar su contenido. ¿cuál es la utilidad de las dos líneas de código del procedimiento de evento Page_Load? ____________________________________________________________

____________________________________________________________

Configurar la seguridad del archivo Web.config para algunas de las páginas del proyecto Benefits

1. Abrir el archivo Web.config en el proyecto BenefitsVB o BenefitsCS. 2. Buscar la sección <authentication> y verificar que el modo está establecido

en autenticación Windows. La configuración debería tener lo siguiente: <authentication mode="Windows" />

3. Para el proyecto Visual Basic .NET, eliminar la sección <authorization> existente de Web.config.

4. Denegar el acceso a usuarios anónimos para las páginas medical.aspx y doctors.aspx. Introducir nuestra configuración al final del archivo Web.config, después de la etiqueta </system.web>, pero antes de la etiqueta </configuration>. La configuración debería tener el siguiente aspecto: <location path="medical.aspx"> <system.web> <authorization> <deny users="?" /> </authorization> </system.web> </location> <location path="doctors.aspx"> <system.web> <authorization> <deny users="?" /> </authorization> </system.web> </location>

Visual Basic .NET Visual C#

Page 653: Microsoft ASP.net - Curso Completo - Espa Ol

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 página 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 página no muestra ninguna información de autenticación debido a que no estamos autenticados.

6. Ir a http://localhost/BenefitsVB/Medical.aspx o http://localhost/BenefitsCS/Medical.aspx. Deberíamos ver el cuadro de diálogo Conectar a localhost.

7. Introducir nuestro nombreequipo\nombreusuario y la contraseña de nuestra aula. Ahora podemos explorar la página medical.aspx.

8. Ir de nuevo a http://localhost/BenefitsVB/SecurityTest.aspx o http://localhost/BenefitsCS/SecurityTest.aspx. La página muestra ahora nuestra información de autenticación. Si no se muestra nuestra información de autenticación, actualizar la página.

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 anónimos a toda la carpeta Benefits. Para ello,

debemos eliminar las dos secciones <location> que se agregaron anteriormente y crear una nueva sección para denegar el acceso a usuarios anónimos a toda la carpeta, justo después del elemento <authentication> en el archivo Web.config. La configuración debería tener el siguiente aspecto: <authorization> <deny users="?" /> </authorization>

Page 654: Microsoft ASP.net - Curso Completo - Espa Ol

Guardar y probar

1. Guardar los cambios. No es necesario volver a generar el proyecto BenefitsVB o BenefitsCS ya que no ha cambiado el código. Tan pronto como se guarde el archivo Web.config, los cambios tendrán efecto.

2. Abrir una nueva instancia del navegador e ir a http://localhost/BenefitsVB/default.aspx o http://localhost/BenefitsCS/default.aspx.

Debemos asegurarnos de que abrimos un nuevo navegador. Si continuamos en la sesión autenticada anterior, no podremos probar si la seguridad funciona.

Esta vez deberíamos ver inmediatamente el cuadro de diálogo Conectar a localhost, ya que todas las páginas están aseguradas, incluyendo default.aspx.

3. Introducir nombreequipo\nombreusuario y la contraseña del aula, y hacer clic en Aceptar. Ahora podemos ir a todas las páginas que se encuentran en la aplicación Web Benefits.

Acceder al sitio Web Coho Winery de un compañero

1. Abrir un nuevo navegador e ir a: http://Nombreequipocompañero/BenefitsVB/default.aspx o http://Nombreequipocompañero/BenefitsCS/default.aspx

2. Deberíamos ver el cuadro de diálogo Conectar a localhost. 3. Introducir nombre_equipo\nombreusuario y la contraseña del aula, y hacer

clic en Aceptar. Ahora podemos ir a todas las páginas del sitio Web Coho Winery de nuestro compañero.

Nota

Page 655: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 2 Securizar el sitio Web utilizando la autenticación basada en formularios

En este ejercicio, cambiaremos la configuración de IIS para utilizar únicamente la autenticación anónima, y utilizaremos la autenticación basada en formularios para administrar el acceso a páginas seguras de la aplicación Web Benefits. Configuraremos el archivo Web.config para utilizar la autenticación basada en formularios denegando el acceso a usuarios no autenticados a ninguna página de la carpeta del proyecto Benefits. Finalmente, crearemos la página login.aspx y validaremos las credenciales de usuario comparándolas con las incluidas en la tabla Logins de la base de datos de Coho.

Configurar IIS para utilizar únicamente autenticación anónima

1. En el menú Inicio, hacer clic con el botón derecho en Mi PC y hacer clic en Administrar.

2. En la consola Administración de equipos, expandir Servicios y aplicaciones, expandir Internet Information Services, expandir Sitios Web, y expandir Sitio Web predeterminado.

3. Hacer clic con el botón derecho en la aplicación Web BenefitsVB o BenefitsCS y clic en Propiedades.

4. En el cuadro de diálogo Propiedades de BenefitsVB o BenefitsCS, en la ficha Seguridad de directorios, en la sección Control de autenticación y acceso anónimo, hacer clic en Edición.

5. En el cuadro de diálogo Métodos de autenticación, verificar que está seleccionada la casilla de verificación de Acceso anónimo y desactivar la casilla de verificación de Autenticación básica (la contraseña se envía en texto claro).

6. Hacer clic en Aceptar, clic de nuevo en Aceptar, y cerrar la consola Administración de equipos.

Configurar la autenticación basada en formularios en el archivo Web.config

1. Abrir el archivo Web.config en el proyecto BenefitsVB o BenefitsCS. 2. Buscar la sección <authentication> y cambiarla para utilizar la autenticación

basada en formularios. Crearemos una cookie denominada ASPXAUTH, y redirigiremos al usuario a una página denominada login.aspx si no está autenticado. La configuración debería tener el siguiente aspecto: <authentication mode="Forms"> <forms name=".ASPXAUTH" loginUrl="login.aspx" /> </authentication>

Page 656: Microsoft ASP.net - Curso Completo - Espa Ol

Agregar una cadena de conexión a la base de datos de Coho en el archivo Web.config

1. En el archivo Web.config, agregar una sección <appSettings>. Nuestra configuración debe colocarse al final del archivo Web.config, tras la etiqueta </system.web>, pero antes de la etiqueta </configuration>.

Si el archivo Web.config ya tiene una sección <appSettings>, no crear otra. Continuar con los pasos siguientes y agregar el nuevo código a la sección <appSettings> existente.

2. Agregar una nueva clave denominada conStrCoho con una cadena de conexión que utilice la seguridad integrada de Windows para acceder a la base de datos local de Coho. La adición al archivo Web.config debería 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 página contiene un cuadro de texto para introducir la dirección de correo electrónico, un cuadro de contraseña, un botón Submit, dos etiquetas y un hiperenlace. Abrir la página de código subyacente del formulario Web Form login.aspx y localizar el siguiente comentario en la sección Imports al principio de la página: 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 instrucción de importación. El código debería ser como el siguiente: Imports System.Web.Security using System.Web.Security;

Nota

Visual Basic .NET

Visual C#

Page 657: Microsoft ASP.net - Curso Completo - Espa Ol

3. Localizar la función Login y examinar su contenido. ¿Cuál es el nombre del método que se utiliza para recuperar la cadena de conexión a la base de datos de Coho desde la sección <appSettings> del archivo Web.config? _____________________________________________________________

_____________________________________________________________

¿Cuál es el nombre del procedimiento almacenado que se utiliza para el inicio de sesión? _____________________________________________________________

_____________________________________________________________

4. Localizar el siguiente comentario en el procedimiento de evento cmdLogin_Click: TODO Lab 14: Call the Login function

5. Invocar la función Login, pasando el valor de la caja de texto txtEmail y el valor de txtPassword. Almacenar el valor devuelto en la variable strEmployeeID. El código debería ser como el siguiente: strEmployeeId = Login(txtEmail.Text, txtPassword.Text) strEmployeeId = Login(txtEmail.Text, txtPassword.Text);

6. Localizar el siguiente comentario en el procedimiento de evento cmdLogin_Click: TODO Lab 14: Login users and generate an auth. cookie

7. Escribir el código para autenticar usuarios, crear una cookie de autenticación temporal (no persistente) y redirigir al usuario a la página que solicitó originalmente: a. Probar si la variable strEmployeeId no es una cadena vacía. Esto

muestra si la dirección electrónica y contraseña del empleado se han encontrado en la base de datos.

b. Si la variable strEmployeeId no es una cadena vacía, redirigir al usuario a la página solicitada y crear una cookie temporal (no persistente) con la cadena de identidad strEmployeeId.

c. Si la variable strEmployeeId es una cadena vacía, redirigir, y mostrar el mensaje “Login Failed!” en la etiqueta lblInfo de la página login.aspx.

Visual Basic .NET

Visual C#

Page 658: Microsoft ASP.net - Curso Completo - Espa Ol

El código debería ser como el siguiente: If (strEmployeeId <> "") Then FormsAuthentication.RedirectFromLoginPage _ (strEmployeeId, False) Else 'Login failed lblInfo.Text = "Login Failed!" End If if (strEmployeeId != "") { FormsAuthentication.RedirectFromLoginPage (strEmployeeId, false); } else //Login failed { lblInfo.Text = "Login Failed!"; } ¿En qué se diferencia crear una cookie temporal (no persistente) y una cookie persistente? ____________________________________________________________

____________________________________________________________

¿Qué método utilizamos para leer la identidad del usuario autenticado, que está almacenada en la cookie de autenticación, desde un formulario Web Form de la aplicación Web ASP.NET? ____________________________________________________________

____________________________________________________________

Visual Basic .NET

Visual C#

Page 659: Microsoft ASP.net - Curso Completo - Espa Ol

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. Deberíamos ser redirigidos a la página login.aspx porque todas las páginas están securizadas, incluyendo default.aspx.

4. Examinar la URL (Uniform Resource Locator) en el navegador. ¿Qué vemos? ¿Por qué? _____________________________________________________________

_____________________________________________________________

5. Introducir la dirección electrónica y contraseña de un empleado que esté incluido en la tabla Logins de la base de datos Coho (dirección electrónica [email protected], y contraseña someone), y hacer clic en Sign In Now. Ahora podemos navegar por todas las páginas.

6. Hacer clic en el enlace Life Insurance y comprobar que la página life.aspx se abre sin solicitar nuestros credenciales.

7. Ir a http://localhost/BenefitsVB/SecurityTest.aspx o a http://localhost/BenefitsCS/SecurityTest.aspx. Deberíamos ver el ID de empleado 1, que corresponde a la dirección electrónica [email protected]. También veremos que somos autenticados con la autenticación basada en formularios.

8. Cerrar el navegador.

Cuando se utiliza la autenticación basada en formularios, la contraseña que se introduce en la página de inicio de sesión se envía en texto claro a través de la red. En un escenario del mundo real, para evitar la posibilidad de que alguien obtenga la contraseña, debemos utilizar una conexión SSL.

Nota de seguridad

Page 660: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 3 (si se dispone de tiempo) Registrar nuevos usuarios

En este ejercicio, agregaremos código a la página 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 solución 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 validación se utilizan en este formulario Web Form? ____________________________________________________________

____________________________________________________________

4. Abrir la página de código subyacente register.aspx.vb o register.aspx.cs. La página de código subyacente contiene una función denominada AddEmployee cuyo aspecto es muy similar al de la función Login de la página 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 función AddEmployee, pasándole el valor de las cajas de texto txtEmail y de txtPassword. Almacenar el valor devuelto en la variable strEmployeeID. El código debería ser parecido al siguiente: strEmployeeId = _ AddEmployee(txtEmail.Text, txtPassword.Text) strEmployeeId = AddEmployee(txtEmail.Text, txtPassword.Text);

7. Localizar el siguiente comentario en el procedimiento de evento cmdValidation_Click: TODO Lab 14: Login users and generate an auth. cookie

Visual Basic .NET

Visual C#

Page 661: Microsoft ASP.net - Curso Completo - Espa Ol

8. En la instrucción If, escribir el código para autenticar usuarios, crear una cookie de autenticación temporal (no persistente), y redirigir al usuario al formulario Web Form default.aspx. El código debería ser como el siguiente: FormsAuthentication.SetAuthCookie( _ strEmployeeId, False) Response.Redirect("default.aspx") FormsAuthentication.SetAuthCookie( strEmployeeId, false); Response.Redirect("default.aspx");

9. ¿Por qué se utiliza aquí el método 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. Deberíamos ser redirigidos rápidamente a la página login.aspx puesto que todas las páginas están securizadas y, por tanto, default.aspx es una página 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é? ¿Cómo puede solucionarse? _____________________________________________________________

_____________________________________________________________

Visual Basic .NET

Visual C#

Page 662: Microsoft ASP.net - Curso Completo - Espa Ol

Configurar la seguridad para la página register.aspx en el archivo Web.config

1. Abrir el archivo Web.config del proyecto BenefitsVB o BenefitsCS. 2. Introducir la información de configuración para autorizar a todos los

usuarios a acceder al formulario Web Form register.aspx. Colocar esta información al final del archivo Web.config, justo después de la etiqueta </appSettings>, pero antes de la etiqueta </configuration>. La configuración debería ser como la siguiente: <location path="register.aspx"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location>

Guardar y probar

1. Guardar los cambios.

No es necesario volver a generar el proyecto ya que únicamente hemos cambiado el archivo Web.config.

2. Abrir un nuevo navegador e ir a http://localhost/BenefitsVB/default.aspx o a http://localhost/BenefitsCS/default.aspx. Deberíamos ser redirigidos a la página login.aspx.

3. Hacer clic en Click here! para abrir el formulario Web Form registration.aspx e inscribir un nuevo empleado. Deberíamos ver ahora el formulario Web Form register.aspx.

4. Introducir la dirección electrónica y una contraseña para ser agregado a la base de datos como un nuevo empleado. Hacer clic en Submit. Seremos redirigidos a la página default.aspx, y podremos explorar todas las páginas.

5. Hacer clic en el enlace Life Insurance y comprobar que la página life.aspx se abre sin solicitar las credenciales.

6. Ir a http://localhost/BenefitsVB/SecurityTest.aspx o a http://localhost/BenefitsCS/SecurityTest.aspx. Deberíamos ver nuestro ID de empleado y que estamos autenticados con autenticación 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 página login.aspx, iniciar sesión con las nuevas credenciales.

Nota

Page 663: Microsoft ASP.net - Curso Completo - Espa Ol

Registrarse como empleado nuevo en el sitio Web Coho Winery de un compañero

1. Abrir un nuevo navegador e ir a http://Nombreequipocompañero/BenefitsVB/default.aspx o a http://Nombreequipocompañero/BenefitsCS/default.aspx. Deberíamos ser redirigidos a la página login.aspx del sitio Web Coho Winery del compañero.

2. Hacer clic en Click here! Para abrir el formulario Web Form registration.aspx y registrarse como nuevo empleado. Deberíamos ver el formulario Web Form register.aspx.

3. Introducir la dirección electrónica y una contraseña para ser agregado a la base de datos como un nuevo empleado. Hacer clic en Submit. Ahora, deberíamos poder ver todas las páginas del sitio Web Benefits del compañero.

Page 664: Microsoft ASP.net - Curso Completo - Espa Ol

Ejercicio 4 (si se dispone de tiempo) Permitir a los usuarios abandonar la sesión

En este ejercicio, agregaremos código a la página signout.aspx que permite a los usuarios abandonar el sitio Web Coho Winery. Cerrar la sesión puede resultar útil cuando un usuario comparte un equipo con otro usuario y desea asegurarse de que el otro usuario no pueda acceder a información 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 solución 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 información que notifica al usuario que se cerrará su sesión y un botón Sign Out.

5. Abrir la página de código 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 código para cerrar la sesión de los usuarios y redirigirlos al formulario Web Form login.aspx. El código debería ser como el siguiente: FormsAuthentication.SignOut() Response.Redirect("login.aspx") FormsAuthentication.SignOut(); Response.Redirect("login.aspx");

Visual Basic .NET

Visual C#

Page 665: Microsoft ASP.net - Curso Completo - Espa Ol

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. Deberíamos ser redirigidos a la página login.aspx.

4. Introducir la dirección electrónica y una contraseña, y hacer clic en Sign In Now.

5. Hacer clic en el enlace Life Insurance y comprobar que la página life.aspx se abre sin solicitar nuestras credenciales.

6. Hacer clic en el hiperenlace signout y clic en Sign Out. Somos redirigidos a la página 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. Deberíamos ser devueltos a la página login.aspx.

Page 666: Microsoft ASP.net - Curso Completo - Espa Ol

Índice

Descripción 1

Lección: descripción de la seguridad para aplicaciones Web 2

Lección: trabajar con autenticación basada en Windows 14

Lección: trabajar con autenticación basada en formularios 25

Lección: descripción de la autenticación mediante Microsoft Passport 36

Seguridad en aplicaciones Web con Microsoft ASP.NET

Page 667: Microsoft ASP.net - Curso Completo - Espa Ol
Page 668: Microsoft ASP.net - Curso Completo - Espa Ol

Seguridad en aplicaciones Web con Microsoft ASP.NET 1

Descripción

Descripción de la seguridad para aplicaciones Web

Trabajar con autenticación basada en Windows

Trabajar con autenticación basada en formularios

Descripción de la autenticación de Microsoft Passport

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

La seguridad de las aplicaciones Web es un tema crítico y complejo para los desarrolladores Web. Un sistema seguro requiere una cuidadosa planificación, 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 módulo trata en detalle los distintos métodos de seguridad para las aplicaciones Web.

En este módulo, aprenderemos a:

Describir los métodos de autenticación de ASP.NET e IIS. Utilizar la autenticación basada en Windows para asegurar aplicaciones

Web ASP.NET. Utilizar la autenticación basada en formularios para asegurar aplicaciones

Web ASP.NET. Utilizar Microsoft Passport para asegurar aplicaciones Web ASP.NET.

Introducción

Objetivos

Page 669: Microsoft ASP.net - Curso Completo - Espa Ol

2 Seguridad en aplicaciones Web con Microsoft ASP.NET

Lección: descripción de la seguridad para aplicaciones Web

Autenticación frente a autorización

¿Cuáles son los métodos de autenticación de ASP.NET?

Multimedia: métodos de autenticación de ASP.NET

Comparación de los métodos de autenticación de ASP.NET

¿Cuáles son los mecanismos de autenticación de IIS?

Demostración: uso de los mecanismos de autenticación de IIS

¿Qué es Secure Sockets Layer?

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

Por definición, las aplicaciones Web ofrecen a los usuarios acceso a un recurso centralizado, el servidor Web, y, a través de él, acceso a servidores de bases de datos. Conociendo e implementando medidas de seguridad adecuadas para nuestra aplicación Web, podemos proteger nuestros propios recursos, además de proporcionar un entorno seguro en el que los usuarios trabajen cómodamente.

En esta lección, se describen distintos conceptos de seguridad: autenticación, autorización y mecanismos de autenticación de IIS. También estudiaremos el protocolo Secure Sockets Layer (SSL).

En esta lección, aprenderemos a:

Describir los dos conceptos fundamentales de seguridad para asegurar una aplicación Web.

Describir los tres métodos de autenticación de ASP.NET. Distinguir entre los tres métodos de autenticación de ASP.NET. Describir los cuatro mecanismos de autenticación de IIS. Describir SSL.

Introducción

Objetivos de la lección

Page 670: Microsoft ASP.net - Curso Completo - Espa Ol

Seguridad en aplicaciones Web con Microsoft ASP.NET 3

Autenticación frente a autorización

Autenticación

Acepta credenciales de un usuario

Valida las credenciales

Autorización

En función de las credenciales de autenticación suministradas, determina el derecho de acceso a un recurso

Puede asignarse por nombre de usuario o por rol

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

Para poder empezar a trabajar con temas relacionados con la seguridad, debemos estar familiarizados con los dos conceptos fundamentales de seguridad para las aplicaciones Web:

Autenticación Autorización

La autenticación es el proceso de obtener las credenciales de identificación de un usuario, como un nombre y una contraseña, y validar esas credenciales consultando a alguna autoridad, como una base de datos. Si las credenciales son válidas, la entidad que las ha presentado se considera una identidad autenticada.

Por ejemplo, todos los usuarios deben proporcionar un nombre de usuario y una contraseña cada vez que inician sesión en una red. Estas credenciales se validan consultándolas a una autoridad, como una base de datos o un servidor de dominio basado en Microsoft Windows®.

Después de que una identidad haya sido autenticada, el proceso de autorización determina si esa identidad tiene acceso a un recurso específico. El proceso de autorización limita los derechos de acceso concediendo o denegando permisos específicos 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 Bárbara Gómez. 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.

Introducción

Autenticación

Autorización

Page 671: Microsoft ASP.net - Curso Completo - Espa Ol

4 Seguridad en aplicaciones Web con Microsoft ASP.NET

¿Cuáles son los métodos de autenticación de ASP.NET?

Autenticación basada en WindowsDepende del sistema operativo Windows y de IISEl usuario solicita una página Web segura y la solicitud pasa por IISUna vez IIS verifica las credenciales, se devuelve la página Web segura

Autenticación basada en formulariosLas solicitudes no autenticadas son redirigidas a un formulario HTMLEl usuario proporciona credenciales y envía el formulario HTMLUna vez verificadas las credenciales, se suministra una cookie de autenticación

Autenticación mediante Microsoft PassportServicio de autenticación centralizado que ofrece una única opción de inicio de sesiónMicrosoft Passport es un Servicio Web XML

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

ASP.NET implementa la autenticación mediante métodos de autenticación. Los métodos de autenticación de ASP.NET contienen el código necesario para autenticar las credenciales de usuario.

ASP.NET soporta tres tipos de métodos de autenticación:

Autenticación basada en Windows Autenticación basada en formularios Autenticación mediante Microsoft Passport

En la autenticación basada en Windows, la aplicación Web ASP.NET depende del sistema operativo Windows para autenticar al usuario. ASP.NET utiliza la autenticación basada en Windows conjuntamente con la autenticación de IIS.

En la autenticación basada en Windows, el usuario solicita una página Web segura de la aplicación 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 continuación, el usuario debe introducir su nombre y contraseña en el formulario de inicio de sesión. IIS verifica de nuevo las credenciales. Si son correctas, IIS dirige la solicitud original a la aplicación Web y el usuario recibe la página Web segura.

La autenticación basada en formularios hace referencia a un sistema donde solicitudes no autenticadas son redirigidas a un formulario Hypertext Markup Language (HTML) utilizando la redirección en el lado del cliente Hypertext Transfer Protocol (HTTP). El usuario proporciona las credenciales y envía el formulario. Si la aplicación valida las credenciales en el formulario, el sistema suministra al usuario una cookie de autenticación. Las solicitudes subsiguientes

Introducción

Métodos de autenticación

Autenticación basada en Windows

Autenticación basada en formularios

Page 672: Microsoft ASP.net - Curso Completo - Espa Ol

Seguridad en aplicaciones Web con Microsoft ASP.NET 5

del usuario se emiten con la cookie de autenticación en el encabezado de la solicitud, y el usuario es autenticado en base a dicho encabezado.

La autenticación mediante Passport consiste en un servicio de autenticación centralizado, proporcionado por Microsoft, que ofrece una única opción de inicio de sesión y unos servicios con un perfil básico a los sitios suscritos. Los usuarios que se registren utilizando Passport estarán 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.

Autenticación mediante Microsoft Passport

Page 673: Microsoft ASP.net - Curso Completo - Espa Ol

6 Seguridad en aplicaciones Web con Microsoft ASP.NET

Comparación de los métodos de autenticación de ASP.NET

Inicio de sesión único para muchos sitios de InternetNo es necesario mantener una base de datos para almacenar información del usuarioPermite a los desarrolladores personalizar el aspecto de la página de inscripción

Adecuada para aplicaciones de InternetSoporta todo tipo de clientes

Utiliza infraestructura Windows existente Controla el acceso a información confidencial

VentajasVentajas

Basada en cookiesImplica cuota

Autenticación mediante Microsoft Passport

Basada en cookiesAutenticación basada en formularios

No apropiado para la mayoría de aplicaciones de Internet

Autenticación basada en Windows

InconvenientesInconvenientesMMéétodotodo

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

Cada uno de los tres métodos de autenticación que soporta ASP.NET (basado en Windows, basado en formularios y Microsoft Passport) es adecuado para situaciones específicas. Cada método tiene diversas ventajas e inconvenientes.

La autenticación basada en Windows utiliza la infraestructura de Windows existente y, por tanto, es más adecuado en situaciones en las que se dispone de un número fijo de usuarios con cuentas de usuario Windows existentes. Dos ejemplos de situaciones de este tipo son:

El desarrollo de una intranet para una organización. Es muy probable que la organización disponga de cuentas de usuario Windows configuradas para cada empleado.

El control del acceso a información confidencial. Por ejemplo, los usuarios del grupo de Recursos Humanos de una empresa pueden acceder a directorios que contienen currículos de empleados e información de salarios. Podemos utilizar la autenticación 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 autenticación basada en Windows es que no es adecuada para la mayoría de aplicaciones de Internet. Por ejemplo, si estamos generando un sistema público de registro de usuarios y contraseñas, la autenticación basada en Windows no es una buena opción de autenticación. Con la autenticación basada en Windows, debe configurarse una cuenta de usuario de Windows válida por cada usuario que acceda a una página restringida. El proceso de agregar nuevas cuentas de usuario no puede automatizarse fácilmente.

Introducción

Autenticación basada en Windows

Page 674: Microsoft ASP.net - Curso Completo - Espa Ol

Seguridad en aplicaciones Web con Microsoft ASP.NET 7

La autenticación basada en formularios es una buena solución si se desea configurar un sistema personalizado de registro de usuarios para un sitio Web. La ventaja de este tipo de autenticación es que nos permite almacenar nombres de usuario y contraseñas 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 autenticación basada en formularios depende de cookies para determinar la identidad del usuario. Una vez habilitada la autenticación basada en formularios, el usuario no puede acceder a la página solicitada a menos que se encuentre en el cliente una cookie específica. Si esta cookie no está, o si no es válida, ASP.NET rechaza la solicitud y devuelve una página de inicio de sesión.

La autenticación mediante Microsoft Passport tiene varias ventajas, incluyendo:

Permite a los usuarios utilizar el mismo nombre de usuario y contraseña para iniciar sesión en numerosos sitios Web; por tanto, es menos probable que los usuarios olviden sus contraseñas. 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 información de registro. Microsoft se encarga de realizar todo el mantenimiento.

Proporciona opciones para personalizar el aspecto de las páginas de registro e inicio de sesión mediante plantillas.

El uso de la autenticación mediante Microsoft Passport tiene dos inconvenientes. En primer lugar, existe una cuota de suscripción por utilizar el servicio Microsoft Passport en desarrollo. En segundo lugar, la autenticación Microsoft Passport está basada en cookies.

Autenticación basada en formularios

Autenticación mediante Microsoft Passport

Page 675: Microsoft ASP.net - Curso Completo - Espa Ol

8 Seguridad en aplicaciones Web con Microsoft ASP.NET

¿Cuáles son los mecanismos de autenticación de IIS?

Alto

Medio

Bajo (Medio con SSL)

Ninguno

Nivel de Nivel de seguridadseguridad

Utiliza NTLM o KerberosGeneralmente adecuado para intranets, no InternetNo funciona a través de muchos cortafuegos

Seguridad integrada de Windows

Envía la información en un hash (o digest) codificadoRequiere Internet Explorer 5 o superiorRequiere Active Directory

Autenticación implícita

El cliente envía nombre de usuario y contraseña como texto claroPuede encriptarse utilizando SSLParte de la especificación HTTP y soportado por la mayoría de exploradores

Autenticación básica

No se produce autenticaciónAcceso anónimo

DescripciDescripcióónnMecanismosMecanismos

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

Para poder utilizar la autenticación basada en Windows, debemos configurar antes el servidor Web IIS. Cuando un usuario solicita una página que requiere autorización, el usuario debe ser autenticado a través de IIS.

IIS proporciona varios mecanismos que pueden utilizarse para establecer autenticación, incluyendo:

Acceso anónimo Autenticación básica Autenticación implícita Seguridad integrada de Windows

Para aplicaciones Web en las que usuarios desconocidos realizan solicitudes, normalmente aplicaciones Web públicas, IIS soporta un usuario anónimo, un usuario que no dispone de credenciales de autenticación. Cuando IIS recibe una solicitud de un usuario anónimo, IIS hace la solicitud a Windows utilizando la cuenta predeterminada IUSR_nombreequipo.

La cuenta predeterminada IUSR_ nombreequipo puede modificarse mediante el complemento de administración de IIS.

IIS también soporta un modelo de autenticación básica. En la autenticación básica, se solicita a los usuarios sin credenciales que suministren un nombre de usuario y una contraseña. Esta información se devuelve a IIS, y a partir de entonces está disponible para la aplicación Web. La ventaja de la autenticación básica es que forma parte de la especificación HTTP y está soportada por la mayoría de navegadores. La autenticación básica proporciona un modo útil para ofrecer acceso restringido a una aplicación Web pública.

Sin embargo, debido a que el usuario pasa un nombre de usuario y una contraseña a IIS en forma de texto claro, la autenticación básica no ofrece un

Introducción

Acceso anónimo

Nota

Autenticación básica

Page 676: Microsoft ASP.net - Curso Completo - Espa Ol

Seguridad en aplicaciones Web con Microsoft ASP.NET 9

nivel alto de seguridad. Para incrementarlo, se utiliza SSL para encriptar nombres de usuario y contraseñas cuando se transmiten a través de la red.

La autenticación implícita es similar a la autenticación básica, pero utiliza la encriptación para enviar información del usuario al servidor. Si el acceso anónimo está deshabilitado, se pide a los usuarios sus credenciales (información de inicio de sesión). El navegador combina esta información de inicio de sesión con el resto de información almacenada en el cliente, y envía al servidor un hash codificado denominado hash MD5 (o Message Digest). El servidor ya dispone de una copia de esta información 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 través de cortafuegos, servidores proxy e Internet.

Sin embargo, la autenticación implícita únicamente funciona con cuentas de dominio dadas de alta en el servicio de directorios Active Directory®.

Para más información sobre la configuración de las cuentas de dominio de Active Directory para permitir la autenticación implícita, consultar la documentación de IIS.

Si el usuario que realiza la solicitud ya ha sido autenticado en una red basada en Windows, IIS puede pasar las credenciales del usuario cuando solicite acceso a un recurso. Las credenciales no incluyen el nombre de usuario y la contraseña, ú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 también utiliza un algoritmo hash para codificar y decodificar las credenciales del usuario.

Sin embargo, la seguridad integrada de Windows no resulta práctica en las aplicaciones Web que deben atravesar cortafuegos. Por tanto, es más adecuada en escenarios de intranets corporativas.

Cuando se configura IIS, se pueden utilizar múltiples mecanismos de autenticación de IIS. Se puede seleccionar el acceso anónimo u otros métodos, como la autenticación básica, implícita o integrada de Windows. Si se utilizan múltiples mecanismos de autenticación de IIS, y si la autenticación anónima falla, el servidor Web intentará utilizar la autenticación básica, implícita o integrada de Windows, dependiendo de los métodos que estén seleccionados.

Autenticación implícita

Nota

Seguridad integrada de Windows

Nota

Page 677: Microsoft ASP.net - Curso Completo - Espa Ol

10 Seguridad en aplicaciones Web con Microsoft ASP.NET

Demostración: uso de los mecanismos de autenticación de IIS

Hacer clic con el botón derecho en Mod16 y hacer clic en Propiedades

Hacer clic en la pestaña Seguridad de directorios

Hacer clic en Modificar

Mostrar los métodos de autenticación

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

En esta demostración, visualizaremos el cuadro de diálogo que se utiliza par configurar los mecanismos de autenticación de IIS.

Ejecutar la demostración

1. En el menú Inicio, hacer clic con el botón derecho en Mi PC y hacer clic en Administrar.

2. En la consola Administración de equipos, expandir Servicios y aplicaciones, expandir Internet Information Services, expandir Sitios Web, y expandir Sitio Web predeterminado.

3. Hacer clic con el botón derecho en la aplicación Web Pract14VB o Pract14CS y hacer clic en Propiedades.

4. En el cuadro de diálogo Pract14VB o Propiedades de Pract14CS, en la ficha Seguridad de directorios, en la sección Control de autenticación y acceso anónimo, hacer clic en Modificar.

5. Mostrar los métodos de autenticación disponibles.

Introducción

Page 678: Microsoft ASP.net - Curso Completo - Espa Ol

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 través de una red. SSL securiza los datos mediante:

Encriptación de datos- Asegura que los datos enviados son leídos únicamente por un servidor destinatario seguro

Autenticación de servidor- Asegura que los datos se envían al servidor correcto- Utiliza los certificados de servidor y de cliente

Integridad de los datos- Protege la integridad de los datos- Incluye un código de autenticación de mensajes que detecta si un mensaje ha sido o no modificado

Utiliza HTTPS (Hypertext Transfer Protocol Secure) para recuperar una página Web ASP.NET

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

IIS proporciona a los usuarios un canal de comunicación seguro al soportar el protocolo SSL y la encriptación RSA Data Security tanto en el servidor como en el cliente.

RSA son las siglas de Rivest, Shamir y Adleman, los nombres de los científicos que crearon este algoritmo.

SSL es un protocolo que se utiliza para transmitir datos de modo seguro a través de una red. SSL securiza la comunicación de datos mediante:

Encriptación de datos Autenticación de servidor Integridad de datos

Cuando se introduce información en un formulario HTML y se envía a un sitio Web, la información se transmite desde el navegador al servidor del sitio Web. En el proceso de transmisión de la información, los datos introducidos en el formulario pueden ser interceptados y leídos.

SSL encripta la información transmitida entre un servidor Web y un navegador Web. La información se encripta utilizando un algoritmo públicamente conocido y una clave de sesión. El servidor Web genera una clave pública que puede utilizar cualquier cliente. El cliente genera una clave de sesión y utiliza la clave pública para encriptarla antes de enviarla al servidor Web. Los datos se transmiten utilizando esta clave de sesión.

Introducción

Nota

¿Qué es SSL?

Encriptación de datos

Page 679: Microsoft ASP.net - Curso Completo - Espa Ol

12 Seguridad en aplicaciones Web con Microsoft ASP.NET

El número de bits de la clave de sesión determina la potencia de la encriptación. IIS soporta claves de sesión de 40 bits y claves de sesión más potentes de 128 bits.

Page 680: Microsoft ASP.net - Curso Completo - Espa Ol

Seguridad en aplicaciones Web con Microsoft ASP.NET 13

La siguiente tabla muestra las ventajas e inconvenientes del uso de claves de sesión de 40 bits y de 128 bits.

Clave de sesión Ventaja Inconveniente Clave de sesión de 40 bits

La comunicación es mucho más rápida.

No es muy segura, los mensajes pueden ser modificados.

Clave de sesión de 128 bits

Muy segura, los mensajes encriptados con clave de sesión de 128 bits se consideran inquebrantables.

La comunicación es bastante más lenta; cuanto más larga es la clave, más trabajo deben realizar el servidor y el navegador para encriptar y desencriptar el mensaje.

La autenticación de servidor garantiza que los datos se envían al servidor correcto y que éste es seguro.

Por ejemplo, podría ocurrir que visitáramos un sitio Web que fuera muy parecido a un sitio Web de comercio electrónico al que accediésemos frecuentemente. Podría parecer igual que el sitio Web que conocemos, y proporcionaríamos la información de nuestra tarjeta de crédito para adquirir un artículo. Sin embargo, alguien que deseara engañarnos podría crear un sitio Web idéntico al sitio Web de comercio electrónico auténtico y robar la información de nuestra tarjeta de crédito.

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 información sobre nuestra organización, 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 certificación. La autoridad de certificación actúa como un tercero de confianza que verifica la identidad de un sitio Web para sus usuarios.

SSL también 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 modificación.

Cuando los mensajes se transmiten con SSL, incluyen un código de autenticación de mensaje. Este código detecta si el mensaje ha sido modificado.

Después de configurar nuestro servidor para que utilice SSL, podemos solicitar cualquier página de nuestro sitio Web utilizando una conexión segura. Para recuperar una página Web, SSL utiliza Hypertext Transfer Protocol Secure (HTTPS). Por ejemplo, una dirección con la forma https://www.nuestrodominio.com/login.aspx en lugar de http://www. nuestrodominio.com/pagina.aspx.

Esto funciona para cualquier página de nuestro sitio Web.

ASP.NET proporciona la propiedad Request.IsSecureConnection que nos permite determinar si nos encontramos en una conexión https segura.

Autenticación de servidor

Certificado de servidor

Certificado de cliente

Integridad de datos

Uso de SSL en páginas ASP.NET

Nota

Page 681: Microsoft ASP.net - Curso Completo - Espa Ol

14 Seguridad en aplicaciones Web con Microsoft ASP.NET

Lección: trabajar con autenticación basada en Windows

Cómo habilitar la autenticación basada en Windows

Leer información del usuario

Demostración: uso de la autenticación basada en Windows

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

La autenticación basada en Windows debería utilizarse para securizar las aplicaciones Web cuando sabemos qué usuarios accederán a nuestro sitio Web.

En esta lección, estudiaremos el procedimiento para utilizar la autenticación basada en Windows para securizar nuestras aplicaciones Web.

En esta lección, aprenderemos a:

Utilizar la autenticación basada en Windows para securizar aplicaciones Web.

Leer la identidad del usuario que está autenticado utilizando la autenticación basada en Windows.

Introducción

Objetivos de la lección

Page 682: Microsoft ASP.net - Curso Completo - Espa Ol

Seguridad en aplicaciones Web con Microsoft ASP.NET 15

Cómo habilitar la autenticación basada en Windows

Configurar IIS para utilizar uno o varios de los siguientes mecanismos de autenticación :

Básica

Implícita

Seguridad de Windows integrada

Establecer la autenticación basada en Windows en Web.config

111

222

<system.web><Authentication mode="Windows" />

</system.web>

<system.web><Authentication mode="Windows" />

</system.web>

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

El proceso de securizar aplicaciones Web mediante la autenticación basada en Windows requiere cuatro pasos:

1. Configurar IIS. 2. Configurar la autenticación en Web.config. 3. Configurar la autorización en Web.config. 4. IIS solicita información de inicio de sesión a los usuarios.

El primer paso para securizar aplicaciones Web utilizando la autenticación basada en Windows implica configurar IIS utilizando uno o varios de los tres mecanismos de autenticación:

Autenticación básica Autenticación implícita Seguridad integrada de Windows

Normalmente, se habilita la autenticación básica o la seguridad integrada de Windows. Si deseamos que nuestra aplicación Web sea compatible con otros navegadores, deberíamos utilizar la autenticación básica. Si no estamos utilizando un cortafuegos o servidor proxy, podemos utilizar la seguridad integrada de Windows.

Introducción

Configurar IIS

Nota

Page 683: Microsoft ASP.net - Curso Completo - Espa Ol

16 Seguridad en aplicaciones Web con Microsoft ASP.NET

El segundo paso para securizar aplicaciones Web utilizando la autenticación basada en Windows es establecer la seguridad de ASP.NET a autenticación basada en Windows en el archivo Web.config. Las opciones de configuración de seguridad en Web.config se incluyen en las secciones <authentication>, <authorization> e <identity>.

Establecer el método de autenticación a “Windows” para la aplicación en una subsección <authentication> de la sección <system.web> en Web.config, como muestra el siguiente ejemplo:

<system.web> <authentication mode="Windows" /> </system.web>

Configurar la autenticación

Page 684: Microsoft ASP.net - Curso Completo - Espa Ol

Seguridad en aplicaciones Web con Microsoft ASP.NET 17

Cómo habilitar la autenticación basada en Windows (continuación) Establecer la autorización en Web.config

Cuando los usuarios acceden al formulario Web Form, IIS solicitainformación de iniciode sesión

<location path="ShoppingCart.aspx"><system.web>

<Authorization><deny users="?"/>

</Authorization></system.web>

</location>

<location path="ShoppingCart.aspx"><system.web>

<Authorization><deny users="?"/>

</Authorization></system.web>

</location>

444

333

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

Securizar las aplicaciones Web utilizando la autenticación basada en Windows es un proceso de cuatro pasos:

1. Configurar IIS. 2. Establecer la autenticación en Web.config. 3. Establecer la autorización en Web.config. 4. IIS solicita información de inicio de sesión a los usuarios.

Hemos estudiado los dos primeros pasos en el apartado anterior. Esta sección explica los dos últimos pasos.

Para indicar que sólo algunas páginas específicas son seguras, debemos crear una sección <location> con subsecciones <system.web> y <authorization> para cada página segura de nuestra aplicación Web:

<location path="ShoppingCart.aspx"> <system.web> <authorization> <deny users="?" /> </authorization> </system.web> </location> Las opciones de configuración que contiene la sección <location> serán dirigidas al archivo o directorio que se indica en el atributo path. La sección <configuration> puede tener múltiples secciones <location>.

La sección <location> puede ser un formulario Web Form ASP.NET o una carpeta. Si se especifica un nombre de carpeta, todas las subcarpetas bajo ella serán seguras. Para asegurar múltiples formularios Web Forms o carpetas, se utilizarán múltiples secciones <location>.

Introducción

Configurar la autorización

Nota

Page 685: Microsoft ASP.net - Curso Completo - Espa Ol

18 Seguridad en aplicaciones Web con Microsoft ASP.NET

En la sección <system.web>, crear una subsección <authorization> para especificar qué tipo de autorización se impondrá. Crear las etiquetas <allow> o <deny> para permitir o denegar a los usuarios el acceso a una página. En estas etiquetas, “?” indica usuarios anónimos y “*” significa todos los usuarios.

Por ejemplo, el siguiente código deniega el acceso a todos los usuarios anónimos:

<authorization> <deny users="?" /> </authorization> El siguiente código permite al usuario “Mary” acceder a una página:

<authorization> <allow users="Mary" /> </authorization>

No es recomendable autorizar a usuarios individualmente, ya que este proceso puede revelar información confidencial en caso de que el archivo Web.config sea leído. Además, codificar directamente nombres de usuario en el archivo Web.config no es un planteamiento flexible ya que no permite modificar esta información programáticamente en tiempo de ejecución. La codificación directa de usuarios en el archivo Web.config resulta adecuado sólo para realizar pruebas.

El siguiente código deniega a todos los usuarios anónimos el acceso a la página ShoppingCart.aspx:

<location path="ShoppingCart.aspx"> <system.web> <authorization> <deny users="?" /> </authorization> </system.web> </location> Tras especificar el modo de autenticación, debemos indicar que toda la aplicación Web necesita autorización, o especificar qué páginas son seguras y, por tanto, que requieren autorización.

Para indicar que toda la aplicación es segura, crear una sección <authorization> en la sección <system.web>, como muestra el siguiente código de ejemplo:

<system.web> <authorization> <deny users="?" /> </authorization> </system.web>

Nota

Page 686: Microsoft ASP.net - Curso Completo - Espa Ol

Seguridad en aplicaciones Web con Microsoft ASP.NET 19

Utilizamos el elemento <identity> para habilitar la impersonalización. La impersonalización permite al servidor ejecutar código bajo el contexto de seguridad de una entidad solicitante o como un usuario anónimo. En ASP.NET, la impersonalización es opcional, y está deshabilitada de forma predeterminada.

El elemento <identity> debe estar bajo la sección <system.web> en el archivo Web.config o Machine.config. El siguiente código muestra la sintaxis que se utiliza con el elemento <identity>:

<identity impersonate="true|false" username="username" password="password" /> En el código anterior, los atributos username y password especifican las credenciales a utilizar si impersonate está establecido a true.

Se utiliza una cuenta especial de Windows denominada ASPNET si impersonate está establecido a false, el valor predeterminado.

El último paso del proceso para habilitar la autenticación basada en Windows se produce cuando los usuarios intentan acceder a un formulario Web Form desde nuestra aplicación Web e IIS solicita información de inicio de sesión al usuario. El usuario debe proporcionar su nombre de usuario y contraseña. Si IIS aprueba las credenciales del usuario, éste obtiene acceso a la página Web segura solicitada.

IIS solicita información de inicio de sesión a los usuarios

Page 687: Microsoft ASP.net - Curso Completo - Espa Ol

20 Seguridad en aplicaciones Web con Microsoft ASP.NET

Leer información del usuario

Tras la autenticación, el servidor Web puede leer la identidad del usuario

lblAuthUser.Text = User.Identity.NamelblAuthType.Text = User.Identity.AuthenticationTypelblIsAuth.Text = User.Identity.IsAuthenticated

lblAuthUser.Text = User.Identity.NamelblAuthType.Text = User.Identity.AuthenticationTypelblIsAuth.Text = User.Identity.IsAuthenticated

lblAuthUser.Text = User.Identity.Name;lblAuthType.Text = User.Identity.AuthenticationType;lblIsAuth.Text = User.Identity.IsAuthenticated;

lblAuthUser.Text = User.Identity.Name;lblAuthType.Text = User.Identity.AuthenticationType;lblIsAuth.Text = User.Identity.IsAuthenticated;

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

Una vez finalizado el proceso de autenticación basada en Windows, el servidor Web puede leer la identidad del usuario desde cualquier página de la aplicación Web.

El servidor Web puede leer la identidad del usuario utilizando User.Identity.Name. El servidor Web también puede identificar el mecanismo de autenticación de IIS que se utiliza para autenticar al usuario utilizando User.Identity.AuthenticationType. Además, el servidor Web puede comprobar si el usuario está autenticado utilizando User.Identity.IsAuthenticated.

El siguiente código de ejemplo muestra cómo se permite al servidor Web leer la identidad del usuario:

lblAuthUser.Text = User.Identity.Name lblAuthType.Text = User.Identity.AuthenticationType lblIsAuth.Text = User.Identity.IsAuthenticated lblAuthUser.Text = User.Identity.Name; lblAuthType.Text = User.Identity.AuthenticationType; lblIsAuth.Text = User.Identity.IsAuthenticated;

User.Identity es un objeto de la clase WindowsIdentity.

Introducción

Visual Basic .NET

C#

Nota

Page 688: Microsoft ASP.net - Curso Completo - Espa Ol

Seguridad en aplicaciones Web con Microsoft ASP.NET 21

Demostración: uso de la autenticación basada en Windows

Abrir IIS y configurarlo únicamente con autenticación anónima

Crear un nuevo usuario en el equipo local

Abrir Web.config y configurarlo para soportar autenticación y autorización

Ejecutar la aplicación Web ASP.NET segura

Los estudiantes pueden acceder a la aplicación Web ASP.NET segura en el equipo del instructor

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

En esta demostración, veremos cómo configurar IIS para utilizar la autenticación basada en Windows con autenticación básica de IIS. Seguidamente, veremos cómo crear un nuevo usuario en el servidor local, y cómo configurar la autenticación y autorización en Web.config. A continuación, veremos algunas demostraciones de acceso a páginas seguras y no seguras. Finalmente, aprenderemos a conectarnos a una página segura en el equipo del instructor.

Los archivos para esta demostración se encuentran en el proyecto Pract14VB o Pract14CS dentro del fichero demos14.zip.

Ejecutar la demostración

1. Hacer clic con el botón 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 botón 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 diálogo Métodos de autenticación de IIS. 5. Seleccionar la casilla de verificación de autenticación básica (la contraseña

se envía en texto claro) y hacer clic en Sí en el cuadro de diálogo Administrador de Servicios de Internet.

Comprobar que está seleccionada la casilla de verificación de Acceso

Introducción

Configurar IIS con autenticación básica

Nota

Page 689: Microsoft ASP.net - Curso Completo - Espa Ol

22 Seguridad en aplicaciones Web con Microsoft ASP.NET

anónimo. Verificar que no están seleccionadas las casillas de verificación de Autenticación implícita para servidores de dominios Windows y Autenticación integrada de Windows.

6. Escribir nombreequipo en el campo Dominio predeterminado, ya que esta demostración se realizará con una cuenta local creada en este equipo.

7. Hacer clic en Aceptar para cerrar el cuadro de diálogo Métodos de autenticación de IIS.

8. Hacer clic en Aceptar para cerrar el cuadro de diálogo Propiedades del sitio Web predeterminado. En el cuadro de diálogo Herencia omitida, hacer clic en Aceptar.

9. En la consola Administración de equipos, expandir Herramientas del sistema, y expandir Usuarios y grupos locales.

10. Hacer clic con el botón derecho en la carpeta Usuarios y clic en Nuevo usuario: Introducir la siguiente información en el cuadro de diálogo Nuevo usuario. Campo Valor Nombre de usuario someone

Nombre completo someone

Descripción Cuenta de demostración de someone

Contraseña Secreto1

Confirmar contraseña Secreto1

a. Desactivar la casilla de verificación de El usuario debe cambiar la contraseña en el siguiente inicio de sesión.

b. Seleccionar la casilla de verificación de El usuario no puede cambiar la contraseña.

c. Hacer clic en Crear y clic en Cerrar. En el lado derecho de la ventana del cuadro de diálogo Administración de equipos, debería aparecer el usuario someone.

11. Abrir el proyecto Pract14VB o Pract14CS y visualizar el archivo Web.config en Microsoft Visual Studio® .NET. Una sección <authentication> está configurada con autenticación basada en Windows. Son necesarias dos secciones <location> para securizar dos páginas: SecurePageDemo1.aspx y SecurePageDemo2.aspx. Con la configuración actual de IIS, si un usuario intenta acceder a una de estas páginas, se utilizará la autenticación básica. Si un usuario intenta acceder las otras páginas, se utilizará la autenticación anónima.

12. Abrir la página de código subyacente SecurePageDemo1.aspx y explicar el código User.Identity.Name y User.Identity.AuthenticationType.

No se requiere ninguna instrucción Imports para utilizar User.Identity.xxx.

13. Generar el proyecto Pract14VB o Pract14CS en la solución 2310Demos. 14. Abrir un nuevo navegador e ir a:

Crear un nuevo usuario en el equipo local

Mostrar la configuración de seguridad en el archivo Web.config

Mostrar el nombre y tipo de autenticación en un formulario Web Form.

Note

Page 690: Microsoft ASP.net - Curso Completo - Espa Ol

Seguridad en aplicaciones Web con Microsoft ASP.NET 23

http://localhost/Pract14VB/NonSecurePageDemo.aspx http://localhost/Pract14CS/NonSecurePageDemo.aspx

Visual Basic .NET C#

Page 691: Microsoft ASP.net - Curso Completo - Espa Ol

24 Seguridad en aplicaciones Web con Microsoft ASP.NET

15. Ir a: http://localhost/Pract14VB/SecurePageDemo1.aspx http://localhost/Pract14CS/SecurePageDemo1.aspx Mostrar que aparece el cuadro de diálogo Connect to localhost.

16. Hacer clic en Cancelar y mostrar que se obtiene un error de servidor porque se deniega el acceso.

17. Ir a: http://localhost/Pract14VB/SecurePageDemo2.aspx http://localhost/Pract14CS/SecurePageDemo2.aspx Mostrar que también aparece el cuadro de diálogo Connect to localhost.

18. Escribir las credenciales Nombre de usuario como someone y Contraseña como Secreto1 y hacer clic en Aceptar.

19. La página SecurePageDemo2.aspx debería mostrar el nombre de usuario someone y el tipo de autenticación básica. Ahora, podemos acceder a cualquier página segura, siempre que no cerremos el navegador. Si cerramos el navegador, deberemos repetir el proceso de autenticación.

20. Ir a: http://localhost/Pract14VB/SecurePageDemo1.aspx http://localhost/Pract14CS/SecurePageDemo1.aspx Mostrar que esta vez no se solicitan las credenciales.

21. Indicar a los estudiantes que vayan a:

http://Nombreequipoinstructor/Pract14VB/SecurePageDemo1.aspx http://Nombreequipoinstructor/Pract14CS/SecurePageDemo1.aspx Escribir las credenciales someone y Secreto1 cuando se solicite. Tras introducir las credenciales, los estudiantes deberían poder ver SecurePageDemo1.aspx y SecurePageDemo2.aspx.

Visual Basic .NET C#

Visual Basic .NET C#

Visual Basic .NET C#

Los estudiantes acceder al equipo del instructor

Visual Basic .NET C#

Page 692: Microsoft ASP.net - Curso Completo - Espa Ol

Seguridad en aplicaciones Web con Microsoft ASP.NET 25

Lección: trabajar con autenticación basada en formularios

Descripción de la autenticación basada en formularios

Multimedia: autenticación basada en formularios

Cómo habilitar la autenticación basada en formularios

Crear una página de inicio de sesión

Demostración: uso de la autenticación basada en formularios

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

El método de autenticación que más se utiliza habitualmente para securizar aplicaciones Web con ASP.NET es la autenticación basada en formularios.

En esta lección, estudiaremos la arquitectura basada en formularios, y los pasos para habilitar la autenticación basada en formularios. También estudiaremos cómo configurar la seguridad en Web.config, y crear una página de inicio de sesión.

En esta lección, aprenderemos a:

Identificar la serie de eventos que tiene lugar durante la autenticación basada en formularios.

Identificar los pasos para habilitar la autenticación basada en formularios. Configurar autenticación y autorización en un archivo Web.config. Describir cómo crear una página de inicio de sesión.

Introducción

Objetivos de la lección

Page 693: Microsoft ASP.net - Curso Completo - Espa Ol

26 Seguridad en aplicaciones Web con Microsoft ASP.NET

Descripción de la autenticación basada en formularios

El cliente solicita página

Autorizado

Autenticación ASP.NET Forms

No autenticado

Autenticado

Página de inicio(los usuarios introducen sus credenciales)

Autenticado

Cookie de autenticación

Autorizado

No autenticado

Acceso denegado

Página segurasolicitada

IIS

Nombre usuario

ContraseñaAlguien

***********

EnviarEnviar

111 222

333

444666

555777

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

Cuando un usuario solicita una página Web que está protegida por autenticación basada en formularios, la solicitud debe pasar primero por IIS. Por ello, debemos establecer la autenticación de IIS a acceso anónimo. Establecer IIS a anónimo requiere que todas las solicitudes pasen por ASP.NET antes de ser autenticadas.

En la autenticación basada en formularios, se produce la siguiente serie de eventos:

1. Un cliente genera una solicitud de una página .aspx protegida. 2. IIS recibe la solicitud y la pasa a ASP.NET. El modo de autenticación está

establecido en acceso anónimo y, por ello, la solicitud pasa directamente por IIS.

3. ASP.NET comprueba si la solicitud dispone de una cookie de autenticación válida anexa. Si es así, significa que las credenciales del usuario ya han sido confirmadas y que la solicitud se ha examinado para su autorización. ASP.NET realiza la verificación de autorización comparando las credenciales que contiene la cookie de autorización de la solicitud con las opciones de configuración de autorización del archivo Web.config. Si el usuario es autorizado, se concede el acceso a la página segura solicitada.

4. Si la solicitud no tiene ninguna cookie anexa, ASP.NET redirecciona la solicitud a una página de inicio de sesión (cuya ruta reside en el archivo de configuración de la aplicación), donde el usuario introduce las credenciales requeridas, normalmente un nombre y una contraseña.

Introducción

Serie de eventos que tienen lugar durante la autenticación basada en formularios

Page 694: Microsoft ASP.net - Curso Completo - Espa Ol

Seguridad en aplicaciones Web con Microsoft ASP.NET 27

5. El código de la aplicación en la página de inicio de sesión comprueba las credenciales para confirmar su autenticidad y, si son autenticadas, adjunta a la solicitud una cookie que contiene las credenciales.

6. Si la autenticación falla, la solicitud se devuelve con un mensaje de “Acceso denegado”.

7. Si el usuario es autenticado, ASP.NET comprueba la autorización, como en el paso 3, y puede permitir el acceso a la página segura solicitada originalmente o redireccionar la solicitud a otra página, dependiendo del diseño de la aplicación. Por otra parte, ASP.NET puede dirigir la solicitud a un formulario de autorización personalizado donde se examinan las credenciales para la autorización a la página protegida. Normalmente, si la autorización falla, la solicitud se devuelve con un mensaje de “Acceso denegado”.

Page 695: Microsoft ASP.net - Curso Completo - Espa Ol

28 Seguridad en aplicaciones Web con Microsoft ASP.NET

Cómo habilitar la autenticación basada en formularios

Configurar IIS para utilizar autenticación anónima

Establecer la autenticación basada en formularios en Web.config

Establecer la autorización

Generar un formulario Web Formde inicio de sesión

111

222

333

444

<Authentication mode="Forms" ><forms name=".namesuffix" loginUrl="login.aspx" />

</Authentication>

<Authentication mode="Forms" ><forms name=".namesuffix" loginUrl="login.aspx" />

</Authentication>

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

Para habilitar la autenticación basada en formularios para nuestra aplicación Web, debemos realizar los cuatro pasos siguientes:

1. Configurar IIS para utilizar la autenticación anónima, para que el usuario sea autenticado por ASP.NET y no por IIS.

2. Configurar el método de autenticación basado en formularios (Forms) para la aplicación en una subsección <authentication> de la sección <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 autenticación en “Forms”, se debe agregar un elemento <forms> a la sección <authentication>, como muestra el ejemplo anterior. En la sección <forms>, se configura la cookie. Establecer el atributo name con el sufijo que utilizarán las cookies y el atributo loginUrl con la URL (Uniform Resource Locator) de la página a la que se redirigen las solicitudes no autenticadas.

3. Configurar la sección <authorization> de Web.config. El proceso de configurar la autorización para autenticación basada en formularios es idéntico al proceso de la autenticación basada en Windows. Al configurar la sección <authorization> en Web.config, podemos denegar o permitir a los usuarios el acceso a nuestra aplicación Web. También

Introducción

Habilitar la autenticación basada en formularios Configurar la autenticación

Configurar la autorización

Page 696: Microsoft ASP.net - Curso Completo - Espa Ol

Seguridad en aplicaciones Web con Microsoft ASP.NET 29

podemos indicar que toda la aplicación Web requiere autorización o especificar qué páginas son seguras y, por tanto, requieren autorización.

4. Generar un formulario Web Form de inicio de sesión, login.aspx. Login.aspx puede ser una página sencilla con dos campos, uno para el nombre de usuario y otro para la contraseña. Login.aspx requiere que los usuarios introduzcan su nombre de usuario y contraseña para establecer autenticación y poder acceder a nuestra aplicación Web.

Generar un formulario Web Form de inicio de sesión

Page 697: Microsoft ASP.net - Curso Completo - Espa Ol

30 Seguridad en aplicaciones Web con Microsoft ASP.NET

Crear una página de inicio de sesión

Añadir una referencia a System.Web.SecurityLa página de inicio de sesión verifica y examina las credenciales de un usuario

Leer las credenciales del usuario desde una cookieUser.Identity.Name devuelve el valor guardado por FormsAuthentication.RedirectFromLoginPage

Sub cmdLogin_Click(s As Object, e As eventArgs)If (login(txtEmail.Text, txtPassword.Text))FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, False)

End If

End Sub

Sub cmdLogin_Click(s As Object, e As eventArgs)If (login(txtEmail.Text, txtPassword.Text))FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, False)

End If

End Sub

private void cmdLogin_Click(object sender, EventArgs e){if (login(txtEmail.Text, txtPassword.Text))FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, false);

}

private void cmdLogin_Click(object sender, EventArgs e){if (login(txtEmail.Text, txtPassword.Text))FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, false);

}

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

Durante la autenticación, todas las solicitudes son redirigidas a la página de inicio de sesión especificada en el atributo loginUrl de la etiqueta <forms>. La página de inicio de sesión verifica y examina las credenciales de un usuario.

Si el modo de autenticación está establecido a “Forms”, ASP.NET busca una cookie de autenticación adjunta a la solicitud de una página segura. Si ASP.NET no encuentra la cookie de autenticación, redirecciona la solicitud a la página de inicio de sesión especificada.

En la página de inicio de sesión, el usuario introduce las credenciales requeridas. La página las examina, bien a través de código específico de la aplicación o invocando a FormsAuthentication.Authenticate. Si las credenciales con válidas, se genera una cookie y el usuario es redirigido a la página solicitada originalmente invocando a FormsAuthentication.RedirectFromLoginPage. Sin embargo, si las credenciales no son válidas, el usuario permanece en la página de inicio de sesión y recibe un mensaje que indica que las credenciales de inicio de sesión no son válidas.

El método RedirectFromLoginPage toma dos parámetros: userName, que especifica el nombre del usuario para la autenticación basada en formularios, y createPersistentCookie. Si el valor de createPersistentCookie es true, una cookie de autenticación 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 autenticación temporal (no persistente).

Introducción

¿Cómo funciona una página de inicio de sesión?

Page 698: Microsoft ASP.net - Curso Completo - Espa Ol

Seguridad en aplicaciones Web con Microsoft ASP.NET 31

La siguiente tabla muestra una lista todos los métodos del objeto FormsAuthentication, que pueden utilizarse en el proceso de autenticación.

Método Función Authenticate Dadas las credenciales suministradas, este método intenta

validar las credenciales comparándolas con las que contiene el almacén de credenciales configurado.

GetAuthCookie Crea una cookie de autenticación para un determinado nombre de usuario. La cookie no se establece como parte de la respuesta saliente; por tanto, una aplicación puede tener un mayor control sobre cómo se emite la cookie.

GetRedirectUrl Devuelve la URL redirigida para la solicitud original que ha provocado la redirección a la página de inicio de sesión.

RedirectFromLoginPage Redirige a los usuarios autenticados a la URL solicitada originalmente.

SetAuthCookie Crea un ticket de autenticación para el userName dado y lo adjunta a la colección de cookies de la respuesta saliente. No realiza una redirección.

SignOut Dado un usuario autenticado, invocar SignOut elimina el ticket de autenticación estableciendo un SetCookie con un valor vacío. De este modo, se eliminan las cookies duraderas y las cookies por sesión.

Para poder utilizar la clase FormsAuthentication, deberíamos referenciar la biblioteca System.Web.Security utilizando Imports o using.

Una página de inicio de sesión es simplemente una página ASP.NET con un formulario HTML, un botón Submit y un procedimiento de evento Click para el botón Submit.

El siguiente es un ejemplo de un formulario en una página de inicio de sesión:

<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 botón Submit, se valida la información que se introduce en el formulario, y si ésta es válida, invocar FormsAuthentication.RedirectFromLoginPage. El método RedirectFromLoginPage emite la cookie y, a continuación, redirige al usuario a la página solicitada originalmente.

Crear una página de inicio de sesión

Page 699: Microsoft ASP.net - Curso Completo - Espa Ol

32 Seguridad en aplicaciones Web con Microsoft ASP.NET

El siguiente código de ejemplo utiliza una función personalizada denominada Login para validar el nombre de usuario y la contraseña, e invoca RedirectFromLoginPage si el nombre de usuario y la contraseña son válidos:

Private Sub cmdLogin_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles cmdLogin.Click Dim strCustomerId As String 'Validate User Credenciales strCustomerId = Login(txtEmail.Text, txtPassword.Text) If (strCustomerId <> "") Then FormsAuthentication.RedirectFromLoginPage _ (strCustomerId, False) Else lblInfo.Text = "Invalid Credenciales: Please try again" End If End Sub private void cmdLogin_Click(object sender, EventArgs e) { string strCustomerId; //Validate User Credenciales strCustomerId = Login(txtEmail.Text, txtPassword.Text); if (strCustomerId != "") { FormsAuthentication.RedirectFromLoginPage (strCustomerId, false); } else { lblInfo.Text = "Invalid Credenciales: Please try again"; } } Después de que un usuario haya sido autenticado, podemos obtener su nombre de usuario programáticamente utilizando la propiedad User.Identity.Name. Esta propiedad resulta útil para generar una aplicación que utilice el nombre del usuario como una clave para guardar información en una tabla de una base de datos o un recurso del directorio.

También podemos identificar dinámicamente el mecanismo de autenticación (Forms en este caso) utilizando User.Identity.AuthenticationType y ver si el usuario está autenticado utilizando User.Identity.IsAuthenticated.

Con la autenticación basada en formularios, User.Identity es un objeto de la clase FormsIdentity.

Cuando se utiliza la autenticación basada en formularios, la contraseña que un usuario introduce en la página de inicio de sesión se envía a través de la red en texto claro. Es importante utilizar SSL para encriptar estas contraseñas.

Visual Basic .NET

C#

Leer credenciales desde cookies

Nota

Page 700: Microsoft ASP.net - Curso Completo - Espa Ol

Seguridad en aplicaciones Web con Microsoft ASP.NET 33

Demostración: uso de la autenticación basada en formularios

Abrir IIS y configurar para autenticación anónima

Abrir Web.config y configurarlo para autenticación y autorización

Abrir la página de inicio de sesión y mostrar el código

Ejecutar la aplicación Web ASP.NET

Los estudiantes pueden acceder a la aplicación Web ASP.NET segura en el equipo del instructor

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

En esta demostración, veremos cómo configurar IIS para utilizar la autenticación basada en formularios con autenticación anónima; a continuación, veremos cómo configurar la autenticación y autorización en el archivo Web.config. Veremos cómo funciona la página de inicio de sesión, y algunas demostraciones de acceso a páginas seguras y a páginas no seguras. Finalmente, aprenderemos a conectar a una página segura en el equipo del instructor.

Los archivos para demostración se encuentran en el proyecto Pract14VB o Mob16CS de la solución 2310Demos.

Ejecutar la demostración

1. Hacer clic con el botón 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 botón 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 diálogo Métodos de autenticación de IIS. 5. Desactivar la casilla de verificación de Autenticación básica (la contraseña

se envía en texto claro).

Verificar que las casillas de verificación Autenticación implícita para servidores de dominios Windows y Autenticación integrada de Windows están desactivadas y que la casilla de verificación Acceso anónimo está seleccionada.

Introducción

Configurar IIS para acceso anónimo

Nota

Page 701: Microsoft ASP.net - Curso Completo - Espa Ol

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 diálogo Herencia omitida. 9. Abrir el archivo Web.config.

Utilizando los comentarios <!-- y -->, comentar la sección <system.web> que contiene el modo de autenticación “Windows” y quitar los comentarios de la sección <system.web> que contiene el modo de autenticación “Forms”. Explicar la nueva sección <authentication> que redirige todas las solicitudes no autenticadas a la página LoginDemo.aspx. Las mismas dos páginas (SecurePageDemo1.aspx y SecurePageDemo2.aspx) se han configurado como páginas seguras.

10. Guardar los cambios. 11. Abrir la página de código subyacente LoginDemo.aspx.vb o

LoginDemo.asox.cs. Mostrar lo siguiente:

• El procedimiento de evento cmdLogin_Click que valida el nombre de usuario y contraseña invocando la función Login, e invocar RedirectFromLoginPage, si las credenciales son válidas.

• El primer parámetro de RedirectFromLoginPage es la identidad de usuario que deseamos guardar se encuentra en la cookie. A continuación, durante la sesión, esta identidad puede ser leída desde cualquier página utilizando User.Identity.Name.

• RedirectFromLoginPage crea una cookie de autenticación temporal (no persistente) (segundo parámetro establecido a false).

• Para utilizar RedirectFromLoginPage, debemos importar System.Web.Security.

• El código de la función Login. Mostrar cómo la función Login invoca el procedimiento almacenado EmployeeLogin para verificar las credenciales introducidas consultándolas a la base de datos.

• Abrir Microsoft SQL Server™ Enterprise Manager, y, a continuación, abrir la base de datos de Coho y mostrar el registro en la tabla Logins. Finalmente, mostrar el procedimiento almacenado EmployeeLogin.

Cuando veamos la base de datos Coho, observar que en la autenticación basada en formularios, a diferencia de la autenticación basada en Windows, depende de nosotros como desarrolladores el diseñar y gestionar una base de datos de usuarios.

12. Generar el proyecto. 13. Abrir un nuevo navegador e ir a

http://localhost/Pract14VB/NonSecurePageDemo.aspx http://localhost/Pract14CS/NonSecurePageDemo.aspx

14. Ir a: http://localhost/Pract14VB/SecurePageDemo1.aspx http://localhost/Pract14CS/SecurePageDemo1.aspx

Configurar la seguridad en el archivo Web.config

Mostrar la página LoginDemo.aspx

Importante

Visual Basic .NET C#

Visual Basic .NET C#

Page 702: Microsoft ASP.net - Curso Completo - Espa Ol

Seguridad en aplicaciones Web con Microsoft ASP.NET 35

Mostrar que somos redirigidos automáticamente a la página LoginDemo.aspx. Mostrar que la URL, que contiene la página SecurePageDemo1.aspx, es la página necesaria para redirigir al usuario a la página solicitada, si las credenciales son correctas.

15. Escribir las credenciales [email protected] en Nombre de usuario (Email), introducir una contraseña no válida y hacer clic en Sign In Now. El inicio de sesión fallará porque la contraseña no es válida.

16. Introducir las credenciales [email protected] en Nombre de usuario (Email), someone en Contraseña, y hacer clic de nuevo en Sign In Now. Seremos redirigidos a la página SecurePageDemo1.aspx.

17. La página SecurePageDemo1.aspx debería mostrar el nombre de usuario 1 (que es la identidad que está almacenada en la cookie en LoginDemo.aspx) y el tipo de autenticación Forms. Ahora podemos acceder a cualquier página segura, siempre que no cerremos el navegador. Si cerramos el navegador, deberemos pasar de nuevo por el proceso de autenticación debido a que la cookie es temporal (no persistente).

18. Ir a: http://localhost/Pract14VB/SecurePageDemo2.aspx http://localhost/Pract14CS/SecurePageDemo2.aspx Mostrar que esta vez no se nos pide que introduzcamos nuestras credenciales.

19. Indicar a los estudiantes que vayan a:

http://Nombreequipoinstructor/Pract14VB/SecurePageDemo1.aspx http://Nombreequipoinstructor/Pract14CS/SecurePageDemo1.aspx Escribir las siguientes credenciales, nombre: [email protected], y contraseña: someone, cuando se soliciten. Después de introducir las credenciales, los estudiantes deberían poder ver SecurePageDemo1.aspx y SecurePageDemo2.aspx.

Visual Basic .NET C#

Los estudiantes acceden al equipo del instructor Visual Basic .NET C#

Page 703: Microsoft ASP.net - Curso Completo - Espa Ol

36 Seguridad en aplicaciones Web con Microsoft ASP.NET

Lección: descripción de la autenticación mediante Microsoft Passport

Cómo funciona Microsoft Passport

Otros recursos de Microsoft Passport

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

La ventaja de Microsoft Passport es que los usuarios pueden presentar las mismas credenciales en cualquier sitio Web participante, y únicamente deben iniciar sesión una vez. Cuando los usuarios cierran su navegador o indican que desean finalizar la sesión, la cookie se destruye y el usuario debe iniciar sesión de nuevo para acceder a los recursos de alguno de los sitios participantes.

En esta lección, estudiaremos el conjunto de eventos que tiene lugar durante la autenticación mediante Microsoft Passport. También estudiaremos cómo implementar la autenticación con Microsoft Passport.

En esta lección, aprenderemos a:

Describir el conjunto de eventos que tiene lugar durante la autenticación con Microsoft Passport.

Identificar otros recursos de Microsoft Passport.

Introducción

Objetivos de la lección

Page 704: Microsoft ASP.net - Curso Completo - Espa Ol

Seguridad en aplicaciones Web con Microsoft ASP.NET 37

Cómo funciona Microsoft Passport

sitioweb.msftsitioweb.msft

ClienteCliente

Passport.comPassport.com

El cliente solicita una página al host111

222

333

444

555

El sitio redirige al cliente a Passport.com

El cliente es redirigido e inicia sesión en Passport.com

Passport devuelve una cookiecon la información del ticket

666

El cliente accede al host, esta vez con la información del ticket

El host devuelve un formulario Web Form y posiblemente una nueva cookie que puede leer y escribir

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

Durante la autenticación de usuarios utilizando Microsoft Passport, se producen una serie de eventos.

1. Cuando el cliente solicita una página segura del sitio Web (host), la solicitud se envía primero a IIS. IIS autentica al usuario como anónimo 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 sesión que envía al cliente. El usuario proporciona la información adecuada de inicio de sesión y la envía 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 autenticación.

5. El cliente envía la solicitud inicial, esta vez con la información del ticket de autenticación, a la aplicación Web ASP.NET.

6. De nuevo, IIS autentica al usuario como anónimo. ASP.NET autentica al usuario basándose en el ticket de autenticación, 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 también utilicen la autenticación mediante Microsoft Passport.

Introducción

Serie de eventos que tienen lugar en la autenticación de Microsoft Passport

Page 705: Microsoft ASP.net - Curso Completo - Espa Ol

38 Seguridad en aplicaciones Web con Microsoft ASP.NET

Otros recursos de Microsoft Passport

Sitios Web

http://www.passport.com

http://msdn.microsoft.com

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

Es posible que, cuando estudiemos de Microsoft Passport, necesitemos acceder a recursos para encontrar respuestas a preguntas específicas. Los dos sitios Web siguientes pretenden ofrecer un punto de partida para encontrar más información sobre Microsoft Passport.

Podemos encontrar información sobre Microsoft Passport en los siguientes sitios:

El enlace de información para desarrolladores en http://www.passport.com Los recursos de http://msdn.microsoft.com

Introducción

Sitios Web