Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Microsoft Asp Net - Curso Completo - Español BY SELENITY PDF
Microsoft Asp Net - Curso Completo - Español BY SELENITY PDF
Gua de instalacin de
las bases de datos
ndice
Soporte de versiones de software ............................................................................ 2
Requerimientos del aula .......................................................................................... 2
1. Instalar y configurar bases de datos SQL Server................................................. 3
2. Configurar la solucin final................................................................................. 3
Software
La siguiente tabla muestra todo el software necesario para instalar el aula para
este curso, incluyendo la versin que se ha probado con el curso y dnde puede
encontrarse el software.
Software
Professional Edition
Developer Edition
Visual Studio .NET CDs
No aplicable
Versin 5.0
Trainer Compact Disk o
http://www.macromedia.com
En los laboratorios de este curso, se utilizan tres bases de datos. Las tres bases
de datos pueden restaurarse ejecutando un script SQL.
1. En el men Inicio, hacer clic en Todos los programas, clic en Microsoft
SQL Server, y clic en Enterprise Manager.
2. En la barra de herramientas, hacer clic en Herramientas, y clic en SQL
Query Analyzer.
3. En el cuadro de dilogo Conectar a SQL Server, escribir (local) en el
cuadro SQL Server, hacer clic en Iniciar SQL Server si est detenido,
hacer clic en Autenticacin Windows, y clic en Aceptar.
4. En la barra de herramientas, hacer clic en Archivo, y clic en Abrir.
5. En el cuadro de dilogo Abrir archivo de consulta, en el cuadro Nombre
de archivo, apuntar al archivo restoreDB.sql y hacer clic en Abrir. Este
archivo y los archivos de backup asociados, se pueden encontrar dentro de
la carpeta RestoreDB dentro del fichero LabSetup.zip.
6. En la barra de herramientas, hacer clic en la opcin de consulta y hacer clic
en Ejecutar.
7. Cerrar SQL Query Analyzer.
8. Cerrar SQL Server Enterprise Manager.
Introduccin a la plataforma
Microsoft .NET
ndice
Descripcin
Qu es el .NET Framework?
12
21
23
Descripcin
Objetivo
Presentacin
En este mdulo,
presentamos la plataforma
.NET. Hablaremos sobre el
.NET Framework y sobre el
soporte de lenguajes que
proporciona el .NET
Framework a la plataforma.
Sugerencia
Qu es el .NET Framework?
Presentacin
Internet
Orquestacin
.NET
Framework
Internet
COM+
.NET
Enterprise
Servers
Servicios
Building
Block
Windows
Disponible
en la
actualidad
Con mejoras
.NET
Nuevas
capacidades
La plataforma .NET
La plataforma .NET es un conjunto de tecnologas diseadas para transformar
Internet en una plataforma informtica distribuida a escala completa.
Proporciona nuevas formas de desarrollar aplicaciones a partir de colecciones
de Servicios Web. La plataforma .NET soporta totalmente la infraestructura
existente de Internet, incluyendo HTTP, XML y SOAP.
.NET Framework
El .NET Framework se basa en un nuevo entorno de ejecucin de lenguaje
comn (CLR - Common Language Runtime). Este motor de ejecucin
proporciona un conjunto de servicios comunes para los proyectos generados
en Visual Studio .NET, con independencia del lenguaje. Estos servicios
proporcionan bloques de desarrollo fundamentales para aplicaciones de
cualquier tipo, para todas las capas y niveles de la arquitectura de
aplicaciones.
Sugerencia
Descripcin
Microsoft
SQL Server 2000
Microsoft
BizTalk Server 2000
Microsoft Host
Integration Server 2000
Microsoft Exchange
2000 Enterprise Server
Microsoft Application
Center 2000
Microsoft Internet
Security and
Acceleration Server 2000
Microsoft
Commerce Server 2000
Qu es el .NET Framework?
Objetivo
Presentacin
El .NET Framework
proporciona todos los
servicios comunes
necesarios para la ejecucin
de aplicaciones.
Presentacin
Visual
Basic
C++
C#
J#
.NET Framework
El .NET Framework
proporciona todos los
servicios comunes
necesarios para ejecutar las
aplicaciones Visual Basic
.NET. Estos servicios estn
disponibles en cualquier
lenguaje compatible con
.NET gracias a la
espeficicacin Common
Language Specification.
Presentacin
Extensible
Formularios VB
MFC/ATL
ASP
API de Windows
Sugerencia
Extensible
La jerarqua del .NET Framework no queda oculta al desarrollador.
Podemos acceder y extender clases .NET (a menos que estn selladas)
utilizando herencia. Tambin podemos implementar herencia multilenguaje.
10
Presentacin
En esta seccin,
estudiaremos los lenguajes
que Microsoft proporciona
para el .NET Framework
con Visual Studio .NET.
Tambin estudiaremos
algunos de los lenguajes
para .NET creados por
terceros desarrolladores.
J# .NET
Aprovecha totalmente el .NET Framework
Lenguajes de terceros
Descripcin
Microsoft
Visual Basic .NET
Visual Basic .NET ofrece importantes innovaciones del lenguaje respecto a versiones
anteriores de Visual Basic. Visual Basic .NET soporta herencia, constructores,
polimorfismo, sobrecarga, excepciones estructuradas, estricta verificacin de tipos, free
threading, y muchas otras caractersticas. En esta versin, Visual Basic Scripting
Edition proporciona funcionalidad completa Visual Basic.
Microsoft Visual C#
Extensiones gestionadas
C++
La actualizacin de Visual C++ es una mnima extensin gestionada del lenguaje C++.
Esta extensin proporciona acceso al .NET Framework incluyendo el recolector de
basura, herencia de implementacin simple y herencia de interfaz mltiple. Esta
actualizacin tambin elimina la necesidad de escribir cdigo de fontanera para los
componentes. Ofrece acceso a bajo nivel donde sea necesario.
Microsoft
Visual J# .NET
J# .NET es un lenguaje para los desarrolladores que utilicen el lenguaje Java que
quieran generar las aplicaciones y servicios para el .NET Framework. J# .NET est
totalmente integrado con el IDE de Visual Studio .NET y est diseado para aprovechar
11
12
Presentacin
En esta seccin,
estudiaremos los diferentes
componentes que integran
el .NET Framework.
Interfaz de usuario
Presentacin
ASP .NET
Formularios
y Servicios Web
Interfaz
de usuario
Interfaz de usuario
13
14
Presentacin
Sugerencia
Soporte de hilos
COM marshaler
Verificador de tipos
Gestor de excepciones
Motor de seguridad
Motor de depuracin
MSIL a
compiladores
nativos
Gestor
de cdigo
Recolector
de basura
Cargador de clases
Qu es un entorno gestionado?
Un entorno gestionado es aquel que proporciona servicios comunes de forma
automtica. Algunos ejemplos de los tipos de servicios que proporciona un
entorno gestionado son el recolector de basura y la seguridad.
15
Descripcin
Cargador de clases
Microsoft Intermediate
Language (MSIL) a
compilador nativo
Gestor de cdigo
Recolector de basura
Motor de seguridad
Motor de depuracin
Verificador de tipos
Gestor de excepciones
Soporte de hilos
(threads)
COM marshaler
Soporte de la biblioteca
de clases del .NET
Framework
16
Describir la biblioteca de
clases del .NET Framework
y el espacio de nombres
principal: System.
Presentacin
En esta seccin,
aprenderemos cmo la
biblioteca de clases del
.NET Framework expone
caractersticas del entorno
de ejecucin y proporciona
otros servicios de alto nivel.
Sugerencia
System
System.Security
System.Runtime.
InteropServices
System.Net
System.Text
System.Globalization
System.Reflection
System.Threading
System.Configuration
System.IO
System.Diagnostics
System.Collections
17
Presentacin
El .NET Framework
proporciona un nuevo
conjunto de clases
ADO.NET para el manejo
de datos.
Sugerencia
System.Xml
System.Data
System.Xml.Schema
DataSet
DataRow
DataTable
DataView
System.Xml.Serialization
18
ASP.NET
Presentacin
Internet evoluciona
rpidamente desde los
actuales sitios Web que
nicamente sirven pginas
de interfaz de usuario a
navegadores, hasta una
prxima generacin de
sitios Web programables
que integran directamente
organizaciones,
aplicaciones, servicios y
dispositivos. Estos sitios
Web programables son
mucho ms que sitios a los
que se accede de modo
pasivo; son Servicios Web
reutilizables e inteligentes.
System.Web
Servicios
IU
Descripcin
HtmlControls
Descubrimiento
WebControls
Protocolos
Cach
Seguridad
Configuracin
Estado de Sesin
19
20
Interfaz de usuario
Objetivo
Presentacin
En esta seccin,
estudiaremos cmo .NET
gestiona el interfaz de
usuario. La clase
System.Windows.Forms
proporciona el IU de lado
cliente y System.Drawing
proporciona la siguiente
generacin de servicios
GDI.
System.Windows.Forms
System.Drawing
21
Presentacin
Recolector de basura
22
Recolector de basura
Garantiza que las aplicaciones creadas en Visual Basic .NET no acceden a
posiciones de memoria sin referencia. Este proceso en segundo plano aborda
aspectos relacionados con la gestin de memoria, como posiciones de
memoria vacas y referencias circulares que existan en versiones anteriores
de Visual Basic y en otros lenguajes.
Presentacin
En esta seccin,
estudiaremos los espacios
de nombres del .NET
Framework.
Espacios de nombres
Espacios de nombres
23
24
Espacios de nombres
Objetivo
Espacios de nombres
Presentacin
System
Collections
IO
Security
Configuration
Net
ServiceProcess
Runtime
.InteropServices
Diagnostics
Reflection
Text
.Remoting
Globalization
Resources
Threading
.Serialization
25
Explicar qu espacios de
nombres se ensean en
este curso, y qu espacios
de nombres no.
Presentacin
System.Console
Mdulo 3
Mdulo 10
z
System.IO
Mdulo 11
System.Windows.Forms
System.Net
System.Drawing
System.Net.Sockets
Mdulo 4
z
System.Reflection
Mdulo 7
z
System.Text
System.Collections
Mdulo 12
z
System.Runtime.Serialization
Mdulo 13
z
System.Runtime.Remoting.Channels
System.Web.Services
Este curso cubre muchos de los espacios de nombres del Microsoft .NET
Framework.
El Mdulo 2 explica el espacio de nombres System.Console para enviar salida
de impresin a la consola. El Mdulo 3 explica los espacios de nombres
System.Windows.Forms y System.Drawing para generar un formulario que
contenga botones para interactuar con el usuario.
El Mdulo 4 explica el espacio de nombres System.Reflection para almacenar
informacin relativa a versiones y archivos de claves en un ensamblado. El
Mdulo 7 explica el espacio de nombres System.Text para la gestin avanzada
de cadenas y el System.Collections para mantener colecciones de datos.
El Mdulo 10 explica el espacio de nombres System.IO para leer y escribir
archivos. El Mdulo 11 explica los espacios de nombres System.Net y
System.Net.Sockets para la transmisin de datos a travs de la red.
El Mdulo 12 explica el espacio de nombres System.Runtime.Serialization
para la persistencia de objetos en el almacenamiento. El Mdulo 13 explica los
espacios de nombres System.Runtime.Remoting.Channels y
System.Web.Services para la invocacin de objetos remotos, y para la creacin
de servicios Web XML.
26
Completar la informacin
sobre los espacios de
nombres presentados en la
seccin anterior.
Presentacin
System.Threading
Mdulo 16
z
System.Data
Mdulo 17
z
System.Reflection
ndice
Descripcin
14
26
Descripcin
Descripcin de ASP.NET
Recursos
*****************************use******************************
Introduccin
Objetivos
Entender las funcionalidades bsicas del sitio Web que generaremos en los
laboratorios.
Qu es el .NET Framework?
*****************************use******************************
Introduccin
Objetivos de la leccin
Qu es el .NET Framework?
Herramientas del
desarrollador
Clientes
Aplicaciones
Web ASP.NET
Bases de
datos
Servicios
Web XML
.NET
Framework
Experiencias
del usuario
*****************************use******************************
Introduccin
Qu es la plataforma
.NET?
.NET Framework
Qu es el .NET
Framework?
*****************************use******************************
Introduccin
El .NET Framework fue desarrollado para superar varias limitaciones con las
que los desarrolladores se encontraban al generar aplicaciones Web, y utiliza la
Internet como medio para solventar estas limitaciones.
Incluso con la llegada de una red global y fcilmente accesible para compartir
informacin (Internet), algunas aplicaciones funcionan en ms de un tipo de
cliente o tienen la capacidad de interactuar transparentemente con otras
aplicaciones. Esta limitacin lleva a dos importantes problemas con los que los
desarrolladores deben enfrentarse:
C#
Perl
Python
COM+
(Transacciones, Particiones,
Agrupaci
Agrupacin de objetos)
objetos)
IIS
WMI
Win32
*****************************use******************************
Introduccin
El .NET Framework
Substrato de la plataforma
El .NET Framework debe ejecutarse sobre un sistema operativo.
Actualmente, puede ejecutarse en sistemas operativos Microsoft Win32,
como Windows 2000, Windows 2003, Windows XP y Windows 98.
Adems, el .NET Framework se extiende para su ejecucin en otras
plataformas, como Windows CE, a travs del .NET Compact Framework.
Servicios de aplicaciones
Cuando se ejecuta en Windows 2000 o Windows 2003, el desarrollador
tiene disponibles servicios de aplicaciones como los Servicios de
Componentes, Colas de Mensajes, Internet Information Services (IIS) y
Windows Management Instrumentation (WMI). El .NET Framework
expone los servicios de aplicaciones a travs de clases en la biblioteca de
clases del .NET Framework.
Microsoft ADO.NET
ADO.NET es la siguiente generacin de la tecnologa ActiveX Data
Objects (ADO) de Microsoft. ADO.NET ofrece un soporte mejorado del
modelo de programacin desconectado. ADO.NET tambin proporciona un
amplio soporte de XML.
Nota Para aprender ms sobre ADO.NET, leer los Mdulos 9, 10 y 11.
ASP.NET
ASP.NET es un marco de programacin creado sobre el CLR. Puede
utilizarse en un servidor para crear potentes aplicaciones Web. ASP.NET
Web Forms proporcionan una forma fcil y potente de generar interfaces de
usuario (IUs) Web dinmicos.
Interfaces de usuario
El .NET Framework soporta tres tipos de IUs:
Web Forms, que funcionan a travs de ASP.NET y HTTP (Hypertext
Transfer Protocol)
Windows Forms, que se ejecutan en equipos cliente Win32
La consola de la lnea de comandos
Lenguajes
Cualquier lenguaje que cumpla con la Especificacin de Lenguaje Comn
(Common Language Specification - CLS) puede ejecutarse en el CLR. En el
.NET Framework, Microsoft proporciona soporte para Microsoft Visual
Basic .NET, Microsoft Visual C++ .NET, C#, y Microsoft JScript .NET.
Terceras partes pueden proporcionar lenguajes adicionales.
Nota Para ms informacin sobre los lenguajes basados en .NET, consultar
10
Visual Basic
.NET
Framework
ASP
1980s
1990s
2000s
*****************************use******************************
Introduccin
Ventajas
11
Clases extensibles
La jerarqua del .NET Framework no queda oculta al desarrollador.
Podemos acceder y extender las clases .NET (a menos que estn protegidas)
mediante la herencia. Tambin podemos implementar la herencia entre
mltiples lenguajes.
12
Mltiples
Lenguajes
Herramientas
Windows Forms
Herramientas
Servicios Web
Disear
Proceso
de errores
Acceso
a datos
Desarrollar
Depurar
Implantar
*****************************use******************************
Introduccin
Caractersticas de
Visual Studio .NET
Prctica opcional
13
En este curso, utilizaremos Visual Studio .NET. En esta prctica, Visual Studio
.NET se mostrar en la parte superior del men Inicio, para poder acceder a l
fcilmente, y se abrir Visual Studio .NET.
14
Qu es ASP.NET?
*****************************use******************************
Introduccin
Objetivos de la leccin
15
Qu es ASP.NET?
*****************************use***********
Introduccin
Qu es ASP.NET?
16
17
Internet
Internet
Cach de Salida
Clientes
Servicios
Web
Web
Forms
Page1.
aspx
Page2.
aspx
Datos
XML
Pginas
cdigo
trasero
global.
asax
Base de
datos
Web.
config
machine.
config
Componentes
Componentes
*****************************
Introduccin
Archivos de configuracin
Los archivos de configuracin son archivos XML que definen la
configuracin predeterminada para la aplicacin Web y para el servidor
Web. Cada aplicacin Web tiene un archivo de configuracin Web.config.
Adems, cada servidor Web tiene un archivo machine.config.
Archivo Global.asax
Los archivos Global.asax contienen el cdigo necesario para responder a los
eventos a nivel de aplicacin provocados por ASP.NET.
18
Cach
El uso de cach permite a la aplicacin Web devolver ms rpidamente
formularios Web Forms y datos tras la primera peticin.
19
***************************** use******************************
Introduccin
Primera solicitud
Cuando el cliente solicita una pgina Web por primera vez, se genera el
siguiente conjunto de eventos:
1. El navegador cliente enva una solicitud GET HTTP al servidor.
2. El parseador ASP.NET interpreta el cdigo fuente.
3. Si el cdigo no se ha compilado todava en una biblioteca de enlace
dinmico (DLL), ASP.NET invoca el compilador.
4. El CLR carga y ejecuta el cdigo Microsoft intermediate language (MSIL).
Segunda solicitud
Cuando el usuario invoca la misma pgina Web por segunda vez, se genera el
siguiente conjunto de eventos:
1. El navegador cliente enva una solicitud GET HTTP al servidor.
2. El CLR carga y ejecuta inmediatamente el cdigo MSIL que ya se ha
compilado durante el primer intento de acceso del usuario.
20
*****************************use******************************
Introduccin
Objetivo de la leccin
3 proyectos
z
Aplicacin Web
Biblioteca de Clases
3 bases de datos
z
Doctors
Dentists
Coho
*****************************use******************************
Introduccin
Detalles
21
22
Pgina C#
Descripcin
Laboratorios
default.aspx
default.aspx
4, 5, 14
default.aspx.vb
default.aspx.cs
dental.aspx
dental.aspx
13
dental.aspx.vb
dental.aspx.cs
doctors.aspx
doctors.aspx
doctors.aspx.cs
9, 10, 11, 15
doctors.aspx.vb
dsDoctors.vb
dsDoctors.cs
dsDoctors.xsd
dsDoctors.xsd
growth.xml
growth.xml
12
lgcap.xml
lgcap.xml
midcap.xml
midcap.xml
smcap.xml
smcap.xml
header.ascx
header.ascx
4, 5, 15
life.aspx
life.aspx
life.aspx.cs
4, 7, 14
life.aspx.vb
login.aspx
login.aspx
17
login.aspx.vb
login.aspx.cs
medical.aspx
medical.aspx
8, 15
medical.aspx.vb
medical.aspx.cs
mutual_funds.xml
mutual_funds.xml
12
namedate.ascx
namedate.ascx
8, 14
namedate.ascx.vb
namedate.ascx.cs
nestedData.aspx
nestedData.aspx
12
nestedData.aspx.vb
nestedData.aspx.cs
prospectus.aspx
prospectus.apsx
12
prospectus.aspx.vb
prospectus.aspx.cs
prospectus_style.xsl
prospectus_style.xsl
12
register.aspx
register.aspx
16
register.aspx.vb
register.aspx.cs
retirement.aspx
retirement.aspx
retirement.aspx.cs
12, 14
retirement.aspx.vb
securitytest.aspx
securitytest.aspx
16
securitytest.aspx.vb
securitytest.aspx.cs
23
(continuacin)
Pgina Visual
Basic .NET
Pgina C#
Descripcin
Laboratorios
signout.aspx
signout.aspx
16
signout.aspx.vb
signout.aspx.cs
Web.config
Web.config
Archivo de configuracin.
14, 15, 16
Proyecto
componente
BenefitsListVB
Proyecto
componente
BenefitsListCS
Proyecto servicio
Web DentalService
Proyecto servicio
Web DentalService
13
24
Pgina inicio
Benefits
Coho
Winery
Default.aspx
Default.aspx
Componente
Men
Registro
Register.aspx
Register.aspx
Encabezado
pgina
Web.
config
Class1.vb
Class1.vbor
orClass1.cs
Class1.cs
Life Insurance
Retirement
Life.aspx
Life.aspx
Retirement.aspx
Retirement.aspx
Prospectus
Medical
Medical.aspx
Medical.aspx
Doctors
Doctors.aspx
Doctors.aspx
tempdb
Dentists
Dental.aspx
Dental.aspx
Control usuario
namedate.ascx
namedate.ascx
Laboratorio
Arch.
XML
ASPState
Header.ascx
Header.ascx
Doctors
Servicio
Web XML
dentalService1.asmx
dentalService1.asmx
Dentists
*****************************use******************************
Introduccin
Ejecutar la aplicacin
1. Abrir el proyecto LabApplication en Visual Studio .NET 2003
Seleccionar los tres proyectos utilizando el Explorador de soluciones. Cada
proyecto se proporciona en sus versiones de Visual Basic .NET y C#.
Seleccionar las bases de datos utilizando el Explorador de soluciones.
2. Generar LabApplication.
3. Abrir Microsoft Internet Explorer y navegar a
http://localhost/BenefitsVB/default.aspx para mostrar la solucin en
Visual Basic .NET y navegar a http://localhost/BenefitsCS/default.aspx para
mostrar la solucin en C#.
La aplicacin Web tiene proteccin; por tanto, se redirecciona a la pgina
login.aspx para iniciar sesin. Esto se establece en el archivo Web.config.
La pgina login.aspx compara los datos de usuario con los nombres y
contraseas de usuario almacenadas en la base de datos coho de SQL
Server.
25
26
Recursos .NET
*****************************use******************************
Introduccin
Objetivo de la leccin
27
Recursos .NET
Cdigo de ejemplo
Comunidades online
Sitios Web
z
www.gotdotnet.com
www.asp.net
msdn.microsoft.com
www.google.com
*****************************use******************************
Recursos
Sitios Web externos. Existen varios sitios Web externos que ofrecen
conocimientos en profundidad sobre el desarrollo de .NET:
El primer sitio, http://www.gotdotnet.com, ofrece informacin detallada
para desarrolladores, ejemplos de cdigo, comunidades .NET y ms.
El segundo sitio, http://www.asp.net, es un sitio Web completamente
dedicado a los desarrolladores de ASP.NET.
28
ndice
Descripcin
26
Descripcin
Descripcin
*****************************use******************************
Introduccin
Objetivos
Pgina de inicio
*****************************use******************************
Introduccin
Esta leccin presenta una introduccin al IDE de Visual Studio .NET. El IDE es
la interfaz de usuario (IU) comn y el conjunto de herramientas que se utilizan
para los distintos tipos de proyectos y lenguajes de programacin soportados
por Visual Studio .NET.
Objetivos de la leccin
Navegador integrado
Soporte de depuracin
Interfaz personalizable
*****************************use******************************
Introduccin
Un IDE
Visual Studio .NET tiene un nico IDE que proporciona un aspecto coherente,
con independencia del lenguaje de programacin que se utilice o el tipo de
aplicacin que se desarrolle. Las caractersticas que antes estaban disponibles
para un nico lenguaje, ahora estn disponibles para todos los lenguajes.
Mltiples lenguajes
C#
J#
Mltiples tipos de
proyectos
Navegador integrado
Soporte de depuracin
Visual Studio .NET est diseado para soportar depuracin desde el cdigo
inicial hasta el despliegue de la aplicacin. El soporte de depuracin incluye
puntos de interrupcin, expresiones break, expresiones watch y la posibilidad
de recorrer el cdigo de instrucciones o procedimientos paso a paso.
Nota Para ms informacin sobre la depuracin, consultar el Mdulo
Seguimiento en las aplicaciones Web Microsoft ASP.NET.
Interfaz personalizable
Pgina de inicio
Pgina de inicio
Proyectos recientes
*****************************use******************************
Introduccin
Cada vez que iniciamos Visual Studio .NET, se muestra la pgina de inicio.
Esta pgina proporciona una ubicacin centralizada para establecer
preferencias, leer noticias sobre productos, acceder a discusiones con otros
desarrolladores y obtener otra informacin que puede utilizarse para iniciarse en
el entorno de Visual Studio .NET.
Podemos visualizar la pgina de inicio en cualquier momento mientras
trabajamos en el entorno de desarrollo.
Proyectos
La carpeta Proyectos muestra enlaces a los ltimos proyectos en los que se
ha trabajado. Esta carpeta permite abrir rpidamente Visual Studio .NET y
cargar todos los archivos relacionados con los proyectos actuales.
Encontrar ejemplos
La carpeta Encontrar ejemplos presenta un motor de bsqueda que busca
cdigo de ejemplo por lenguaje y palabra clave en lnea desde mshelp://MS.VSCC.
Novedades
Titulares
Bsqueda en lnea
Descargas
Alojamiento Web
Mi perfil
*****************************use******************************
Introduccin
Visual Studio .NET proporciona plantillas que soportan la creacin de los tipos
de proyectos ms habituales. Estas plantillas contienen todos los archivos
necesarios y trabajan con nuestro perfil para ajustar el IDE a la configuracin
correcta del proyecto seleccionado.
Estas plantillas nos ayudan a aprovechar mejor el tiempo al permitir que nos
concentremos en agregar funciones al proyecto y no tener que establecer la
infraestructura cada vez que cambiamos de tipo de proyecto.
Soluciones y proyectos
Plantillas de proyectos
10
Descripcin
Aplicacin para
Windows
Biblioteca de clases
Biblioteca de
controles de Windows
Aplicacin Web
ASP.NET
Servicio Web
ASP.NET
Biblioteca de
controles Web
Aplicacin de consola
Servicio de Windows
Proyecto vaco
11
Descripcin
Nuevo proyecto en
carpeta existente
Descripcin
Proyectos de
instalacin e
implementacin
Otros proyectos
12
Los estudiantes
z
Tiempo: 5 minutos
*****************************use******************************
13
Se desea crear un control Web definido por el usuario que pueda ser
utilizado en varias pginas Web.
____________________________________________________________
____________________________________________________________
Se desea crear una aplicacin que se ejecute desde una lnea de comandos.
____________________________________________________________
____________________________________________________________
Se desea crear una clase a cuyos mtodos pueda acceder cualquier
aplicacin Web a travs de Internet.
____________________________________________________________
____________________________________________________________
Se desea crear un servicio Windows que se ejecute de modo continuado, con
independencia de si un usuario ha iniciado sesin o no.
____________________________________________________________
____________________________________________________________
Editor/Navegador
Examinador de objetos
Explorador
de
soluciones
Explorador
de servidores
Lista de tareas
Propiedades
Ayuda dinmica
*****************************use******************************
Introduccin
Editor/navegador
14
15
Hay dos opciones para pantalla del editor: modo Diseo y modo HTML:
Modo Diseo
En modo Diseo, el editor permite mover los controles y los elementos
grficos por la ventana mediante una sencilla operacin de arrastrar y soltar.
Visual Studio .NET proporciona dos esquemas de posicionamiento de
controles para disear pginas Web: FlowLayout y GridLayout. En
FlowLayout, los controles se ubican en la pgina uno a continuacin del
otro, mientras que GridLayout permite posicionar con exactitud cada
control, agregando automticamente etiquetas DHTML (Dynamic Hypertext
Markup Language) a los controles.
Cuando agregamos un control a una pgina Web en modo Diseo, Visual
Studio .NET agrega al formulario Web Form cdigo de soporte y
predetermina las propiedades. A continuacin, podemos cambiar a modo
HTML para mostrar el cdigo y editarlo.
Modo HTML
En modo HTML, Visual Studio .NET destaca nuestro cdigo para que los
distintos elementos, como los nombres de variables y las palabras clave,
sean identificables al instante. La caracterstica de IntelliSense proporciona
sugerencias para la finalizacin automtica y permite generar funciones
simplemente seleccionando desde listas de sintaxis disponibles.
Cuando utilizamos la ventana del editor en modo HTML, aparecen dos
listas desplegables en la parte superior de la ventana: la lista Nombre de
Clase, a la izquierda, y la lista Nombre de Mtodo, a la derecha. La lista
Nombre de Clase muestra todos los controles del formulario asociado. Si
hacemos clic en el nombre de un control de la lista, la lista Nombre de
Mtodo mostrar todos los eventos de ese control. Los eventos son acciones
que puede realizar el control y que pueden ser interpretadas por nuestra
aplicacin. Utilizando conjuntamente las listas Nombre de Clase y
16
Explorador de
soluciones
Hacer clic con el botn derecho en el archivo, proyecto o solucin para ver
las opciones disponibles, incluyendo agregar, generar y editar pginas.
Referencias de proyectos que listan las clases que utiliza la pgina y los
controles Web.
Todas las pginas de cdigo subyacente que contienen la lgica que soporta
los formularios Web Forms.
17
Ayuda dinmica
Propiedades
Lista de tareas
18
Visual Studio .NET agrega automticamente una tarea con smbolos, como
el comentario 'TODO en el cdigo.
La segunda tarea de la siguiente imagen de pantalla ha sido aadida
automticamente por Visual Studio .NET debido a un comentario 'TODO
del cdigo. Para acceder a esta seccin del cdigo, hacemos clic en el
elemento de la Lista de tareas y Visual Studio .NET abrir la pgina referida
en esa lnea de comentario.
Existen varios smbolos (tokens) preestablecidos que pueden utilizarse en el
cdigo y que aadirn automticamente una tarea a la Lista de tareas.
19
Explorador de
servidores
Cuadro de herramientas
Datos
Esta categora contiene objetos que permiten a la aplicacin conectarse y
acceder a datos de una base de datos Microsoft SQL Server y otras bases
de datos.
Web Forms
Esta categora contiene un conjunto de controles de servidor que pueden
agregarse a pginas Web.
Componentes
Esta categora contiene componentes que soportan la infraestructura de
nuestra aplicacin.
HTML
Esta categora contiene un conjunto de controles HTML que pueden
agregarse a la pgina Web. Estos controles pueden ejecutarse tanto en el
lado servidor como en el lado cliente.
20
21
*****************************use******************************
Crear un proyecto de
aplicacin Web
ASP.NET como parte de
la solucin
22
Examinar la ubicacin
de los nuevos archivos
Visualizar las
propiedades del
formulario Web Form
Ayuda dinmica
Explorador de
servidores
Lista de tareas
14. Si la Lista de tareas no est visible, en el men Ver, hacer clic en Mostrar
tareas y clic en Todos para mostrar la ventana Lista de tareas.
15. Insertar las siguientes tareas:
Agregar un nuevo formulario Web Form de ASP.NET
Agregar un nuevo proyecto a la solucin
16. En el men Archivo, hacer clic en Guardar todo.
23
24
Los estudiantes
z
Tiempo
z
5 minutos
*****************************use******************************
25
26
El proceso de desarrollo
*****************************use******************************
Introduccin
Objetivos de la leccin
27
El proceso de desarrollo
El proceso de desarrollo
Crear
Crearuna
unaespecificacin
especificacin
de
diseo
de diseo
Crear
Crearun
un
nuevo
proyecto
nuevo proyecto
Crear
Crearlalainterfaz
interfaz
yyescribir
escribircdigo
cdigo
Probar
Probaryy
depurar
depurar
Generar
Generar
Implementar
Implementar
*****************************use******************************
Introduccin
Visual Studio .NET contiene todo lo necesario para generar una aplicacin Web
ASP.NET de principio a fin.
Crear una aplicacin Web ASP.NET con Visual Studio .NET implica los
siguientes pasos bsicos:
1. Crear una especificacin de diseo
La especificacin de diseo es la gua que utilizaremos cuando creemos una
aplicacin Web. Debemos tomarnos tiempo antes de escribir cdigo para
disear la aplicacin que crearemos. Aunque Visual Studio .NET
proporciona herramientas que nos ayudan a desarrollar rpidamente una
solucin, tener una idea clara de las necesidades del usuario y del conjunto
inicial de caractersticas nos ayudar a ser ms eficaces en nuestro trabajo
de desarrollo. Empezar con una especificacin de diseo tambin nos
ayudar a ahorrar tiempo minimizando el potencial de reescritura de cdigo
debido a una pobre o inexistente especificacin de diseo.
2. Crear un nuevo proyecto
Cuando seleccionamos una nueva plantilla de proyecto, Visual Studio .NET
crea automticamente los archivos y el cdigo predeterminado necesarios
para soportar el proyecto.
Como parte de esta creacin inicial del proyecto, deberamos transferir las
principales tareas de codificacin desde nuestra especificacin de diseo a
la Lista de tareas de Visual Studio .NET. Esta transferencia permite hacer
un seguimiento de nuestro desarrollo contra la especificacin.
3. Crear la interfaz
28
29
Archivo Web.config
*****************************use******************************
Introduccin
Archivos de solucin
Archivos de proyecto
30
Los archivos de proyecto Visual Basic .NET utilizan una extensin .vbproj,
mientras que C# utiliza .csproj. Estas extensiones permiten diferenciar entre
archivos escritos en otros lenguajes compatibles con .NET y facilitan la
inclusin de mltiples proyectos basados en diferentes lenguajes en la misma
solucin.
Los proyectos de aplicaciones Web se crean en una nueva carpeta
\Inetpub\wwwroot. Adems, en IIS, se crea un directorio virtual que apunta a
la carpeta del proyecto.
Archivos de
aplicaciones Web
31
Styles.css
Styles.css es el archivo de hojas de estilo predeterminado para la aplicacin
Web.
Archivo Web.config
Este archivo Web.config contiene opciones de configuracin que el CLR
lee, como polticas de enlace de ensamblados, objetos remoting, etc., y otras
configuraciones que la aplicacin puede leer. Los archivos Web.config
tambin contienen las clases de aplicacin global soportadas por un
proyecto.
Otros archivos
Ensamblado de
proyecto
AssemblyInfo.vb o AssemblyInfo.cs
El archivo AssemblyInfo se utiliza para describir la informacin general del
ensamblado, como la versin y los atributos del mismo.
32
Inetpub
Inetpub
wwwroot
wwwroot
ProjectA
ProjectA
Solution.sln
ProjectA.vbproj
WebForm1.aspx
WebForm1.aspx.vb
Archivos de desarrollo
Archivos de
ensamblado
Generar
ProjectA.dll
*****************************use******************************
Introduccin
Cuando creamos una aplicacin Web ASP.NET, Visual Studio .NET crea dos
carpetas para almacenar los archivos que soportan esa aplicacin. Cuando
compilamos un proyecto, se crea una tercera carpeta para almacenar el archivo
.dll resultante.
Mis documentos
Visual Studio .NET crea una carpeta para la solucin, ProjectA, que contiene el
archivo ProjectA.sln. Este archivo es un mapa de los diversos archivos que
soportan el proyecto.
Tambin podemos crear una solucin en blanco y agregarle proyectos. Si
creamos una solucin en blanco, tendremos una solucin con un nombre
distinto al del proyecto.
Inetpub
33
El Ensamblado
34
*****************************use******************************
C#
35
C#
12. En la Lista de tareas, hacer doble clic en la tarea TODO: Write Hello
World.
Se abre el archivo correcto y el cursor se sita en la ubicacin apropiada del
cdigo.
13. Escribir el siguiente cdigo:
C#
36
C#
Ver el resultado
ndice
Descripcin
12
Descripcin
***************************** use******************************
Introduccin
Objetivos
***************************** use******************************
Introduccin
Objetivos de la leccin
Extensin .aspx
Atributos de pgina
z
Directiva @ Page
Atributos de cuerpo
Atributos de formulario
<%@
<%@ Page
Page Language="vb"
Language="vb" Codebehind="WebForm1.aspx.vb"
Codebehind="WebForm1.aspx.vb"
SmartNavigation="true"%>
SmartNavigation="true"%>
<html>
<html>
<body
<body ms_positioning="GridLayout">
ms_positioning="GridLayout">
<form
<form id="Form1"
id="Form1" method="post"
method="post" runat="server">
runat="server">
</form>
</form>
</body>
</body>
</html>
</html>
***************************** use******************************
Introduccin
Los formularios Web Forms estn formados por una combinacin de HTML,
cdigo y controles que se ejecutan en un servidor Web ejecutando Microsoft
Internet Information Services (IIS). Los formularios Web Forms muestran una
interfaz de usuario que genera HTML y que se enva al navegador, mientras que
el cdigo de soporte y los controles que la componen permanecen en el servidor
Web. Esta divisin entre el interfaz en el cliente y el cdigo en el servidor es
una importante diferencia entre los formularios Web Forms y las pginas Web
tradicionales. Mientras una pgina Web tradicional requiere que todo el cdigo
se enve y se procese en el navegador, los formularios Web Forms nicamente
necesitan enviar al navegador los controles de la interfaz, y el proceso de las
pginas se mantiene en el servidor. Esta divisin entre IU y cdigo aumenta el
nmero de navegadores soportados e incrementa la seguridad y funcionalidad
de la pgina Web.
Extensin .aspx
Atributos de la pgina
Las funciones de un formulario Web Form estn definidas por tres niveles de
atributos. Los atributos de pgina definen las funciones globales, los atributos
de cuerpo definen cmo se mostrar una pgina y los atributos de formulario
definen cmo se procesarn los grupos de controles.
La etiqueta <@Page> define atributos especficos de la pgina que utiliza el
parseador de pginas ASP.NET y el compilador. nicamente podemos incluir
una etiqueta <@ Page> por archivo .aspx. Los siguientes ejemplos son
etiquetas <@ Page> tpicas para Microsoft Visual Basic .NET y para
Microsoft Visual C# .NET:
C#
Language
El atributo Language define el lenguaje en el que est escrito el script de la
pgina Web. Algunos de los valores de este atributo son: vb, c# y JScript.
Pgina Codebehind
El atributo de pgina Codebehind identifica la pgina de cdigo subyacente
que tiene la lgica que soporta el formulario Web Form. Cuando Visual
Studio .NET crea un formulario Web Form, como WebForm1.aspx, tambin
crea una pgina de cdigo subyacente, WebForm1.aspx.vb o
WebForm1.aspx.cs.
Nota Para ms informacin sobre las pginas de cdigo subyacente,
consultar el Mdulo Agregar cdigo a un formulario Web Form con
Microsoft ASP.NET.
SmartNavigation
El atributo SmartNavigation de ASP.NET permite al navegador actualizar
nicamente las secciones del formulario que han cambiado. Las ventajas de
SmartNavigation son que la pantalla no parpadea mientras se actualiza; en
lugar de ello, se mantiene la posicin de desplazamiento y se mantiene la
"ltima pgina" en el historial. Smartnavigation nicamente est
disponible para los usuarios con Microsoft Internet Explorer 5 o superior.
PageLayout
El atributo pageLayout (etiquetado como ms_positioning) determina cmo
se posicionan los controles y el texto en la pgina. Existen dos opciones
para pageLayout:
FlowLayout
En FlowLayout, el texto, las imgenes y los controles fluyen por la
pantalla, dependiendo del ancho de la ventana del navegador.
GridLayout
En GridLayout, los campos de texto, las imgenes y los controles de
una pgina estn fijados por coordinadas absolutas. GridLayout es el
valor de pageLayout predeterminado para Visual Studio .NET.
El siguiente cdigo de ejemplo muestra cmo implementar GridLayout
y situar un cuadro de texto:
<body ms_positioning="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:textbox id="txtField1" style="Z-INDEX: 101;
LEFT: 65px; POSITION: absolute; TOP: 98px"
runat="server" Height="26px" Width="194px">
</asp:textbox>
</form>
</body>
Method
El atributo Method identifica el mtodo para enviar valores de control de
retorno al servidor. Las opciones de este atributo son:
Post
Los datos se pasan en pares nombre/valor dentro del cuerpo de la
peticin HTTP (Hypertext Transfer Protocol).
Get
Los datos se pasan en una cadena de consulta.
Runat
Una de las principales caractersticas de un formulario Web Form es que los
controles se ejecutan en el servidor. El atributo runat="server" hace que el
formulario publique informacin de control de retorno a la pgina ASP.NET
en el servidor donde se ejecuta el cdigo de soporte. Si el atributo runat no
est establecido en "server", el formulario funciona como un formulario
HTML normal.
Ejemplo de C#
***************************** use******************************
Introduccin
Aplicaciones Web
nuevas
Actualizar pginas
HTML
10
***************************** use******************************
11
12
Qu es un control de servidor?
***************************** use******************************
Introduccin
Objetivos de la leccin
13
Qu es un control de servidor?
<asp:Button
<asp:Button id="Button1"
id="Button1" runat="server"
runat="server"
Text="Submit"/>
Text="Submit"/>
Runat="server"
z
***************************** use******************************
Introduccin
Runat=server
Funcionalidad incluida
14
Modelo de objetos
comn
Cuando un usuario con Internet Explorer 6 accede a esta pgina, el CLR crea el
siguiente cdigo HTML personalizado para Internet Explorer 6:
<input name="TextBox1" type="text" value="Introduzca su nombre
de usuario" id="TextBox1" style="height:25px;width:238px" />
15
Controles intrnsecos
Controles de validacin
Controles ricos
Controles List-bound
***************************** use******************************
Introduccin
Controles de servidor
HTML
Controles de servidor
Web
Controles intrnsecos
Los controles intrnsecos concuerdan con los sencillos elementos HTML,
como botones o cajas de listas. Utilizamos estos controles del mismo modo
que utilizamos los controles de servidor HTML.
Controles de validacin
Los controles de validacin incorporan lgica que permite verificar la
entrada de datos de un usuario. Para probar la entrada de un usuario,
adjuntamos un control de validacin al control de entrada y especificamos
las condiciones de entrada de datos de usuario correctas.
16
Ejemplo de controles
equivalentes
17
***************************** use******************************
Introduccin
Uno de los retos de los sitios Web es resolver el almacenamiento del estado de
los controles (configuracin o entrada de datos del usuario) en una pgina Web
mientras el cdigo HTML viaja entre el cliente y el servidor. Como con
cualquier tecnologa basada en HTTP, los formularios Web Forms no tienen
estado, lo que significa que el servidor no conserva ninguna informacin sobre
las peticiones anteriores del cliente.
Los formularios Web Forms ASP.NET gestionan este problema de
almacenamiento del estado del control de servidor Web agregando un control
oculto denominado _VIEWSTATE que registra el estado de los controles en el
formulario Web Form. Concretamente, _VIEWSTATE se aade al formulario
del lado del servidor indicado por la etiqueta <Form runat="server">, y
nicamente registra el estado de los controles en esta seccin. Mientras la
pgina viaja desde el cliente al servidor, el estado del control de servidor Web
se almacena con la pgina y puede actualizarse en cualquier extremo de la
transaccin (en el cliente o el servidor).
Como el estado de la pgina Web se guarda dentro del formulario del servidor,
la pgina Web puede ser aleatoriamente enrutada en una granja de servidores
Web y no necesita volver al mismo servidor. La ventaja del proceso
_VIEWSTATE es que el programador puede concentrarse en el diseo de la
pgina y no necesita generar la infraestructura necesaria para realizar el
seguimiento del estado de la misma.
18
Control oculto
Deshabilitar y habilitar
ViewState
19
Utilizar SmartNavigation
***************************** use******************************
20
Uso de SmartNavigation
C#
21
<input
<input type="text"
type="text" id="txtName"
id="txtName"
runat="server"
runat="server" />
/>
***************************** use******************************
Introduccin
Ejemplo
22
***************************** use******************************
Introduccin
Controles de servidor
Web intrnsecos
Control HTML
equivalente
<asp:button>
<input type=submit>
<asp:checkbox>
<input type=checkbox>
<asp:hyperlink>
<asp:image>
<img src="">
<asp:imagebutton>
<input type=image>
<asp linkButton>
Ninguno
23
(continuacin)
Controles de validacin
Control de
servidor Web
Control HTML
equivalente
<asp:label>
<span> </span>
<asp:listbox>
<select size="5">
</select>
<asp:panel>
<div> </div>
<asp:radiobutton>
<input type=radiobutton>
<asp:table>
<table> </table>
<asp:textbox>
<input type=text>
Funcin
CompareValidator
CustomValidator
RangeValidator
RegularExpressionValidator
RequiredFieldValidator
ValidationSummary
Funcin
AdRotator
Calendar
24
Controles enlazados a
listas
Los controles enlazados a listas pueden mostrar datos desde una fuente de
datos. La siguiente tabla muestra algunos de los controles de lista que se
utilizan habitualmente.
Control
Funcin
CheckBoxList
Repeater
DataList
DataGrid
DropDownList
Listbox
RadioButtonList
25
Los estudiantes:
z
Tiempo: 5 minutos
***************************** use******************************
26
Utilizar controles de
servidor Web si:
Se prefiere un modelo de
objetos como HTML
Se prefiere un modelo de
programacin Visual Basic
Se necesitan funcionalidades
especficas como un calendario
o rotacin de publicidad
El ancho de banda no es un
problema
***************************** use******************************
Introduccin
Controles de servidor
HTML
Controles de servidor
Web
27
El control necesita ejecutarse tanto utilizando scripting del lado del cliente
como del lado del servidor. Podemos escribir un script del lado del cliente y
trabajar con un control HTML normal ya que los controles estn visibles en
el cliente. Al mismo tiempo, podemos tener cdigo del lado del servidor, ya
que tambin es un control de servidor.
Se est creando una pgina Web que puede ser visualizada en diversos
navegadores. Como la lgica de los controles de servidor Web puede crear
cdigo HTML adaptado a las caractersticas disponibles en el navegador del
cliente, podemos escribir para los navegadores ms recientes sin necesidad
de preocuparse de que los errores de navegador no permitan a los usuarios
menos actualizados acceder a todas las funciones de la pgina Web.
28
***************************** use******************************
ID
Text
TextBox
txtName
Name
Button
cmdSubmit
Submit
Label
lblMessage
Message
29
Cambiar el navegador
de destino
Cambiar la presentacin
de la pgina
Agregar un control
Calendar
Benefits
Benefits
Home
Home Page
Page
Coho
Winery
Default.aspx
Default.aspx
Menu
Menu
Component
Component
Registration
Registration
Register.aspx
Register.aspx
Header.ascx
Header.ascx
Web.
config
Class1.vb
Class1.vb or
or Class1.cs
Class1.cs
Life
Life Insurance
Insurance
Retirement
Retirement
Life.aspx
Life.aspx
Lab Web
Application
Page
Page Header
Header
Retirement.aspx
Retirement.aspx
Prospectus
Prospectus
Prospectus.aspx
Prospectus.aspx
Medical
Medical
Medical.aspx
Medical.aspx
Doctors
Doctors
Doctors.aspx
Doctors.aspx
XML
Files
Doctors
ASPState
tempdb
Dental
Dental
Dental.aspx
Dental.aspx
User
User Control
namedate.ascx
namedate.ascx
XML
XML Web
Web
Service
Service
dentalService1.asmx
dentalService1.asmx
Dentists
******************************
Objetivos
Requisitos previos
Escenario
Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios del
curso, crearemos un sitio Web que permita a los empleados seleccionar y
establecer los beneficios que elijan.
En el Laboratorio 2, Uso de Microsoft Visual Studio .NET, creamos una
solucin Visual Studio .NET y un proyecto de aplicacin Web para al
aplicacin Web Benefits.
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de
aplicacin Web denominado Benefits y un proyecto de biblioteca de clases
BenefitsList. Estos proyecto pueden crearse utilizando Visual Basic .NET o
Visual C# .NET.
Si no se han creado estos proyectos, seguir los siguientes pasos:
Crear la solucin LabApplication
Importante Realizar este procedimiento nicamente si no se ha creado un
archivo de solucin LabApplication.
1. Utilizando Visual Studio .NET, crear una nueva solucin en blanco
denominada LabApplication:
En el men Archivo, seleccionar Nuevo, y hacer clic en Solucin en
blanco.
En el cuadro de dilogo Nuevo proyecto, escribir LabApplication en el
cuadro de texto Nombre y hacer clic en Aceptar.
Crear el proyecto Benefits
Importante Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto Benefits, o si se ha eliminado.
1. Crear un nuevo proyecto de aplicacin Web ASP.NET, denominado
BenefitsVB o BenefitsCS, en la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic o Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Aplicacin Web ASP.NET,
establecer la Ubicacin en http://localhost/BenefitsVB para un
proyecto Visual Basic .NET o en http://localhost/BenefitsCS para un
proyecto Visual C#.
d. Hacer clic en Agregar a Solucin, y hacer clic en Aceptar.
Precaucin Cuando se agregan proyectos a la solucin, es importante el
uso de maysculas en el nombre del proyecto. Probablemente, utilizaremos
algunos formularios Web Forms ya generados en ste y en otros
laboratorios, por ello, debemos verificar que hemos escrito en maysculas el
nombre del proyecto Benefits.
Ir a la carpeta VB\Starter\BenefitsVB.
Ir a la carpeta CS\Starter\BenefitsCS.
Estas carpetas se pueden encontrar dentro del fichero labs03.zip.
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente Benefits, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de sobrescribir o cargar de nuevo los archivos.
Crear la biblioteca de clases BenefitsList
Importante Realizar estos pasos nicamente si no se ha creado anteriormente
un proyecto BenefitsList, o si se ha eliminado.
Crear un proyecto de biblioteca de clases
Ir a la carpeta VB\Starter\BenefitsListVB.
Ir a la carpeta CS\Starter\BenefitsListCS.
Estas carpetas se pueden encontrar dentro del fichero labs03.zip.
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de esta carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de sobrescribir o cargar de nuevo los archivos.
Crear una referencia al componente BenefitsList en el proyecto Benefits
1. En el proyecto Benefits de la solucin LabApplication, completar los
siguientes pasos para agregar una referencia al componente BenefitsList
que acabamos de crear:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB o
BenefitsCS en el Explorador de soluciones y hacer clic en Agregar
referencia.
b. En el cuadro de dilogo Agregar referencia, en la pestaa Proyectos,
hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.
c. En la lista Componentes seleccionados, seleccionar el componente
BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar.
El componente se agrega a la carpeta Referencias del Explorador de
soluciones.
Ejercicio 1
Crear el formulario Web Form Default.aspx
En este ejercicio, crearemos un nuevo formulario Web Form denominado
default.aspx. A continuacin, agregaremos un control de usuario, un control
enlazado a lista, un control Button, y un control Label a la pgina default.aspx.
Finalmente, estableceremos atributos del control enlazado a lista para mostrar
una lista esttica de informacin.
Colocar controles en un formulario Web Form
1. Crear un nuevo Web Form denominado default.aspx. Este formulario Web
Form ser la pgina de entrada principal de nuestra aplicacin Web. Para
crear el formulario Web Form:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB o
BenefitsCS, seleccionar Agregar y hacer clic en Agregar Web Form.
b. En el cuadro de dilogo Agregar nuevo elemento, escribir default.aspx
en el campo Nombre y hacer clic en Abrir.
2. Desde el Explorador de soluciones, utilizar una operacin de arrastrar y
soltar para ubicar el archivo header.ascx desde el Explorador de soluciones
a la parte superior del formulario Web Form.
Nota Estudiaremos con mayor profundidad los controles de usuario en el
Mdulo Crear controles de usuario.
3. Desde el Cuadro de herramientas, arrastrar un control CheckBoxList, un
control Button, y un control Label al formulario Web Form. El formulario
Web Form debera tener un aspecto similar a la siguiente ilustracin.
ID
Text
CheckBoxList
chkListBenefits
Ninguno
Button
cmdSubmit
Submit
Label
lblSelections
Selected items:
Valor
First Item
First Item
Second Item
Second Item
Third Item
Third Item
Ejercicio 2
Crear el formulario Web Form Life.aspx
En este ejercicio, crearemos la interfaz de usuario de la pgina life.aspx. Esta
pgina implementa el beneficio de seguro de vida de la compaa.
Agregar controles a la pgina life.aspx
1. Crear un nuevo formulario Web Form denominado life.aspx. Para crear el
formulario Web Form:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB o
BenefitsCS, seleccionar Agregar y hacer clic en Agregar Web Form.
b. En el cuadro de dilogo Agregar nuevo elemento, escribir life.aspx en
el campo Nombre y hacer clic en Abrir.
2. Ubicar un control Calendar en el formulario Web Form.
3. Hacer clic con el botn derecho en el control Calendar en la vista Diseo y
seleccionar Formato automtico para abrir el cuadro de dilogo Formato
automtico de Calendar.
4. Hacer clic en Colorful 1 en la lista Seleccionar un esquema, y hacer clic
en Aceptar.
5. Situar el control de usuario header.ascx, tres controles TextBox, dos
controles CheckBox, un control Button, y cinco controles Label en la
pgina.
ID
Texto
txtName
ninguno
txtBirth
ninguno
Cuadro de texto
Coverage
txtCoverage
ninguno
Casilla de verificacin
Short-term disability
chkShortTerm
Short-term disability
Casilla de verificacin
Long-term disability
chkLongTerm
Long-term disability
Botn Save
cmdSave
Save
Label1
default
Life Insurance
Application
Label2
default
Label3
default
Name:
Label4
default
Birth Date:
Label5
default
Coverage:
ndice
Descripcin
22
Descripcin
***************************** use******************************
Introduccin
En este mdulo, estudiaremos los distintos mtodos que pueden utilizarse para
agregar cdigo a nuestra aplicacin Web con Microsoft ASP.NET. Tambin
estudiaremos los procedimientos de evento para los controles de servidor Web,
cmo utilizarlos y el orden en que funcionan. Estudiaremos el uso de las pginas
de cdigo subyacente, que son el mtodo preferido de Microsoft Visual Studio
.NET para agregar cdigo a pginas Web. Finamente, estudiaremos cmo se
utilizan los eventos de pgina, en particular al evento Page_Load.
Objetivos
***************************** use******************************
Introduccin
En esta leccin, estudiaremos cmo implementar cdigo con Visual Studio .NET.
Tambin estudiaremos cmo se utilizan las pginas de cdigo subyacente y en
qu se diferencian del cdigo en lnea.
Objetivos de la leccin
***************************** use******************************
Implementar cdigo
<HTML>
<HTML>
<asp:Button
<asp:Button id="btn"
id="btn" runat="server"/>
runat="server"/>
</HTML>
</HTML>
<SCRIPT
Language="vb"
<SCRIPT Language="vb" runat="server">
runat="server">
Sub
Sub btn_Click(s
btn_Click(s As
As Object,
Object, ee As
As EventArgs)
EventArgs) Handles
Handles btn.Click
btn.Click
...
...
End
End Sub
Sub
</SCRIPT>
</SCRIPT>
<HTML>
<HTML>
<asp:Button
<asp:Button id="btn"
id="btn" runat="server"/>
runat="server"/>
</HTML>
</HTML>
<SCRIPT
Language="c#"
<SCRIPT Language="c#" runat="server">
runat="server">
private
private void
void btn_Click(object
btn_Click(object sender,
sender, System.EventArgs
System.EventArgs e)
e)
{{
.. .. ..
}}
</SCRIPT>
</SCRIPT>
***************************** use******************************
Introduccin
Cdigo en lnea
<HTML>
<asp:Button id="btn" runat="server"/>
...
</HTML>
<SCRIPT Language="vb" runat="server">
Sub btn_Click(s As Object, e As EventArgs) _
Handles btn.Click
...
End Sub
</SCRIPT>
C#
Un archivo
Archivos distintos
cdigo
<tags>
cdigo
Form1.aspx
Form1.aspx.vb
o Form1.aspx.cs
<tags>
Form1.aspx
***************************** use******************************
Introduccin
Page1.aspx.cs
public class WebForm1
{
private void cmd1_Click()
{
}
}
***************************** use******************************
Introduccin
Para que las pginas de cdigo subyacente funcionen, cada pgina .aspx debe
estar asociada a una pgina de cdigo subyacente, y esa pgina de cdigo
subyacente debe estar compilada antes de que la informacin se enve de vuelta a
un navegador cliente que la solicite.
Aunque cada pgina Web Form est formada por dos archivos distintos (la
pgina .aspx y la pgina de cdigo subyacente), ambos archivos forman una
nica unidad cuando se ejecuta la aplicacin Web. La pgina de cdigo
subyacente puede ser precompilada por Visual Studio .NET cuando generamos el
proyecto de aplicacin Web, o puede ser compilada just-in-time (JIT) la primera
vez que un usuario accede a la pgina.
C#
Compilacin JIT
Cuando una pgina est compilada JIT, las pginas de cdigo subyacente se
compilan la primera vez que un cliente solicita la pgina .aspx. Tras la primera
peticin, las siguientes utilizan el archivo compilado existente. Por tanto, la
primera peticin de una pgina dura ms, pero las siguientes peticiones son ms
rpidas.
Si se desea utilizar la compilacin JIT para una pgina, debera utilizarse el
atributo Src de la directiva @ Page.
Nota La compilacin JIT mantendr el tamao del proyecto pequeo y permitir
actualizaciones de cdigo sin recompilar todo el sitio.
Ejecucin
Precompilacin
***************************** use******************************
Introduccin
Objetivos de la leccin
10
***************************** use******************************
Introduccin
Definicin
Ejemplo de un
procedimiento de
evento
11
***************************** use******************************
Introduccin
Ejecutar la demostracin
1. En Visual Studio .NET, abrir la pgina eventorderstart.aspx en el proyecto
Demo04VB o Demo04CS que se pueden encontrar dentro del fichero
demos04.zip.
2. Visualizar la pgina en el navegador. No es necesario generar antes el
proyecto.
3. Hacer clic en los controles de la pgina. Cada control tiene un procedimiento
de evento en el lado del cliente que enva una cadena cuando se ejecuta.
4. Hacer clic en Save. Esto enva el formulario y har que se ejecuten todos los
procedimientos de evento en el lado del servidor.
5. En el navegador, visualizar el cdigo fuente de la pgina. Slo est visible el
cdigo para los procedimientos de evento en el lado del cliente.
6. Cerrar la vista de cdigo fuente de la pgina.
7. En Visual Studio .NET, abrir la pgina en la vista HTML. Hay cdigo tanto
para procedimientos de evento en el lado del cliente como en el lado del
servidor.
12
Pginas
.HTM
***************************** use******************************
Introduccin
Procedimientos de
evento en el lado del
cliente
Usos de los
procedimientos de
evento en el lado del
cliente
Los procedimientos de evento en el lado del cliente resultan tiles para eventos
que deseamos que ocurran inmediatamente porque no requieren un viaje de ida y
vuelta al servidor Web (envo de informacin al servidor Web y espera de una
respuesta). Por ejemplo, es posible validar informacin en un cuadro de texto
antes de enviarla al servidor. Podemos utilizar scripts en el lado del cliente para
validar la informacin rpida y eficazmente antes de enviar la informacin del
usuario al servidor Web para continuar su proceso.
Especificar
procedimientos de
evento en el lado del
cliente
13
.Pginas
.ASPX
***************************** use******************************
Introduccin
Procedimientos de
evento en el lado del
servidor
Los procedimientos de evento en el lado del servidor estn formados por cdigo
compilado que reside en el servidor Web. Los procedimientos de evento en el
lado del servidor pueden utilizarse para gestionar eventos que son generados
desde los controles de servidor Web y HTML. Los procedimientos de evento en
el lado del servidor tienen acceso a recursos del servidor que normalmente no
estn disponibles para los procedimientos de evento en el lado del cliente.
Para especificar un procedimiento de evento en el lado del servidor, se utiliza el
atributo runat="server" en la etiqueta script, como muestra el siguiente cdigo:
C#
Soporte de eventos
14
***************************** use******************************
Introduccin
15
Protected
Protected WithEvents
WithEvents cmd1
cmd1 As
As System.Web.UI.WebControls.Button
System.Web.UI.WebControls.Button
Private
Private Sub
Sub cmd1_Click(ByVal
cmd1_Click(ByVal ss As
As System.Object,
System.Object, __
ByVal
ByVal ee As
As System.EventArgs)
System.EventArgs) Handles
Handles cmd1.Click
cmd1.Click
protected
protected System.Web.UI.WebControls.Button
System.Web.UI.WebControls.Button cmd1;
cmd1;
private
private void
void InitializeComponent()
InitializeComponent()
{{
this.cmd1.Click
this.cmd1.Click +=
+= new
new System.EventHandler(this.cmd1_Click);
System.EventHandler(this.cmd1_Click);
this.Load
this.Load +=
+= new
new System.EventHandler(this.Page_Load);
System.EventHandler(this.Page_Load);
}}
private
private void
void cmd1_Click(object
cmd1_Click(object s,
s, System.EventArgs
System.EventArgs e)
e)
***************************** use******************************
Introduccin
Crear un procedimiento
de evento en el lado del
servidor
Cuando hacemos doble clic en un control en Visual Studio .NET, Visual Studio
.NET declara una variable (con el mismo nombre que el atributo id del control) y
crea una plantilla para el procedimiento de evento. Cuando utilizamos
Visual Basic .NET, Visual Studio .NET tambin agrega la palabra clave
Handles, que adjunta el procedimiento de evento al control. La palabra clave
Handles permite crear mltiples procedimientos de evento a un nico evento.
Nota De modo predeterminado, Visual Studio .NET utiliza la palabra clave
Handles debido a que el atributo AutoEventWireup de la directiva @ Page est
establecido a false. Si este atributo est establecido a true, los controles se
enlazan a procedimientos de evento utilizando nombres especficos, que es el
modo en que se gestionan los procedimientos de evento en Visual Basic 6.0.
El siguiente cdigo HTML muestra un formulario Web Form que tiene un nico
botn con un atributo id igual a cmd1; el evento click del botn se gestionar en
el servidor:
<form id="form1" method="post" runat="server">
<asp:Button id="cmd1" runat="server"/>
</form>
16
Crear un procedimiento
de evento en el lado del
servidor in C#
17
18
Generar y examinar
***************************** use******************************
Introduccin
Ejecutar la prctica
1. En Visual Studio .NET, agregar un nuevo formulario Web Form denominado
events.aspx al proyecto Mod05VB o Mod05CS, en la solucin 2310Demos.
2. Abrir la pgina events.aspx.
3. Ubicar un control Web Form Button y uno Label en el formulario.
Se asigna a los controles un ID predeterminado que podemos ver y modificar
en la ventana Propiedades.
4. En la vista Diseo, hacer doble clic en el control Button para abrir la pgina
de cdigo subyacente y crear un procedimiento de evento Click.
En la pgina de cdigo subyacente, ver la variable declarada y la plantilla de
procedimiento creada por Visual Studio .NET.
5. Introducir el siguiente cdigo en el procedimiento de evento Click:
Visual Basic .NET
C#
19
C#
20
***************************** use******************************
Introduccin
Cuando el usuario hace clic en el botn, podemos leer el texto que el usuario ha
escrito en el cuadro de texto. El siguiente cdigo asigna la variable de cadena
strGreeting a una concatenacin del texto Hello y el texto del cuadro de texto
txtName:
Visual Basic .NET
C#
Envo de informacin de
un control de servidor
Web
21
El siguiente cdigo en el lado del servidor asigna la propiedad Text del control
de servidor Web lblGreeting a una cadena de texto:
Visual Basic .NET
C#
22
***************************** use******************************
Introduccin
Objetivos de la leccin
23
Page_Load
Page_Load
Eventos de cambio
Textbox1_Changed
Textbox1_Changed
Eventos de acci
accin
Button1_Click
Button1_Click
Page_Unload
Page_Unload
La pgina se gestiona
***************************** use******************************
Introduccin
24
C#
25
***************************** use******************************
Introduccin
La primera vez que un usuario solicita una pgina del servidor, la verificacin
de Page.IsPostBack del evento Page_Load se realiza satisfactoriamente y se
ejecuta el cdigo del bloque. En este ejemplo, el cdigo rellena un cuadro de
lista.
El servidor puede determinar que sta es una pgina que ha sido enviada de
retorno por s misma, y por ello, la verificacin de Page.IsPostBack del
evento Page_Load falla y el cdigo del bloque no se ejecuta.
26
***************************** use******************************
Introduccin
Demo04VB\eventorderFinal.aspx.
C#
Demo04CS\eventorderFinal.aspx.
Estas pginas y sus correspondientes proyectos se pueden encontrar dentro del
fichero demos04.zip.
27
Ejecutar la demostracin
1. En Visual Studio .NET, visualizar la pgina eventorderstart.aspx del proyecto
Demo04VB o Demo04CS en el navegador.
Escribir un nombre en el campo Name, hacer clic en un valor en el cuadro de
lista Profession, seleccionar la casilla de verificacin y hacer clic en Save.
La pgina tiene procedimientos de evento en el lado del cliente y en el lado
del servidor para el cuadro de texto, el cuadro de lista, la casilla de
verificacin, el botn y la pgina.
2. En Visual Studio .NET, editar la pgina en la vista HTML y cambiar la casilla
de verificacin a un control de servidor Web, agregando un atributo Text,
como muestra el siguiente cdigo:
<asp:checkbox onclick="checkClick()"
onserverclick="checkServerClick"
onserverchange="checkServerChange"
runat="server"
id="Checkbox1"
Text="Certified Professional"/>
28
C#
29
Los estudiantes:
z
Tiempo: 5 minutos
***************************** use******************************
Introduccin
____________________________________________________________
____________________________________________________________
30
_____________________________________________________________
_____________________________________________________________
Seleccionar la fecha de inicio, la fecha de finalizacin y hacer clic en Submit.
_____________________________________________________________
_____________________________________________________________
31
private
private void
void Page_Load(object
Page_Load(object sender,
sender, System.EventArgs
System.EventArgs e)
e)
{{ if
if (!Page.IsPostBack)
(!Page.IsPostBack)
{{
//
// executes
executes only
only on
on initial
initial page
page load
load
}}
//this
//this code
code executes
executes on
on every
every request
request
}}
Private
Private Sub
Sub Page_Load(ByVal
Page_Load(ByVal ss As
As System.Object,
System.Object, __
ByVal
ByVal ee As
As System.EventArgs)
System.EventArgs) Handles
Handles MyBase.Load
MyBase.Load
If
If Not
Not Page.IsPostBack
Page.IsPostBack Then
Then
'executes
'executes only
only on
on initial
initial page
page load
load
End
End If
If
'this
'this code
code executes
executes on
on every
every request
request
End
End Sub
Sub
z
***************************** use******************************
Introduccin
Uso de Page.IsPostBack
Debido a que el evento Page_Load se ejecuta con cada peticin de una pgina,
todo el cdigo del evento Page_Load se ejecutar cada vez que la pgina sea
solicitada. Sin embargo, cuando utilizamos eventos postback, es posible que no
deseemos que se ejecute nuevamente todo el cdigo. Si ste es el caso, podemos
utilizar la propiedad Page.IsPostBack para controlar qu cdigo se ejecuta
nicamente cuando la pgina se solicita por primera vez, como muestra el
siguiente cdigo:
C#
32
<asp:DropDownList
<asp:DropDownList id="lstOccupation"
id="lstOccupation"
autoPostBack="True"
autoPostBack="True" runat="server"
runat="server" >>
You
You selected:
selected: <asp:Label
<asp:Label id="lblSelectedValue"
id="lblSelectedValue"
Text="<%#
Text="<%# lstOccupation.SelectedItem.Text
lstOccupation.SelectedItem.Text %>"
%>"
runat="server"
/>
runat="server" />
Enlace de datos
private
private void
void Page_Load(object
Page_Load(object sender,
sender, System.EventArgs
System.EventArgs e)
e)
{{
lblSelectedValue.DataBind();
lblSelectedValue.DataBind();
}}
Sub
Sub Page_Load(s
Page_Load(s As
As Object,
Object, ee As
As EventArgs)
EventArgs) Handles
Handles MyBase.Load
MyBase.Load
lblSelectedValue.DataBind()
lblSelectedValue.DataBind()
End
End Sub
Sub
***************************** use******************************
Introduccin
C#
33
34
***************************** use******************************
Introduccin
Esta demostracin puede realizarse utilizando los archivos del proyecto Visual
Basic .NET o del proyecto Visual C#.
En esta demostracin, veremos cmo vincular controles.
El cdigo completo para esta demostracin se encuentra en la pgina:
Demo04VB\binding.aspx.
C#
Demo04CS\binding.aspx.
Estas pginas y sus correspondientes proyectos se pueden encontrar dentro del
fichero demos04.zip.
Ejecutar la demostracin
1. En Visual Studio .NET, editar la pgina beforebinding.aspx del proyecto
Mod05. Contiene un control DropDownList y un control Label. Visualizar el
cdigo HTML de la pgina. Observar el atributo AutoPostBack de
DropDownList.
2. Vincular el control Label al control DropDownList estableciendo su atributo
Text, como muestra el siguiente cdigo de ejemplo:
<asp:label id="lblListValue"
Text="<%# lstTitle.SelectedItem.Text %>" runat="server"/>
35
C#
Benefits
Benefits
Home
Home Page
Page
Coho
Winery
Default.aspx
Default.aspx
Menu
Menu
Component
Component
Registration
Registration
Register.aspx
Register.aspx
Header.ascx
Header.ascx
Web.
config
Class1.vb
Class1.vb or
or Class1.cs
Class1.cs
Life
Life Insurance
Insurance
Retirement
Retirement
Life.aspx
Life.aspx
Lab Web
Application
Page
Page Header
Header
Retirement.aspx
Retirement.aspx
Prospectus
Prospectus
Prospectus.aspx
Prospectus.aspx
Medical
Medical
Medical.aspx
Medical.aspx
Doctors
Doctors
Doctors.aspx
Doctors.aspx
XML
Files
tempdb
Dental
Dental
Dental.aspx
Dental.aspx
User
User Control
namedate.ascx
namedate.ascx
Doctors
ASPState
XML
XML Web
Web
Service
Service
dentalService1.asmx
dentalService1.asmx
Dentists
***************************** ******************************
Objetivos
Nota Este laboratorio se centra en los conceptos de este mdulo. Por ello,
podra no cumplir las recomendaciones de seguridad de Microsoft.
Requisitos previos
Escenario
Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios del
curso, crearemos un sitio Web que permita a los empleados seleccionar y
establecer los beneficios que elijan.
En el Laboratorio 3, Generar un componente Microsoft Visual Studio .NET,
creamos un componente que devolva una lista de todos los beneficios que
ofreca la compaa. En este laboratorio, invocaremos ese componente desde la
pgina default.aspx del sitio Web de la compaa, mostraremos la informacin
en un control CheckBoxList, e implementaremos el botn Submit en el
formulario para mostrar los beneficios seleccionados.
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de
aplicacin Web denominado Benefits y un proyecto de biblioteca de clases
BenefitsList. Estos proyecto pueden crearse utilizando Visual Basic .NET o
Visual C# .NET.
Si no se han creado estos proyectos, seguir los siguientes pasos:
Crear la solucin LabApplication
Importante Realizar este procedimiento nicamente si no se ha creado un
archivo de solucin LabApplication .
1. Utilizando Visual Studio .NET, crear una nueva solucin en blanco
denominada LabApplication :
En el men Archivo, seleccionar Nuevo, y hacer clic en Solucin en
blanco.
En el cuadro de dilogo Nuevo proyecto, escribir LabApplication en
el cuadro de texto Nombre y hacer clic en Aceptar.
Crear el proyecto Benefits
Importante Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto Benefits, o si se ha eliminado.
1. Crear un nuevo proyecto de aplicacin Web ASP.NET, denominado
BenefitsVB o BenefitsCS, en la solucin LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic o Proyectos de Visual C#.
c. En la lista Plantillas, hacer clic en Aplicacin Web ASP.NET,
establecer la Ubicacin en http://localhost/BenefitsVB para un
proyecto Visual Basic .NET o en http://localhost/BenefitsCS para un
proyecto Visual C#.
d. Hacer clic en Agregar a Solucin, y hacer clic en Aceptar.
Precaucin Cuando se agregan proyectos a la solucin, es importante el
uso de maysculas en el nombre del proyecto. Probablemente, utilizaremos
algunos formularios Web Forms ya generados en ste y en otros
laboratorios, y por ello, debemos verificar que hemos escrito en maysculas
el nombre del proyecto Benefits.
Ir a la carpeta VB\Starter\BenefitsListVB.
Ir a la carpeta CS\Starter\BenefitsListCS.
Estas carpetas se pueden encontrar dentro del fichero labs04.zip.
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de esta carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o cargar de nuevo los
archivos.
Ejercicio 1
Crear un procedimiento de evento Page_Load
En este ejercicio, crearemos el procedimiento de evento Page_Load para la
pgina default.aspx. En el procedimiento de evento Page_Load, agregaremos
cdigo para leer la lista de beneficios del componente BenefitsListVB o
BenefitsListCS. A continuacin, mostraremos los beneficios en un control
CheckBoxList.
C#
C#
Dim bi As BenefitsListVB.Benefits.BenefitInfo
C#
8. Para cada elemento de la matriz, generar una cadena del siguiente formato:
<a href=item.strPage> item.strName </a>
C#
foreach (BenefitsListCS.Benefits.BenefitInfo bi
in clBenefits.GetBenefitsList())
{
chkListBenefits.Items.Add("<a href=" + bi.strPage +
">" + bi.strName + "</a>");
}
C#
Ejercicio 2
Crear un procedimiento de evento Click
En este ejercicio, crearemos un procedimiento de evento Click para el botn
Submit de la pgina default.aspx. Cuando el usuario hace clic en Submit, el
procedimiento de evento lee la lista de beneficios y enva los beneficios
seleccionados de la lista en una etiqueta en la pgina default.aspx.
Dim li As ListItem
For Each li In chkListBenefits.Items
If li.Selected Then
lblSelections.Text &= ", " & li.Value
End If
Next
C#
C#
Benefits
Benefits
Home
Home Page
Page
Coho
Winery
Default.aspx
Default.aspx
Menu
Menu
Component
Component
Registration
Registration
Register.aspx
Register.aspx
Header.ascx
Header.ascx
Retirement
Retirement
Life.aspx
Life.aspx
Retirement.aspx
Retirement.aspx
Prospectus
Prospectus
Prospectus.aspx
Prospectus.aspx
Medical
Medical
Medical.aspx
Medical.aspx
Doctors
Doctors
Doctors.aspx
Doctors.aspx
XML
Files
ASPState
Web.
config
Class1.vb
Class1.vb or
or Class1.cs
Class1.cs
Life
Life Insurance
Insurance
Lab Web
Application
Page
Page Header
Header
tempdb
Dental
Dental
Dental.aspx
Dental.aspx
User
User Control
namedate.ascx
namedate.ascx
XML
XML Web
Web
Service
Service
dentalService1.asmx
dentalService1.asmx
Doctors
Dentists
***************************** use******************************
Objetivos
Requisitos previos
Escenario
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList. Si
no se han creado estos proyectos, realizar los siguientes pasos:
Crear la solucin LabApplication
Importante Realizar este procedimiento nicamente si no se ha creado un
archivo de solucin LabApplication.
1. Utilizando Visual Studio .NET, crear una nueva solucin en blanco
denominada LabApplication:
a. En el men Archivo, seleccionar Nuevo, y hacer clic en Solucin en
blanco.
a. En el cuadro de dilogo Nuevo proyecto, escribir LabApplication en el
cuadro de texto Nombre y hacer clic en Aceptar.
Crear el proyecto Benefits
Importante Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto Benefits t, o si se ha eliminado el proyecto Benefits
siguiendo los pasos del Apndice A, Recuperacin del laboratorio.
Crear un nuevo proyecto de aplicacin Web ASP.NET, denominado
BenefitsVB o BenefitsCS, en la solucin LabApplication:
En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic o Proyectos de Visual C#.
En la lista Plantillas, hacer clic en Aplicacin Web ASP.NET,
establecer la Ubicacin en http://localhost/BenefitsVB para un
proyecto Visual Basic .NET o en http://localhost/BenefitsCS para un
proyecto Visual C#.
Hacer clic en Agregar a Solucin, y hacer clic en Aceptar.
Precaucin Cuando se agregan proyectos a la solucin, es importante el uso de
maysculas en el nombre del proyecto. Probablemente, utilizaremos algunos
formularios Web Forms ya generados en ste y en otros laboratorios, y por ello,
debemos verificar que hemos escrito con mayscula el nombre del proyecto
Benefits. Pueden crearse dos versiones del proyecto: BenefitsVB sera una
solucin Visual Basic .NET y BenefitsCS sera una solucin Visual C#.
En el proyecto Visual C#
En el proyecto Visual
Basic .NET
En el proyecto Visual C#
a. Ir a la carpeta VB\Starter\BenefitsListVB.
En el proyecto Visual C#
a. Ir a la carpeta CS\Starter\BenefitsListCS.
Ejercicio 1
Utilizar instrucciones de seguimiento
En este ejercicio, habilitaremos y deshabilitaremos el seguimiento y
agregaremos mensajes personalizados al resultado del seguimiento.
Habilitar el seguimiento en una pgina
1. En Visual Studio .NET, abrir la solucin LabApplication.
2. En el proyecto BenefitsVB o BenefitsCS, abrir el archivo default.aspx.
3. En la pgina default.aspx, cambiar a la vista Hypertext Markup Language
(HTML).
4. Modificar la directiva @ Page existente agregando un atributo Trace y
estableciendo su valor en true.
La directiva @ Page debera ser similar al siguiente cdigo, con la parte
aadida en negrita:
Visual Basic .NET
C#
5. Guardar default.aspx.
No es necesario generar la pgina, ya que no hemos cambiado nada del
cdigo. Los cambios a HTML nicamente requieren que se guarde la pgina.
6. Visualizar la pgina default.aspx en el navegador.
La informacin de seguimiento aparece en la parte inferior de la pgina.
Agregar mensajes de seguimiento personalizados
1. Ir al principio del procedimiento de evento Page_Load para la pgina
default.aspx, que se encuentra en la pgina de cdigo subyacente
default.aspx.vb o default.aspx.cs. Agregar un mensaje de seguimiento que
muestre el mensaje Beginning of Page_Load en una categora llamada
2310.
El cdigo debera ser similar al siguiente:
Visual Basic .NET
C#
C#
Ejercicio 2
Utilizar seguimiento en un componente
En este ejercicio, agregaremos instrucciones Trace al componente BenefitsList
invocado desde la pgina default.aspx.
Habilitar el seguimiento en el componente BenefitsList
1. En el proyecto BenefitsList, agregar una referencia a System.Web.dll
realizando los siguientes pasos:
a. En el proyecto BenefitsListVB o BenefitsListCS, hacer clic con el botn
derecho en la carpeta Referencias y hacer clic en Agregar referencia.
b. En el cuadro de dilogo Agregar referencia, en la ficha .NET, en la
lista de componentes, hacer doble clic en System.Web.dll, y en
Aceptar.
2. Abrir el archivo Class1:
En el proyecto Visual
Basic .NET
En el proyecto Visual C#
System.Web.HttpContext.Current.Trace.IsEnabled = True
C#
System.Web.HttpContext.Current.Trace.IsEnabled = true;
System.Web.HttpContext.Current.Trace.Warn _
("BenefitsList component", _
"Beginning of GetBenefitsList")
C#
System.Web.HttpContext.Current.Trace.Warn
("BenefitsList component",
"Beginning of GetBenefitsList");
System.Web.HttpContext.Current.Trace.Warn _
("BenefitsList component", _
"End of GetBenefitsList")
C#
System.Web.HttpContext.Current.Trace.Warn
("BenefitsList component",
"End of GetBenefitsList");
Guardar y probar
1. Guardar los cambios del archivo Class1, y generar el proyecto.
2. Visualizar la pgina default.aspx en Microsoft Internet Explorer.
Deberamos visualizar nuestros mensajes personalizados desde la pgina y
desde el componente en la seccin Trace Information, como muestra la
siguiente ilustracin.
System.Web.HttpContext.Current.Trace.Warn _
("Header", "Start Header")
System.Web.HttpContext.Current.Trace.Warn _
("Header", "End Header")
C#
System.Web.HttpContext.Current.Trace.Warn
("Header", "Start Header");
System.Web.HttpContext.Current.Trace.Warn
("Header", "End Header");
Cdigo a eliminar
default.aspx.vb o default.aspx.cs
life.aspx.vb o life.aspx.cs
header.ascx.vb o header.ascx.cs
Class1.vb o Class1.cs
ndice
Introduccin
18
Introduccin
Depuracin remota
***************************** use******************************
Introduccin
Objetivos
Habilitar el seguimiento
Seguimiento en un componente
***************************** use******************************
Introduccin
Objetivos de la leccin
El objeto Trace
El objeto Debug
***************************** use******************************
Introduccin
Tipos de informacin
Objetos de tiempo de
ejecucin
Habilitar el seguimiento
***************************** use******************************
Introduccin
Seguimiento a nivel de
pgina
Prctica (opcional)
***************************** use******************************
Introduccin
Trace.Write y
Trace.Warn
Utilizamos los mtodos Write y Warn del objeto Trace para mostrar
mensajes de seguimiento. Trace.Write y Trace.Warn funcionan
exactamente igual, con la excepcin de que Warn escribe mensajes de
seguimiento en color rojo.
Cuando utilizamos los mtodos Write y Warn, proporcionamos el mensaje
que debe mostrarse, junto con una categora apropiada al mensaje, como
muestra el siguiente cdigo:
C#
C#
Trace.IsEnabled
If Trace.IsEnabled Then
strMsg = "Tracing is enabled!"
Trace.Write("myTrace", strMsg)
End If
C#
if (Trace.IsEnabled)
{
strMsg = "Tracing is enabled!";
Trace.Write("myTrace", strMsg);
}
Trace.IsEnabled = False
C#
Trace.IsEnabled = false;
***************************** use******************************
Introduccin
Categoras de
seguimiento
Descripcin
Detalles de la peticin
Informacin de
seguimiento
rbol de control
Coleccin Cookies
Coleccin Headers
Coleccin Form
Variables de servidor
10
Trace=True
Trace=True
Trace=False
Trace=False
Aplicacin
Aplicacin
Resultado
Resultado
Trace=True
Trace=True oo Los
Los resultados
resultados de
deseguimiento
seguimiento
se
muestran
en
lalapgina
Trace=False
se
muestran
en
pgina
Trace=False
Trace=True
Trace=True oo Los
Los resultados
resultados de
deseguimiento
seguimiento
no
se
muestran
Trace=False
no
se
muestran
Trace=False
Trace
Trace not
not set
set Trace=True
Trace=True
Los
Los resultados
resultados de
deseguimiento
seguimiento
se
semuestran
muestran en
enlalapgina
pgina
***************************** use******************************
Introduccin
Configuracin del
seguimiento
Configuracin de la
aplicacin
Trace=True
Trace=True o
Los resultados de
seguimiento se muestran
en la pgina.
Trace=False
Trace=False
Trace=True o
Trace=False
Trace no establecido
Trace=True
Los resultados de
seguimiento no se
muestran en la pgina.
Los resultados de
seguimiento se muestran
en la pgina.
Mostrar mensajes de
seguimiento
11
12
***************************** use******************************
13
14
15
16
Seguimiento en un componente
using
using System.Web;
System.Web;
Habilitar el seguimiento
HttpContext.Current.Trace.IsEnabled
HttpContext.Current.Trace.IsEnabled == True
True
HttpContext.Current.Trace.IsEnabled
HttpContext.Current.Trace.IsEnabled == true;
true;
***************************** use******************************
Introduccin
Seguimiento en un
componente
Imports System.Web
C#
using System.Web;
HttpContext.Current.Trace.IsEnabled = True
C#
HttpContext.Current.Trace.IsEnabled = true;
17
HttpContext.Current.Trace.Write _
("component", "this is my trace statement")
C#
HttpContext.Current.Trace.Write
("component", "this is my trace statement");
Configuracin de la
pgina
Resultado
El seguimiento est
habilitado en el constructor
Seguimiento
deshabilitado
El seguimiento est
habilitado en un mtodo
Seguimiento
deshabilitado
El seguimiento est
deshabilitado en el
constructor
Seguimiento
habilitado
El seguimiento est
deshabilitado cuando se
invocan los mtodos del
componente.
El seguimiento no est
establecido en el
componente
Seguimiento
habilitado
18
***************************** use******************************
Introduccin
Objetivos de la leccin
19
La depuracin remota:
z
***************************** use******************************
Introduccin
Requerimientos para la
depuracin remota
20
Procedimiento de
depuracin remota
Depurar remotamente
1. En el equipo cliente, iniciar Visual Studio .NET.
2. En el men Archivo, hacer clic en Abrir y clic en Proyecto desde Web.
3. En el cuadro de dilogo Abrir Proyecto desde Web, escribir la direccin
URL (Uniform Resource Locator) del servidor desde el que deseamos
abrir el proyecto, y hacer clic en Aceptar.
4. En el cuadro de dilogo Abrir proyecto, ir al proyecto en el servidor
remoto y hacer clic en Abrir.
5. Despus de abrir el proyecto, podemos establecer puntos de interrupcin
y ejecutar la aplicacin Web en modo de depuracin, igual que si
estuviramos ejecutando una aplicacin local.
Benefits
Benefits
Home
Home Page
Page
Coho
Winery
Default.aspx
Default.aspx
Menu
Menu
Component
Component
Registration
Registration
Register.aspx
Register.aspx
Header.ascx
Header.ascx
Web.
config
Class1.vb
Class1.vb or
or Class1.cs
Class1.cs
Life
Life Insurance
Insurance
Retirement
Retirement
Life.aspx
Life.aspx
Lab Web
Application
Page
Page Header
Header
Retirement.aspx
Retirement.aspx
Prospectus
Prospectus
Prospectus.aspx
Prospectus.aspx
Medical
Medical
Medical.aspx
Medical.aspx
Doctors
Doctors
Doctors.aspx
Doctors.aspx
XML
Files
tempdb
Dental
Dental
Dental.aspx
Dental.aspx
User
User Control
namedate.ascx
namedate.ascx
Doctors
ASPState
XML
XML Web
Web
Service
Service
dentalService1.asmx
dentalService1.asmx
Dentists
***************************** use******************************
Objetivos
Requisitos previos
Escenario
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList.
Estos proyectos pueden haberse creado utilizando Visual Basic .NET o
Microsoft Visual C# .NET.
Si no se han creado estos proyectos, realizar los siguientes pasos.
Crear la solucin LabApplication
Importante Realizar este procedimiento nicamente si no se ha creado un
archivo de solucin LabApplication.
Utilizando Visual Studio .NET, crear una nueva solucin en blanco
denominada LabApplication:
En el men Archivo, seleccionar Nuevo, y hacer clic en Solucin en
blanco.
En el cuadro de dilogo Nuevo proyecto, escribir LabApplication en el
cuadro de texto Nombre y hacer clic en Aceptar.
Crear el proyecto Benefits
Importante Realizar este procedimiento nicamente si no se ha creado
anteriormente un proyecto Benefits, o si se ha eliminado.
Crear un nuevo proyecto de aplicacin Web ASP.NET, denominado
BenefitsVB o BenefitsCS, en la solucin LabApplication:
En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto.
En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto,
hacer clic en Proyectos de Visual Basic o Proyectos de Visual C#.
En la lista Plantillas, hacer clic en Aplicacin Web ASP.NET,
establecer la Ubicacin en http://localhost/BenefitsVB para un
proyecto Visual Basic .NET o en http://localhost/BenefitsCS para un
proyecto Visual C#.
Hacer clic en Agregar a Solucin, y hacer clic en Aceptar.
Precaucin Cuando se agregan proyectos a la solucin, es importante el
uso de maysculas en el nombre del proyecto. Probablemente, utilizaremos
algunos formularios Web Forms ya generados en ste y en otros
laboratorios, por ello, debemos verificar que hemos escrito con maysculas
el nombre del proyecto Benefits.
Ir a la carpeta VB\Starter\BenefitsVB
Ir a la carpeta CS\Starter\BenefitsCS
Estas carpetas pueden encontrarse dentro del fichero labs06.zip
1. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente Benefits, hacer clic en Todos los archivos (*.*).
2. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
3. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.
Crear la biblioteca de clases BenefitsList
Importante Realizar estos pasos nicamente si no se ha creado anteriormente
un proyecto BenefitsList, o si se ha eliminado.
1. Crear un proyecto de biblioteca de clases.
Ir a la carpeta VB\Starter\BenefitsListVB.
Ir a la carpeta CS\Starter\BenefitsListCS.
Estas carpetas pueden encontrarse dentro del fichero labs06.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.
Crear una referencia al componente BenefitsList del proyecto Benefits
1. En el proyecto Benefits de la solucin LabApplication, completar los
siguientes pasos para agregar una referencia al componente BenefitsList
que acabamos de crear:
a. Hacer clic con el botn derecho en el proyecto BenefitsVB o
BenefitsCS en el Explorador de soluciones y hacer clic en Agregar
referencia.
b. En el cuadro de dilogo Agregar referencia, en la pestaa Proyectos,
hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS.
c. En la lista Componentes seleccionados, seleccionar el componente
BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar.
El componente se agrega a la carpeta Referencias en el Explorador de
soluciones.
Ejercicio 1
Uso de los controles RequiredFieldValidator
En este ejercicio, agregaremos controles RequiredFieldValidator para los
cuadros de texto Name, Birth Date y Coverage del formulario Web Form
ASP.NET life.aspx.
Agregar controles RequiredFieldValidator
1. Abrir la pgina life.aspx en el proyecto Benefits de la solucin
LabApplication.
2. Mediante una operacin de arrastrar y soltar, ubicar tres controles
RequiredFieldValidator en el formulario Web Form de forma que el
formulario tenga un aspecto similar a la siguiente ilustracin.
Mensaje de error
Texto
ControlToValidate
vldName
txtName
vldBirth
La Fecha de nacimiento no
puede dejarse en blanco
txtBirth
vldCoverage
txtCoverage
Ejercicio 2
Uso del control ValidationSummary
En este ejercicio, utilizaremos un control ValidationSummary para hacer un
resumen de los errores de validacin de la pgina life.aspx.
Agregar un control ValidationSummary a la pgina life.aspx
1. Mediante una operacin de arrastrar y soltar, ubicar un control
ValidationSummary en la parte inferior del formulario Web Form life.aspx
y establecer su propiedad ID en vldSummary.
2. Establecer la propiedad HeaderText del control vldSummary en el valor
These errors were found
El aspecto de la pgina debera ser similar al de la siguiente ilustracin.
If Page.IsValid Then
lblMessage.Text = "La pgina es vlida"
End If
C#
if (Page.IsValid)
{
lblMessage.Text = "La pgina es vlida";
}
Ejercicio 3
Uso del control CompareValidator
En este ejercicio, utilizaremos un control CompareValidator para validar la
entrada del usuario en el campo de texto Fecha de nacimiento.
Agregar un control CompareValidator
1. Mediante una operacin de arrastrar y soltar, ubicar un control
CompareValidator en el formulario Web Form life.aspx, junto al control
vldBirth RequiredFieldValidator.
2. Establecer las propiedades del control CompareValidator como se muestra
en la siguiente tabla.
Propiedad
Valor
ErrorMessage
Text
ControlToValidate
txtBirth
Operator
DataTypeCheck
Type
Date
ID
vldBirthType
Ejercicio 4
Uso del control RegularExpressionValidator
En este ejercicio, utilizaremos un control RegularExpressionValidator para
validar la entrada del usuario en el campo de texto Coverage.
Agregar un control RegularExpressionValidator
1. Mediante una operacin de arrastrar y soltar, colocar un control
RegularExpressionValidator en el formulario Web Form life.aspx, junto
al control vldCoverage RequiredFieldValidator.
2. Establecer las propiedades del control como muestra la siguiente tabla.
Propiedad
Valor
ErrorMessage
Text
ControlToValidate
txtCoverage
ValidationExpression
\d+(\.\d{2})?
ID
vldCoverageType
ndice
Descripcin
30
usuario
Descripcin
Validacin de pginas
***************************** use******************************
Introduccin
Objetivos
Verificar que todos los controles de validacin de una pgina son vlidos.
usuario
***************************** use******************************
Introduccin
Objetivos de la leccin
Explicar la diferencia entre validacin del lado del cliente y validacin del
lado del servidor.
usuario
Evita el spoofing
o aadir
cdigo mal
intencionado
***************************** use******************************
Introduccin
Verificar valores de
control
usuario
Spoofing
Spoofing es cuando un usuario modifica la pgina HTML (Hypertext
Markup Language) que se le ha enviado, y devuelve valores que hacen que
parezca que ha introducido datos vlidos o pasado una comprobacin de
autorizacin. La validacin nicamente es susceptible de spoofing en el lado
del cliente, porque el usuario puede deshabilitar scripts del lado del cliente
cambiando las opciones del navegador y no ejecutar el cdigo de validacin
del lado del cliente, lo que crea un falso nivel de autorizacin.
Con ASP.NET, la validacin de entrada de datos del lado del cliente
siempre se repite en el lado del servidor, donde los usuarios no pueden
modificar o deshabilitar el control de validacin.
usuario
Mensaje
de error
El usuario
introduce datos
Vlido?
Respuesta inmediata
Cliente
Servidor
No
S
Vlido?
No
S
Aplicacin Web
procesada
***************************** use******************************
Introduccin
La validacin del lado del cliente mejora el uso del formulario Web Form
comprobando la entrada de datos del usuario mientras se produce. Al
comprobar si se generan errores mientras se introducen, la validacin del lado
del cliente permite detectar errores antes de que el formulario Web Form sea
enviado, evitando as el viaje de ida y vuelta necesario para la validacin del
lado del servidor.
Escribir mltiples versiones de cdigo de validacin para soportar tanto el
servidor como los diferentes navegadores puede exigir mucho tiempo al
desarrollador. Los controles de validacin ASP.NET eliminan este problema ya
que la lgica de validacin se encapsula en los controles. Los controles crean
cdigo especfico para los navegadores de forma que los usuarios con soporte
de scripts del lado del cliente tendrn validacin de entrada de datos. Los
navegadores que no soporten scripts no recibirn los scripts de validacin en el
lado del cliente.
En versiones de navegador que soporten la validacin de entrada de datos,
como Microsoft Internet Explorer 4 o posterior, la validacin del lado del
cliente se produce cuando el usuario hace clic en el botn Submit. La pgina no
se publicar de nuevo en el servidor hasta que toda la validacin del lado del
usuario
usuario
Comparar valores
***************************** use******************************
Controles de validacin
Funcin
CompareValidator
CustomValidator
RangeValidator
RegularExpression
Validator
RequiredFieldValidator
ValidationSummary
usuario
***************************** use******************************
Introduccin
Objetivos de la leccin
usuario
Introduccin
Agregar un control de
validacin
Seleccionar el control de
entrada de datos para
validar
Establecer las
propiedades de
validacin
10
usuario
Type
La propiedad Type es el tipo de datos que se validar. Visual Studio .NET
ajustar automticamente el tipo de datos para que coincida con el control
de entrada de datos adjunto al seleccionar ControlToValidate.
Entre los tipos de datos disponibles se incluyen String, Integer, Double,
Date y Currency.
EnableClientScript
La propiedad EnableClientScript indica si realizamos o no la validacin
del lado del cliente. El valor predeterminado de esta propiedad es true.
ASP.NET crea procedimientos de validacin en el lado del cliente en
Microsoft JScript .NET, y crea procedimientos de validacin del lado del
servidor en C# y Microsoft Visual Basic .NET. Esta diferencia de lenguaje
puede provocar pequeas diferencias entre las implementaciones de
controles de validacin en el lado del cliente y en el lado del servidor.
usuario
Esttico
Dinmico
***************************** use******************************
Introduccin
Mensajes de error
Propiedad ErrorMessage
La propiedad ErrorMessage es el mensaje de error que se muestra en la
ubicacin de un control de validacin cuando ste se dispara, si no est
establecida la propiedad Text. Este mensaje tambin se incluir en un
control ValidationSummary si se utiliza uno en el formulario Web Form.
11
12
usuario
Propiedad Text
La propiedad Text es el texto alternativo que se mostrar en la ubicacin del
control de validacin cuando se utilizan las propiedades ErrorMessage y
Text, y se dispara el control de validacin. Si se utiliza un control
ValidationSummary para capturar mensajes de error, normalmente se
utiliza un asterisco (*) rojo a la derecha del control de entrada de datos no
vlido para indicar dnde se encuentra el error.
En Visual Studio .NET, el script predeterminado para la propiedad Text es
imprimir el contenido de Text entre las etiquetas de inicio y final del control
de validacin, como muestra el siguiente cdigo:
<asp:type_of_validator>Text</asp:type_of_validator>
Establecer la propiedad
Display
Descripcin
Static
Dynamic
None
usuario
13
***************************** use******************************
Introduccin
Mltiples controles de
validacin en un nico
control de entrada
Ejemplo
14
usuario
Control RequiredFieldValidator
El siguiente cdigo define el control RequiredFieldValidator que verifica
que hay una entrada en txtPhone1:
<asp:RequiredFieldValidator
id="RequiredtxtPhone1Validator1"
runat="server"
ErrorMessage=
"A telephone number is required"
ControlToValidate="txtPhone1"
Text="*">
</asp:RequiredFieldValidator>
Control RegularExpressionValidator
El siguiente cdigo define el control RegularExpressionValidator que
verifica que la entrada en txtPhone1 coincide con el modelo de nmero de
telfono de Estados Unidos:
<asp:RegularExpressionValidator
id="RegulartxtPhone1Validator1"
runat="server"
ErrorMessage=_
"This telephone number is not formatted correctly"
ControlToValidate="txtPhone1"
ValidationExpression=
"((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}"
Text="*">
</asp:RegularExpressionValidator>
Control CustomValidator
El siguiente cdigo define el control CustomValidator que invoca la
funcin MyServerValidation, que compara la entrada en txtPhone1 con
una base de datos de nmeros de telfono:
<asp:CustomValidator
id="CustomValidator1"
OnServerValidate = "MyServerValidation"
runat="server"
ErrorMessage="This telephone number is not recognized"
ControlToValidate="txtPhone1"
Text="*">
</asp:CustomValidator>
usuario
15
RequiredFieldValidator
z
InitialValue
CompareValidator
z
ValueToComparar o ControlToComparar
Type
Operator
RangeValidator
z
MinimumValue
MaximumValue
Type
Cdigo de ejemplo
***************************** use******************************
Introduccin
Control
RequiredFieldValidator
16
usuario
ValueToCompare
La propiedad ValueToCompare se utiliza para establecer un valor
constante con el que realizar la comparacin. Utilizamos un carcter tubera
(|) para separar varios valores. Esta propiedad se utiliza especialmente para
validar contra valores inalterables, como un lmite de edad mnima.
Utilizamos el control CustomValidator para comparar contra valores que
pueden cambiar.
ControlToCompare
La propiedad ControlToCompare se utiliza para identificar otro control
con el que realizar la comparacin. Esta propiedad puede utilizarse para
buscar errores tipogrficos haciendo que el usuario introduzca los mismos
datos en dos campos adyacentes.
Si establecemos ambas propiedades, ValueToCompare y
ControlToCompare, la propiedad ControlToCompare tiene prioridad.
Type
La propiedad Type se utiliza para especificar el tipo de datos. Utilizamos
esta propiedad cuando deseamos comparar el valor de un control de entrada
de datos contra un DataType.
Operator
La propiedad Operator especifica el operador de comparacin a utilizar.
Los operadores se especifican con el nombre de los operadores de
comparacin, como Equal, NotEqual, GreaterThan y
GreaterThanEqual.
usuario
17
MinimumValue
La propiedad MinimumValue especifica el valor mnimo del intervalo
vlido para variables numricas, o la longitud mnima de la cadena de
caracteres para variables de cadena.
MaximumValue
La propiedad MaximumValue especifica el valor mximo del intervalo
vlido para variables numricas, o la longitud mxima de la de caracteres
cadena para variables de cadena.
Type
La propiedad Type se utiliza para especificar el tipo de datos de los valores
a comparar. Los valores a comparar se convierten en este tipo de datos antes
de que se realice alguna comparacin.
18
usuario
usuario
19
Nmeros de telfono
Cdigos postales
Direcciones electrnicas
<asp:RegularExpressionValidator
<asp:RegularExpressionValidator
ControlToValidate="US_PhoneNumber"
ControlToValidate="US_PhoneNumber"
ValidationExpression="
((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}
?)|(\d{3}-))?\d{3}-\d{4} ""
ValidationExpression="((\(\d{3}\)
>*</asp:RegularExpressionValidator
>*</asp:RegularExpressionValidator >>
Cdigo de ejemplo
***************************** use******************************
Introduccin
Cuando debemos verificar que los datos introducidos por un usuario coinciden
con un modelo predefinido, como un nmero de telfono, un cdigo postal o
una direccin electrnica, utilizamos el control RegularExpressionValidator.
Este control de validacin compara el modelo de caracteres, dgitos y smbolos
introducidos por el usuario con uno o ms modelos en el control.
Cuando hacemos clic en ValidationExpression en la ventana Propiedades,
Visual Studio .NET proporciona una serie de modelos de expresiones
habituales preestablecidas. Estos modelos incluyen direcciones electrnicas y
Web, nmeros de telfono y cdigos postales. Para crear un nuevo modelo,
seleccionar la plantilla Custom. El ltimo modelo utilizado estar disponible
para ser modificado. Esta caracterstica del ltimo utilizado ofrece una base a
partir de la cual crear nuestro propio modelo.
20
Caracteres de
expresiones habituales
usuario
Definicin
Elemento 0 1.
Elementos 0 a N.
[0-n]
{n}
\w
\d
\.
usuario
21
Definicin
\w+
Un signo (@).
\w+
\.
Un periodo.
\w+
Definicin
\w+
([-+.]\w+)*
Un signo (@).
\w+
([-.]\w+)*
\.
Un punto.
\w+
([-.]\w+)*
22
usuario
Agregar un control
RequiredFieldValidator
Agregar un control
RegularExpressionValidator
***************************** use******************************
2. Cambiar a FlowLayout.
Agregar un control
RequiredFieldValidator
Valor
ControlToValidate
TextBox1
ErrorMessage
Text
Agregar un control
RangeValidator
usuario
23
Valor
ControlToValidate
TextBox1
ErrorMessage
Text
MaximumValue
100
MinimumValue
16
Type
Entero
24
usuario
usuario
25
ClientValidationFunction
OnServerValidate
Validar con:
z
Frmula
Datos
Objetos COM
Servicio Web
Cdigo de ejemplo
***************************** use******************************
Introduccin
ClientValidationFunction
La propiedad ClientValidationFunction es el script que deseamos que
ejecute el control CustomValidator en el lado del cliente. Debido a que
escribimos nuestro propio script en el cliente, es importante comprobar que
existe coherencia lgica con el cdigo del lado del servidor.
OnServerValidate
La propiedad OnServerValidate es el script que deseamos que ejecute el
control CustomValidator en el lado del servidor. Debido a que escribimos
nuestro propio cdigo en el servidor, es importante comprobar que existe
coherencia lgica con el script del lado del cliente.
26
Ejemplo
usuario
C#
usuario
27
Probar el resultado
***************************** use******************************
Introduccin
Integer = args.Value
2 = 0 Then
= True
= False
28
C#
usuario
El procedimiento de eventos del lado del servidor que Visual Studio .NET
ha creado automticamente debera tener el nombre
CustomValidator1_ServerValidate, y dos parmetros: source (tipo
Object) y args (tipo ServerValidateEventArgs).
Escribir el script del
lado del cliente
Probar el resultado
usuario
29
30
usuario
***************************** use******************************
Introduccin
Objetivos de la leccin
usuario
31
Message.Text
Message.Text == "Page
"Page is
is Valid!";
Valid!";
//
// Perform
Perform database
database updates
updates or
or other
other logic
logic here
here
}}
}}
***************************** use******************************
Introduccin
.NET permite verificar que todos los controles de una pgina son vlidos antes
de que realicen alguna accin. Esta verificacin puede llevarse a cabo en el
cliente o en el servidor, dependiendo del navegador que se est utilizando. La
verificacin del lado del cliente se realiza con el control ValidationSummary,
mientras que la verificacin del lado del servidor se realiza con la propiedad
Page.IsValid.
Uso de la propiedad
Page.IsValid
Para determinar si todos los controles de validacin de una pgina son vlidos,
comprobamos la propiedad IsValid de la pgina en tiempo de ejecucin. La
propiedad IsValid se vincula a los valores de todos los controles de validacin
que se encuentran en la pgina (utilizando un AND lgico). Si algn control de
validacin no es vlido, la propiedad IsValid devuelve False. Esta propiedad
proporciona una forma sencilla de determinar si los controles de entrada de
datos en el formulario Web Form son vlidos y si el formulario Web Form est
preparado para seguir con la lgica de negocio.
Los controles de validacin verifican las entradas del usuario, establecen un
estado de error y producen mensajes de error. Sin embargo, los controles de
validacin no cambian el flujo de procesamiento de pginas. Por ejemplo, los
controles de validacin no evitan nuestro cdigo si detectan un error en los
datos introducidos por el usuario. En lugar de ello, probamos el estado de los
controles en nuestro cdigo antes de realizar lgica especfica de aplicacin. Si
detectamos un error, evitamos que nuestro cdigo se ejecute; la pgina seguir
procesndose y se devuelve al usuario con mensajes de error.
Nota La informacin de validacin no est disponible durante la inicializacin
de una pgina o durante la fase de carga. Para obtener informacin sobre los
estados de pgina, examinar Estados de procesamiento de pginas de
formularios Web Forms en la documentacin de Visual Studio .NET.
32
usuario
Ejemplo
C#
usuario
33
***************************** use******************************
Introduccin
Muestra mensajes de
texto y de error
34
Ejemplo
usuario
usuario
***************************** use******************************
Introduccin
Agregar un control
Validation
Summary
C#
If Page.IsValid Then
lblMessage.Text = "Page is valid!"
End If
35
36
usuario
if (Page.IsValid)
{
lblMessage.Text = "Page is valid!";
}
ndice
Descripcin
12
Descripcin
***************************** ******************************
Introduccin
Objetivos
Qu es un control de usuario?
***************************** ******************************
Introduccin
Un control de usuario es una pgina ASP.NET que otro formulario Web Form
ASP.NET puede importar como un control de servidor. De modo similar a los
controles de servidor Web, que son componentes que se ejecutan en el servidor,
los controles de usuario proporcionan interfaz de usuario y dems
funcionalidades relacionadas. Una vez creado un control de usuario, ste puede
ser utilizado por otras pginas de la misma aplicacin Web.
En esta leccin, estudiaremos qu son los controles de usuario, porqu
deberamos pensar en utilizarlos en nuestras aplicaciones Web, cmo
referenciar un control de usuario desde un formulario Web Form ASP.NET, y
cmo acceder a las propiedades de un control de usuario.
Objetivos de la leccin
Qu es un control de usuario?
<%@
<%@ Control
Control Language="vb"
Language="vb" %>
%>
<%@
<%@ Control
Control Language="c#"
Language="c#" %>
%>
***************************** ******************************
Introduccin
Definicin
Los controles de usuario son pginas ASP.NET con una extensin de archivo
.ascx. Los controles de usuario ofrecen un modo fcil de particionar y reutilizar
funcionalidades habituales de la interfaz de usuario en nuestras aplicaciones
Web ASP.NET. Similar a una pgina de un formulario Web Form, podemos
crear estos controles con cualquier editor de texto, o desarrollarlos utilizando
clases de cdigo subyacente. Adems, de forma similar a un formulario Web
Form, los controles de usuario se compilan cuando se solicitan por primera vez
y se almacenan en memoria del servidor para reducir el tiempo de respuesta de
las siguientes peticiones. Sin embargo, a diferencia de los formularios Web
Form, los controles de usuario no pueden ser solicitados de modo
independiente; deben estar incluidos en una pgina Web Form para que puedan
funcionar.
Nota El Microsoft .NET Framework impide que archivos con la extensin de
archivo .ascx puedan ser visualizados en un navegador Web. Es una medida de
seguridad que asegura que el control de usuario no puede ser visualizado como
una pgina ASP.NET independiente.
Qu hay en un control
de usuario?
Un control de usuario est formado por HTML y cdigo, pero como los
controles de usuario son utilizados por formularios Web Forms, no contienen
las etiquetas HTML <HEAD>, <BODY> ni <FORM>. En lugar de ello, estas
Al igual que los formularios Web Forms tienen pginas de cdigo subyacente,
los controles de usuario tambin tienen una pgina de cdigo subyacente
asociada. La directiva @ Page se utiliza en los formularios Web Forms para
asociar una pgina de cdigo subyacente, mientras que la directiva @ Control
se utiliza para hacer referencia a una pgina de cdigo subyacente desde una
pgina de control de usuario. La directiva @ Control slo puede utilizarse con
controles de usuario, y nicamente podemos incluir una directiva @ Control
por cada archivo .ascx. Por ejemplo, para hacer referencia a una pgina de
cdigo subyacente de un control de usuario denominada WebUserControl1, en
un proyecto de aplicacin Web denominado test, utilizamos la siguiente
directiva @ Control:
C#
Aplicacin A
Aplicacin B
Page3.aspx
Page1.aspx
Page2.aspx
***************************** ******************************
Introduccin
Ventajas de utilizar
controles de usuario
Compartir controles de
usuario
Un nico control de usuario puede ser compartido por todas las pginas de una
aplicacin Web. Sin embargo, las pginas .aspx de una aplicacin Web no
pueden hospedar un control de usuario de otra aplicacin Web. Para utilizar un
control de usuario en varias aplicaciones Web, el control de usuario debe
copiarse a la carpeta raz del directorio virtual de cada aplicacin Web.
Para compartir controles entre mltiples aplicaciones Web, tambin podemos
crear un control Web personalizado, que acta como un control de usuario
compartible. Los controles Web personalizados son ms difciles de crear que
los controles de usuario, ya que, a diferencia de los controles de usuario, los
controles Web personalizados no pueden crearse utilizando las herramientas
visuales de Visual Studio .NET; de este modo, todo el desarrollo debe realizarse
nicamente por cdigo.
Nota Para ms informacin sobre controles de usuario y los controles Web
personalizados, ver Controles de usuario Web y controles Web
personalizados en la documentacin de Visual Studio .NET.
Los estudiantes:
z
Tiempo: 5 minutos
***************************** ******************************
Introduccin
En esta prctica, generaremos una lista de ideas en las que podramos utilizar
controles de usuario y compartiremos estos ejemplos con el resto de la clase.
Pensar en cuatro ejemplos en los que un control de usuario simplifique el
desarrollo de pginas Web
________________________________________________________________
________________________________________________________________
***************************** ******************************
Introduccin
Incluir controles de
usuario
C#
C#
num1.pNum = 5
num2.pNum = 7
C#
num1.pNum = 5;
num2.pNum = 7;
10
***************************** ******************************
Introduccin
Agregar la pgina
carpeta_instalacin\Democode\Mod08VB\beforeuser.aspx al proyecto.
Agregar la pgina
carpeta_instalacin\Democode\Mod08CS\beforeuser.aspx al proyecto.
3. Abrir la pgina y mostrar el cdigo fuente HTML. El cdigo HTML utiliza
la misma combinacin de controles (un cuadro de texto y dos controles de
validacin) en dos lugares.
4. En vista Diseo, agrupar, seleccionar y copiar el primer conjunto del cuadro
de texto y los controles de validacin de la pgina.
5. Crear un nuevo control de usuario aadiendo un nuevo Control de Usuario
Web al proyecto. Denominarlo numberbox.ascx.
6. Mostrar el cdigo HTML de la pgina y observar la directiva @ Control
que ha creado Visual Studio .NET.
7. En la vista Diseo, pegar en el cuadro de texto y en los controles de
validacin.
11
12
***************************** ******************************
Introduccin
Despus de crear un control de usuario, ste puede ser utilizado por otras
pginas de la misma aplicacin Web. En esta leccin, aprenderemos a crear
controles de usuario.
Objetivos de la leccin
13
Public
Public Property
Property pNum()
pNum() As
As Integer
Integer
Get
Get
Return
Return Convert.ToInt32(txtNum.Text)
Convert.ToInt32(txtNum.Text)
End
End Get
Get
Set
Set (ByVal
(ByVal value
value As
As Integer)
Integer)
txtNum.Text
txtNum.Text == CStr(value)
CStr(value)
End
End Set
Set
End
End Property
Property
public
public int
int pNum
pNum
{{
get
get
{{
return
return
Convert.ToInt32(txtNum.Text);
Convert.ToInt32(txtNum.Text);
}}
set
set
{{
txtNum.Text
txtNum.Text ==
Convert.ToString(value);
Convert.ToString(value);
}}
}}
***************************** ******************************
Introduccin
14
Pgina host
15
Para exponer los valores del cuadro de texto en el host, debemos crear una
propiedad pblica. Por ejemplo, el siguiente cdigo de la pgina de cdigo
subyacente crea una propiedad denominada pNum. La propiedad pNum
expone la propiedad Text del control del cuadro de texto en el control de
usuario:
Visual Basic .NET
C#
16
***************************** ******************************
Introduccin
17
Visual C#
C#:
18
C#
if (!Page.IsPostBack)
txtNum1.Text = "0";
Benefits
Benefits
Home
Home Page
Page
Coho
Winery
Default.aspx
Default.aspx
Menu
Menu
Component
Component
Registration
Registration
Register.aspx
Register.aspx
Header.ascx
Header.ascx
Web.
config
Class1.vb
Class1.vb or
or Class1.cs
Class1.cs
Life
Life Insurance
Insurance
Retirement
Retirement
Life.aspx
Life.aspx
Lab Web
Application
Page
Page Header
Header
Retirement.aspx
Retirement.aspx
Prospectus
Prospectus
Prospectus.aspx
Prospectus.aspx
Medical
Medical
Medical.aspx
Medical.aspx
Doctors
Doctors
Doctors.aspx
Doctors.aspx
XML
Files
tempdb
Dental
Dental
Dental.aspx
Dental.aspx
User
User Control
namedate.ascx
namedate.ascx
Doctors
ASPState
XML
XML Web
Web
Service
Service
dentalService1.asmx
dentalService1.asmx
Dentists
Objetivos
Nota Este laboratorio se centra en los conceptos de este mdulo. Por ello,
podra no cumplir las recomendaciones de seguridad de Microsoft.
Requisitos previos
Escenario
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits. Si no se han creado estos proyectos, realizar los
siguientes pasos:
Ir a la carpeta VB\Starter\BenefitsListVB.
Ir a la carpeta CS\Starter\BenefitsListCS.
Ejercicio 1
Crear un control de usuario
En este ejercicio, crearemos un control de usuario desde los controles Name y
Birth Date de la pgina life.aspx.
C#
Agregar una propiedad denominada dtDate de tipo Date para leer y escribir
la propiedad Text del control txtBirth.
C#
C#
C#
Ejercicio 2
Uso del control de usuario
En este ejercicio, utilizaremos el control de usuario de la pgina medical.aspx
para solicitar el nombre y la fecha de nacimiento del usuario.
C#
C#
ndice
Descripcin
14
34
44
Descripcin
Introduccin a ADO.NET
*****************************
Introduccin
Crear un sitio Web dinmico que responda a las peticiones de los usuarios con
datos personalizados puede requerir que vinculemos nuestra aplicacin Web a
varias fuentes de datos. Microsoft ADO.NET es la herramienta que nos
permite acceder programticamente a fuentes de datos desde un formulario
Web Form.
En este mdulo, aprenderemos a utilizar ADO.NET para agregar acceso a datos
a nuestra aplicacin Web con Microsoft ASP.NET.
Objetivos de la leccin
*****************************
Introduccin
ADO.NET est diseado para cargar datos desde una fuente de datos y trabajar
con esos datos en modo desconectado. Este estado de desconexin permite al
formulario Web Form operar de forma semi-independiente de las fuentes de
datos, reduciendo as el trfico de red. ADO.NET utiliza Extensible Markup
Language (XML) como formato universal de transmisin de datos, lo cual
garantiza la interoperabilidad con cualquier plataforma donde est disponible
un parser XML.
En esta leccin, estudiaremos el uso del modelo de objetos de ADO.NET para
acceder a datos. Tambin estudiaremos cmo utilizar los objetos DataSet y
DataReader para acceder a datos.
Objetivos de la leccin
DataReader
Acceso lectura/escritura a
datos
Slo lectura
Desconectado
Conectado
Acceso ms lento
Acceso ms rpido
Codificacin manual
*****************************
Introduccin
Los objetos DataSet son objetos complejos que nos permiten almacenar
mltiples tablas de datos DataTables desde una fuente de datos. Los objetos
DataSet son como una base de datos virtual ubicada dentro de una aplicacin
Web. Los objetos DataSet tambin pueden contener relaciones entre los datos
de las DataTables, y pueden utilizar esas relaciones para recuperar datos.
Los objetos DataReader son objetos ligeros que se utilizan para leer datos
desde una fuente de datos; los objetos DataReader proporcionan acceso slo
hacia delante (forward-only) y de slo lectura (read-only) a los datos de una
base de datos.
Uso de DataSets y
DataReaders
Acceso a datos
Si nuestra intencin es leer y escribir a nuestra fuente de datos, debemos
utilizar un objeto DataSet. Los objetos DataReader son conexiones de slo
lectura y deberan utilizarse nicamente cuando los datos vayan a utilizarse
en una situacin de slo lectura.
Enlace a controles
Modo conexin
Si nuestra intencin es trabajar en un modo desconectado, debemos utilizar
un objeto DataSet. Los objetos DataReader deben ejecutarse en modo
conectado.
Velocidad de acceso
Si necesitamos acceso de alta velocidad a nuestra fuente de datos,
utilizaremos un objeto DataReader. Los objetos DataSet son ms lentos
que los objetos DataReader en el acceso a una base de datos, debido a que
los objetos DataSet almacenan los datos en un objeto del servidor Web.
Tambin la sobrecarga es mayor en la creacin del objeto DataSet debido a
la capacidad de leer y escribir datos y bsqueda hacia delante y hacia atrs.
Los objetos DataReader son ms rpidos debido a la naturaleza del objeto
ms ligera. Hay muy poca sobrecarga para el objeto DataReader, ya que
ste trabaja slo hacia delante y slo de lectura.
Soporte de herramientas
Si nuestra intencin es utilizar Microsoft Visual Studio .NET para crear la
conexin a datos, utilizaremos objeto DataSet. Con los objetos DataSet,
podemos elegir entre escribir nuestro propio cdigo o utilizar el cdigo
mquina de Visual Studio .NET. Con los objetos DataReader, debemos
escribir todo el cdigo de soporte.
Los estudiantes:
z
Tiempo: 5 minutos
*****************************
Crear la conexin
*****************************
Introduccin
El primer paso en el uso de una base de datos para soportar nuestra aplicacin
Web es crear una conexin segura a la base de datos. Las conexiones no
seguras pueden exponer a ataques mal intencionados tanto la aplicacin Web
como la base de datos.
En esta leccin, aprenderemos a crear conexiones seguras a una base de datos
SQL Server utilizando los objetos SqlConnection y SqlDataAdapter.
Objetivos de la leccin
Crear una conexin, con autenticacin slo Windows, a una base de datos
SQL Server.
Autenticacin
Autenticacin
modo
modomixto
mixto
Enviar el nombre de
usuario y contrasea
en texto claro.
Servidor
ServidorSQL
SQL
Cada
Cadacuenta
cuentade
deusuario
usuariose
se
agrega
agregaaa grupo
grupologin
loginde
deSQL
SQLServer
Server
o
o
Cliente
Cliente
Autenticacin
Autenticacin
slo
sloWindows
Windows
Servidor
ServidorWeb
Web
Autenticacin
AutenticacinWindows
Windows
No enviar el nombre de
usuario y contrasea.
Enviar slo que el
usuario ha sido
autenticado.
Servidor
ServidorSQL
SQL
Slo
Slolalacuenta
cuentaASPNET
ASPNET
tiene
tieneconcedido
concedidoacceso
acceso
*****************************
Introduccin
Desde la perspectiva del usuario, el acceso a datos desde una base de datos SQL
Server es un proceso en dos pasos. En primer lugar, el usuario enva una
peticin a la aplicacin Web, y sta se conecta a la base de datos SQL Server
para satisfacer la solicitud. Existen dos mtodos principales para que una
aplicacin Web se conecte a una base de datos SQL Server: autenticacin en
modo mixto y autenticacin en modo slo Windows. El mtodo ms utilizado
es la autenticacin slo Windows.
Autenticacin En modo
mixto
C#
string strConn =
"data source=localhost; " +
"initial catalog=northwind; " +
"user id=CohoUser; " +
"password=1Coho";
SqlConnection conn = new SqlConnection(strConn);
C#
string strConn =
"data source=localhost; " +
"initial catalog=northwind; " +
"integrated security=true";
SqlConnection conn = new SqlConnection(strConn);
Configurar el SQL
Server para ejecutar
autenticacin
en modo mixto o slo
Windows
10
Crear la conexin
Uso de SqlConnection
Dim
Dim strConn
strConn As
As String
String == "data
"data source=localhost;
source=localhost; "" && __
"initial
"initial catalog=northwind;
catalog=northwind; integrated
integrated security=true"
security=true"
Dim
Dim conn
conn As
As New
New SqlConnection(strConn)
SqlConnection(strConn)
string
string strConn
strConn == "data
"data source=localhost;
source=localhost; "" ++
"initial
"initial catalog=northwind;
catalog=northwind; integrated
integrated security=true";
security=true";
SqlConnection
SqlConnection conn
conn == new
new SqlConnection(strConn);
SqlConnection(strConn);
Timeout de conexin
Contrasea
Fuente de datos
Catlogo inicial
Proveedor
Seguridad integrada
ID de usuario
*****************************
Introduccin
Para mover datos entre una base de datos y nuestra aplicacin Web, en primer
lugar debemos crear una conexin a la base de datos. Para ello, debemos
identificar el nombre del servidor de base de datos, el nombre de la base de
datos, y la informacin de inicio de sesin requerida.
Dependiendo del tipo de base de datos al que accedamos, podemos utilizar un
objeto SqlConnection o un objeto OleDbConnection. Utilizamos un objeto
SqlConnection para conectar a bases de datos SQL Server 7.0 o posterior, y
objetos OleDbConnection para conectar al resto de bases de datos.
C#
string strConn =
"data source=localhost; " +
"initial catalog=northwind; " +
"integrated security=true";
SqlConnection conn = new SqlConnection(strConn);
Parmetros de la cadena
de conexin
11
Descripcin
Connection Timeout
Data Source
Initial Catalog
Integrated Security
Password
Provider
User ID
12
*****************************
Introduccin
Establecer el modo de
autenticacin
13
14
Crear un DataAdapter
Crear un DataSet
Utilizar un DataView
Gestin de errores
*****************************
Introduccin
El objeto DataSet representa una copia local de los datos que provienen de una
o ms fuentes de datos. El uso de un objeto DataSet permite que un formulario
Web Form se ejecute de forma semi-independiente de las fuentes de datos. El
objeto DataSet puede utilizar un objeto DataAdapter para cargar los datos de
una fuente de datos y puede desconectarse de la misma. El usuario puede
entonces utilizar y manipular los datos. Cuando los datos necesitan ser
actualizados contra la fuente de datos, se utiliza un objeto DataAdapter para
volver a conectarse y actualizar la fuente de datos.
En esta leccin, estudiaremos cmo utilizar los objetos DataSet para soportar el
almacenamiento local de datos y los requerimientos de manipulacin de los
formularios Web Forms.
Objetivos de la leccin
15
Crear un DataAdapter
da.SelectCommand.CommandText;
da.SelectCommand.CommandText;
da.SelectCommand.Connection;
da.SelectCommand.Connection;
*****************************
Introduccin
El objeto DataSet representa una copia local de datos de una fuente de datos.
Cuando se utiliza sin una fuente de datos, el objeto DataSet resulta til para
guardar datos locales a los cuales pueden acceder los formularios Web Forms.
Sin embargo, para actuar como una herramienta de gestin de datos real, un
objeto DataSet debe poder interactuar con una o ms fuentes de datos. Para
conseguir esta interaccin, el .NET Framework proporciona las clases
SqlDataAdapter y OleDbDataAdapter.
DataAdapter
Clase OleDbDataAdapter
Esta clase es adecuada para utilizarse con cualquier fuente de datos expuesta
por un OLE DB Data Provider.
Clase SqlDataAdapter
Esta clase es especfica para una base de datos SQL Server versin 7.0 o
posterior. El objeto SqlDataAdapter es ms rpido que el objeto
OleDbDataAdapter porque funciona directamente con SQL Server y no
debe funcionar a travs de una capa OLE DB Data Provider.
Adems, las clases DataAdapter para otros tipos de fuentes de datos pueden
integrarse con Visual Studio .NET.
16
Propiedades del
DataAdapter
Funcin
SelectCommand
InsertCommand
UpdateCommand
DeleteCommand
Ejemplo de
SqlDataAdapter
'Create a connection
Dim conn As New SqlConnection _
("data source=localhost;initial catalog=pubs;" & _
"integrated security=true;persist security info=True;")
'Create the DataAdapter
Dim da As New SqlDataAdapter _
("select * from Authors", conn)
C#
//Create a connection
SqlConnection conn = new SqlConnection
("data source=localhost; initial catalog=pubs; " +
"integrated security=true; persist security info=True;");
//Create the DataAdapter
SqlDataAdapter da = new SqlDataAdapter
("select * from Authors", conn);
17
Crear un DataSet
DataSet
DataSet ds
ds == new
new DataSet();
DataSet();
da.Fill(ds,
da.Fill(ds, "Authors");
"Authors");
Dim
Dim ds
ds As
As New
New DataSet()
DataSet()
da.Fill(ds,
da.Fill(ds, "Authors")
"Authors")
Acceder a DataTable
ds.Tables["Authors"].Rows.Count;
ds.Tables["Authors"].Rows.Count;
string
string str="";
str="";
foreach(DataRow
foreach(DataRow rr in
in
ds.Tables["Authors"].Rows)
ds.Tables["Authors"].Rows)
{{
str
str +=
+= r[2];
r[2];
str
str +=
+= r["au_lname"];
r["au_lname"];
}}
ds.Tables("Authors").Rows.Count
ds.Tables("Authors").Rows.Count
Dim
Dim rr As
As DataRow
DataRow
Dim
Dim str
str As
As String
String
For
For Each
Each rr in
in __
ds.Tables("Authors").Rows
ds.Tables("Authors").Rows
str
str &=
&= r(2)
r(2)
str
str &=
&= r("au_lname")
r("au_lname")
Next
Next
*****************************
Introduccin
Para crear una copia local de una base de datos, creamos y poblamos un objeto
DataSet utilizando objetos DataTable.
Crear a DataSet
El primer paso para crear un objeto DataSet es declarar el nombre del objeto
DataSet. El siguiente cdigo crea un objeto DataSet denominado ds:
C#
Rellenar el DataSet
da.Fill(ds, "Authors")
C#
da.Fill(ds, "Authors");
18
'Create a connection
Dim conn As New SqlConnection _
("data source=localhost;initial catalog=pubs;" & _
"integrated security=SSPI;persist security info=True;")
'Create the DataSet
Dim ds As New DataSet()
'Create the DataAdapter
Dim da As New SqlDataAdapter _
("select * from Authors", conn)
'Fill the DataSet ds
da.Fill(ds, "Authors")
C#
//Create a connection
SqlConnection conn = new SqlConnection
("data source=localhost;initial catalog=pubs; " +
"integrated security=SSPI;persist security info=True;");
//Create the DataSet
DataSet ds = new DataSet();
//Create the DataAdapter
SqlDataAdapter da = new SqlDataAdapter
("select * from Authors", conn);
//Fill the DataSet ds
da.Fill(ds, "Authors");
ds.Tables("Authors")
-ods.Tables(0)
C#
ds.Tables["Authors"];
-ods.Tables[0];
19
C#
ds.Tables("Authors").Rows.Count
ds.Tables("Authors").Columns.Count
C#
ds.Tables["Authors"].Rows.Count;
ds.Tables["Authors"].Columns.Count;
Contar las filas y columnas del objeto DataTable nos permite acceder a campos
individuales del objeto DataTable. Podemos acceder a campos por posicin
ordinal (basada-en-0) o por el nombre. En el siguiente cdigo, x es el ndice de
la fila de datos a la que deseamos acceder:
Visual Basic .NET
DataSet.Tables(0).Rows(x)(1)
DataSet.Tables(0).Rows(x)("fieldname")
C#
ds.Tables["Authors"].Rows[x][1];
ds.Tables["Authors"].Rows[x]["fieldname"];
20
Dim r As DataRow
Dim str As String
For Each r in ds.Tables("Authors").Rows
str &= r(1)
str &= r("au_lname")
Next
C#
21
Crear DataAdapter
Crear DataSet
*****************************
Introduccin
Ejecutar la demostracin
1. Abrir la pgina UseDataSet.aspx del proyecto Demo08VB o Demo08CS
que se pueden encontrar dentro del fichero demos08.zip.
2. Generar y examinar la pgina.
La primera vez que se carga la pgina, el cuadro de lista lstItems se rellena
dinmicamente con los nombres de las columnas del DataSet.
El botn Get Number of Rows y el botn Get Values leen la informacin
del DataSet.
3. Hacer clic en Get Number of Rows.
El cdigo en el procedimiento de evento click muestra la propiedad Count
de la coleccin Rows.
4. Seleccionar una columna en el cuadro de lista y hacer clic en Get Values.
El cdigo en el procedimiento de evento click recorre en bucle las filas del
DataSet y muestra el campo seleccionado.
5. En Visual Studio .NET, visualizar la pgina de cdigo subyacente de la
pgina UseDataSet.aspx.
22
23
Utilizar un DataView
*****************************
Introduccin
Para mostrar los datos que almacena un objeto DataSet, podemos vincular el
objeto DataSet directamente a un control enlazado a una lista o utilizar un
objeto DataView. Un objeto DataView es una vista personalizada y enlazable
de un nico objeto DataTable. Despus de crear un objeto DataView, el
usuario puede utilizarlo para clasificar, filtrar, buscar, editar y navegar por
datos.
DataViews como
subconjunto de un
DataTable
DefaultView
C#
DataView dv = ds.Tables["Authors"].DefaultView;
24
DataView personalizado
C#
Los estudiantes:
z
Tiempo: 5 minutos
*****************************
Ejecutar la prctica
Visualizar la pgina http://localhost/Mod10VB/DataSetCode.aspx o
http://localhost/Mod10CS/DataSetCode.aspx y organizar las lneas de
cdigo ADO.NET en el orden correcto para crear un objeto DataSet.
Nota Hay varias respuestas correctas para esta prctica.
25
26
Crear el control
<asp:DataGrid
<asp:DataGrid id="dg"
id="dg" runat="server"
runat="server" />
/>
dg.DataSource
dg.DataSource == ds;
ds;
dg.DataMember
dg.DataMember == "Authors";
"Authors";
dg.DataBind()
dg.DataBind();;
*****************************
Introduccin
Crear el control
Vincular a un Dataset o
DataView
dg.DataSource = ds
dg.DataMember = "Authors"
dg.DataBind()
C#
dg.DataSource = ds;
dg.DataMember = "Authors";
dg.DataBind();
27
dg.DataSource = ds.Tables("Authors")
dg.DataBind()
C#
dg.DataSource = ds.Tables["Authors"];
dg.DataBind();
Si deseamos mostrar una vista distinta de los datos del control DataGrid,
deberemos crear un nuevo objeto DataView desde el objeto DataSet y vincular
ese objeto al control.
Ejemplo de uso de una
vista personalizada
C#
28
Crear un DataAdapter
Crear un DataSet
Crear un DataView
*****************************
Introduccin
29
Gestin de errores
La conexin no se abre
z
Cdigo de ejemplo
*****************************
Introduccin
La conexin no se abre
30
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
C#
try
{
SqlConnection conn = new SqlConnection("...");
SqlDataAdapter da = new SqlDataAdapter("...",conn);
DataSet ds = new DataSet();
da.Fill(ds);
}
catch (System.Data.SqlClient.SqlException ex1)
{
switch(ex1.Number)
{
case 17:
lblErrors.Text = lblErrors.Text +
("invalid Server name");
break;
case 156:
case 170: //bad SQL syntax
lblErrors.Text = lblErrors.Text +
("incorrect syntax");
break;
case 207: //bad field name in select
lblErrors.Text = lblErrors.Text +
("invalid column name");
break;
case 208: //bad table name in select
lblErrors.Text = lblErrors.Text +
("invalid object name");
break;
case 18452:
lblErrors.Text = lblErrors.Text +
("invalid user name");
break;
case 18456:
lblErrors.Text = lblErrors.Text +
("invalid password");
break;
case 4060:
lblErrors.Text = lblErrors.Text +
("invalid database");
break;
}
}
catch (System.Exception ex2)
{
lblErrors.Text = lblErrors.Text +
("Unexpected exception: " + ex2.Message + ". ");
}
31
32
El DataAdapter no
puede crear un DataSet
C#
Descripcin
Class
LineNumber
Message
Number
33
Nmero
Descripcin
17
4060
18456
Descripcin
Accin
11-16
17-19
Errores de software o
hardware
20-25
Errores de software o
hardware
34
Crear relaciones
*****************************
Introduccin
Uno de los puntos fuertes de los objetos DataSet es que pueden contener
mltiples objetos DataTable, y cada objeto DataTable puede provenir de una
fuente distinta.
En esta leccin, estudiaremos cmo almacenar mltiples tablas de datos en un
objeto DataSet y cmo mostrar esos datos en controles DataGrid.
Objetivos de la leccin
35
conn1
conn2
DataSet
Orders
*****************************
Introduccin
Un ejemplo de control del orden en que se crean los objetos DataTable podra
ser un responsable de ventas que necesita recuperar informacin de clientes, e
informacin sobre rdenes de compra realizadas por cada cliente, desde una
base de datos central. Para satisfacer este requerimiento, podemos crear una
aplicacin Web que contenga dos objetos DataAdapter, el primero para
recuperar registros de clientes y el segundo para recuperar registros de rdenes
de compra. Cargando primero los datos de los clientes, podemos conservar la
integridad referencial entre los clientes y sus rdenes de compra.
36
Dim
Dim
Dim
Dim
conn As SqlConnection
daCustomers As SqlDataAdapter
daOrders As SqlDataAdapter
ds As New DataSet()
C#
SqlConnection conn;
SqlDataAdapter daCustomers;
SqlDataAdapter daOrders;
DataSet ds = new DataSet();
// Create a connection to the Pubs database
conn = new SqlConnection("data source=localhost; " +
"integrated security=true;initial catalog=northwind");
// Create the first DataTable
daCustomers = new SqlDataAdapter
("select CustomerID, CompanyName from Customers", conn);
daCustomers.Fill(ds, "Customers");
Agregar tablas
subsiguientes
C#
37
Crear relaciones
Dim
Dim parentCol
parentCol As
As DataColumn
DataColumn == __
ds.Tables("Customers").Columns("CustomerID")
ds.Tables("Customers").Columns("CustomerID")
Dim
Dim childCol
childCol As
As DataColumn
DataColumn == __
ds.Tables("Orders").Columns("CustomerID")
ds.Tables("Orders").Columns("CustomerID")
Crear DataRelation
parentCol
Dim
Dim dr
dr As
As New
New DataRelation
DataRelation __
("name",
("name", parentCol,
parentCol, __
childCol)
childCol)
ds.DataRelations.Add(dr)
ds.DataRelations.Add(dr)
Tabla Customers
DataSet
DataRelation
childCol
Tabla Orders
Cdigo de ejemplo C#
*****************************
Introduccin
38
Ejemplo de objeto
DataRelation
C#
39
ds.Tables(index).Rows(index).GetChildRows("relation")
ds.Tables(index).Rows(index).GetChildRows("relation")
ds.Tables(index).Rows(index).GetParentRow("relation")
ds.Tables(index).Rows(index).GetParentRow("relation")
ds.Tables[index].Rows[index].GetChildRows("relation");
ds.Tables[index].Rows[index].GetChildRows("relation");
ds.Tables[index].Rows[index].GetParentRow("relation");
ds.Tables[index].Rows[index].GetParentRow("relation");
Orders
Customers
GetChildRows
DataSet
GetParentRow
*****************************
Introduccin
Navegar
programticamente
40
currentParentRow = ds.Tables("Customers"). _
Rows(dgCustomers.SelectedIndex)
For Each r In currentParentRow.GetChildRows("CustOrders")
Label1.Text &= r("OrderID") & ", "
Next
C#
currentParentRow = ds.Tables["Customers"].
Rows[dgCustomers.SelectedIndex];
foreach(DataRow r
in currentParentRow.GetChildRows("CustOrders"))
{
Label1.Text += r["OrderID"] + ",";
}
41
DataView
DataRowView
Orders
CreateChildView
DataSet
*****************************
Navegar visualmente
C#
42
Programticamente:
z
Crear un DataSet
Crear un DataRelation
Visualmente:
z
Invocar CreateChildView
*****************************
43
Hacer lo siguiente
Bienvenido
44
Qu es un DataReader?
Crear un DataReader
*****************************
Introduccin
Objetivos de la leccin
45
Qu es un DataReader?
*****************************
Introduccin
Los objetos DataReader son ms rpidos que los objetos DataSet por la
naturaleza ligera de la clase DataReader. En la creacin del objeto DataSet, la
sobrecarga es mayor debido a que los objetos DataSet tienen la capacidad de
leer y escribir datos y examinar hacia delante y hacia atrs. Hay muy poca
sobrecarga en un objeto DataReader ya que es slo hacia delante y slo de
lectura. Esta relativa falta de sobrecarga supone un acceso a datos ms rpido
con un objeto DataReader que con un objeto DataSet.
Conexin a la fuente de
datos
46
Gestin de la conexin
por s mismo
47
Crear un DataReader
Cdigo de ejemplo
*****************************
Introduccin
Utilizar un DataReader
48
El siguiente cdigo de ejemplo abre una conexin a una base de datos, crea un
objeto DataReader desde un objeto Command, y recorre el objeto
DataReader y agrega campos de los registros a un control ListBox:
Visual Basic .NET
C#
Utilizar el controlador de
eventos
TryCatchFinally
49
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
C#
try
{
conn.Open();
dr = cmdAuthors.ExecuteReader();
// use the returned data in the DataReaders
}
catch(Exception e)
{
// Handle error
}
finally
{
dr.Close();
conn.Close();
}
50
Acceso a campos
z Parmetro es la posicin ordinal o nombre del campo
z Las funciones Get ofrecen un mejor rendimiento
Do
Do While
While myReader.Read()
myReader.Read()
str
str &=
&= myReader(1)
myReader(1)
str
str &=
&= myReader("field")
myReader("field")
str
str &=
&= myReader.GetDateTime(2)
myReader.GetDateTime(2)
Loop
Loop
Cerrar el DataReader
Cerrar la conexin
while
while (myReader.Read())
(myReader.Read())
{{
str
str +=
+= myReader[1];
myReader[1];
str
str +=
+= myReader["field"];
myReader["field"];
str
+=
myReader.GetDateTime(2);
str += myReader.GetDateTime(2);
}}
*****************************
Do While dr.Read()
lblName.Text &= dr("au_fname")
Loop
C#
while (dr.Read())
{
lblName.Text += dr["au_name"];
}
Acceso a campos
51
Para obtener los datos de los campos del registro actual, podemos acceder a un
campo por su posicin ordinal, por su nombre o invocando un mtodo Get
adecuado, como GetDateTime, GetDouble, GetInt32 o GetString.
Sugerencia Utilizar un mtodo Get especfico es ms rpido que acceder por
la posicin ordinal o por el nombre, porque el DataReader no necesita
comprobar el formato de los datos.
Por ejemplo, el siguiente cdigo de ejemplo lee los campos del primer y ltimo
nombre, ambos valores de cadena, desde el primer registro del objeto
DataReader dr, utilizando el mtodo GetString():
dr.Read()
lblName.Text = dr.GetString(1) + ", " + _
dr.GetString(2)
C#
dr.Read();
lblName.Text = dr.GetString(1) + ", " +
dr.GetString(2);
Tambin podemos referenciar, por nombre, los campos de datos del registro
actual del objeto DataReader. Seguidamente, podemos invocar una funcin de
conversin apropiada, como muestra el siguiente cdigo de ejemplo:
Visual Basic .NET
myReader("au_fname")
C#
myReader["au_fname"];
Cerrar el DataReader
myReader.Close()
C#
myReader.Close();
Cerrar la conexin
conn.Close()
C#
conn.Close();
52
Crear el control
<asp:DataGrid
<asp:DataGrid id="dgAuthors"
id="dgAuthors" runat="server"
runat="server" />
/>
Vincular a un DataReader
dgAuthors.DataSource
dgAuthors.DataSource == dr
dr
dgAuthors.DataBind()
dgAuthors.DataBind()
dgAuthors.DataSource
dgAuthors.DataSource == dr;
dr;
dgAuthors.DataBind();
dgAuthors.DataBind();
*****************************
Introduccin
C#
53
54
Los estudiantes:
z
Tiempo: 5 minutos
*****************************
Ejecutar la prctica
Visualizar la pgina http://localhost/Mod10VB/DataReaderCode.aspx o
http://localhost/Mod10CS/DataReaderCode.aspx y colocar las lneas de
cdigo ADO.NET en el orden correcto para crear un objeto DataReader.
Nota Hay varias respuestas correctas para esta prctica.
55
*****************************
Introduccin
Ejecutar la demostracin
1. Abrir la pgina DataReader.aspx del proyecto Demo08VB o Demo08CS
que se pueden encontrar dentro del fichero demos08.zip.
2. Generar y examinar la pgina DataReader.aspx.
Hay dos cuadros de lista que muestran los mismos datos. El primer cuadro
de lista est vinculado a un objeto DataReader, mientras que el segundo
cuadro de lista se genera recorriendo los registros del objeto DataReader y
generando programticamente cada entrada del control ListBox.
3. En Visual Studio .NET, visualizar el cdigo subyacente de la pgina
DataReader.aspx.
4. En el procedimiento de evento Page_Load, mostrar el cdigo que hace lo
siguiente:
Crea un objeto SqlConnection.
Crea un objeto SqlCommand.
Crea un objeto DataReader.
Vincula el objeto DataReader al primer control ListBox.
Cerrar el objeto DataReader y crearlo de nuevo.
Este paso es necesario debido a que un objeto DataReader es una vista
de los datos slo hacia delante y ya habamos llegado al final de los
datos cuando el objeto DataReader se vincul al control ListBox.
Recorre el objeto DataReader y agrega dos campos por cada elemento
del segundo control ListBox.
Benefits
Benefits
Home
Home Page
Page
Coho
Winery
Default.aspx
Default.aspx
Menu
Menu
Component
Component
Registration
Registration
Register.aspx
Register.aspx
Retirement
Retirement
Life.aspx
Life.aspx
Retirement.aspx
Retirement.aspx
Prospectus
Prospectus
Prospectus.aspx
Prospectus.aspx
Medical
Medical
Medical.aspx
Medical.aspx
Doctors
Doctors
Doctors.aspx
Doctors.aspx
XML
Files
Objetivos
Header.ascx
Header.ascx
Web.
config
Class1.vb
Class1.vb or
or Class1.cs
Class1.cs
Life
Life Insurance
Insurance
Lab Web
Application
Page
Page Header
Header
tempdb
Dental
Dental
Dental.aspx
Dental.aspx
User
User Control
namedate.ascx
namedate.ascx
Doctors
ASPState
XML
XML Web
Web
Service
Service
dentalService1.asmx
dentalService1.asmx
Dentists
Recuperar datos de una base de datos SQL Server utilizando los objetos
SqlConnection y SqlDataReader.
Nota Este laboratorio se centra en los conceptos de este mdulo. Por ello,
podra no cumplir las recomendaciones de seguridad de Microsoft. Por ejemplo,
este laboratorio no cumple la recomendacin de que todo el acceso a datos se
realice a travs de procedimientos almacenados.
Requisitos previos
Escenario
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList.
Estos proyectos pueden haberse creado utilizando Visual Basic .NET o
Microsoft Visual C# .NET.
Si no se han creado estos proyectos, realizar los siguientes pasos:
Ir a la carpeta VB\Starter\BenefitsVB
Ir a la carpeta CS\Starter\BenefitsCS.
Estas carpetas pueden encontrarse dentro del fichero labs08.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de sobrescribir o recargar los archivos.
Ir a la carpeta VB\Starter\BenefitsListVB.
Ir a la carpeta CS\Starter\BenefitsListCS.
Estas carpetas pueden encontrarse dentro del fichero labs08.zip
4. En el cuadro Archivos del tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de sobrescribir o recargar los archivos.
Ejercicio 1
Utilizar un SqlDataReader
En este ejercicio, rellenaremos un cuadro de lista en la pgina doctors.aspx con
las ciudades donde se encuentran los doctores. Cuando el usuario selecciona
una ciudad, crearemos una nueva vista DataSet de los datos y mostraremos los
datos en el DataGrid.
'TODO Lab10: bind the listbox to city field in the doctors table
C#
//TODO Lab10: bind the listbox to city field in the doctors table
Valor
DataSource
Objeto SqlDataReader
DataTextField
"city"
C#
C#
SqlDataAdapter1.Fill(DsDoctors1)
dgDoctors.DataSource = DsDoctors1
dgDoctors.DataBind()
C#
sqlDataAdapter1.Fill(dsDoctors1);
dgDoctors.DataSource = dsDoctors1;
dgDoctors.DataBind();
Ejercicio 2
Visualizar doctores de todas las ciudades
En este ejercicio, agregaremos la opcin All al cuadro de lista desplegable City
y restableceremos la funcionalidad a la pgina Web doctors.aspx, que
restablecer los controles del cuadro de lista DataGrid y Specialties a una
configuracin predeterminada.
'TODO Lab10: add the "All" item to the list and select it
C#
//TODO Lab10: add the "All" item to the list and select it
lstCities.Items.Add("[All]")
lstCities.SelectedIndex = lstCities.Items.Count 1
C#
lstCities.Items.Add("[All]");
lstCities.SelectedIndex = lstCities.Items.Count 1;
C#
C#
NDICE
Descripcin
Descripcin
*****************************
Introduccin
Objetivos
Qu es un procedimiento almacenado?
*****************************
Introduccin
Una alternativa al acceso directo a bases de datos desde nuestra aplicacin Web
es invocar un procedimiento almacenado que acceder a la base de datos por
nosotros. El uso de procedimientos almacenados tiene varias ventajas respecto
al acceso directo a bases de datos, incluyendo la eficacia, seguridad y la
proteccin de la base de datos.
En esta leccin, aprenderemos qu es un procedimiento almacenado y los
motivos para invocar procedimientos almacenados cuando se accede a una base
de datos.
Objetivos de la leccin
Qu es un procedimiento almacenado?
Devolver registros
Devolver un valor
Realizar accin
Formulario
Web Form
Procedimiento
Procedimiento
almacenado
almacenado
Cliente
Cliente
Base datos
Servidor
ServidorWeb
Web
SQL
SQLServer
Server
*****************************
Introduccin
Acceso programtico a
una base de datos
Programacin modular
Ejecucin ms rpida
Proporciona flexibilidad
*****************************
Introduccin
Programacin modular
Incremento de la
seguridad de la base de
datos
Ejecucin ms rpida
En ocasiones, una operacin que requiere cientos de lneas de cdigo TransactSQL puede realizarse mediante una nica instruccin que invoque un
procedimiento almacenado. Enviar una llamada a travs de la red, en lugar de
cientos de lneas de cdigo, reduce el trfico de red.
Proporciona flexibilidad
Los estudiantes:
z
Tiempo: 5 Minutos
*****************************
Devolver registros
Devolver valor
Realizar accin
Debemos determinar los 10 mejores best sellers de la compaa.
____________________________________________________________
____________________________________________________________
Debemos determinar el beneficio neto de un determinado trimestre.
____________________________________________________________
____________________________________________________________
Debemos cambiar todos los prefijos telefnicos 425 de Estados Unidos por
el prefijo 415.
____________________________________________________________
____________________________________________________________
Utilizar parmetros
*****************************
Introduccin
Objetivos de la leccin
10
Dim
Dim daCategory
daCategory As
As New
New SqlDataAdapter()
SqlDataAdapter()
daCategory.SelectCommand
daCategory.SelectCommand == New
New SqlCommand()
SqlCommand()
daCategory.SelectCommand.Connection
daCategory.SelectCommand.Connection == conn
conn
daCategory.SelectCommand.CommandText
daCategory.SelectCommand.CommandText == "ProductCategoryList"
"ProductCategoryList"
daCategory.SelectCommand.CommandType
daCategory.SelectCommand.CommandType == CommandType.StoredProcedure
CommandType.StoredProcedure
SqlDataAdapter
SqlDataAdapter daCategory
daCategory == new
new SqlDataAdapter();
SqlDataAdapter();
daCategory.SelectCommand
daCategory.SelectCommand == new
new SqlCommand();
SqlCommand();
daCategory.SelectCommand.Connection
daCategory.SelectCommand.Connection == conn;
conn;
daCategory.SelectCommand.CommandText
daCategory.SelectCommand.CommandText == "ProductCategoryList";
"ProductCategoryList";
daCategory.SelectCommand.CommandType
daCategory.SelectCommand.CommandType == CommandType.StoredProcedure;
CommandType.StoredProcedure;
*****************************
Introduccin
Identificar el
procedimiento
almacenado
Establecer la propiedad
SelectCommand
C#
C#
11
12
Ejecutar el
procedimiento
almacenado
daCategory.Fill(ds, "Categories")
C#
daCategory.Fill(ds, "Categories");
13
*****************************
Introduccin
Ejecutar la demostracin
1. Abrir la pgina SPGetRecords.aspx del proyecto Demo09VB o Demo09CS
que se pueden encontrar dentro del fichero demos9.zip.
2. Generar y examinar la pgina.
El DataGrid est vinculado al procedimiento almacenado Ten Most
Expensive Products de la base de datos Northwind Traders.
3. En Visual Studio .NET, visualizar la pgina de cdigo subyacente de la
pgina SPGetRecords.aspx.
4. En el procedimiento de evento Page_Load, mostrar el cdigo que realiza lo
siguiente:
Crea el objeto SqlConnection.
Crea los objetos SqlDataAdapter y SqlCommand.
Establece las propiedades del objeto SqlCommand para invocar el
procedimiento almacenado.
Crea un nuevo DataSet y lo rellena desde el DataAdapter.
14
Los estudiantes:
z
Tiempo: 15 minutos
*****************************
Introduccin
Ejecutar la prctica
1. Crear un nuevo proyecto de aplicacin Web y establecer su ubicacin en
Visual Basic .NET
http://localhost/Pract09VB
C#
http://localhost/Pract09CS
2. Abrir la pgina WebForm1.aspx.
3. Abrir el Explorador de servidores y expandir las siguientes carpetas:
nombre_mquina, Servidores SQL Server, nombre_mquina, Northwind y
Procedimientos almacenados.
4. Hacer clic en el procedimiento almacenado Ten Most Expensive Products
y arrastrarlo a la pgina WebForm1.aspx.
Visual Studio .NET crea automticamente un objeto SqlConnection
denominado sqlConnection1 y un objeto SqlCommand denominado
sqlCommand1.
5. Utilizando el Cuadro de herramientas, ubicar un control DataGrid en la
pgina WebForm1.aspx.
15
Dim dr As SqlClient.SqlDataReader
SqlConnection1.Open()
dr = SqlCommand1.ExecuteReader()
DataGrid1.DataSource = dr
DataGrid1.DataBind()
dr.Close()
SqlConnection1.Close()
C#
SqlDataReader dr;
sqlConnection1.Open();
dr = sqlCommand1.ExecuteReader();
DataGrid1.DataSource = dr;
DataGrid1.DataBind();
dr.Close();
sqlConnection1.Close();
C#
16
Utilizar parmetros
Input
Output
InputOutput
ReturnValue
*****************************
Introduccin
Uso
Input
Output
InputOutput
ReturnValue
17
Cdigos de ejemplo
*****************************
Introduccin
Crear un parmetro
18
C#
C#
Ejecutar un
procedimiento
almacenado
Una vez creado el objeto Command, utilizamos el mtodo Fill para ejecutar el
procedimiento almacenado y recuperar los registros:
ds = New DataSet()
daSales.Fill(ds, "Products")
C#
ds = new DataSet();
daSales.Fill(ds, "Products");
19
ds
ds == new
new DataSet();
DataSet();
da.Fill(ds);
da.Fill(ds);
iTotal
Leer losda.parameters("@ItemCount").Value
parmetros de salida
iTotal == da.parameters("@ItemCount").Value
iTotal
iTotal == da.parameters("@ItemCount").Value;
da.parameters("@ItemCount").Value;
*****************************
Introduccin
Ejemplo de uso de
parmetros de salida
20
C#
Ejecutar el procedimiento
almacenado
conn.Open()
myCmd.ExecuteNonQuery()
conn.Close()
C#
conn.Open();
myCmd.ExecuteNonQuery();
conn.Close();
Leer parmetros de
salida
curSales = myCmd.Parameters("@ItemCount").Value
C#
curSales = myCmd.Parameters["@ItemCount"].Value;
21
*****************************
Introduccin
Benefits
Benefits
Home
Home Page
Page
Coho
Winery
Default.aspx
Default.aspx
Menu
Menu
Component
Component
Registration
Registration
Register.aspx
Register.aspx
Retirement
Retirement
Life.aspx
Life.aspx
Retirement.aspx
Retirement.aspx
Prospectus
Prospectus
Prospectus.aspx
Prospectus.aspx
Medical
Medical
Medical.aspx
Medical.aspx
Doctors
Doctors
Doctors.aspx
Doctors.aspx
XML
Files
Objetivos
Header.ascx
Header.ascx
Web.
config
Class1.vb
Class1.vb or
or Class1.cs
Class1.cs
Life
Life Insurance
Insurance
Lab Web
Application
Page
Page Header
Header
ASPState
tempdb
Dental
Dental
Dental.aspx
Dental.aspx
User
User Control
namedate.ascx
namedate.ascx
Doctors
XML
XML Web
Web
Service
Service
dentalService1.asmx
dentalService1.asmx
Dentists
Nota Este laboratorio se centra en los conceptos de este mdulo. Por ello,
podra no cumplir las recomendaciones de seguridad de Microsoft.
Requisitos previos
Escenario
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList.
Estos proyectos pueden haberse creado utilizando Visual Basic .NET o
Microsoft Visual C# .NET.
Si no se han creado estos proyectos, realizar los siguientes pasos:
Ir a la carpeta VB\Starter\BenefitsListVB.
Ir a la carpeta CS\Starter\BenefitsListCS.
Estas carpetas pueden encontrarse dentro del fichero labs09.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de sobrescribir o recargar los archivos.
Ejercicio 1
Obtener nombres de ciudades nicos
En este ejercicio, vincularemos el cuadro de lista desplegable lstCities de la
pgina doctors.aspx de forma que muestre los nombres de ciudades nicos de la
base de datos doctors. Cuando el usuario seleccione una ciudad, el cdigo
crear una nueva vista de los datos del DataSet y mostrar los datos en el
DataGrid.
El cuadro de lista desplegable lstCities actualmente est vinculado al campo de
ciudad de la tabla doctors utilizando un objeto SqlCommand. Esta vinculacin
hace que se muestren todas las ciudades en el cuadro de lista desplegable. En
este ejercicio, utilizaremos un procedimiento almacenado para seleccionar los
nombres de ciudades nicos de la tabla doctors.
Debido a que el cuadro de lista desplegable lstCities est actualmente
vinculado, debemos eliminar esa vinculacin antes de utilizar el procedimiento
almacenado.
C#
3. Comentar este cdigo seleccionando todas las lneas del cdigo y haciendo
clic en el icono Comentario
de la Barra de herramientas.
Valor
DataSource
drCities
DataTextField
"City"
C#
Ejercicio 2
Obtener las especialidades de los doctores
En este ejercicio, mostraremos las especialidades de un doctor en un cuadro de
lista. Cuando se selecciona un doctor en el objeto DataGrid dgDoctors, se
invoca el procedimiento almacenado getDoctorSpecialty y se muestra el
resultado en el cuadro de lista lstSpecialties.
C#
C#
string strDrID;
strDrID = dgDoctors.SelectedItem.Cells[1].Text;
C#
Nombre de parmetro
Tipo de datos
Tamao
@dr_id
SqlDbType.Char
C#
SqlConnection1.Open()
Dim drSpecialty As SqlDataReader
drSpecialty = cmdSpecialty.ExecuteReader()
C#
sqlConnection1.Open();
sqlDataReader drSpecialty;
drSpecialty = cmdSpecialty.ExecuteReader();
Valor
DataSource
drSpecialty
DataTextField
"Specialty"
lstSpecialties.DataSource = drSpecialty
lstSpecialties.DataTextField = "Specialty"
lstSpecialties.DataBind()
drSpecialty.Close()
SqlConnection1.Close()
C#
lstSpecialties.DataSource = drSpecialty;
lstSpecialties.DataTextField = "Specialty";
lstSpecialties.DataBind();
drSpecialty.Close();
sqlConnection1.Close();
C#
if (drSpecialty != null)
{
lstSpecialties.Visible = true;
lblSpecialties.Visible = true;
}
ndice
Descripcin
10
25
35
Descripcin
*****************************
Introduccin
Qu es XML?
*****************************
Introduccin
Objetivos de la leccin
Qu es XML?
Instruccin
Instruccin de
de
procesamiento
procesamiento
Elementos
Elementos
Atributos
Atributos
<?xml
<?xml version="1.0"?>
version="1.0"?>
<authors>
<authors>
<author
<author ID="1">
ID="1">
<name>Jay</name>
<name>Jay</name>
</author>
</author>
<!-<!-- There
There are
are more
more authors.
authors. -->
-->
</authors>
</authors>
Comentarios
Comentarios
*****************************
Introduccin
XML satisface todos estos requerimientos, y por tanto es una ayuda para la
organizacin de datos en las empresas.
Definicin
Partes de un documento
XML
Instrucciones de procesamiento
Elementos
Atributos
Comentarios
Instruccin de
procesamiento
Elementos
Atributos
Comentarios
XML vlido
Existen tres tipos de esquemas que pueden utilizarse para validar un documento
instancia XML, como muestra la siguiente tabla.
Tipo de esquema
Descripcin
Document Type
Definition (DTD)
XML-Data Reduced
(XDR schema)
XML Schema
Definition language
(XSD)
*****************************
Introduccin
XSD
Definicin de esquema
Declaraciones de
elemento y atributo
XSLT
Por muchas razones, los datos XML deben transformarse en otras formas y
variantes. El W3C ha generado XSLT como uno de los lenguajes de
programacin que puede ser utilizado para transformar datos. XSLT es una
parte de XSL (eXtensible Stylesheet Language).
XSLT es un lenguaje basado en XML que transforma documentos XML a
formatos arbitrarios basados en texto, que pueden ser o no XML.
Los tres documentos siguientes se utilizan con XSLT:
El documento origen
El documento origen es simplemente un documento XML con un formato
correcto que proporciona la entrada para la transformacin. Por ejemplo, el
siguiente cdigo es una muestra de un documento origen XML:
<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="Employees1.xsl"?>
<employees>
<employee>
<name>Stuart Munson</name>
<jobtitle>Programmer</jobtitle>
</employee>
<employee>
<name>Robert Brown</name>
<jobtitle>Tester</jobtitle>
</employee>
</employees>
El documento resultante
El documento resultante es un documento de texto producido por la
ejecucin del documento origen a travs de las transformaciones que se
encuentran en la hoja de estilo XSLT. Por ejemplo, ejecutando el
documento origen del cdigo anterior a travs de la hoja de estilo XSLT
anterior Employees1.xsl, se produce el siguiente documento resultante:
XPath
DOM
XQuery
XQuery se basa en otras tecnologas del W3C. Por ejemplo, XQuery utiliza
sentencias de ruta de la recomendacin XPath 2.0.
XQuery depende en gran medida de XPath para dirigir sus consultas dentro
de un determinado origen XML. XQuery tambin toma prestado el modelo
de objetos de XPath.
10
*****************************
Introduccin
XML y los DataSets comparten una estrecha conexin. Los DataSets son la
base para el almacenamiento en modo desconectado y la manipulacin de datos
relacionales. Los DataSets tambin son un contenedor para una o ms tablas de
datos. XML es el formato estndar para los datos presentes en DataSets.
Objetivos de la leccin
11
Cortafuegos
Cortafuegos
Servidor
Servidor Web
Web
DataSet
Archivo
XML
o
Flujo
Legible
Legible por
por el
el navegador
navegador
Legible
Legible por
por un
un mainframe
mainframe
*****************************
Introduccin
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).
12
Archivo
XML
Archivo
XML
Doc.Save
Doc.Save
Base de
datos
ReadXML
ReadXML
Objeto
Objeto
DataSet
DataSet
Objeto
Objeto
XmlDataDocument
XmlDataDocument
Objeto
Objeto
XslTransform
XslTransform
Archivo
XML
Archivo
XML o
HTML
Archivo
XSLT
*****************************
Introduccin
Mtodos DataSet
Podemos leer un documento XML o generar un flujo en un DataSet
utilizando el mtodo ReadXML del DataSet y a continuacin escribir un
DataSet en XML utilizando el mtodo WriteXML del DataSet. Como XML
es un formato estndar para intercambiar datos entre distintas aplicaciones
Web, podemos cargar un DataSet con informacin formateada en XML que
haya sido enviada por otras aplicaciones. De forma similar, un DataSet
puede escribir sus datos como un flujo XML o un documento que ser
compartido con otras aplicaciones o simplemente almacenado como un
documento XML.
13
Transformacin de datos
Podemos utilizar el objeto XSLTransform para cargar una hoja de estilo
.xsl y aplicar la transformacin. El documento resultante puede ser un
archivo XML o HTML.
14
Introduccin
ReadXML
C#
15
C#
GetXML
C#
16
Crear un DataSet
Mostrar en un DataGrid
Escribir XML
*****************************
Introduccin
Ejecutar la demostracin
Leer datos XML
17
18
Los estudiantes:
z
z
Crearn un DataSet
Cargarn un DataSet desde un archivo
XML
Lo mostrarn en un DataGrid
Tiempo: 5 Minutos
*****************************
Introduccin
Ejecutar la prctica
1. Abrir el archivo Employees.xml en Visual Studio .NET. En los siguientes
pasos, crearemos un formulario Web para mostrar los datos que se
encuentran en Employees.xml.
2. Crear un nuevo formulario Web Form en el proyecto Mod12VB o
Mod12CS denominado ReadXmlForm.aspx.
3. Arrastrar un control DataGrid al formulario Web Form. Establecer su
propiedad ID a dgEmployees.
4. En el procedimiento de evento Page_Load, crear un DataSet, invocar
ReadXml para leer los datos XML del archivo Employees.xml en el
DataSet, y vincular el DataGrid al DataSet.
El cdigo debera ser similar al siguiente:
Visual Basic .NET
C#
19
Dim
Dim dr
dr As
As New
New DataRelation
DataRelation __
("name",
("name", parentCol,
parentCol, childCol)
childCol)
dr.Nested
dr.Nested == True
True
ds.Relations.Add(dr)
ds.Relations.Add(dr)
Secuencial
<Title
<Title name="title1"
name="title1" />
/>
<Title
<Title name="title2"
name="title2" />
/>
<Title
<Title name="title3"
name="title3" />
/>
<Publisher
<Publisher name="pub1"
name="pub1" />
/>
<Publisher
<Publisher name="pub2"
name="pub2" />
/>
*****************************
DataRelation
DataRelation dr
dr == new
new
DataRelation("name",
DataRelation("name",
parentCol,
parentCol,
childCol);
childCol);
dr.Nested
dr.Nested == true;
true;
ds.Relations.Add(dr);
ds.Relations.Add(dr);
Anidado
<Publisher
<Publisher name="pub1"
name="pub1" >>
<Title
<Title name="title1"
name="title1" />
/>
<Title
<Title name="title3"
name="title3" />
/>
</Publisher>
</Publisher>
<Publisher
<Publisher name="pub2"
name="pub2" >>
<Title
<Title name="title2"
name="title2" />
/>
</Publisher>
</Publisher>
Introduccin
DataRelation
20
pub_id
price
title1
40,00
title2
60,00
title3
30,00
Secundaria
DataTable Publishers
pub_id
pub_name
pub1
pub2
Primaria
C#
C#
21
22
El siguiente XML muestra el aspecto que tendra la salida resultante con los
elementos Titles anidados dento de sus respectivos elementos primarios:
<?xml version = "1.0"standalone = "yes"?>
<NewDataSet>
<Publishers>
<pub_id>1</pub_id>
<pub_name>pub1</pub_name>
<Titles>
<title>title1</title>
<pub_id>1</pub_id>
<price>40.00</price>
</Titles>
<Titles>
<title>title3</title>
<pub_id>1</pub_id>
<price>30.00</price>
</Titles>
</Publishers>
<Publishers>
<pub_id>2</pub_id>
<pub_name>pub2</pub_name>
<Titles>
<title>title2</title>
<pub_id>2</pub_id>
<price>60.00</price>
</Titles>
</Publishers>
</NewDataSet>
23
*****************************
Introduccin
Ejecutar la demostracin
1. Abrir la pgina SaveNestedXML.aspx en Visual Studio .NET.
2. Visualizar la pgina de cdigo subyacente, explicar el cdigo y anotar lo
siguiente:
a. En la funcin CreateDataSet, se ha creado un DataSet con dos
DataTables.
b. En la funcin MakeDataRelation, se ha creado una DataRelation entre
las dos tablas, estableciendo la propiedad Nested a True o False,
dependiendo del argumento a la funcin.
c. En el procedimiento de evento cmdSave_Click, se ha creado la
DataRelation con Nested establecido a false, y el DataSet se ha escrito
en un archivo XML.
d. En el procedimiento de evento cmdSaveNested_Click, se ha creado la
DataRelation con la propiedad Nested establecida a true, y el DataSet
se ha escrito a un archivo XML.
3. Generar y examinar la pgina SaveNestedXML.aspx.
4. Hacer clic en Save as XML, y clic en el hiperenlace View XML.
stos son los datos XML creados desde el DataSet con la propiedad Nested
establecida a false. Todos los elementos Titles estn listados, seguidos de
los elementos Publishers.
5. Hacer clic en Save as Nested XML, y clic en el hiperenlace View Nested
XML.
24
stos son los datos XML que no han creado desde el DataSet con la
propiedad Nested establecida a True. Los elementos Titles estn anidados
dentro de los elementos Publishers relacionados.
*****************************
Introduccin
Objetivos de la leccin
Utilizar un XmlDataDocument.
25
26
System.Xml
Transformaciones XML
Base de
datos
DataAdapter
DataSet
Tablas
XmlDataDocument
Sincronizado
*****************************
Introduccin
Un nico conjunto de
datos
27
Dim
Dim objXmlDataDoc
objXmlDataDoc As
As New
New XmlDataDocument()
XmlDataDocument()
objXmlDataDoc.Load(Server.MapPath
objXmlDataDoc.Load(Server.MapPath ("file.xml"))
("file.xml"))
-or-orobjXmlDataDoc.DataSet.ReadXml(Server.MapPath
objXmlDataDoc.DataSet.ReadXml(Server.MapPath ("file.xml"))
("file.xml"))
XmlDataDocument
XmlDataDocument objXmlDataDoc
objXmlDataDoc == new
new XmlDataDocument();
XmlDataDocument();
objXmlDataDoc.Load(Server.MapPath
objXmlDataDoc.Load(Server.MapPath ("file.xml"));
("file.xml"));
-or-orobjXmlDataDoc.DataSet.ReadXml(Server.MapPath
objXmlDataDoc.DataSet.ReadXml(Server.MapPath ("file.xml"));
("file.xml"));
*****************************
Introduccin
C#
objXmlDataDoc.DataSet.ReadXml(Server.MapPath("file.xml"))
C#
objXmlDataDoc.DataSet.ReadXml(Server.MapPath("file.xml"));
28
Almacenar un DataSet
en un XmlDataDocument
C#
La primera lnea del cdigo anterior crea un nuevo DataSet denominado ds. La
ltima lnea crea un objeto denominado XmlDataDocument y pasa ds, un
DataSet, como parmetro. El proceso de rellenar ds se ha omitido del ejemplo.
29
XmlElement
XmlElement elem;
elem;
== objXmlDataDoc.GetElementFromRow(ds.Tables[0].Rows[1]);
elem
Utilizar
mtodos XML DOM
elem
objXmlDataDoc.GetElementFromRow(ds.Tables[0].Rows[1]);
z
Objeto XslTransform
*****************************
Introduccin
Mostrar datos en un
control enlazado a lista
dg.DataSource = objXmlDataDoc.DataSet
C#
dg.DataSource = objXmlDataDoc.DataSet;
C#
XmlElement elem;
elem = objXmlDataDoc.GetElementFromRow(ds.Tables[0].Rows[1]);
30
Aplicar una
transformacin XSLT
Crear un XmlDataDocument
Dim
Dim ds
ds As
As New
New DataSet()
DataSet()
'fill
'fill in
in DataSet
DataSet
...
...
Dim
Dim xmlDoc
xmlDoc As
As New
New XmlDataDocument(ds)
XmlDataDocument(ds)
Dim
Dim xslTran
xslTran As
As New
New XslTransform()
XslTransform()
xslTran.Load(Server.MapPath("PubTitles.xsl"))
xslTran.Load(Server.MapPath("PubTitles.xsl"))
Dim
Dim writer
writer As
As New
New XmlTextWriter
XmlTextWriter __
(Server.MapPath("PubTitles_output.html"),
(Server.MapPath("PubTitles_output.html"), __
System.Text.Encoding.UTF8)
System.Text.Encoding.UTF8)
xslTran.Transform(xmlDoc,
xslTran.Transform(xmlDoc, Nothing,
Nothing, writer)
writer)
writer.Close()
writer.Close()
Cdigo de ejemplo de #
*****************************
Introduccin
Crear XmlDataDocument
C#
31
32
Crear el objeto
XslTransform e invocar
el mtodo Transform
C#
2. Utilizar el mtodo Load para cargar el archivo de hoja de estilo .xsl para la
transformacin:
Visual Basic .NET
xslTran.Load(Server.MapPath("PubTitles.xsl"))
C#
xslTran.Load(Server.MapPath("PubTitles.xsl"));
C#
C#
5. Cerrar XmlTextWriter:
Visual Basic .NET
writer.Close()
C#
writer.Close();
33
Crear XslTransform
*****************************
Introduccin
Ejecutar la demostracin
1. Abrir la pgina TransformPubTitles.aspx.
Los dos controles DataGrid muestran las dos DataTables en el DataSet.
2. Visualizar la pgina de cdigo subyacente.
3. Mostrar el cdigo del procedimiento de evento cmdTransform_Click y
explicar el cdigo:
a. El DataSet se crea utilizando CreateDataSet para crear el DataSet, y
seguidamente se invoca a MakeDataRelation para crear la
DataRelation. No obstante, para que el mapping XmlDataDocument
funcione, debe agregarse al DataSet la tabla primaria, Publishers, antes
de la tabla Titles.
b. Se crea un XmlDataDocument desde el DataSet.
c. Se crea un objeto XslTransform y se carga con la hoja de estilo
PubTitles.xsl.
d. Se invoca el mtodo Transform del objeto XslTransform para aplicar
la hoja de estilo al XmlDocument.
Nota El mtodo Transform nicamente puede enviar la salida a un
XmlReader, un TextReader o a objetos XmlWriter.
34
*****************************
Introduccin
Objetivos de la leccin
35
36
*****************************
Introduccin
Para presentar datos XML en una pgina de un formulario Web Form, debemos
especificar las etiquetas, como <TABLE>, <P>, o cualquier otra etiqueta que
deseemos utilizar para mostrar los datos. Tambin debemos proporcionar
instrucciones sobre cmo los datos del archivo XML se muestran en estas
etiquetas; por ejemplo, si cada elemento del archivo XML debera mostrarse
como una fila o una columna de tabla, etc.
Lenguaje de
transformacin XSLT
Utilizar el control de
Servidor Web XML para
escribir un documento
XML
37
38
<asp:Xml
<asp:Xml id="xmlCtl"
id="xmlCtl" runat="server"
runat="server" />
/>
xmlCtl.Document.Load(Server.MapPath("text.xml"))
xmlCtl.Document.Load(Server.MapPath("text.xml"))
xmlCtl.Document.Load(Server.MapPath("text.xml"));
xmlCtl.Document.Load(Server.MapPath("text.xml"));
xmlCtl.Document.Save(Server.MapPath("text.xml"))
xmlCtl.Document.Save(Server.MapPath("text.xml"))
xmlCtl.Document.Save(Server.MapPath("text.xml"))
xmlCtl.Document.Save(Server.MapPath("text.xml"));;
*****************************
Introduccin
Antes de cargar y guardar datos XML en una aplicacin Web, debemos agregar
el control de servidor Web XML a la pgina del formulario Web Form, en la
ubicacin donde deseamos que aparezca el resultado.
Agregar un control de
Servidor Web XML a la
pgina de un formulario
Web Form
39
Existen varias formas de cargar datos XML en una aplicacin Web. Podemos:
Para proporcionar una ruta a un documento XML externo, seguir estos pasos:
1. Establecer la propiedad DocumentSource del control de Servidor Web
XML a la ruta del documento fuente XML.
2. El documento XML se escribir directamente al flujo de salida a menos que
tambin especifiquemos la propiedad TransformSource.
TransformSource debe ser un documento vlido de transformacin XSLT,
que se utilizar para transformar el documento XML antes de que su
contenido se escriba en el flujo de salida. El siguiente ejemplo muestra
cmo hacer referencia a documentos origen utilizando una ruta relativa:
<body>
<h3>XML Example</h3>
<form runat="server">
<asp:Xml id="xml1" DocumentSource="MySource.xml"
TransformSource="MyStyle.xsl" runat="server" />
</form>
</body>
Cargar un documento
XML como un objeto y
pasarlo al control
40
C#
Podemos guardar los datos XML utilizando el mtodo Save, como muestra el
siguiente cdigo de ejemplo:
XmlCtl.Document.Save(Server.MapPath("xmlResult.xml"))
C#
XmlCtl.Document.Save(Server.MapPath("xmlResult.xml"));
41
Ver el resultado
Ver el resultado
*****************************
Introduccin
Ejecutar la demostracin
1. Abrir el archivo PubTitlesData.xml.
Este archivo contiene los datos que se mostrarn de la pgina ASPX.
2. Crear un nuevo formulario Web en el proyecto Mod12VB o Mod12CS
denominado MyUseXmlControl.aspx.
3. Arrastrar el control XML desde el Cuadro de herramientas al formulario
Web Form.
4. Establecer la propiedad DocumentSource del control XML al archivo
PubTitlesData.xml.
5. Generar y examinar.
sta es la vista predeterminada de los datos segn lo establecido por el
control. La vista predeterminada de los datos no tiene formato.
6. Establecer la propiedad TransformSource del control XML al archivo
PubTitles.xsl.
7. Generar y examinar la pgina de nuevo.
sta es la vista de los datos segn lo establecido por la hoja de estilos
PubTitles.xsl.
Benefits
Benefits
Home
Home Page
Page
Coho
Winery
Default.aspx
Default.aspx
Menu
Menu
Component
Component
Registration
Registration
Register.aspx
Register.aspx
Header.ascx
Header.ascx
Web.
config
Class1.vb
Class1.vb or
or Class1.cs
Class1.cs
Life
Life Insurance
Insurance
Retirement
Retirement
Life.aspx
Life.aspx
Lab Web
Application
Page
Page Header
Header
Retirement.aspx
Retirement.aspx
Prospectus
Prospectus
Prospectus.aspx
Prospectus.aspx
Medical
Medical
Medical.aspx
Medical.aspx
Doctors
Doctors
Doctors.aspx
Doctors.aspx
XML
Files
ASPState
tempdb
Dental
Dental
Dental.aspx
Dental.aspx
User
User Control
namedate.ascx
namedate.ascx
Doctors
XML
XML Web
Web
Service
Service
dentalService1.asmx
dentalService1.asmx
Dentists
*****************************
Objetivos
Requisitos previos
Escenario
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList.
Estos proyectos pueden haberse creado utilizando Visual Basic .NET o
Microsoft Visual C# .NET.
Si no se han creado estos proyectos, realizar los siguientes pasos:
Ir a la carpeta VB\Starter\BenefitsListVB.
Ir a la carpeta CS\Starter\BenefitsListCS.
Estas carpetas pueden encontrarse dentro del fichero labs10.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.
Ejercicio 1
Leer una lista de fondos comunes de inversin de un archivo XML
En este ejercicio, leeremos una lista de los fondos comunes de inversin del
archivo mutual_funds.xml y los almacenaremos en un DataSet. A
continuacin, mostraremos el DataSet en un control DataGrid.
VB\Starter\BenefitsVB.
C#
CS\Starter\BenefitsCS.
Estas carpetas pueden encontrarse dentro del fichero labs10.zip
c. En el cuadro de lista desplegable Archivos de tipo, hacer clic en Todos
los archivos (*.*).
d. Seleccionar los siguientes archivos y hacer clic en Abrir:
retirement.aspx
prospectus.aspx
mutual_funds.xml
lgcap.xml
growth.xml
midcap.xml
smcap.xml
prospectus_style.xsl
3. Abrir el archivo mutual_funds.xml y examinar su contenido. Cules son
los dos campos (elementos) de cada fondo?
_____________________________________________________________
_____________________________________________________________
4. Abrir el formulario Web Form retirement.aspx.
Se ha agregado ya un control DataGrid a la pgina. Este DataGrid tiene
dos columnas personalizadas, una columna Name para mostrar el nombre
de un fondo comn de inversin, y una columna Link to prospectus, que
contiene un hiperenlace al formulario Web Form prospectus.aspx. En los
siguientes pasos, llenaremos este DataGrid con datos de un archivo XML.
C#
6. Llenar el DataSet con los datos del archivo XML y mostrar el DataSet en
el control DataGrid dgRetirement:
a. Crear un DataSet denominado dsRetirement.
b. Invocar el mtodo ReadXml del DataSet para leer el archivo
mutual_funds.xml.
c. Establecer la fuente de datos del DataGrid dgRetirement en
dsRetirement.
d. Invocar el mtodo DataBind del DataGrid.
El cdigo debera ser similar al siguiente:
Visual Basic .NET
C#
Ejercicio 2
Leer, transformar y mostrar XML
En este ejercicio, utilizaremos el control Xml para leer, transformar y mostrar el
prospecto de un determinado fondo comn de inversin.
Valor
ID
xmlProspectus
DocumentSource
lgcap.xml
C#
C#
C#
VB\Starter\BenefitsVB.
C#
CS\Starter\BenefitsCS.
Estas carpetas pueden encontrarse dentro del fichero labs10.zip
2. Abrir el formulario Web Form nestedData.aspx.
3. Abrir la pgina de cdigo subyacente nestedData.aspx.vb o
nestedData.aspx.cs y examinar el cdigo.
El cdigo genera un DataSet denominado dsDoctorsSpecialities, que
contiene tres objetos DataTable: doctors, drspecialties y specialties. El
cdigo crea relaciones entre las tres tablas.
Qu columna vincula los objetos DataTable doctors y drspecialties en la
DataRelation relation1? Cul es la DataTable primaria de esta relacin?
____________________________________________________________
____________________________________________________________
4. Generar y examinar la pgina nestedData.aspx y analizar el XML creado.
Son datos anidados?
____________________________________________________________
____________________________________________________________
5. Localizar el siguiente comentario en el procedimiento de evento
Page_Load:
C#
'dr1.Nested = True
C#
//dr1.Nested = true;
C#
10. Quitar el comentario de la siguiente lnea de cdigo para crear una relacin
anidada entre los objetos DataTable specialties y drspecialties:
Visual Basic .NET
'dr2.Nested = True
C#
//dr2.Nested = true;
Crear y consumir
servicios Web XML
ndice
Descripcin
28
Descripcin
*****************************
Introduccin
Objetivos
Utilizar las plantillas de Visual Studio .NET para crear un servicio Web
XML.
*****************************
Introduccin
Uno de los retos con los que podemos enfrentarnos en la creacin de sitios Web
con rica funcionalidad es la integracin de aplicaciones. A menudo,
necesitamos combinar varias aplicaciones para formar una solucin nica y
fcil de utilizar. El problema de intentar conseguir una solucin de este tipo es
que las aplicaciones que necesitamos combinar pueden encontrarse en distintas
plataformas, cada una ejecutando un sistema operativo distinto. Adems, es
posible que las aplicaciones se hayan creado en diferentes lenguajes de
programacin.
Los servicios Web XML proporcionan un modelo simple, flexible y basado en
estndares para conectar aplicaciones a travs de Internet. Los servicios Web
XML nos permiten aprovechar la infraestructura existente en Internet, y enlazar
aplicaciones, con independencia de las plataformas, lenguajes de programacin
o modelos de objetos que se hayan utilizado para implementarlas.
En esta leccin, estudiaremos la utilidad y el proceso que existe tras invocar un
servicio Web XML desde un formulario Web Form.
Objetivos de la leccin
Explicar por qu los servicios Web XML son importantes para los
desarrolladores de aplicaciones Web.
*****************************
Introduccin
Comunicacin
aplicacin a aplicacin a
travs de Internet
Los servicios Web XML estn diseados para interactuar directamente con
otras aplicaciones a travs de Internet. En consecuencia, los servicios Web
XML no tienen interfaz de usuario (IU), sino que proporcionan interfaces
definidos por estndares denominados contratos que describen los servicios que
proporcionan.
Un servicio Web XML puede ser utilizado internamente por una sola aplicacin
o externamente por muchas aplicaciones accediendo a l a travs de Internet.
Independencia del
lenguaje
Independencia del
protocolo
Independencia de la
plataforma
Es posible acceder a los servicios Web XML mediante una interfaz estndar, lo
cual permite que sistemas distintos puedan trabajar juntos. Los servidores que
pueden soportar formularios Web Form tambin pueden soportar servicios Web
XML.
Asncrono
Los servicios Web XML son asncronos, ya que el objeto que realiza la peticin
en la aplicacin cliente y el objeto de respuesta del servicio Web XML son
sobres SOAP nicos que no requieren una conexin compartida. Las
interacciones entre la aplicacin cliente y el servicio Web XML pueden ser
posteriormente divididas en una peticin y respuesta inicial para invocar el
mtodo del servicio Web XML, y una segunda peticin para recoger los
resultados. Esta comunicacin asncrona permite tanto a la aplicacin que
realiza la peticin como al servicio Web XML la oportunidad de seguir
procesndose mientras la interaccin est en funcionamiento.
Basado en W3C
Los servicios Web XML estn basados en un estndar del World Wide Web
Consortium (W3C) que sigue evolucionando. De tal modo, las caractersticas
genricas de los servicios Web XML estn fijadas; sin embargo, pueden
agregarse nuevas caractersticas en el futuro.
Nota Para ms informacin sobre el estndar del servicio Web XML del W3C,
ver el sitio Web oficial de W3C en http://www.w3c.org.
Lluvia
Internet
El tipo de cambio es:
$1.56
Base de datos de
precios de billetes
*****************************
Introduccin
Caractersticas
Servicios de
autenticacin
Informes
meteorolgicos
Caractersticas
Precios de billetes de
avin
Valores de cotizacin
Resumen de noticias
Seguimiento de pedidos
Los servicios Web XML utilizan Internet; por tanto, la agencia de viajes
no necesita crear ni mantener conexiones dedicadas para ofrecer el
servicio.
Los servicios Web XML son independientes del lenguaje, protocolo y
plataforma; por tanto, los desarrolladores de la agencia de viajes no
necesitan aprender cmo se gener e implant el servicio Web XML
para poder utilizarlo.
El sitio Web puede ser capaz de cobrar a los proveedores del servicio
Web XML por el derecho de ofrecer servicios a la base de clientes del
sitio Web de la agencia de viajes.
XML y su descripcin
22 Descubrir el servicio Web XML
UDDI
Invocar el
servicio Web
XML desde el
formulario
Web Form
Mediante el
proxy
Web
Form
55
Proxy
22
11
33
.disco
44
.wsdl
66
Servicio Web
*****************************
Introduccin
Podemos encontrar servicios Web XML existentes para agregar a nuestro sitio
Web utilizando uno o ms servicios de descubrimiento. Estos servicios de
descubrimiento estn evolucionando y cambiando rpidamente a medida que el
desarrollo y uso de los servicios Web XML va ganando aceptacin en la
comunidad de Internet.
UDDI
Archivos .disco
Un archivo de descubrimiento esttico (.disco) es un documento XML que
contiene enlaces a otros recursos que describen los servicios Web XML.
Los archivos .disco se generan automticamente para un servicio Web XML
cuando se accede al servicio utilizando una URL con ?DISCO en la cadena
de consulta.
El siguiente cdigo muestra un ejemplo de un archivo .disco:
<?xml version="1.0" ?>
<disco:discovery
xmlns:disco="http://schemas.xmlsoap.org/disco"
xmlns:wsdl="http://schemas.xmlsoap.org/disco/wsdl">
<wsdl:contractRef
ref="http://MyWebServer/UserName.asmx?WSDL"/>
</disco:discovery>
Archivos .vsdisco
Los archivos de descubrimiento dinmicos (.vsdisco) son documentos de
descubrimiento dinmico que Visual Studio .NET genera automticamente
durante la fase de desarrollo de un servicio Web XML.
Un archivo .vsdisco es un archivo basado en XML con un nodo raz
denominado <dynamicDiscovery>. Este nodo puede contener nodos
<exclude>. Cada nodo <exclude> contiene una ruta que el proceso de
descubrimiento dinmico no debera buscar.
Precaucin Para mantener el control sobre los servicios Web XML que
pueden descubrir los clientes, deberamos utilizar nicamente el
descubrimiento dinmico en los servidores Web de desarrollo.
10
Archivos WSDL
Protocolos de comunicacin.
11
*****************************
Introduccin
Objetivos de la leccin
Identificar los mtodos Web que estn disponibles desde un servicio Web
XML.
12
*****************************
Introduccin
Seleccionar un mtodo
del servicio Web XML
13
Los servicios Web XML siempre devuelven los datos en formato XML. La
siguiente ilustracin muestra la vista del navegador con el resultado de invocar
el servicio Web XML Stocks con el parmetro Contoso.
14
Tiempo: 5 Minutos
*****************************
Introduccin
15
16
*****************************
Introduccin
Objetivos de la leccin
17
Internet
SOAP
Servicio
Web XML
*****************************
Introduccin
Para invocar un servicio Web XML desde un formulario Web Form, debemos
crear una referencia Web al servicio Web XML en nuestro proyecto de
aplicacin Web. La referencia Web crea el objeto proxy que se utiliza para
comunicar con el servicio Web XML utilizando SOAP.
Qu es un proxy?
Una clase proxy es cdigo que parece exactamente igual a la clase que
representa, pero no contiene lgica de aplicacin. En lugar de ello, la clase
proxy contiene la lgica de combinacin y de transporte. Un objeto proxy
permite que un cliente acceda a un servicio Web XML como si fuera un objeto
COM local. El proxy debe estar en el equipo que dispone de la aplicacin Web.
Visual Studio .NET crea automticamente un proxy denominado reference.vb o
reference.cs cuando agregamos una referencia Web a un servicio Web XML.
Cuando creamos la referencia Web, Visual Studio .NET crea el archivo de
referencia, que es el cdigo proxy.
Los proxies y los servicios Web XML interactan utilizando SOAP, que es un
protocolo XML utilizado para intercambiar informacin estructurada y tipada.
Nota Para tener una vista previa de los mensajes SOAP de un servicio Web
XML, acceder al servicio Web XML URL directamente y examinar el cdigo
que muestra la pgina de descripcin HTML.
El proceso de acceder a un servicio Web XML mediante un proxy es el
siguiente:
1. El usuario enva una peticin URL a un formulario Web Form que requiere
una llamada a un servicio Web XML.
2. El formulario Web Form instancia el proxy, que invoca el servicio Web
XML utilizando SOAP.
La siguiente es la peticin SOAP para el mtodo Web GetRating en un
servicio Web XML Stocks y que pasa el argumento Contoso:
18
19
20
Cdigo de ejemplo en C#
*****************************
Introduccin
Nota Visual Studio .NET est optimizado para los servicios Web XML
creados por Visual Studio .NET. Es posible que ASP.NET no lea los
archivos .wsdl creados con otros programas, si los archivos incluyen
cadenas terminadas nulas.
21
C#
GetStocks.localhost.Service1 ProxyGetStocks =
new GetStocks.localhost.Service1();
Label1.Text = ProxyGetStocks.GetRating("Contoso")
C#
Label1.Text = ProxyGetStocks.GetRating("Contoso");
C#
22
*****************************
Introduccin
Crear un proxy
23
C#
Probar con un
explorador
Visualizar el archivo de
referencia
24
Servicio no disponible
GetStocks.StockWebRef.Service1
GetStocks.StockWebRef.Service1 ProxyGetStocks
ProxyGetStocks == new
new
GetStocks.StockWebRef.Service1();
GetStocks.StockWebRef.Service1();
ProxyGetStocks.Timeout
ProxyGetStocks.Timeout == 10000;
10000;
try
try
{{
lblMessage.Text
lblMessage.Text ==
ProxyGetStocks.GetRating(TextBox1.Text);
ProxyGetStocks.GetRating(TextBox1.Text);
}}
catch
catch (Exception
(Exception err)
err)
{{
lblMessage.Text
lblMessage.Text == err.Message;
err.Message;
}}
Introduccin
Try
'call the XML Web service
Catch err As Exception
Label1.Text = err.Message
End Try
C#
25
try
{
//call the XML Web service
}
catch (Exception err)
{
Label1.Text = err.Message;
}
Excepciones SOAP de
servicios Web XML
Try
'call your XML Web service
Catch err As SoapException
Label1.Text = "Unable to process your request"
End Try
C#
try
{
//call your XML Web service
}
catch (SoapException err)
{
Label1.Text = "Unable to process your request";
}
26
Evaluar la excepcin
*****************************
Introduccin
Ejecutar la demostracin
1. Volver a abrir el proyecto GetWeather de la prctica anterior.
2. Establecer el tiempo de espera de trycatch
3. Modificar el cdigo del controlador de evento del botn para establecer un
tiempo de espera de 10 segundos (10.000) y agregar cdigo al controlador
de evento del botn para aadir una instruccin trycatch sobre la llamada
al servicio Web XML.
El cdigo debera ser similar al siguiente:
C#
27
Ralentizar el servicio
Web XML
Imports System.Threading
C#
using System.Threading;
Thread.Sleep(40000)
C#
Thread.Sleep(40000);
Este cdigo har que el servicio Web XML funcione muy despacio para
simular un servicio Web XML que no est en lnea o que opera con mucha
lentitud.
Probar la excepcin
28
*****************************
Introduccin
Objetivos de la leccin
29
*****************************
Introduccin
30
31
Pgina .asmx
<%@
<%@ WebService
WebService Language="vb"
Language="vb"
Codebehind="Service1.asmx.vb"
Codebehind="Service1.asmx.vb"
Class="XMLWebServiceName.Service1"
Class="XMLWebServiceName.Service1" %>
%>
Pgina .asmx.vb
Imports
Imports System
System
Imports
Imports System.Web.Services
System.Web.Services
Class
Class Service1
Service1
<WebMethod()>
<WebMethod()> Public
Public Function
Function function1()
function1() As
As type
type
'function_here
'function_here
End
End Function
Function
End
End Class
Class
Cdigo de ejemplo en C#
*****************************
Introduccin
Cuando creamos un servicio Web XML con Visual Studio .NET, se crean dos
archivos principales que constituyen el servicio Web XML: el archivo .asmx y
el archivo .asmx.vb o .asmx.cs. El archivo .asmx identifica la pgina Web como
un servicio Web XML, y el archivo .asmx.vb o .asmx.cs, tambin denominado
pgina de cdigo subyacente, contiene la lgica del servicio Web XML.
Pgina .asmx
C#
@ Web Service
El atributo @ Web Service identifica el archivo como un servicio Web
XML.
Language
El atributo Language define el lenguaje en que est escrito el script de la
pgina Web. Algunos valores de este atributo son: vb, c# y JScript.
32
Codebehind
El atributo Codebehind identifica el nombre y la ubicacin de la pgina de
cdigo subyacente .asmx.vb o .asmx.cs que contiene la lgica del servicio
Web XML.
Class
El atributo Class identifica la clase base que soporta esta instancia de un
servicio Web XML.
En el archivo .asmx, debemos definir una clase que encapsule la
funcionalidad del servicio Web XML. Esta clase definida debera ser
pblica, y debera heredarse de la clase base del servicio Web XML.
La clase predeterminada del servicio Web XML es:
Class Service1
C#
class Service1
Pgina de cdigo
subyacente
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
C#
using
using
using
using
using
using
using
33
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Diagnostics;
System.Web;
System.Web.Services;
namespace Service1
{
public class Service1 : System.Web.Services.WebService
{
public Service1()
{
//CODEGEN: This call is required by the ASP.NET Web
Services Designer
InitializeComponent();
}
//
//
//
//
//
}
}
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
Espacios de nombres
Los servicios Web XML importan los espacios de nombres System y
System.Web.Services:
Imports System
El espacio de nombres ASP.NET System contiene las clases que
soportan las clases ASP.NET generales.
Imports System.Web.Services
El espacio de nombres ASP.NET Web.Services contiene los mtodos y
las clases de propiedades que soportan los servicios Web XML.
34
C#
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.
C#
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
35
*****************************
Introduccin
http://localhost/StocksVB
C#
http://localhost/StockCS.
Automticamente se crea una carpeta StocksVB o StocksCS en la carpeta
\Inetpub\wwwroot.
2. Abrir el archivo predeterminado .asmx, Service1.asmx, en vista de Cdigo
haciendo clic con el botn derecho sobre el archivo en el Explorador de
soluciones y clic en Ver cdigo.
Observar que el nombre predeterminado de la clase es Service1, y que
Visual Studio .NET ha abierto automticamente el archivo de cdigo
subyacente Sevice1.asmx.vb o Sevice1.asmx.cs.
36
C#
[WebMethod]
public string GetRating(String Ticker)
{
if (Ticker == "Contoso")
return "Buy";
else
return "Sell";
}
4. Guardar el archivo.
http://localhost/StocksVB/Service1.asmx.
C#
http://localhost/StocksCS/Service1.asmx.
Para abrir el servicio Web XML, tambin puede hacerse clic con el botn
derecho en Service1.asmx en el Explorador de soluciones y clic en Ver en
el navegador.
Observar que hay un comentario sobre el espacio de nombres.
6. Hacer clic en GetRating.
7. Escribir el nombre de una empresa para la que deseemos una
recomendacin de una cotizacin, como Contoso o Northwind Traders, en
el campo Ticker, y hacer clic en Invoke.
Cambiar o agregar el
espacio de nombres
C#
37
http://localhost/StocksVB/Service1.asmx.
C#
http://localhost/StocksCS/Service1.asmx.
Observar que desaparece el comentario sobre el espacio de nombres.
11. Agregar una descripcin para Class. El cdigo debera ser similar al
siguiente:
<WebService(Namespace:= _
"http://microsoft.com/webservices/", _
Description:="My class description...")> _
C#
[WebService(Namespace=
"http://microsoft.com/webservices/",
Description="My class description...")]
C#
http://localhost/StocksVB/Service1.asmx.
C#
http://localhost/StocksCS/Service1.asmx.
Verificar que aparecen las descripciones.
Benefits
Benefits
Home
Home Page
Page
Coho
Winery
Default.aspx
Default.aspx
Menu
Menu
Component
Component
Registration
Registration
Register.aspx
Register.aspx
Retirement
Retirement
Life.aspx
Life.aspx
Retirement.aspx
Retirement.aspx
Prospectus
Prospectus
Prospectus.aspx
Prospectus.aspx
Medical
Medical
Medical.aspx
Medical.aspx
Doctors
Doctors
Doctors.aspx
Doctors.aspx
XML
Files
ASPState
Header.ascx
Header.ascx
Web.
config
Class1.vb
Class1.vb or
or Class1.cs
Class1.cs
Life
Life Insurance
Insurance
Lab Web
Application
Page
Page Header
Header
tempdb
Dental
Dental
Dental.aspx
Dental.aspx
User
User Control
namedate.ascx
namedate.ascx
Doctors
XML
XML Web
Web
Service
Service
dentalService1.asmx
dentalService1.asmx
Dentists
*****************************
Objetivos
Requisitos previos
Escenario
Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios de este
curso, crearemos un sitio Web que permita a los empleados seleccionar y
configurar los beneficios que elijan.
En este laboratorio:
Crearemos un servicio Web XML que nos permita recuperar la lista de todos
los dentistas utilizados por Coho Winery.
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList.
Estos proyectos pueden haberse creado utilizando Visual Basic .NET o Microsoft
Visual C# .NET.
Si no se han creado estos proyectos, realizar los siguientes pasos:
Ir a la carpeta VB\Starter\BenefitsVB.
Ir a la carpeta Starter\BenefitsCS.
Estas carpetas pueden encontrarse dentro del fichero labs11.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente Benefits, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.
Ejercicio 1
Crear el mtodo GetAllDentists del servicio Web XML Dentist
En este ejercicio, utilizaremos Visual Studio .NET para crear un servicio Web
XML.
C#
C#
Crear el DataSet
1. Hacer clic en cualquier lugar de la superficie de diseo para deseleccionar los
objetos SqlConnection1 y SqlDataAdapter1.
2. Hacer clic con el botn derecho en el objeto SqlDataAdapter1 en la pgina
DentalService1.asmx y hacer clic en Generar Dataset.
3. En el cuadro de dilogo Generar Dataset, crear un nuevo DataSet
denominado dsDentists, asegurarse de que est seleccionada la opcin
Agregar este Dataset al diseador, y hacer clic en Aceptar.
Se crea un objeto dsDentists y se ubica en la vista de Diseo de la pgina
DentalService1.asmx, y se agrega un nuevo archivo esquema denominado
dsDentists.xsd al proyecto DentalService en el Explorador de soluciones.
Nota Cuando se cree el DataSet dsDentists, Visual Basic .NET crear una
instancia dsDentists denominada DsDentists1 y Visual C# crear una
instancia dsDentists denominada dsDentists1.
<WebMethod()> _
Public Function GetAllDentists() As DataSet
SqlDataAdapter1.Fill(DsDentists1)
Return DsDentists1
End Function
C#
[WebMethod()]
public DataSet GetAllDentists()
{
sqlDataAdapter1.Fill(dsDentists1);
return dsDentists1;
}
Valor
Namespace
http://microsoft.com/webservices/
Description
<WebService( _
Namespace:="http://microsoft.com/webservices/", _
Description:="This XML Web service contains " & _
"information about the dentists.")> _
Public Class DentalService1
Inherits System.Web.Services.WebService
C#
[WebService(Namespace="http://microsoft.com/webservices/",
Description="This XML Web service contains " +
"information about the dentists.")]
public class DentalService1 :
System.Web.Services.WebService
<WebMethod(Description:= _
"This XML Web service method returns all the dentists")> _
Public Function GetAllDentists() As DataSet
C#
Ejercicio 2
Crear el mtodo GetDentistsByPostalCode del servicio Web XML
En este ejercicio, agregaremos otro mtodo al servicio Web XML DentistService.
El nuevo mtodo del servicio Web XML se denomina GetDentistsByPostalCode
y devuelve un DataSet que contiene todos los dentistas en un determinado cdigo
postal. En este ejercicio, escribiremos cdigo utilizado por ADO.NET para invocar
un procedimiento almacenado SQL Server.
Imports System.Data.SqlClient
C#
using System.Data.SqlClient;
<WebMethod(Description:= _
"This XML Web service method returns the " & _
"dentists from a supplied postal code.")> _
Public Function GetDentistsByPostalCode( _
ByVal strPostalCode As String) As DataSet
End Function
C#
[WebMethod(Description=
"This XML Web service method returns the " +
"dentists from a supplied postal code.")]
public DataSet GetDentistsByPostalCode(
String strPostalCode)
{
}
C#
Ejercicio 3
Consumir el mtodo de servicio Web XML GetAllDentists
En este ejercicio, invocaremos el mtodo GetAllDentists del servicio Web XML
DentalService. A continuacin, mostraremos el DataSet resultante en un control
DataGrid.
del Explorador de
C#
C#
BenefitsCS.DentalWebRef.DentalService1 ProxyGetAllDentists
= new BenefitsCS.DentalWebRef.DentalService1();
DataSet dsAllDentists = new DataSet();
dsAllDentists = ProxyGetAllDentists.GetAllDentists();
dgDentists.DataSource = dsAllDentists.Tables[0];
dgDentists.DataBind();
Ejercicio 4
Consumir el mtodo GetDentistsByPostalCode del servicio Web XML
En este ejercicio, invocaremos el mtodo GetDentistsByPostalCode del servicio
Web XML Dentists.asmx. Utilizaremos un DataGrid para mostrar el DataSet
resultante de los dentistas de un determinado cdigo postal.
C#
C#
BenefitsCS.DentalWebRef.DentalService1
ProxyGetDentistsByPostalCode = new
BenefitsCS.DentalWebRef.DentalService1();
DataSet dsDentistsByPostalCode = new DataSet();
dsDentistsByPostalCode =
ProxyGetDentistsByPostalCode.GetDentistsByPostalCode
(txtPostalCode.Text);
dgDentists.DataSource = dsDentistsByPostalCode.Tables[0];
dgDentists.DataBind();
Benefits
Benefits
Home
Home Page
Page
Coho
Winery
Default.aspx
Default.aspx
Menu
Menu
Component
Component
Registration
Registration
Register.aspx
Register.aspx
Header.ascx
Header.ascx
Web.
config
Class1.vb
Class1.vb or
or Class1.cs
Class1.cs
Life
Life Insurance
Insurance
Retirement
Retirement
Life.aspx
Life.aspx
Lab Web
Application
Page
Page Header
Header
Retirement.aspx
Retirement.aspx
Prospectus
Prospectus
Prospectus.aspx
Prospectus.aspx
Medical
Medical
Medical.aspx
Medical.aspx
Doctors
Doctors
Doctors.aspx
Doctors.aspx
XML
Files
tempdb
Dental
Dental
Dental.aspx
Dental.aspx
User
User Control
namedate.ascx
namedate.ascx
Doctors
ASPState
XML
XML Web
Web
Service
Service
dentalService1.asmx
dentalService1.asmx
Dentists
*****************************
Objetivos
Nota Este laboratorio se centra en los conceptos de este mdulo. Por ello,
podra no cumplir las recomendaciones de seguridad de Microsoft.
Requisitos previos
Escenario
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList.
Estos proyectos pueden haberse creado utilizando Visual Basic .NET o
Microsoft Visual C# .NET.
Si no se han creado estos proyectos, realizar los siguientes pasos:
Ir a la carpeta VB\Starter\BenefitsVB.
Ir a la carpeta CS\Starter\BenefitsCS.
Estas carpetas pueden encontrarse dentro del fichero labs12.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente Benefits, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.
Ir a la carpeta VB\Starter\BenefitsListVB.
Ir a la carpeta CS\Starter\BenefitsListCS.
Estas carpetas pueden encontrarse dentro del fichero labs12.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
1. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.
Ir a la carpeta VB\Starter\DentalServiceVB.
Ir a la carpeta CS\Starter\DentalServiceCS.
Estas carpetas pueden encontrarse dentro del fichero labs12.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente DentalService, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de esta carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.
7. Generar el servicio Web XML DentalService haciendo clic con el botn
derecho en el proyecto DentalServiceVB o DentalServiceCS en el
Explorador de soluciones y hacer clic en Generar.
Ejercicio 1
Utilizar variables de sesin
En este ejercicio, almacenaremos el nombre y la fecha de nacimiento del
usuario en variables de sesin. Tanto el control de usuario namedate.ascx como
la pgina life.aspx buscarn las variables de sesin y rellenarn los cuadros de
texto adecuados con la informacin, si est disponible. Si las variables de sesin
no existen todava, una de las pginas las crear.
Escenario
Visual C#
if (!Page.IsPostBack)
{
string strName = (string)Session["Name"];
string strBirth = (string)Session["Birth"];
txtName.Text = strName;
txtBirth.Text = strBirth;
}
Visual C#
6. Agregar el cdigo bajo este comentario que asigna el texto del cuadro de
texto txtName a la variable de sesin Name, y asigna el texto del cuadro de
texto txtBirth a la variable de sesin Birth.
7. El cdigo debera ser similar al siguiente:
Visual Basic .NET
Session("Name") = txtName.Text
Session("Birth") = txtBirth.Text
Visual C#
Session["Name"] = txtName.Text;
Session["Birth"] = txtBirth.Text;
Visual C#
if (!Page.IsPostBack)
{
string strName = (string)Session["Name"];
string strBirth = (string)Session["Birth"];
txtName.Text = strName;
txtBirth.Text = strBirth;
}
Get
Session("Name") = txtName.Text
Return txtName.Text
End Get
Visual C#
get
{
Session["Name"] = txtName.Text;
return txtName.Text;
}
Get
Session("Birth") = txtBirth.Text
Return CDate(txtBirth.Text)
End Get
Visual C#
get
{
Session["Birth"] = txtBirth.Text;
return Convert.ToDateTime(txtBirth.Text);
}
Evaluar el cdigo
1. Generar y examinar life.aspx.
2. En el navegador, escribir nuestro nombre en el cuadro de texto Name,
escribir nuestra fecha de nacimiento en el cuadro de texto Birthdate, y
escribir 400 en el cuadro de texto Coverage.
3. Hacer clic en Save.
4. En la parte superior del formulario Web Form life.aspx, hacer clic en el
enlace a Medical.
En el formulario Web Form medical.aspx, aparecen nuestro nombre y fecha
de nacimiento. Estos valores se han obtenido de las variables de sesin.
5. Cambiar nuestro nombre en el cuadro de texto, y hacer clic en Save.
6. Hacer clic en el enlace a Life Insurance y comprobar que nuestro nombre
ha cambiado en el formulario Web Form life.aspx.
10
Ejercicio 2
Utilizar cookies
En este ejercicio, utilizaremos cookies para almacenar todas las selecciones de
beneficios que haga el usuario. Cuando el usuario regrese a la pgina
default.aspx, sus selecciones aparecern en la pgina.
Escenario
11
Visual C#
HttpCookie objGetCookie =
Request.Cookies["Benefits"];
string strDoc;
string strLife;
if (objGetCookie != null)
{
strDoc = objGetCookie.Values["doctor"];
strLife = objGetCookie.Values["life"];
txtDoctor.Text = strDoc;
txtLife.Text = strLife;
}
8. Guardar default.aspx.
12
Visual C#
13
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)
Visual C#
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);
Response.Redirect("default.aspx")
Visual C#
Response.Redirect("default.aspx");
Visual C#
14
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
15
Visual C#
if (Page.IsValid)
{
lblMessage.Text = "Valid!";
//TODO Lab 14: Set Session variables
Session["Name"] = txtName.Text;
Session["Birth"] = txtBirth.Text;
HttpCookie objCookie =
Request.Cookies["Benefits"];
string strDoc = "";
string strLife = "";
if (objCookie != null)
{
strDoc = objCookie.Values["doctor"];
strLife = objCookie.Values["life"];
}
if (chkShortTerm.Checked)
{
if (chkLongTerm.Checked)
{
strLife = "Short Term and Long Term";
}
else
{
strLife = "Short Term";
}
}
else if (chkLongTerm.Checked)
{
strLife = "Long Term";
}
strLife += ": Coverage = $" + txtCoverage.Text;
HttpCookie objNewCookie = new HttpCookie("Benefits");
objNewCookie.Expires = DateTime.Now.AddDays(30);
objNewCookie.Values.Add("doctor", strDoc);
objNewCookie.Values.Add("life", strLife);
Response.Cookies.Add(objNewCookie);
Response.Redirect("default.aspx");
}
16
Probar la cookie
1. Generar y examinar la pgina default.aspx.
2. Hacer clic en el enlace a Medical.
3. Rellenar la informacin requerida y hacer clic en Save.
4. Seremos retornados a default.aspx, y la informacin de doctores se ha
cumplimentado.
5. Hacer clic en el enlace a Life Insurance.
6. Rellenar la informacin requerida, seleccionar una o ambas opciones de
periodo de cobertura, y hacer clic en Save.
7. Seremos retornados a default.aspx y la informacin relativa al seguro de
vida se ha cumplimentado.
17
Ejercicio 3
Utilizar variables de aplicacin
En este ejercicio, agregaremos un contador de pginas a la pgina
retirement.aspx.
Escenario
Deseamos proporcionar una forma rpida y sencilla para que los directivos
puedan ver cuntos empleados acceden al sitio Web Benefits. Para ello, hemos
decidido implementar un contador de pginas en la pgina default.aspx
utilizando una variable de aplicacin. Debemos asegurarnos de que el contador
no se incrementa cuando tiene lugar el postback de una pgina, y que slo
cuenta las visitas nicas a la pgina.
18
Agregar el cdigo
1. En el procedimiento de evento Page_Load, agregar cdigo que incremente
el valor de la variable de aplicacin Visits en una unidad.
2. El cdigo debera bloquear la variable de aplicacin antes de incrementarla,
y debera desbloquearla despus de incrementarla. Insertar el cdigo de
modo que se ejecute nicamente cuando la pgina no enve informacin de
retorno en el postback.
3. Agregar cdigo para establecer la propiedad Text de txtVisits al valor
almacenado en la variable de aplicacin Visits. Este cdigo debera
ejecutarse cada vez que se cargue la pgina.
4. Una vez finalizado, el procedimiento de evento Page_Load debera ser
similar al siguiente:
Visual Basic .NET
Visual C#
if (!Page.IsPostBack)
{
DataSet dsRetirement = new DataSet();
dsRetirement.ReadXml(
Server.MapPath["mutual_funds.xml"]);
dgRetirement.DataSource = dsRetirement;
dgRetirement.DataBind();
Application.Lock();
Application["Visits"]
=Convert.ToInt16(Application["Visits"]) + 1;
Application.UnLock();
}
txtVisits.Text = Application["Visits"].ToString();
19
Ejercicio 4
Almacenar variables de sesin en una base de datos
En este ejercicio, almacenaremos las variables de sesin de nombre de usuario y
fecha de nacimiento en una base de datos SQL Server.
Escenario
Para preparar nuestro sitio Web a una implantacin en una granja Web, las
variables de sesin se almacenarn en una ubicacin centralizada. Hemos
decidido utilizar una base de datos SQL Server como solucin de
almacenamiento a corto plazo.
Configurar Web.config
1. Abrir el archivo Web.config de la aplicacin Web Benefits.
2. Buscar el elemento sessionState.
3. Cambiar el modo de sessionState por SQLServer, y establecer la cadena de
conexin para utilizar la seguridad integrada para conectarse a localhost.
Una vez finalizado, el elemento sessionState debera ser similar al
siguiente:
<sessionState
mode="SQLServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;
Integrated Security=SSPI"
cookieless="false"
timeout="20"
/>
20
VB\Starter
Visual C#
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.
ndice
Descripcin
17
Descripcin
***
Introduccin
Objetivos
El archivo Global.asax
***
Introduccin
Objetivos de la leccin
Login.aspx
Login.aspx
Introduzca su informacin
de inicio de sesin:
Nombre
John
Introduzca su informacin
de inicio de sesin:
Nombre
John
Apellido
Chen
Apellido
Chen
Enviar
Enviar
Greetings.aspx
Hola
Servidor Web
Enviar
Enviar
Servidor Web
Greetings.aspx
Hola John Chen
He
Heolvidado
olvidado
quin
quineres!!
eres!!
***
Introduccin
Administracin del
estado
Ejemplo
Estado de sesin
Base de datos
Administraci
Administracin del estado en
el lado del cliente
Cookies
Propiedad ViewState
Cadenas de consulta
***
Introduccin
Administracin del
estado en el lado del
cliente y en el lado del
servidor
Lado servidor
Las opciones de la administracin del estado en el lado del servidor utilizan
recursos del servidor para almacenar la informacin del estado. La
seguridad de estas opciones es mayor que en el lado del cliente.
Lado cliente
La administracin del estado en el lado del cliente no utiliza recursos del
servidor para almacenar la informacin del estado. Las opciones en el lado
del cliente tienden a tener seguridad mnima, pero ofrecen un rpido
rendimiento del servidor porque no existe demanda en el servidor para
mantener el estado.
Lado servidor
Estado de aplicacin
En el estado de aplicacin, la informacin est disponible para todos los
usuarios de una aplicacin Web; por ejemplo, almacenar el nmero de
visitantes a una aplicacin Web.
Estado de sesin
El objeto Cache
Tambin podemos utilizar el objeto Cache para administrar el estado a nivel
de aplicacin.
Lado cliente
Cookies
Una cookie es un archivo de texto que puede utilizarse para almacenar
pequeas cantidades de informacin necesarias para mantener el estado.
La propiedad ViewState
Los formularios Web Forms proporcionan la propiedad ViewState como
una estructura incluida para conservar automticamente valores entre
mltiples peticiones a la misma pgina. La propiedad ViewState se
mantiene como un campo oculto en la pgina.
Cadenas de consulta
Una cadena de consulta es informacin que se aade al final de una URL
(Uniform Resource Locator). Un ejemplo tpico podra ser el siguiente:
http://www.contoso.com/listwidgets.aspx?category=basic&price=100
En la ruta URL anterior, la cadena de consulta se inicia con un signo de
interrogacin (?) e incluye dos pares atributo-valor, categora y precio.
***
Introduccin
Estado de aplicacin
Variables de aplicacin
Estado de sesin
El estado de sesin est almacenado como una estructura de diccionario clavevalor que se utiliza par almacenar informacin especfica de la sesin que debe
mantenerse entre transferencias de pginas al servidor y entre peticiones de
pginas. Tras agregar la informacin especfica de la aplicacin al estado de
sesin, el servidor la gestiona. Podemos configurar ASP.NET para
automticamente serialice y almacene la informacin de sesin en una base de
datos SQL Server o en un servidor de estado.
Variables de sesin
Escalabilidad
Identificar y hacer el
seguimiento de una
sesin
10
Cookies persistentes
Menos fiable que las opciones de administracin del estado en el lado del
servidor
z
Servidor Web
Equipo cliente
Cookies
***
Introduccin
Cookies
Tipos de cookies
Temporales
Las cookies temporales, tambin denominadas cookies de sesin o no
persistentes, existen nicamente en la memoria del navegador. Cuando el
ste se apaga, las cookies temporales que se han aadido se pierden.
Persistentes
Las cookies persistentes son similares a las cookies temporales, excepto en
que las cookies persistentes tienen un periodo de expiracin fijo. Cuando un
navegador solicita una pgina que crea una cookie persistente, ste guarda
esa cookie en el disco duro del usuario. Podemos crear una cookie
persistente que dure meses, o incluso aos, en el equipo cliente. Con
Microsoft Internet Explorer, las cookies persistentes se almacenan en un
11
12
Vencimiento
Las cookies pueden expirar cuando finaliza la sesin del explorador (cookies
temporales), o pueden existir indefinidamente en el equipo cliente, dependiendo
de las reglas de expiracin del cliente (cookies persistentes).
Los usuarios tambin pueden decidir eliminar cookies de su equipo antes de que
stas expiren. Por tanto, no existe garanta de que una cookie persistente
permanecer en el equipo de un usuario durante el periodo de tiempo
especificado.
Seguridad
Las cookies son menos seguras si las comparamos con las opciones de
administracin del estado en el lado del servidor. Las cookies tambin estn
sujetas a la manipulacin. Lo usuarios pueden manipular cookies en su equipo,
lo que puede representar potencialmente un compromiso de seguridad o puede
hacer que la aplicacin que depende de la cookie pueda fallar.
Informacin limitada
13
El archivo Global.asax
***
Introduccin
14
Peticin
Peticin
Respuesta
Respuesta
Application_EndRequest
Application_EndRequest
Application_ResolveRequestCache
Application_ResolveRequestCache
Application_UpdateRequestCache
Application_UpdateRequestCache
Application_AquireRequestState
Application_AquireRequestState
Application_ReleaseRequestState
Application_ReleaseRequestState
Application_PreRequestHandlerExecute
Application_PreRequestHandlerExecute
Application_PostRequestHandlerExecute
Application_PostRequestHandlerExecute
Ejecucin
Ejecucin de
de la
la pgina
pgina
***
Introduccin
Categoras de eventos
Eventos invocados
cuando se solicita una
pgina
La siguiente tabla lista los eventos que se invocan cuando se solicita una
pgina.
Nombre del evento
Descripcin
Application_BeginRequest
Application_AuthenticateRequest
Application_AuthorizeRequest
Application_ResolveRequestCache
Application_AcquireRequestState
15
16
Eventos invocados
cuando se enva la
pgina solicitada
Eventos de aplicacin
condicionales
Descripcin
Application_PostRequestHandlerExecute
Application_ReleaseRequestState
Application_UpdateRequestCache
Application_EndRequest
Descripcin
Application_Start
Application_End
Session_Start
Session_End
Application_Error
17
***
Introduccin
Objetivos de la leccin
18
Sub
Sub Application_Start(s
Application_Start(s As
As Object,e
Object,e As
As EventArgs)
EventArgs)
Application("NumberofVisitors")
=
Application("NumberofVisitors") = 00
End
End Sub
Sub
protected
protected void
void Application_Start(Object
Application_Start(Object sender,EventArgs
sender,EventArgs e)
e)
{{
Application["NumberofVisitors"]
Application["NumberofVisitors"] == 0;
0;
}}
z
***
Introduccin
Variables de sesin
C#
Variables de aplicacin
19
C#
20
Session("BackColor")
Session("BackColor") == "blue"
"blue"
Application.Lock()
Application.Lock()
Application("NumberOfVisitors")
Application("NumberOfVisitors") +=
+= 11
Application.UnLock()
Application.UnLock()
Session["BackColor"]
Session["BackColor"] == "blue";
"blue";
Application.Lock();
Application.Lock();
Application["NumberOfVisitors"]
Application["NumberOfVisitors"] ==
(int)Application["NumberOfVisitors"]
(int)Application["NumberOfVisitors"] ++ 1;
1;
Application.UnLock();
Application.UnLock();
strBgColor
strBgColor == Session("BackColor")
Session("BackColor")
lblNbVisitor.Text
lblNbVisitor.Text == Application("NumberOfVisitors")
Application("NumberOfVisitors")
strBgColor
strBgColor == (string)Session["BackColor"];
(string)Session["BackColor"];
lblNbVisitor.Text
lblNbVisitor.Text == Application["NumberOfVisitors"].ToString();
Application["NumberOfVisitors"].ToString();
***
Introduccin
Establecer variables de
aplicacin y de sesin
Application.Lock()
Application("NumberOfVisitors") += 1
Application.UnLock()
C#
Application.Lock();
Application["NumberofVisitors"] =
(int)Application["NumberOfVisitors"] + 1;
Application.UnLock();
Leer variables de
aplicacin y de sesin
Visual Basic.NET
strBgColor = Session("BackColor")
lblNbVisitor.Text = Application("NumberOfVisitors")
C#
strBgColor = (string)Session["BackColor"];
lblNbVistitor.Text =
Application["NumberofVisitors"].ToString();
21
22
***
Introduccin
Ejecutar la demostracin
1. Abrir el proyecto Demo12VB o Demo12CS.
2. Abrir la pgina de cdigo subyacente de global.asax.
3. Inicializar una variable de sesin, denominada intNumber a 3, agregando el
siguiente cdigo al procedimiento de evento Session_Start:
Visual Basic .NET
Session("intNumber") = 3
C#
Session["intNumber"] = 3;
23
***
Introduccin
Duracin
predeterminada de la
sesin
Modificar la duracin de
la sesin
24
Variable de aplicacin
25
No escalable
Escalabilidad
Servidor de estado
Granja Web
Variables de sesin y de aplicacin
-OSQL
Cliente
Variables de sesin y de aplicacin
***
Introduccin
Inconveniente del
almacenamiento en
proceso
Fuera de proceso
ASP.NET ofrece dos mtodos que pueden utilizarse para almacenar estado de
sesin fuera de proceso (out of process). Podemos:
26
27
1
1
<sessionState
<sessionState mode="SQLServer"
mode="SQLServer"
sqlConnectionString="data
sqlConnectionString="data source=SQLServerName;
source=SQLServerName;
Integrated
Integrated security=true"
security=true" />
/>
2
c:\>
c:\> OSQL
OSQL S
S SQLServerName
SQLServerName E
E <InstallSqlState.sql
<InstallSqlState.sql
z
***
Introduccin
Configura el estado de
sesin en el archivo
Web.config de nuestro
servidor Web ASP.NET
Configurar el servidor
SQL Server
28
29
***
Introduccin
Las cookies son un medio por el cual la aplicacin Web que se ejecuta en el
servidor Web puede hacer que un cliente devuelva informacin al servidor Web
con cada solicitud HTTP. La devolucin de informacin puede utilizarse para
mantener el estado con el cliente entre mltiples peticiones. Las cookies se
envan al cliente como parte del encabezado HTTP en una solicitud del cliente,
o se envan en una respuesta del servidor.
En esta leccin, estudiaremos cmo utilizar cookies para almacenar datos de
sesin, y cmo recuperar esos datos de una cookie. Tambin estudiaremos las
sesiones que no utilizan cookies y cmo se establecen.
Objetivos de la leccin
30
persistente, especificar
el tiempo de expiracin
***
Introduccin
C#
objCookie.Values.Add("Time", now.ToString())
objCookie.Values.Add("ForeColor", "White")
objCookie.Values.Add("BackColor", "Blue")
C#
objCookie.Values.Add("Time", now.ToString());
objCookie.Values.Add("ForeColor", "White");
objCookie.Values.Add("BackColor", "Blue");
objCookie.Expires = now.AddHours(1)
C#
31
32
Si no agregamos el cdigo anterior cuando creamos una cookie, sta ser una
cookie temporal. La cookie temporal se aade a la memoria del navegador, pero
no se almacenar en un archivo. Cuando el usuario cierra el explorador, la
cookie se elimina de la memoria.
Agregar el cdigo sobre el tiempo de expiracin convierte la cookie temporal
en una cookie persistente. La cookie persistente se guarda en el disco duro. Con
una cookie persistente, si el usuario cierra el explorador y lo abre de nuevo,
puede acceder a la misma pgina Web otra vez hasta que la cookie persistente
expire. La expiracin de la cookie persistente depende del tiempo de expiracin
establecido en el cdigo. En el cdigo anterior, la cookie persistente se
eliminar transcurrida una hora.
Nota Frecuentemente, las cookies persistentes a menudo se utilizan para
almacenar informacin sobre nombres e identificadores de usuario para que el
servidor pueda identificar a los usuarios cuando regresen al sitio Web.
El siguiente cdigo agrega la nueva cookie a la coleccin de cookies del objeto
Response:
Visual Basic .NET
Response.Cookies.Add(objCookie)
C#
Response.Cookies.Add(objCookie);
Las cookies que se almacenan en formato de archivo de texto son las cookies
persistentes. De forma predeterminada, este archivo se almacena en la carpeta
\Documents and Settings\NombreUsuario\Cookies.
Cuando las cookies persistentes se almacenan utilizando Internet Explorer, el
formato del archivo de texto es:
NombreUsuario@NombreDominio.txt
33
Los estudiantes:
z
Tiempo: 15 Minutos
***
Introduccin
Probar la funcionalidad
34
Visualizar el cdigo
1. En el cuadro de direccin de Windows Explorer, escribir:
\\mquinaprofesor\c$\inetpub\wwwroot\mod14VB o
\\mquinaprofesor\c$\inetpub\wwwroot\mod14CS
Y pulsar ENTER.
2. Abrir la pgina de cdigo subyacente de la pgina Default.aspx.
Qu dos acciones se producen en el procedimiento de evento
btnSubmit_Click?
_____________________________________________________________
_____________________________________________________________
3. En Windows Explorer, hacer doble clic en results.aspx.vb o results.aspx.cs
para abrir el archivo de pgina de cdigo subyacente results.aspx en
Visual Studio .NET.
En el procedimiento de evento Page_Load, cmo se almacena el nmero
de visitas en la pgina almacenada?
_____________________________________________________________
_____________________________________________________________
Por qu el cdigo se ubica en una instruccin If en el procedimiento de
evento Page_Load?
_____________________________________________________________
_____________________________________________________________
4. Cerrar Visual Studio .NET.
35
Visualizar la cookie
1. En Windows Explorer, ir al siguiente directorio del equipo:
c:\Documents and Settings\Student\Cookies
<<Note>>
36
Leer la cookie
Dim
Dim objCookie
objCookie As
As HttpCookie
HttpCookie == Request.Cookies("myCookie")
Request.Cookies("myCookie")
HttpCookie
HttpCookie objCookie
objCookie == Request.Cookies["myCookie"];
Request.Cookies["myCookie"];
lblTime.Text
lblTime.Text == objCookie.Values("Time")
objCookie.Values("Time")
lblTime.ForeColor
lblTime.ForeColor == System.Drawing.Color.FromName
System.Drawing.Color.FromName __
(objCookie.Values("ForeColor"))
(objCookie.Values("ForeColor"))
lblTime.BackColor
lblTime.BackColor == System.Drawing.Color.FromName
System.Drawing.Color.FromName __
(objCookie.Values("BackColor"))
(objCookie.Values("BackColor"))
lblTime.Text
lblTime.Text == objCookie.Values["Time"];
objCookie.Values["Time"];
lblTime.ForeColor
lblTime.ForeColor == System.Drawing.Color.FromName
System.Drawing.Color.FromName
(objCookie.Values["ForeColor"]);
(objCookie.Values["ForeColor"]);
lblTime.BackColor
lblTime.BackColor == System.Drawing.Color.FromName
System.Drawing.Color.FromName
(objCookie.Values["BackColor"]);
(objCookie.Values["BackColor"]);
***
Introduccin
Recuperar informacin de una cookie implica leer una cookie y recuperar los
pares clave/valor de la misma.
Visual Basic
C#
Recuperar valores de la
cookie
El siguiente cdigo muestra los valores que deben recuperarse de una cookie:
lblTime.Text = objCookie.Values("Time")
lblTime.ForeColor = System.Drawing.Color.FromName _
(objCookie.Values("ForeColor"))
lblTime.BackColor = System.Drawing.Color.FromName _
(objCookie.Values("BackColor"))
C#
lblTime.Text = objCookie.Values["Time"];
lblTime.ForeColor = System.Drawing.Color.FromName
(objCookie.Values["ForeColor"]);
lblTime.BackColor = System.Drawing.Color.FromName
(objCookie.Values["BackColor"]);
37
http://server/(h44a1e55c0breu552yrecobl)/page.aspx
http://server/(h44a1e55c0breu552yrecobl)/page.aspx
z
***
Introduccin
El marco de trabajo de las pginas ASP.NET incluye una opcin que habilita
sesiones que no utilizan cookies. Las sesiones que no utilizan cookies permiten
aprovechar el estado de sesin incluso con navegadores que tienen
deshabilitado el soporte de cookies.
Cuando un usuario realiza la primera peticin a un sitio Web teniendo
habilitado sesiones que no utilizan cookies, la URL que se utiliza para la
peticin se modifica automticamente para incluir el SessionID del usuario. Por
ejemplo, cuando un usuario solicita http://server/page.aspx, la solicitud se
modifica automticamente a:
http://server/(h44a1e55c0breu552yrecobl)/page.aspx
38
Limitacin de las
sesiones que no utilizan
cookies
39
<sessionState
<sessionState cookieless="true"
cookieless="true" />
/>
***
Introduccin
ndice
Descripcin
15
25
43
Descripcin
*****************************
Introduccin
Objetivos
Qu es el objeto Cache?
*****************************
Introduccin
Objetivos de la leccin
Qu es el objeto Cache?
*****************************
Introduccin
ASP.NET crea un nico objeto Cache por cada aplicacin Web. Los elementos
almacenados en el objeto Cache son exclusivos para la aplicacin Web y otras
aplicaciones Web ejecutndose en el mismo servidor o en otros servidores no
pueden acceder a ellos. En consecuencia, el uso del objeto Cache para
incrementar el rendimiento de la aplicacin Web no es escalable por encima del
nivel de una nica aplicacin Web.
El ciclo de vida de la cach es el mismo que el de la aplicacin Web. Cuando la
aplicacin Web se reinicia, la cach vuelve a crearse.
Almacenar variables
Microsoft
Visual Basic .NET
Cache("mykey") = myValue
C#
Cache["mykey"] = myValue;
myValue = Cache("myKey")
C#
myValue = Cache["myKey"];
*****************************
Introduccin
Administra
automticamente los
recursos de cach
Soporte de funciones
callback
Soporta la eliminacin
basada en dependencias
'Implicit
'Implicit method
method
Cache("myKey")
Cache("myKey") == myValue
myValue
'Explicit
'Explicit method
method
Cache.Insert("myKey",
Cache.Insert("myKey", myValue,
myValue, Dependency,
Dependency, AbsoluteExpiration,
AbsoluteExpiration, __
SlidingExpiration,
CacheItemPriority,
CacheItemRemovedCallBack)
SlidingExpiration, CacheItemPriority, CacheItemRemovedCallBack)
//Implicit
//Implicit method
method
Cache["myKey"]
Cache["myKey"] == myValue;
myValue;
//Explicit
//Explicit method
method
Cache.Insert("myKey",
Cache.Insert("myKey", myValue,
myValue, Dependency,
Dependency, AbsoluteExpiration,
AbsoluteExpiration,
SlidingExpiration,
SlidingExpiration, CacheItemPriority,
CacheItemPriority, CacheItemRemovedCallBack);
CacheItemRemovedCallBack);
myValue
myValue == Cache("myKey")
Cache("myKey")
myValue
myValue == Cache["myKey"];
Cache["myKey"];
*****************************
Introduccin
Escribir en el objeto
Cache
Cache("mykey") = myValue
C#
Cache["mykey"] = myValue;
Cache.Insert("myKey", myValue, _
Dependency, AbsoluteExpiration, SlidingExpiration, _
CacheItemPriority, CacheItemRemovedCallBack)
C#
Cache.Insert("myKey", myValue,
Dependency, AbsoluteExpiration, SlidingExpiration,
CacheItemPriority, CacheItemRemovedCallBack);
myValue = Cache("mykey")
If myValue <> Nothing Then
DisplayData(myValue)
End If
C#
myValue = Cache["mykey"];
if (myValue != null)
DisplayData(myValue);
Tiempo AbsoluteExpiration
DateTime.Now.AddMinutes(5)
DateTime.Now.AddMinutes(5)
Tiempo SlidingExpiration
TimeSpan.FromSeconds(20)
TimeSpan.FromSeconds(20)
*****************************
Introduccin
AbsoluteExpiration
C#
SlidingExpiration
10
C#
Dependencias
En ocasiones, deseamos que un objeto sea eliminado del objeto Cache porque
un elemento de soporte, como un archivo, ha cambiado. ASP.NET permite
definir la validez de un elemento en cach, basndose en dependencias de
archivos u otro elemento en cach. Las dependencias basadas en directorios y
archivos externos se denominan dependencias de archivo, las dependencias
basadas en otro elemento en cach se denominan dependencias de clave. Si una
dependencia cambia, el elemento en cach se invalida y se elimina del objeto
Cache.
El siguiente cdigo especifica que myValue se eliminar del objeto Cache
cuando cambie el archivo myDoc.xml:
Cache.Insert("myKey", myValue, _
new CacheDependency(Server.MapPath("myDoc.xml")))
C#
Prioridad de elementos
en Cache
C#
11
Ejemplo de establecer
los parmetros en
Cache.Insert
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.
Cache.Insert("MyBook.CurrentBook", CurrentBook, _
new CacheDependency(Server.MapPath("Books.xml")), _
DateTime.Now.AddMinutes(5), _
TimeSpan.FromSeconds(30), _
CacheItemPriority.High, onRemove)
C#
Cache.Insert("MyBook.CurrentBook", CurrentBook,
new CacheDependency(Server.MapPath("Books.xml")),
DateTime.Now.AddMinutes(5),
TimeSpan.FromSeconds(30),
CacheItemPriority.High, onRemove);
*****************************
Introduccin
Ejecutar la demostracin
Ejecutar sin
almacenamiento en
cach
Habilitar el
almacenamiento en
cach
Visual Basic .NET
C#
12
13
Agregar una
dependencia
C#
14
15
*****************************
Introduccin
Objetivos de la leccin
*****************************
Introduccin
16
17
*****************************
Introduccin
Almacenamiento en
cach de pginas
Almacenamiento en
cach de fragmentos de
pginas como un
control de usuario
18
<WebMethod(CacheDuration:=300)> _
Public Function CachedInfo() As String
...
End Function
C#
[WebMethod(CacheDuration=300)]
public string CachedInfo()
{
...
}
Importante Crear una cach de resultados para una aplicacin debera ser la
ltima tarea en el desarrollo de una aplicacin Web. De lo contrario, cuando
depursemos las pginas, podramos obtener pginas obsoletas que estuviesen
almacenadas en la cach de resultados en lugar de obtener pginas nuevas y
modificadas.
19
*****************************
Introduccin
Contenido de la cach
de pginas dinmicas
Establecer la duracin
de la cach
20
21
*****************************
Introduccin
Ejecutar la demostracin
Mostrar cmo una
pgina no almacenada
en cach cambia con
cada actualizacin
22
23
*****************************
Introduccin
Para almacenar en cach slo partes de una pgina, debemos aislar esas partes
del resto de la pgina insertndolas en un control de usuario. A continuacin,
almacenaremos en cach el control de usuario durante el periodo de tiempo que
especifiquemos. A este proceso se denomina almacenamiento en la cach de
fragmentos.
El almacenamiento en la cach de fragmentos permite separar las partes de una
pgina (como consultas a bases de datos, que requieren un valioso tiempo de
procesador) del resto de la pgina. Con el almacenamiento en cach de
fragmentos, podemos hacer que nicamente se generen dinmicamente para
cada peticin las partes de la pgina que requieren menos recursos del servidor,
o las partes de una pgina que deben crearse con cada peticin.
Los elementos que son buenos candidatos para el almacenamiento en la cach
de fragmentos incluyen encabezados, pies y listas desplegables que son
utilizados por mltiples pginas.
Convertir el fragmento
en un control de usuario
Establecer las
propiedades Duration y
VaryByParam
24
25
*****************************
Introduccin
Objetivos de la leccin
26
Archivo Machine.config
z
Archivos Web.config
z
Extensibles
*****************************
Introduccin
Machine.config
Web.config
27
*****************************
Introduccin
Las opciones de
configuracin afectan a
todas las aplicaciones
Web
28
Seguridad
Modo
Seguimiento
*****************************
Introduccin
Uno o ms archivos
Web.config por
aplicacin Web
Descripcin
<browserCaps>
<compilation>
<globalization>
29
Descripcin
<httpModules>
<httpHandlers>
<processModel>
<authentication>
<identity>
<authorization>
<sessionState>
<trace>
30
El archivo Web.config a
nivel de aplicacin
hereda las opciones del
archivo Machine.config
Las opciones en el
archivo Web.config que
estn en conflicto anulan
las opciones heredadas
Directorios individuales
pueden tener archivos
Web.config que heredan
de (y pueden anular) las
opciones a nivel de
aplicacin
CONFIG
CONFIG
Machine.config
VirtualDir
VirtualDir
Web.config
SubDir
SubDir
Web.config
*****************************
Introduccin
Cuando un servidor Web recibe una peticin para un determinado recurso Web,
ASP.NET determina las opciones de configuracin de ese recurso
jerrquicamente. ASP.NET utiliza todos los archivos de configuracin ubicados
en la ruta del directorio virtual para el recurso solicitado. La opcin de
configuracin de nivel ms bajo puede sobrecargar las opciones que
proporcionan los archivos de configuracin del directorio primario.
Las reglas de herencia para los archivos de configuracin son las siguientes:
Machine.config
31
Web.config
32
*****************************
Introduccin
Ejecutar la demostracin
Crear una subcarpeta
que contenga
Web.config
Mostrar las diferencias
entre el Web.config
principal y el Web.config
de la subcarpeta
Eliminar Web.config de
la subcarpeta y
actualizar el formulario
Web Form
33
34
Los estudiantes:
z
Tiempo: 5 Minutos
*****************************
Introduccin
35
36
37
</forms>
</authentication>
<system.web>
<trace
enabled="true"
localOnly="false"
pageOutput="false"
requestLimit="40"
traceMode="SortByTime"
/>
</system.web>
</configuration>
38
<configuration>
<configuration>
<appSettings>
<appSettings>
<add
<add key="pubs"
key="pubs" value="server=localhost;
value="server=localhost;
integrated
integrated security=true;
security=true; database=pubs"/>
database=pubs"/>
</appSettings>
</appSettings>
</configuration>
</configuration>
Dim
Dim strPubs
strPubs As
As String
String == __
ConfigurationSettings.AppSettings("pubs")
ConfigurationSettings.AppSettings("pubs")
AppSettingsReader
AppSettingsReader App
App == new
new AppSettingsReader();
AppSettingsReader();
string
string strPubs
strPubs == (string)App.GetValue("pubs",
(string)App.GetValue("pubs",
typeof(string));
typeof(string));
*****************************
Introduccin
39
C#
40
Permite actualizaciones
sencillas sin recompilar
la aplicacin
*****************************
Introduccin
Permite actualizaciones
sencillas
Por ejemplo, supongamos que estamos generando una aplicacin Web que
utiliza una base de datos de prueba durante el proceso de desarrollo y debemos
trasladar la aplicacin Web a una base de datos en produccin cuando la
implementemos. Si almacenamos los valores de las propiedades en la
aplicacin Web, deberemos cambiar manualmente toda la configuracin de la
base de datos para poder implementar la base de datos, y deberemos recompilar
el cdigo fuente. Si almacenamos los valores de estas propiedades
externamente, podremos realizar un solo cambio en el archivo externo y la
aplicacin Web utilizar los nuevos valores la prxima vez que se ejecute.
41
*****************************
Introduccin
Ejecutar la demostracin
Configurar un objeto
SqlConnection para
utilizar propiedades
dinmicas
42
Me.SqlConnection1.ConnectionString = _
CType(configurationAppSettings.GetValue _
("SqlConnection1.ConnectionString", _
GetType(System.String)), String)
C#
this.SqlConnection1.ConnectionString =
((string)(configurationAppSettings.GetValue("SqlConnection1
.ConnectionString", typeof(string))));
Mostrar la clave
SqlConnection1.
ConnectionString
43
*****************************
Introduccin
Objetivos de la leccin
44
*****************************
Introduccin
Configurar la carpeta de
destino como un
directorio virtual en IIS
45
46
*****************************
Introduccin
Hay tres pasos importantes que son necesarios para trasladar la aplicacin Web
desde el entorno de desarrollo a un directorio o servidor en produccin:
1. Generar la aplicacin Web.
2. Eliminar todos los archivos innecesarios de la aplicacin Web.
3. Copiar los archivos en el entorno de produccin.
Generar la aplicacin
No seleccionar archivos
innecesarios
47
Archivos necesarios
48
Los estudiantes:
z
Tiempo: 5 Minutos
*****************************
.vbproj
.csproj
.vbproj.webinfo
.csproj.webinfo
.resx
.resx
.dll
.dll
.aspx
.aspx
.aspx.vb
.aspx.cs
.csproj
.vbproj
Global.asax
Global.asax
.exe
.exe
.ascx
.ascx
.xml
.xml
Web.config
Web.config
Conservar
Eliminar
49
*****************************
Introduccin
Los equipos que tengan instalado el .NET Framework tambin tienen una cach
de cdigo a nivel de equipo denominada Cach de Ensamblados Global (Global
Assembly Cache - GAC). Despus de implementar nuestra aplicacin Web en
un servidor Web en produccin, podemos utilizar la GAC para compartir
cdigo entre las aplicaciones Web en el servidor Web.
Almacenamiento para
ensamblados que deben
compartirse
Ubicacin compartida
Los ensamblados utilizados por mltiples aplicaciones pueden incluirse en
la GAC.
Seguridad de archivos
La GAC se encuentra en el directorio WINNT, que normalmente tiene
restricciones de acceso a su contenido.
50
*****************************
Introduccin
La cach de resultados
protege a los usuarios
existentes
Benefits
Benefits
Home
Home Page
Page
Coho
Winery
Default.aspx
Default.aspx
Menu
Menu
Component
Component
Registration
Registration
Register.aspx
Register.aspx
Retirement
Retirement
Life.aspx
Life.aspx
Retirement.aspx
Retirement.aspx
Prospectus
Prospectus
Prospectus.aspx
Prospectus.aspx
Medical
Medical
Medical.aspx
Medical.aspx
Doctors
Doctors
Doctors.aspx
Doctors.aspx
XML
Files
ASPState
Header.ascx
Header.ascx
Web.
config
Class1.vb
Class1.vb or
or Class1.cs
Class1.cs
Life
Life Insurance
Insurance
Lab Web
Application
Page
Page Header
Header
tempdb
Dental
Dental
Dental.aspx
Dental.aspx
User
User Control
namedate.ascx
namedate.ascx
Doctors
XML
XML Web
Web
Service
Service
dentalService1.asmx
dentalService1.asmx
Dentists
*****************************
Objetivos
Nota Este laboratorio se centra en los conceptos de este mdulo. Por ello,
podra no cumplir las recomendaciones de seguridad de Microsoft.
Requisitos previos
Escenario
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList.
Estos proyectos pueden haberse creado utilizando Visual Basic .NET o
Microsoft Visual C# .NET.
Si no se han creado estos proyectos, realizar los siguientes pasos:
Ir a la carpeta VB\Starter\BenefitsVB.
Ir a la carpeta CS\Starter\BenefitsCS.
Estas carpetas pueden encontrarse dentro del fichero labs13.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente Benefits, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de sobrescribir o recargar los archivos.
Ir a la carpeta VB\Starter\BenefitsListVB.
Ir a la carpeta CS\Starter\BenefitsListCS.
Estas carpetas pueden encontrarse dentro del fichero labs13.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.
Ir a VB\Starter\DentalServiceVB.
Visual C#
Ir a CS\Starter\DentalServiceCS.
Estas carpetas pueden encontrarse dentro del fichero labs13.zip
4. Agregar archivos al proyecto:
Visual C#
http://localhost/DentalServiceVB/DentalService.asmx
Visual C#
http://localhost/DentalServiceCS/DentalService.asmx
Pulsar ENTER. Se mostrar la referencia Web DentalService.
c. Hacer clic en Agregar referencia.
La referencia Web se agrega al proyecto en la carpeta Referencias Web.
2. En el Explorador de soluciones, expandir Referencias Web, hacer clic con
el botn derecho en localhost, y seleccionar Cambiar nombre.
3. Escribir DentalWebRef, y pulsar ENTER.
4. Generar la solucin haciendo clic en Generar solucin en el men
Generar.
VB\Starter
Visual C#
CS\Starter
Estas carpetas pueden encontrarse dentro del fichero labs13.zip
6. Hacer doble clic en Lab13.bat.
Este archivo de proceso por lotes ejecuta una consulta SQL que configura la
seguridad para las bases de datos ASPState y tempdb.
7. Cerrar Windows Explorer.
Ejercicio 1
Utilizar el objeto Cache
En este ejercicio, utilizaremos el objeto Cache para almacenar en la cach el
objeto DataSet doctors. Colocar un DataSet en la cach reduce el nmero de
veces que un formulario Web Form necesita conectar a la fuente de datos, en
este caso Microsoft SQL Server, para rellenar el DataGrid.
Debido a que el DataGrid utiliza DataViews basados en el nombre de ciudad
seleccionado del cuadro de lista, implementaremos la cach en el procedimiento
de evento Page_Load, y en el procedimiento de evento SelectedIndexCached
del cuadro de lista.
El DataGrid tambin implementa paginado. Para reducir la cantidad de cdigo
que agregaremos en este laboratorio, deshabilitaremos esta caracterstica del
DataGrid.
Cancelar la paginacin
1. Abrir el archivo doctors.aspx.
2. Hacer clic con el botn derecho en el objeto DataGrid dgDoctors, y
seleccionar Property Builder.
3. Seleccionar la ficha Paging, y deseleccionar la casilla de verificacin de
Allow paging.
De esta forma, se deshabilitar el paginado del DataGrid. Se mostrarn
todos los datos que devuelva la fuente de datos.
4. Hacer clic en OK.
C#
if (!Page.IsPostBack)
3. Agregar cdigo, justo antes de esta lnea, que compruebe la cach de una
clave denominada doctors. El cdigo debera comprobar si esta clave est
vaca o no existe.
4. Si la clave doctors de la cach est vaca o no existe, rellenar el objeto
DataSet dsDoctors1 utilizando el objeto DataAdapter existente
sqlDataAdapter1, e insertar una nueva clave doctors en la cach que
contiene el nuevo DataSet. Utilizar la informacin en la siguiente tabla para
escribir el cdigo.
Propiedad
Valor Visual
Basic .NET
C#
Key name
doctors
doctors
Value
DsDoctors1
dsDoctors1
Dependencies
Nothing
null
Absolute Expiration
Four minutes
Four minutes
Sliding Expiration
Nothing
Caching.Cache.NoSlidingExpiration
C#
if (Cache["doctors"] == null)
{
sqlDataAdapter1.Fill(dsDoctors1);
Cache.Insert("doctors", dsDoctors1, null,
DateTime.Now.AddMinutes(4),
System.Web.Caching.Cache.NoSlidingExpiration);
}
SqlDataAdapter1.Fill(DsDoctors1)
C#
sqlDataAdapter1.Fill(dsDoctors1);
dgDoctors.DataSource = DsDoctors1
C#
dgDoctors.DataSource = dsDoctors1;
dgDoctors.DataSource = Cache("doctors")
C#
dgDoctors.DataSource = Cache["doctors"];
SqlDataAdapter1.Fill(DsDoctors1)
C#
sqlDataAdapter1.Fill(DsDoctors1);
2. Eliminar esta lnea de cdigo y sustituirla con el mismo cdigo que hemos
agregado al procedimiento de evento Page_Load. Este cdigo comprueba la
presencia de la clave de cach doctors, y crea una nueva clave si la clave
doctors no existe o est vaca.
3. En el cdigo restante del procedimiento de evento
lstCities_SelectedIndexChanged, cambiar toda ocurrencia de dsDoctors1
a la clave de la cach doctors y convertirla en un tipo DataSet.
Al finalizar, todo el procedimiento de evento
lstCities_SelectedIndexChanged debera ser similar al siguiente:
Visual Basic .NET
C#
Probar la pgina
1. Guardar doctors.aspx.vb o doctors.aspx.cs, y generar y examinar la pgina.
Si recibimos un error de permisos de SQL cuando intentamos explorar el
sitio Web Benefits, cerrar Internet Explorer, abrir Windows Explorer, ir a
VB\Starter o CS\Starter y hacer doble clic en Lab13.bat. Estas carpetas se
pueden encontrar dentro del fichero labs13.zip.
2. Probar el cuadro de lista desplegable de nombres de ciudad seleccionando
distintos nombres.
Si se dispone de tiempo
1. Agregar una nueva fila al objeto DataTable doctors del objeto DataBase
doctors utilizando SQL Server Enterprise Manager. Debemos incluir un
valor para las columnas dr_id, dr_fname y dr_lname.
2. Actualizar doctors.aspx en el navegador.
Observar que el nuevo elemento no aparece en el DataGrid.
3. Seleccionar una ciudad del cuadro de lista desplegable, y seleccionar All.
Observar que el nuevo elemento sigue sin aparecer en el DataGrid.
4. Esperar al menos cuatro minutos y repetir el paso 3.
Observar que ahora la nueva fila se muestra en el DataGrid.
5. En SQL Server Enterprise Manager, eliminar la fila que hemos aadido.
Observar que ele elemento eliminado todava aparece en el DataGrid. Si
esperamos cuatro minutos y actualizamos la pgina, veremos que el
elemento eliminado ya no aparece.
Ejercicio 2
Utilizar la cach de resultados de pgina
En este ejercicio, almacenaremos en la cach un formulario Web Form
utilizando la directiva OutputCache. Tambin modificaremos el atributo
VaryByParam.
Escenario
Ejercicio 3
Cach de pgina parcial
En este ejercicio, utilizaremos la cach de resultados de pginas para almacenar
en la cach el control de usuario header.ascx. Agregaremos en primer lugar una
marca de tiempo al encabezado para verificar que la cach funciona
correctamente.
Escenario
lblTime.Text = DateTime.Now.TimeOfDay.ToString()
C#
lblTime.Text = DateTime.Now.TimeOfDay.ToString();
Ejercicio 4
Utilizar propiedades dinmicas
En este ejercicio, utilizaremos propiedades dinmicas para colocar la URL del
servicio Web XML DentalService en el archivo Web.config.
Escenario
Un servicio Web XML puede tener una URL que cambie con el tiempo. Si
nuestra aplicacin Web conecta con un servicio Web XML, podemos insertar la
URL de ese servicio Web en el archivo Web.config de nuestra aplicacin Web.
Si la URL del servicio Web XML cambia, nicamente deberemos actualizar el
archivo Web.config, no es necesario cambiar la informacin del proxy y volver
a generar el proyecto. La modificacin del archivo Web.config no requiere
volver a generar la aplicacin Web.
Ejercicio 5
Implementar nuestro sitio
En este ejercicio, implementaremos nuestro sitio Web en otro servidor.
Utilizaremos el equipo de un compaero como servidor de implementacin.
Una vez nuestro compaero haya completado estos cuatro pasos, repetir el
procedimiento de copia de archivos del paso 5.
6. Abrir la carpeta LabApplication.
La carpeta contiene todos los archivos de nuestro sitio Web.
7. Eliminar los archivos que no son necesarios para la implementacin. Los
archivos que pueden eliminarse incluyen todos los archivos con las
siguientes extensiones:
.resx
.vbproj
.vb
.webinfo
.vsdisco
.csproj
.cs
Nota Normalmente, eliminaramos estos archivos ante de copiarlos al
servidor de produccin. En este laboratorio, se eliminan despus de
copiarlos para no eliminar archivos que podran ser necesarios en otros
laboratorios del curso.
8. Cerrar Windows Explorer.
Probar la implementacin
1. Abrir Internet Explorer.
2. En la barra de direccin, escribir http://partner/ LabApplication, siendo
partner el equipo de nuestro compaero.
Se muestra la pgina Default.aspx.
3. Explorar el sitio para estar seguro de que todas las pginas aparecen y
funcionan segn lo previsto.
Nota La carpeta LabApplication se configur como directorio de
aplicacin durante la configuracin del aula. Generalmente, deberamos
acceder al servidor Web para configurar esta carpeta como una aplicacin
Web.
Benefits
Benefits
Home
Home Page
Page
Coho
Winery
Default.aspx
Default.aspx
Menu
Menu
Component
Component
Registration
Registration
Register.aspx
Register.aspx
Retirement
Retirement
Life.aspx
Life.aspx
Retirement.aspx
Retirement.aspx
Prospectus
Prospectus
Prospectus.aspx
Prospectus.aspx
Requisitos previos
Escenario
Medical
Medical
Medical.aspx
Medical.aspx
Doctors
Doctors
Doctors.aspx
Doctors.aspx
XML
Files
Objetivos
Header.ascx
Header.ascx
ASPState
Web.
config
Class1.vb
Class1.vb or
or Class1.cs
Class1.cs
Life
Life Insurance
Insurance
Lab Web
Application
Page
Page Header
Header
tempdb
Dental
Dental
Dental.aspx
Dental.aspx
User
User Control
namedate.ascx
namedate.ascx
Doctors
XML
XML Web
Web
Service
Service
dentalService1.asmx
dentalService1.asmx
Dentists
Ejercicio 0
Configuracin del laboratorio
Para realizar este laboratorio, es necesario haber creado el proyecto de la
aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList.
Estos proyectos pueden haberse creado utilizando Visual Basic .NET o
Microsoft Visual C# .NET.
Si no se han creado estos proyectos, realizar los siguientes pasos:
Ir a la carpeta VB\Starter\BenefitsVB .
Ir a la carpeta CS\Starter\BenefitsCS .
Estas carpetas pueden encontrarse dentro del fichero labs14.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente Benefits, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de sobrescribir o recargar los archivos.
Ir a la carpeta VB\Starter\BenefitsListVB.
Ir a la carpeta CS\Starter\BenefitsListCS.
Estas carpetas pueden encontrarse dentro del fichero labs14.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente BenefitsList, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de si sobrescribir o recargar los archivos.
el proyecto DentalServiceVB.
Para el proyecto Visual
C# .NET
Ir a VB\Starter\DentalServiceVB.
Ir a CS\Starter\DentalServiceCS.
Estas carpetas pueden encontrarse dentro del fichero labs14.zip
4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento
existente DentalServiceVB, hacer clic en Todos los archivos (*.*).
5. Seleccionar todos los archivos de esta carpeta y hacer clic en Abrir.
6. Hacer clic en S a la pregunta de sobrescribir o recargar los archivos.
7. Generar el servicio Web XML DentalService haciendo clic con el botn
derecho en el proyecto DentalServiceVB o DentalServiceCS en el
Explorador de soluciones y hacer clic en Generar.
http://localhost/DentalServiceVB/DentalService1.asmx
Proyecto Visual C#
http://localhost/DentalServiceCS/DentalService1.asmx
y pulsar ENTER..
VB\Starter
Proyecto Visual C#
CS\Starter
Estas carpetas pueden encontrarse dentro del fichero labs14.zip
6. Hacer doble clic en Lab14.bat.
Este archivo de proceso por lotes ejecuta una consulta SQL que configura la
seguridad para las bases de datos ASPState y tempdb.
7. Cerrar Windows Explorer.
Ejercicio 1
Securizar nuestro sitio Web utilizando la autenticacin basada en
Windows
En este ejercicio, configuraremos Internet Information Services (IIS) para que
utilice la autenticacin bsica y obtener acceso a pginas seguras, y la
autenticacin annima para obtener acceso a pginas no seguras. A
continuacin, editaremos el archivo Web.config para denegar el acceso a los
usuarios no autenticados a las pginas medical.aspx y doctors.aspx. Finalmente,
denegaremos el acceso a usuarios no autenticados a cualquier pgina del sitio
Coho Winery Web.
VB\Starter\BenefitsVB.
Visual C#
CS\Starter\BenefitsCS.
Estas carpetas pueden encontrarse dentro del fichero labs14.zip
3. Abrir el archivo securitytest.aspx.vb o securitytest.aspx.cs y examinar su
contenido. cul es la utilidad de las dos lneas de cdigo del procedimiento
de evento Page_Load?
____________________________________________________________
____________________________________________________________
Guardar y probar
1. Guardar los cambios.
2. Generar el proyecto BenefitsVB o BenefitsCS.
3. Abrir un nuevo navegador e ir a http://localhost/BenefitsVB/default.aspx o
http://localhost/BenefitsCS/default.aspx.
4. Hacer clic en Life Insurance y comprobar que la pgina life.aspx se abre
sin solicitar ninguna credencial de usuario.
5. Ir a http://localhost/BenefitsVB/SecurityTest.aspx o
http://localhost/BenefitsCS/SecurityTest.aspx.
Esta pgina no muestra ninguna informacin de autenticacin debido a que
no estamos autenticados.
6. Ir a http://localhost/BenefitsVB/Medical.aspx o
http://localhost/BenefitsCS/Medical.aspx. Deberamos ver el cuadro de
dilogo Conectar a localhost.
7. Introducir nuestro nombreequipo\nombreusuario y la contrasea de nuestra
aula.
Ahora podemos explorar la pgina medical.aspx.
8. Ir de nuevo a http://localhost/BenefitsVB/SecurityTest.aspx o
http://localhost/BenefitsCS/SecurityTest.aspx.
La pgina muestra ahora nuestra informacin de autenticacin. Si no se
muestra nuestra informacin de autenticacin, actualizar la pgina.
9. Cerrar el navegador.
Guardar y probar
1. Guardar los cambios.
No es necesario volver a generar el proyecto BenefitsVB o BenefitsCS ya
que no ha cambiado el cdigo. Tan pronto como se guarde el archivo
Web.config, los cambios tendrn efecto.
2. Abrir una nueva instancia del navegador e ir a
http://localhost/BenefitsVB/default.aspx o
http://localhost/BenefitsCS/default.aspx.
Nota Debemos asegurarnos de que abrimos un nuevo navegador. Si
continuamos en la sesin autenticada anterior, no podremos probar si la
seguridad funciona.
Esta vez deberamos ver inmediatamente el cuadro de dilogo Conectar a
localhost, ya que todas las pginas estn aseguradas, incluyendo
default.aspx.
3. Introducir nombreequipo\nombreusuario y la contrasea del aula, y hacer
clic en Aceptar.
Ahora podemos ir a todas las pginas que se encuentran en la aplicacin
Web Benefits.
Ejercicio 2
Securizar el sitio Web utilizando la autenticacin basada en
formularios
En este ejercicio, cambiaremos la configuracin de IIS para utilizar nicamente
la autenticacin annima, y utilizaremos la autenticacin basada en formularios
para administrar el acceso a pginas seguras de la aplicacin Web Benefits.
Configuraremos el archivo Web.config para utilizar la autenticacin basada en
formularios denegando el acceso a usuarios no autenticados a ninguna pgina
de la carpeta del proyecto Benefits. Finalmente, crearemos la pgina login.aspx
y validaremos las credenciales de usuario comparndolas con las incluidas en la
tabla Logins de la base de datos de Coho.
Imports System.Web.Security
Visual C#
using System.Web.Security;
Visual C#
Visual C#
if (strEmployeeId != "")
{
FormsAuthentication.RedirectFromLoginPage
(strEmployeeId, false);
}
else //Login failed
{
lblInfo.Text = "Login Failed!";
}
Guardar y probar
1. Guardar los cambios.
2. Generar el proyecto BenefitsVB o BenefitsCS.
3. Abrir un nuevo navegador e ir a http://localhost/BenefitsVB/default.aspx o
http://localhost/BenefitsCS/default.aspx.
Deberamos ser redirigidos a la pgina login.aspx porque todas las pginas
estn securizadas, incluyendo default.aspx.
4. Examinar la URL (Uniform Resource Locator) en el navegador. Qu
vemos? Por qu?
_____________________________________________________________
_____________________________________________________________
5. Introducir la direccin electrnica y contrasea de un empleado que est
incluido en la tabla Logins de la base de datos Coho (direccin electrnica
someone@cohowinery.com, y contrasea someone), y hacer clic en Sign
In Now.
Ahora podemos navegar por todas las pginas.
6. Hacer clic en el enlace Life Insurance y comprobar que la pgina life.aspx
se abre sin solicitar nuestros credenciales.
7. Ir a http://localhost/BenefitsVB/SecurityTest.aspx o a
http://localhost/BenefitsCS/SecurityTest.aspx. Deberamos ver el ID de
empleado 1, que corresponde a la direccin electrnica
someone@cohowinery.com. Tambin veremos que somos autenticados con
la autenticacin basada en formularios.
8. Cerrar el navegador.
Nota de seguridad Cuando se utiliza la autenticacin basada en
formularios, la contrasea que se introduce en la pgina de inicio de sesin
se enva en texto claro a travs de la red. En un escenario del mundo real,
para evitar la posibilidad de que alguien obtenga la contrasea, debemos
utilizar una conexin SSL.
strEmployeeId = _
AddEmployee(txtEmail.Text, txtPassword.Text)
Visual C#
strEmployeeId =
AddEmployee(txtEmail.Text, txtPassword.Text);
FormsAuthentication.SetAuthCookie( _
strEmployeeId, False)
Response.Redirect("default.aspx")
Visual C#
FormsAuthentication.SetAuthCookie(
strEmployeeId, false);
Response.Redirect("default.aspx");
Guardar y probar
1. Guardar los cambios.
2. Generar el proyecto BenefitsVB o BenefitsCS.
3. Abrir un nuevo navegador e ir a http://localhost/BenefitsVB/default.aspx o a
http://localhost/BenefitsCS/default.aspx.
Deberamos ser redirigidos rpidamente a la pgina login.aspx puesto que
todas las pginas estn securizadas y, por tanto, default.aspx es una pgina
segura.
4. Hacer clic en Click here! Para abrir el formulario Web Form
registration.aspx para inscribir a un nuevo empleado.
Qu puede observarse? Por qu? Cmo puede solucionarse?
_____________________________________________________________
_____________________________________________________________
Guardar y probar
1. Guardar los cambios.
Nota No es necesario volver a generar el proyecto ya que nicamente
hemos cambiado el archivo Web.config.
2. Abrir un nuevo navegador e ir a http://localhost/BenefitsVB/default.aspx o a
http://localhost/BenefitsCS/default.aspx.
Deberamos ser redirigidos a la pgina login.aspx.
3. Hacer clic en Click here! para abrir el formulario Web Form
registration.aspx e inscribir un nuevo empleado. Deberamos ver ahora el
formulario Web Form register.aspx.
4. Introducir la direccin electrnica y una contrasea para ser agregado a la
base de datos como un nuevo empleado. Hacer clic en Submit.
Seremos redirigidos a la pgina default.aspx, y podremos explorar todas las
pginas.
5. Hacer clic en el enlace Life Insurance y comprobar que la pgina life.aspx
se abre sin solicitar las credenciales.
6. Ir a http://localhost/BenefitsVB/SecurityTest.aspx o a
http://localhost/BenefitsCS/SecurityTest.aspx. Deberamos ver nuestro ID
de empleado y que estamos autenticados con autenticacin basada en
formularios.
7. Cerrar el navegador, abrir un nuevo navegador, e ir a
http://localhost/BenefitsVB/default.aspx o a
http://localhost/BenefitsCS/default.aspx.
8. En la pgina login.aspx, iniciar sesin con las nuevas credenciales.
FormsAuthentication.SignOut()
Response.Redirect("login.aspx")
Visual C#
FormsAuthentication.SignOut();
Response.Redirect("login.aspx");
Guardar y probar
1. Guardar los cambios.
2. Generar el proyecto BenefitsVB o BenefitsCS.
3. Abrir un nuevo navegador e ir a http://localhost/BenefitsVB/default.aspx o
http://localhost/BenefitsCS/default.aspx.
Deberamos ser redirigidos a la pgina login.aspx.
4. Introducir la direccin electrnica y una contrasea, y hacer clic en Sign In
Now.
5. Hacer clic en el enlace Life Insurance y comprobar que la pgina life.aspx
se abre sin solicitar nuestras credenciales.
6. Hacer clic en el hiperenlace signout y clic en Sign Out.
Somos redirigidos a la pgina login.aspx.
7. Sin cerrar el navegador, ir de nuevo a
http://localhost/BenefitsVB/default.aspx o a
http://localhost/BenefitsCS/default.aspx. Actualizar el navegador.
Deberamos ser devueltos a la pgina login.aspx.
ndice
Descripcin
14
25
36
Descripcin
*****************************
Introduccin
Objetivos
*****************************
Introduccin
Por definicin, las aplicaciones Web ofrecen a los usuarios acceso a un recurso
centralizado, el servidor Web, y, a travs de l, acceso a servidores de bases de
datos. Conociendo e implementando medidas de seguridad adecuadas para
nuestra aplicacin Web, podemos proteger nuestros propios recursos, adems
de proporcionar un entorno seguro en el que los usuarios trabajen
cmodamente.
En esta leccin, se describen distintos conceptos de seguridad: autenticacin,
autorizacin y mecanismos de autenticacin de IIS. Tambin estudiaremos el
protocolo Secure Sockets Layer (SSL).
Objetivos de la leccin
Describir SSL.
Autenticacin
z
Autorizacin
z
*****************************
Introduccin
Autenticacin
Autenticacin
Autorizacin
Autorizacin
El usuario solicita una pgina Web segura y la solicitud pasa por IIS
Una vez IIS verifica las credenciales, se devuelve la pgina Web segura
*****************************
Introduccin
Mtodos de
autenticacin
Autenticacin basada en
Windows
Autenticacin basada en
formularios
Ventajas
Inconvenientes
Autenticacin
basada en
Windows
No apropiado para
la mayora de
aplicaciones de
Internet
Autenticacin
basada en
formularios
Basada en cookies
Autenticacin
mediante
Microsoft
Passport
Basada en cookies
Implica cuota
*****************************
Introduccin
Cada uno de los tres mtodos de autenticacin que soporta ASP.NET (basado
en Windows, basado en formularios y Microsoft Passport) es adecuado para
situaciones especficas. Cada mtodo tiene diversas ventajas e inconvenientes.
Autenticacin basada en
Windows
Autenticacin basada en
formularios
Autenticacin mediante
Microsoft Passport
Autenticacin
bsica
Autenticacin
implcita
Seguridad
integrada de
Windows
Nivel de
seguridad
Ninguno
Bajo
(Medio con SSL)
Descripci
Descripcin
No se produce autenticacin
El cliente enva nombre de usuario y
contrasea como texto claro
Puede encriptarse utilizando SSL
Parte de la especificacin HTTP y
soportado por la mayora de
exploradores
Medio
Alto
*****************************
Introduccin
Acceso annimo
Acceso annimo
Autenticacin bsica
Autenticacin implcita
Autenticacin implcita
10
*****************************
Introduccin
Ejecutar la demostracin
1. En el men Inicio, hacer clic con el botn derecho en Mi PC y hacer clic en
Administrar.
2. En la consola Administracin de equipos, expandir Servicios y
aplicaciones, expandir Internet Information Services, expandir Sitios
Web, y expandir Sitio Web predeterminado.
3. Hacer clic con el botn derecho en la aplicacin Web Pract14VB o
Pract14CS y hacer clic en Propiedades.
4. En el cuadro de dilogo Pract14VB o Propiedades de Pract14CS, en la
ficha Seguridad de directorios, en la seccin Control de autenticacin y
acceso annimo, hacer clic en Modificar.
5. Mostrar los mtodos de autenticacin disponibles.
11
Encriptacin de datos
Autenticacin de servidor
*****************************
Introduccin
Nota RSA son las siglas de Rivest, Shamir y Adleman, los nombres de los
cientficos que crearon este algoritmo.
Qu es SSL?
Encriptacin de datos
SSL es un protocolo que se utiliza para transmitir datos de modo seguro a travs
de una red. SSL securiza la comunicacin de datos mediante:
Encriptacin de datos
Autenticacin de servidor
Integridad de datos
12
13
Autenticacin de
servidor
Clave de sesin
Ventaja
Inconveniente
Clave de sesin de
40 bits
La comunicacin es mucho
ms rpida.
Clave de sesin de
128 bits
La comunicacin es bastante ms
lenta; cuanto ms larga es la clave,
ms trabajo deben realizar el
servidor y el navegador para
encriptar y desencriptar el mensaje.
Certificado de servidor
Para evitar que un sitio Web se haga pasar por otro, utilizamos SSL para
autenticar sitios Web. Cuando instalamos SSL en nuestro servidor Web,
debemos instalar un certificado de servidor. El certificado de servidor contiene
informacin sobre nuestra organizacin, nuestro sitio Web y el emisor del
certificado.
Para funcionar como un ID digital, un certificado de servidor debe estar
firmado por una autoridad de certificacin. La autoridad de certificacin acta
como un tercero de confianza que verifica la identidad de un sitio Web para sus
usuarios.
Certificado de cliente
Integridad de datos
SSL protege la integridad de los datos cuando viajan entre el servidor Web y los
navegadores Web. SSL garantiza que los datos recibidos por el servidor de
destino no han sufrido ninguna modificacin.
Cuando los mensajes se transmiten con SSL, incluyen un cdigo de
autenticacin de mensaje. Este cdigo detecta si el mensaje ha sido modificado.
Despus de configurar nuestro servidor para que utilice SSL, podemos solicitar
cualquier pgina de nuestro sitio Web utilizando una conexin segura. Para
recuperar una pgina Web, SSL utiliza Hypertext Transfer Protocol Secure
(HTTPS). Por ejemplo, una direccin con la forma
https://www.nuestrodominio.com/login.aspx en lugar de http://www.
nuestrodominio.com/pagina.aspx.
Esto funciona para cualquier pgina de nuestro sitio Web.
14
*****************************
Introduccin
Objetivos de la leccin
15
22
Bsica
Implcita
<system.web>
<system.web>
<Authentication
<Authentication mode="Windows"
mode="Windows" />
/>
</system.web>
</system.web>
*****************************
Introduccin
Configurar IIS
Autenticacin bsica
Autenticacin implcita
16
Configurar la
autenticacin
17
<location
<location path="ShoppingCart.aspx">
path="ShoppingCart.aspx">
<system.web>
<system.web>
<Authorization>
<Authorization>
<deny
<deny users="?"/>
users="?"/>
</Authorization>
</Authorization>
</system.web>
</system.web>
</location>
</location>
44
*****************************
Introduccin
Configurar la
autorizacin
Para indicar que slo algunas pginas especficas son seguras, debemos crear
una seccin <location> con subsecciones <system.web> y <authorization> para
cada pgina segura de nuestra aplicacin Web:
<location path="ShoppingCart.aspx">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
18
19
20
lblAuthUser.Text
lblAuthUser.Text == User.Identity.Name
User.Identity.Name
lblAuthType.Text
=
User.Identity.AuthenticationType
lblAuthType.Text = User.Identity.AuthenticationType
lblIsAuth.Text
lblIsAuth.Text == User.Identity.IsAuthenticated
User.Identity.IsAuthenticated
lblAuthUser.Text
lblAuthUser.Text == User.Identity.Name;
User.Identity.Name;
lblAuthType.Text
=
User.Identity.AuthenticationType;
lblAuthType.Text = User.Identity.AuthenticationType;
lblIsAuth.Text
lblIsAuth.Text == User.Identity.IsAuthenticated;
User.Identity.IsAuthenticated;
*****************************
Introduccin
lblAuthUser.Text = User.Identity.Name
lblAuthType.Text = User.Identity.AuthenticationType
lblIsAuth.Text = User.Identity.IsAuthenticated
C#
lblAuthUser.Text = User.Identity.Name;
lblAuthType.Text = User.Identity.AuthenticationType;
lblIsAuth.Text = User.Identity.IsAuthenticated;
21
*****************************
Introduccin
Ejecutar la demostracin
Configurar IIS con
autenticacin bsica
22
Valor
Nombre de usuario
someone
Nombre completo
someone
Descripcin
Contrasea
Secreto1
Confirmar contrasea
Secreto1
Mostrar la configuracin
de seguridad en el
archivo Web.config
http://localhost/Pract14VB/NonSecurePageDemo.aspx
C#
http://localhost/Pract14CS/NonSecurePageDemo.aspx
23
24
15. Ir a:
http://localhost/Pract14VB/SecurePageDemo1.aspx
C#
http://localhost/Pract14CS/SecurePageDemo1.aspx
Mostrar que aparece el cuadro de dilogo Connect to localhost.
16. Hacer clic en Cancelar y mostrar que se obtiene un error de servidor
porque se deniega el acceso.
17. Ir a:
http://localhost/Pract14VB/SecurePageDemo2.aspx
C#
http://localhost/Pract14CS/SecurePageDemo2.aspx
Mostrar que tambin aparece el cuadro de dilogo Connect to localhost.
18. Escribir las credenciales Nombre de usuario como someone y Contrasea
como Secreto1 y hacer clic en Aceptar.
19. La pgina SecurePageDemo2.aspx debera mostrar el nombre de usuario
someone y el tipo de autenticacin bsica.
Ahora, podemos acceder a cualquier pgina segura, siempre que no
cerremos el navegador. Si cerramos el navegador, deberemos repetir el
proceso de autenticacin.
20. Ir a:
http://localhost/Pract14VB/SecurePageDemo1.aspx
C#
http://localhost/Pract14CS/SecurePageDemo1.aspx
Mostrar que esta vez no se solicitan las credenciales.
http://Nombreequipoinstructor/Pract14VB/SecurePageDemo1.aspx
C#
http://Nombreequipoinstructor/Pract14CS/SecurePageDemo1.aspx
Escribir las credenciales someone y Secreto1 cuando se solicite.
Tras introducir las credenciales, los estudiantes deberan poder ver
SecurePageDemo1.aspx y SecurePageDemo2.aspx.
25
*****************************
Introduccin
Objetivos de la leccin
26
No
autenticado
66
Acceso denegado
22
IIS
Nombre usuario
Alguien
Contrasea
***********
No
autenticado
Cookie de
autenticacin
Enviar
Enviar
Autenticacin
ASP.NET Forms
Autenticado
Autorizado
44
Pgina de inicio
(los usuarios
introducen sus
credenciales)
33
Autenticado
Autorizado
55
77
Pgina segura
solicitada
*****************************
Introduccin
Cuando un usuario solicita una pgina Web que est protegida por
autenticacin basada en formularios, la solicitud debe pasar primero por IIS.
Por ello, debemos establecer la autenticacin de IIS a acceso annimo.
Establecer IIS a annimo requiere que todas las solicitudes pasen por ASP.NET
antes de ser autenticadas.
27
28
22
<Authentication
<Authentication mode="Forms"
mode="Forms" >>
<<forms
name=".namesuffix"
forms name=".namesuffix"
loginUrl="login.aspx"
loginUrl="login.aspx" />
/>
</Authentication>
</Authentication>
33
Establecer la autorizacin
44
*****************************
Introduccin
Habilitar la autenticacin
basada en formularios
Configurar la
autenticacin
Configurar la
autorizacin
Generar un formulario
Web Form de inicio de
sesin
29
30
private
private void
void cmdLogin_Click(object
cmdLogin_Click(object sender,
sender, EventArgs
EventArgs e)
e)
{{
if
if (login(txtEmail.Text,
(login(txtEmail.Text, txtPassword.Text))
txtPassword.Text))
FormsAuthentication.RedirectFromLoginPage(txtEmail.Text,
FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, false);
false);
}}
Sub
Sub cmdLogin_Click(s
cmdLogin_Click(s As
As Object,
Object, ee As
As eventArgs)
eventArgs)
If
(login(txtEmail.Text,
txtPassword.Text))
If (login(txtEmail.Text, txtPassword.Text))
FormsAuthentication.RedirectFromLoginPage(txtEmail.Text,
FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, False)
False)
End
End If
If
End
End Sub
Sub
*****************************
Introduccin
31
La siguiente tabla muestra una lista todos los mtodos del objeto
FormsAuthentication, que pueden utilizarse en el proceso de autenticacin.
Mtodo
Funcin
Authenticate
GetAuthCookie
GetRedirectUrl
RedirectFromLoginPage
SetAuthCookie
SignOut
32
C#
33
*****************************
Introduccin
Ejecutar la demostracin
Configurar IIS para
acceso annimo
34
Configurar la seguridad
en el archivo Web.config
Mostrar la pgina
LoginDemo.aspx
http://localhost/Pract14VB/NonSecurePageDemo.aspx
C#
http://localhost/Pract14CS/NonSecurePageDemo.aspx
14. Ir a:
http://localhost/Pract14VB/SecurePageDemo1.aspx
C#
http://localhost/Pract14CS/SecurePageDemo1.aspx
35
http://localhost/Pract14VB/SecurePageDemo2.aspx
C#
http://localhost/Pract14CS/SecurePageDemo2.aspx
Mostrar que esta vez no se nos pide que introduzcamos nuestras
credenciales.
Los estudiantes
acceden al equipo del
instructor
Visual Basic .NET
C#
http://Nombreequipoinstructor/Pract14VB/SecurePageDemo1.aspx
http://Nombreequipoinstructor/Pract14CS/SecurePageDemo1.aspx
Escribir las siguientes credenciales, nombre: someone@cohowinery.com, y
contrasea: someone, cuando se soliciten.
Despus de introducir las credenciales, los estudiantes deberan poder ver
SecurePageDemo1.aspx y SecurePageDemo2.aspx.
36
*****************************
Introduccin
Objetivos de la leccin
37
sitioweb.msft
Cliente
Passport.com
*****************************
Introduccin
1. Cuando el cliente solicita una pgina segura del sitio Web (host), la solicitud
se enva primero a IIS. IIS autentica al usuario como annimo y pasa la
solicitud a ASP.NET.
2. ASP.NET comprueba si existe una cookie especial en el cliente. Si la cookie
no est presente, la solicitud es rechazada y el cliente es redirigido al sitio
Web Passport.com para ser autenticado.
3. Passport genera un formulario de inicio de sesin que enva al cliente. El
usuario proporciona la informacin adecuada de inicio de sesin y la enva
al sitio de Passport.
4. Si las credenciales suministradas coinciden con las de la base de datos de
Passport, ste autentica al usuario y devuelve al cliente una cookie con un
ticket de autenticacin.
5. El cliente enva la solicitud inicial, esta vez con la informacin del ticket de
autenticacin, a la aplicacin Web ASP.NET.
6. De nuevo, IIS autentica al usuario como annimo. ASP.NET autentica al
usuario basndose en el ticket de autenticacin, y devuelve al cliente el
formulario Web Form seguro.
Una vez el usuario ha sido autenticado con Passport, es posible que se le
conceda acceso a otros sitios Web que tambin utilicen la autenticacin
mediante Microsoft Passport.
38
Sitios Web
z
http://www.passport.com
http://msdn.microsoft.com
*****************************
Introduccin
Sitios Web