Sie sind auf Seite 1von 96

Manual m032 CURSO VISUAL C#, ASP.

NET
DESARROLLO de SITIOS y SERVICIOS WEB 2012

S diferente, intgrate

Manual Mm032 CURSO VISUAL C# 2012,


ASP.NET DESARROLLO DE SITIOS y
SERVICIOS WEB

Autor: Orlando Gutirrez


Fecha: 23 /09 / 2013

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

INDICE

Pag. 5

Leccin 1 Introduccin al desarrollo de aplicaciones Web

Pag. 9

Leccin 2 Requerimientos para trabajar con ASP.NET

Pag. 12 Leccin 3 Configurar una aplicacin Web con IIS


Pag. 13

Leccin 4 Configuracin automtica de Visual Studio (Servidor Virtual)

Pag. 14 Leccin 5 Los tres mtodos para desarrollar aplicaciones WEB en ASP.NET : Pginas Web,
Formularios Web, MVC
Pag. 16

Leccin 6 Conceptos de Pginas Web: WebMatrix, Sintxis Razor

Pag. 19

Leccin 7 Conceptos de Formularios Web

Pag. 21

Leccin 8 Introduccin a MVC

Pag. 24

Leccin 9 Creando un sitio bsico

Pag. 25

Leccin 10 Creando pginas maestras

Pag. 26

Leccin 11 Controles ASP.NET

Pag. 27

Leccin 12 Controles HTML y de Servidor Web

Pag. 29

Leccin 13 Controles de datos ASP.Net :ListView, GridView, SqlDataSource, ChartControl

Pag. 35 Leccin 14 Clases : HttpRequest , HttpResponse , HttpServerUtility, HttpSessionState,


HttpApplicationState
Pag. 45

Leccin 15 Enrutamiento en ASP.NET

Pag. 48 Leccin 16 Seguridad en ASP.NET: Autenticacin y Autorizacin, Proveedores de autenticacin,


Autorizacin en ASP.NET
Pag. 52

Leccin 17 Archivo de configuracin

Pag. 56

Leccin 18 Rendimiento y Manejo del Cach

Pag. 64

Leccin 19 Controles de Usuario

Pag. 66

Leccin 20 Cdigo del lado del cliente: JavaScript, AJAX, Herramientas de AJAX

Pag. 77

Leccin 21 Internacionalizacin

Pag. 80

Leccin 22 Puesta en marcha aplicaciones

Pag. 83

Leccin 23 Servicios Web XML

Pag. 88

Leccin 24 Introduccin a los Servicios Web

Pag. 89

Leccin 25 Construyendo Servicios Web

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Pag. 89

Leccin 26 Probando un Servicio Web utilizando el Internet Explorer

Pag. 91

Leccin 27 Creando un cliente consumiendo Servicios Web

Pag. 94

Leccin 28 Seguridad en Servicios Web

Pag. 97

Leccin 29 Servicios WEB REST

Pag. 98 Leccin 30 Novedades en ASP.Net 4.5 y Visual Studio 2012: Framework y Tiempo de Ejecucin,
Formularios Web ASP, MVC 4, Pginas Web 2, IIS Express

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

LECCION 1

Introduccin al desarrollo de aplicaciones Web

Introduccin a ASP.NET
Microsoft ASP.NET forma parte de la plataforma de computacin Microsoft .NET. ASP.NET es empleado en el
desarrollo de aplicaciones WEB y en la implementacin de servicios WEB XML. Las pginas ASP.NET se ejecutan en
el servidor WEB y generan archivos en un lenguaje de markup como HTML, WML, o XML , los cuales son enviados
al cliente (al navegador) .
Las pginas ASP emplean un modelo compilado de programacin orientada por eventos. Este modelo permite
mejorar el rendimiento de la aplicacin y permite separar la lgica de la interfaz con el usuario de la lgica de la
aplicacin. Las pginas ASP.NET y los archivos de implementacin de los servicios Web XML contienen la lgica
ejecutada en el servidor (server-side) contrastando con las aplicaciones donde la lgica se ejecuta del lado del
cliente como aplicaciones escritas en Microsoft Visual Basic .NET, Microsoft Visual C# .NET, o en cualquier
lenguaje de programacin compatible con la plataforma de Microsoft.Net.
Archivos HTML y programacin de pginas WEB
El protocolo empleado por Internet para el procesamiento de pginas Web es HTML. Los archivos HTML son
archivos de texto (hipertexto) interpretados por los servidores de pginas Web con IIS y Apache; as como por los
navegadores de Internet como Explorer o Netscape. El cdigo programtico asociado a una pgina Web es
compilado por ASP.NET para ser transformado en HTML o alguna derivacin de ste para ser desplegado
finalmente en un navegador.
Al desarrollar una aplicacin, el diseo de las pginas WEB puede ser realizado con el diseador o editor de su
preferencia y la programacin de la misma puede ser efectuada desde el ambiente de programacin Visual Studio
.Net o colocando los scripts ASP.Net de manera "embeded".
Dentro de una herramienta como Visual Studio.NET tambin es posible disear el formato de la pgina Web el cual
ser desplegado.
Aunque en el caso especial de aplicaciones WEB en ASP.NET pareciera estar muy ligado el cdigo de la aplicacin
con el de la interfaz grfica es posible emplear tcnicas de programacin modular, estructurada u orientadas por
objetos permitiendo el desarrollo de aplicaciones de mltiples capas de una manera escalable.
Todas las tcnicas de programacin disponibles en Visual Studio .NET para el desarrollo de aplicaciones orientadas
a datos o a Windows tambin son aplicables para el caso de desarrollo en Web.
Diseando aplicaciones Web
Antes de desarrollar una aplicacin se debe aplicar un proceso de diseo, en el cual deben tomarse decisiones
acerca de las tecnologas para desarrollo del contenido WEB (diseo grfico y edicin), la modelacin de los
procesos, la localizacin y la seguridad.
En el caso de ASP.NET existen varias pautas de diseo a considerar:

Determinar la tecnologa de IIS a emplear

Diseando aplicaciones en dos capas Two-Tier

Diseando aplicaciones en tres capas Three-Tier

Diseando aplicaciones de mltiples capas Multi-Tier

Diseando aplicaciones a travs de servicios web Web services

Especificando los lmites de integracin de las capas Application Boundaries

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

Controlando el flujo de la aplicacin

Diseando una arquitectura cliente-servidor

Escalabilidad de aplicaciones

Integrabilidad de aplicaciones

Internacionalizacin de aplicaciones

Introduccin a las pginas ASP.NET


ASP.NET ofrece un kit para el desarrollo de aplicaciones o SDK Software Development Kit para el soporte de las
tareas y la programacin de las pginas web en ASP.NET.
Al crear una aplicacin en ASP.Net, deben ser considerados los siguientes puntos (todos estos puntos sern
considerados en detalle a lo largo del manual):

Ciclo de vida del proyecto

Metodologas de desarrollo y fases del proyecto

Consideraciones de seguridad de la pgina Web

La edicin, configuracin y programacin de los formularios Web

El desarrollo de los controles ASP.NET (En la terminologa de microsoft, un control es un objeto empleado
para el desarrollo de la interfaz grfica).

Manejo de datos en ASP.NET

Cdigo del lado del cliente (JavaScript, AJAX)

Manejo del estado y la seccin en una aplicacin Web

Servicios Web

Desarrollando aplicaciones para consumir servicios Web.

Caractersticas de ASP.Net
1.

ASP.NET es un framework libre para desarrollar sitios, aplicaciones y servicios web, con HTML, CSS y
JavaScript.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

2.

Sitios Web: ASP.NET es una herramienta ponderosa para desarrollar Sitios Web basados en estndares
con HTML5, CSS3, y JavaScript.

3.

APIs:SepuedendesarrollarAPis ASP.Net para la Web produciendo JSON o XML para comunicarse


con dispositivos, aplicaciones y servicios con HTML, CSS y JavaScript.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

4.

Tiempo Real: Con SignalR de ASP.NET se puede habilitar la comunicacin bi-direccional en tiempo real
entre el cliente y el servidor con sockets web.

5.

Aplicaciones Mbiles : ASP.NET permite desarrollar aplicaciones mviles y soporta el uso de frameworks
como jQuery Mobile.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

Tendencias actuales desarrollo asp.net


El sitio oficial de la documentacin de ASP.Net es www.asp.net.
Existen actualmente tres maneras de desarrollar aplicaciones WEB con esta tecnologa:

Pginas Web (Web Pages): Las pginas Web ASP.NET Web Pages y la nueva sintaxis Razor proveen un
mecanismo rpido, efectivo u ligero de combinar cdigo del servidor con HTML para generar contenido dinmico
web. Incluyen como caractersticas: Conexin a las bases de datos, video, conexin con redes sociales y las
caractersticas standard de los desarrollos web.

Formularios Web (Web Forms): Los formularios Web de ASP.NET Web permiten la construccin de
sitios web dinmicos utilizando un modelo drag-and-drop orientado por eventos. Se basa en una superficie de
diseo y la incorporacin sencilla de controles y componentes.

Modelo Vista Controlador (MVC): Es la implementacin del Patrn de Diseo, Modelo Vista Controlador
en ASP.Net. Facilita la escritura de cdigo empleando los principios de reutilizacin.
LECCION 2

Requerimientos para trabajar con ASP.NET

Para desarrollar aplicaciones ASP.NET, se debe disponer de lo siguiente:

.NET Framework.
Un entorno de creacin de cdigo IDE.
Un servidor Web como IIS (Internet Information Server) y permisos para guardar archivos en el servidor
Web.
Adicionalmente, se pueden utilizar los siguientes elementos:
** Un manejador de bases de datos DBMS, como Microsoft SQL Server, para proporcionar el
almacenamiento de datos de la aplicacin.
** Un servidor SMTP para enviar mensajes de correo electrnico de una aplicacin Web ASP.NET.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Requisitos
El entorno .NET Framework
ASP.NET forma parte de .NET Framework como el espacio de nombres System.Web. Para utilizar ASP.NET, debe
tener .NET Framework instalado en el equipo que aloja los sitios Web de ASP.NET.
En la siguiente tabla se muestra la relacin entre las versiones de ASP.Net y las del Framework .NET
VERSIN
DE
ASP.NET

VERSION
.NET
FRAMEWORK

VERSIN DE VISUAL
STUDIO

1.0

1.0

VISUAL STUDIO .NET (2002)

1.1

1.1

VISUAL STUDIO .NET 2003

HITOS IMPORTANTES

CONTROLES MOBILES
VALIDACION AUTOMATICA DE ENTRADA

2.0

2.0

VISUAL STUDIO 2005

CONTROLES DE DATOS
PROVEEDORES DE DATOS
MASTER PAGES
SKINS

3.0

3.0

WPF
WCF
WF

3.5

3.5

VISUAL STUDIO 2008

ASP.NET AJAX
LINQ

3.5
SERVICE
PACK 1

3.5 SERVICE
PACK 1

ASP.NET AJAX DATOS DINAMICOS

4.0

4.0

VISUAL STUDIO 2010

4.5

4.5

VISUAL STUDIO 2012

Ambientes de creacin de cdigo


Se pueden crear clases y pginas ASP.NET utilizando cualquier editor de texto, como el Bloc de notas de Microsoft,
que se suministra con Microsoft Windows. Sin embargo, Microsoft Visual Studio y otros ambientes de desarrollo
integrados (IDE) proporcionan muchas caractersticas de programacin, como plantillas de pgina, IntelliSense,
llenado automtico de cdigo y compilacin en tiempo de diseo. Estas caractersticas pueden acelerar el proceso
de desarrollo y proporcionar la organizacin para el proyecto.

Servidores Web

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Para trabajar con una aplicacin Web ASP.NET, se debe utilizar un explorador para realizar solicitudes al servidor
Web que aloja la aplicacin. Las aplicaciones Web ASP.NET se alojan normalmente utilizando IIS como servidor
Web. Se pueden probar las aplicaciones ejecutando IIS localmente en el equipo o implementar pginas y
componentes en un servidor compartido.
En Visual Studio, se pueden probar las pginas Web de ASP.NET usando el servidor de desarrollo de ASP.NET, que
ejecuta las pginas localmente en el equipo sin necesidad de instalar IIS.
Para trabajar con IIS como servidor Web, la cuenta de usuario en la que se realiza la ejecucin debe tener permiso
de escritura en el directorio en el que reside la aplicacin, ya sea como elemento secundario de la raz del servidor
Web (normalmente la carpeta Inetpub/wwwroot) o como directorio virtual. La cuenta que requiere permiso para un
directorio de aplicaciones suele ser diferente en tiempo de diseo que en tiempo de ejecucin. De manera
predeterminada, las aplicaciones Web ASP.NET se ejecutan en el contexto de una cuenta dependiendo de la versin
del Sistema de Operacin.
Si se tiene IIS instalado, al instalar .NET Framework se registra la extensin ISAPI de ASP.NET (Aspnet_isapi.dll)
en IIS. Si se instala IIS una vez que.NET Framework est instalado, se debe usar la utilidad Aspnet_regiis.exe para
registrar ASP.NET con IIS..
Si se requiere desarrollar la aplicacin mediante un servidor Web de IIS compartido. En este escenario, los mismos
requisitos de permiso se aplican en el escenario de IIS local.
Bases de datos
Si la aplicacin requiere almacenamiento de datos, se necesita acceso a un manejador de base de datos como
Microsoft SQL Server, y a los permisos adecuados para leer y escribir datos en la base de datos. En los escenarios
tpicos, una cuenta se utiliza para tener acceso a la base de datos en tiempo de diseo y se utiliza una cuenta
diferente para tener acceso a la base de datos en tiempo de ejecucin.
Servidores SMTP
Para enviar mensajes de correo electrnico desde una aplicacin Web ASP.NET, la aplicacin debe poder reenviar
los mensajes a un servidor SMTP. Algunos controles ASP.NET, como el control PasswordRecovery, requieren la
capacidad de enviar mensajes de correo electrnico.
Se puede utilizar el servidor virtual SMTP de IIS para reenviar mensajes de correo electrnico.
En la siguiente figura se muestra la arquitectura del Framework de .Net donde se muestra ASP.Net

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

10

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

Para el caso de las tendencias actuales de ASP.Net, Microsoft ofrece una herramienta gratuita llamada WebMatrix
para desarrollar Web Pages. Para el caso de los Web Forms y los MVC ofrecen Visual Studio Express 2012 for
Web.
LECCION 3

Configurar una aplicacin Web con IIS

Para el momento de una implantacin de una aplicacin ASP.Net es bueno utilizar una implementacin en IIS , la
configuracin del mismo depende de la versin de IIS y no de la versin del Framework. En esta leccin se indican
los pasos ms importantes.
Introduccin a IIS
Internet Information Services (IIS) convierte un computador en un servidor WEB para proveer: los servicios de
publicacin de WWW World Wide Web, los servicios de transferencia de archivos FTP File Transfer Protocol, los
servicios de correo SMTP Simple Mail Transport Protocol, y los servicios de publicacin de noticias Network News
Transfer Protocol. IIS puede ser empleado para realizar host y para administrar sitios web y otro contenido en
Internet una vez obtenida una direccin IP, registrado el dominio en un servidor DNS, y configurada la red
apropiadamente. IIS es un componente del sistema de operacin Microsoft Windows.
Cuando se establece un directorio virtual en IIS este puede ser colocado en cualquier ruta, la ruta por defecto
asociada a localhost es C:\\Inetpub\\wwwroot\\
IIS ofrece una herramienta para desarrollar aplicaciones WEB, la seccin de aplicaciones WEB del SDK (Software
Development Kit). Estas utilidades se encuentran disponibles en las clases de ASP.NET.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

11

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Las aplicaciones ASP.NET requieren que la plataforma .NET se encuentre instalada en el servidor IIS.
Configuracin IIS
Las versiones previas de ASP 3.0 requeran colocar la informacin de la configuracin en los parmetros de
configuracin de IIS (IIS settings). Por ejemplo, parmetros de configuracin como el estado de la seccin, el
buffer, el lenguaje de script por defecto y el timeout se configuraban ejecutando los siguientes pasos:

Click en el botn derecho de IIS Application

Seleccionar los parmetros (settings) de applications property

Seleccionar el tab de opciones App del dialogo Application Configuration`s

Estos son slo algunos de los settings necesarios a configurar a travs de los parmetros de configuracin de
aplicaciones de Microsoft Management Console (MMC). Todos estos parmetros o modificaciones son aplicados
a IIS metabase, la cual es utilizada para calcular los parmetros de aplicacin en tiempo de ejecucin para la
aplicacin web.
ASP+, la versin manejada en este manual, no requiere trabajar directamente con IIS metabase. En su lugar, la
configuracin en ASP.NET se basa en archivos de configuracin con formato XML, como por ejemplo config.web.
Crear y configurar directorios virtuales en IIS
Con el Administrador de Servicios de Internet Information Server (IIS) se puede crear un directorio virtual para
una aplicacin Web ASP.NET. Un directorio virtual aparece en los exploradores de los clientes como si estuviera
incluido en el directorio raz de un servidor Web, incluso si reside fsicamente en otra parte. Este mtodo permite
publicar el contenido Web que no se encuentra en la carpeta raz del servidor Web, como el contenido que est en
un equipo remoto. Es tambin una forma cmoda de configurar un sitio para el trabajo de desarrollo Web local
porque no requiere una identidad de sitio nica, lo que significa que se necesita un nmero menor de pasos para
crear un sitio nico.
Para crear un directorio virtual, se debe haber creado ya un sitio Web en el servidor Web. IIS crea un sitio Web
predeterminado en el equipo durante la instalacin. Si no se ha creado un sitio propio, se puede crear un directorio
virtual en el sitio Web predeterminado.
Como alternativa a la creacin de un directorio virtual para la aplicacin Web, es posible que quiera crear un nuevo
sitio Web con una identidad nica.
LECCION 4

Configuracin automtica de Visual Studio (Servidor Virtual)

Al seleccionar la opcin de Sitio Web Nuevo, se ofrecen una serie de plantillas, entre ellas se puede seleccionar
Sitio Web ASP.Net. Existe una lista donde se indica la localizacin del sitio Web. Las opciones son Sistema de
archivos, HTTP y FTP. Con la opcin de Sistema de Archivos se utiliza el servidor virtual de Microsoft Visual Studio
y es una alternativa viable de desarrollo.
En la siguiente figura se muestra el ejemplo

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

12

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

Y Visual Studio crea un servidor virtual web conectado a un puerto diferente a los utilizados como el 80.

LECCION 5 Los tres mtodos para desarrollar aplicaciones WEB en ASP.NET : Pginas Web,
Formularios Web, MVC
Existen actualmente tres maneras de desarrollar aplicaciones WEB con esta tecnologa:

Pginas Web (Web Pages): Las pginas Web ASP.NET Web Pages y la nueva sintaxis Razor proveen un
mecanismo rpido, efectivo u ligero de combinar cdigo del servidor con HTML para generar contenido dinmico
web. Incluyen como caractersticas: Conexin a las bases de datos, video, conexin con redes sociales y las
caractersticas standard de los desarrollos web.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

13

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

Web Matrix es una herramienta gratuita para realizar estos desarrollos.

Formularios Web (Web Forms): Los formularios Web de ASP.NET Web permiten la construccin de
sitios web dinmicos utilizando un modelo drag-and-drop orientado por eventos. Se basa en una superficie de
diseo y la incorporacin sencilla de controles y componentes.
Visual Studio Express es una herramienta gratuita para realizar estos desarrollos.

Modelo Vista Controlador (MVC): Es la implementacin del Patrn de Diseo, Modelo Vista Controlador
en ASP.Net. Facilita la escritura de cdigo empleando los principios de reutilizacin

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

14

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

Visual Studio ofrece en sus plantillas el tipo de proyectos MVC


LECCION 6

Conceptos de Pginas Web: WebMatrix, Sintxis Razor

Web Matrix
Microsoft WebMatrix es una aplicacin de la plataforma Windows libre, ligera, conectada a la nube para desarrollo
en Web. WebMatriz habilita a los desarrolladores la construccin de sitios web utilizando plantillas o aplicaciones de
cdigo libre. Soporta totalmente ASP.Net, PHP, Node.js y HTML 5. El objetivo de Web Matrix es ofrecer un
ambiente integrado para la programacin, configuracin y publicacin de sitios web.
La pgina oficial de Web Matrix es http://www.microsoft.com/web/webmatrix/

En la siguiente figura se muestra la plataforma de trabajo de WebMatrix

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

15

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

Razor
La tecnologa de pginas Web ASP.NET ofrece la sintaxis Razor. Razor proporciona un lenguaje de programacin
simple para escribir cdigo en pginas web donde el cdigo basado en servidor se incrusta en el formato HTML de
las pginas web (esquema ASP clsico, PHP, JSP). El cdigo de Razor se ejecuta en el servidor antes de que la
pgina se enve al explorador. Este cdigo de servidor puede crear dinmicamente contenido de cliente, es decir,
puede generar formato HTML u otro contenido sobre la marcha y, a continuacin, enviarlo al explorador junto con
cualquier cdigo HTML esttico que contenga la pgina.
Razor proporciona una alternativa a formularios Web Forms de ASP.NET. Las pginas de formularios Web Forms se
centran en controles de servidor web que generan cdigo HTML automticamente y emulan el modelo de
programacin basado en eventos usado para aplicaciones cliente. En cambio, las pginas de Razor funcionan ms
directamente como pginas HTML estndar, donde el propio usuario puede crear virtualmente todo el formato
HTML y, a continuacin, agregar la funcionalidad alrededor de ese formato usando el cdigo del servidor. En
general, las pginas de Razor son ms ligeras que las pginas de los formularios Web Forms. Por esa razn y
porque la sintaxis es simple, Razor puede ser ms fcil de aprender para los programadores y ms rpido para
desarrollar pginas web dinmicas.
Las pginas web que incluyen contenido de Razor tienen una extensin de archivo especial (.cshtml para C# o
.vbhtml para VB). El servidor reconoce estas extensiones, ejecuta el cdigo que est marcado con sintaxis de Razor
y, a continuacin, enva la pgina resultante al explorador.
Para trabajar con Razor se debe instalar las herramientas de Razor para ASP.Net para Visual Studio

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

16

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

Una vez instalado, aparece en Visual Studio la plantilla para Razor

Ejemplos de cdigo Razor en C#


var weekDay = DateTime.Now.DayOfWeek;
<p>Today is: @weekDay</p>

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

17

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
@for(var i = 10; i < 16; i++)
{
<p style="font-size: @(i + "pt")">My font size is now: @i</p>
}

<ul>
@foreach (var myItem in Request.ServerVariables)
{
<li>@myItem</li>
}
</ul>

LECCION 7

Conceptos de Formularios Web

Los formularios Web es la funcionalidad ofrecida por Visual Studio .Net para desarrollar formularios web orientados
por eventos, de manera similar a como se desarrollan los formularios Windows ofreciendo un nivel de abstraccin.
Introduccin
La plataforma .NET ofrece un ambiente para el desarrollo de formularios ASP.NET para WEB. Este ambiente se
basa en un modelo de programacin escalable soportado por el CLR (Common Language Runtime), el cual es
empleado en el servidor para generar dinmicamente pginas WEB.
Web Forms en ASP.NET es una Clase de la librera de clases disponibles. Por lo tanto, un Web Form debe ser
considerado como un objeto y no debe confundirse con el archivo .aspx asociado el cual contiene cdigo en HTML y
cdigo en un lenguaje de "scripting".
ASP.NET surge como la evolucin lgica de ASP (ActiveX Server Pages), por lo tanto ASP.NET es sintcticamente
compatible con las pginas ASP existentes. El ambiente para el desarrollo de formularios WEB en ASP.NET se
encuentra diseado para resolver algunas deficiencias existentes en el modelo previo de ASP. En particular,
ASP.NET provee:
La habilidad para crear y utilizar controles de interfaz de usuario (UI Controls) encapsulando la funcionalidad
comn y por lo tanto reduciendo la cantidad de cdigo a implementar por un desarrollador de pginas WEB.

La habilidad otorgada a los desarrolladores de generar cdigo de pginas WEB limpio, eficiente y estructurado.

La habilidad ofrecida a los desarrolladores de generar interfaces WYSIWYG (What You See Is What You Get),
tpico de los ambientes de desarrollo visual.
Archivos WEB Forms
Las pginas WEB en ASP.NET son archivos de texto con la extensin .aspx. Estas pginas pueden ser desplegadas
a travs de un directorio virtual raz de IIS. Cuando un browser (navegador) cliente solicita un recurso .aspx, la
plataforma .NET (a travs del mdulo de runtime de ASP.NET) realiza la compilacin y parsing del archivo .aspx
(cdigo fuente) y lo transforma en una clase de la plataforma .NET. Esta clase puede ser utilizada para procesar las
solicitudes de la pgina WEB dinmicamente.
Observacin: El archivo .aspx solo es compilado la primera vez que es accedido y esta instancia compilada es
reutilizada cada vez que una solicitud de servicio de la pgina web es requerido.

Una pgina ASP.NET puede ser creada simplemente tomando un archivo HTML existente y cambiando su extensin
a .aspx. No es requerida ninguna modificacin al cdigo de la pgina.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

18

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
A continuacin se indican los espacios de nombres utilizados en la plataforma .NET para desarrollar formularios
Web
Los espacios de nombres System.Web contienen tipos que habilitan la comunicacin entre el explorador y el
servidor. Los espacios de nombres secundarios incluyen tipos que admiten autenticacin de formularios de
ASP.NET, servicios de aplicacin, almacenamiento en cach de datos en el servidor, configuracin de aplicaciones
ASP.NET, datos dinmicos, controladores HTTP, serializacin de JSON, incorporacin de funcionalidad AJAX a
ASP.NET, seguridad de ASP.NET y servicios Web.
La documentacin actualizada de los espacios de nombres se encuentra definida en

http://msdn.microsoft.com/eses/library/gg145018.aspx

En Visual Studio .Net se ofrecen plantillas para la creacin de formularios web, como se muestran a continuacin

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

19

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

Al crearse un Proyecto de este tipo, se crea un formulario Web por defecto, Default.aspx
En un formulario se pueden agregar controles y programar eventos

LECCION 8

Introduccin a MVC

El Patrn Modelo - Vista - Controlador (MVC)


ASP.NET MVC es, bsicamente, una implementacin del patrn Modelo - Vista - Controlador (MVC) para tecnologa
ASP.NET. El patrn MVC no es ni nuevo (data de finales de los aos 70) ni est pensado para aplicaciones web,
pero en realidad en aplicaciones web encaja perfectamente.
Brevemente se puede afirmar que el patrn MVC separa la lgica (y acceso a datos) de una aplicacin de su
presentacin,usando 3 componentes:
1. Modelo: Representa las reglas de negocio de la aplicacin (y el acceso a datos subyacente).
2. Vistas: Representan la presentacin de la aplicacin.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

20

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
3. Controlador: Actan de intermediario entre el usuario y el Modelo y las Vistas. Recogen las peticiones del
usuario, interactan con el modelo y deciden que vista es la que debe mostrar los datos.
En el contexto de ASP.NET MVC:
Toda la lgica de negocio y el acceso a datos es el Modelo (en muchos casos el Modelo puede estar en uno o
varios assemblies referenciados).
Las vistas contienen, bsicamente, el cdigo que se enva al navegador, es decir el cdigo HTML (y cdigo de
servidor asociado, siempre y cuando este cdigo haga cosas de presentacin, no de lgica de negocio).
Los controladores reciben las peticiones del navegador y en base a esas, deciden que vista debe enviarse de
vuelta al navegador y con qu datos.

Ventajas de ASP.NET MVC


La ventaja ms visible de ASP.NET con MVC es la facilidad con la que se generan URL semnticas (conocidas como
rutas en otros frameworks), es decir URL que tengan la forma http://servidor/ver/productos/cafeteras en lugar de
http://servidor/productos/ver.aspx?code=cafeteras.
Las URLs semnticas se indexan mejor en los buscadores y son una prctica SEO habitual. No es que en webforms
no se puedan hacer, es que en ASP.NET MVC vienen por defecto.
Otras ventajas, ms a nivel tcnico, son que con ASP.NET MVC se facilita mucho la fase de pruebas de la aplicacin
(especialmente usando pruebas unitarias) y que el uso correcto del patrn MVC facilita la reutilizacin de cdigo de
manera mucho ms efectiva que en webforms.
Por supuesto, todo esto tiene un precio: la curva de aprendizaje de ASP.NET MVC puede ser ms alta que la de
webforms, especialmente si nunca se ha desarrollado para web. A diferencia de webforms, dnde se abstrae de
HTTP y HTML, ASP.NET MVC est "mucho ms cerca de la web", lo que hace necesario conocer HTTP, HTML y
Javascript para trabajar con l.
MVC en Visual Studio
Visual Studio ofrece plantillas para el desarrollo MVC

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

21

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Al crear una aplicacin MVC , Visual Studio crea una serie de elementos y directorios siguiendo el patrn MVC de la
separacin en capas.

LECCION 9

Creando un sitio bsico

Un sitio Web se compone de varios elementos conteniendo la aplicacin Web. El principal elemento de los sitios
web son las pginas web.
Las pginas WEB en ASP.NET son archivos de texto con la extensin .aspx. Una pgina ASP.NET puede ser creada
simplemente tomando un archive HTML existente y cambiando su extensin a .aspx. No es requerida ninguna
modificacin al cdigo de la pgina.
Las pginas Web, desarriolladas en Visual Studio, contienen dos archivos:

Archivos con extensin .aspx (conteniendo el cdigo de la pgina). La sintxis es la de HTML con las
directivas del Framework de .Net (identificadas con @) y las etiquetas especiales definidas en .Net para
los controles (identificadas con <asp>).

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

22

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

Archivos con extensin .aspx.cs (donde se coloca el cdigo Behind para procesar los eventos ocurridos
en el formulario
using
using
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;

namespace appWeb
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
Las pginas web son formularios web heredando de la clase Page. Los eventos se programan como el resto de las
aplicaciones de Visual Studio.
Para crear una pgina web nueva, se agrega un nuevo elemento del tipo Formulario Web

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

23

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

LECCION 10 Creando pginas maestras


Una pgina maestra en Visual Studio es una pgina que sirve de modelo o plantilla para otras pginas, Es utilizada
cuando se requieren que todas las pginas de una aplicacin tengan la misma apariencia. Cuando se crea una
pgina web en Visual Studio se indica si requiere o no utilizar una pgina maestra. Cualquier cambio realizado en la
pgina maestra ser propagado en todas las pginas donde se utilice.
Las pginas maestras tienen como extensin .Master y se definen empleando la directiva @Master.
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs"
Inherits="appWeb.SiteMaster" %>

Las pginas utilizando una pgina maestra indican a travs de la propiedad MasterPageFile de la directiva @Page
cul es la pgina maestra.
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="appWeb._Default" %>

Visual Studio ofrece plantillas para la creacin de pginas maestras y pginas maestras anidadas.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

24

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

En Visual Studio es posible indicar la creacin de una pgina web utilizando una pgina maestra.

LECCION 11 Controles ASP.NET


Una pgina web en ASP.Net se encuentra conformada por controles.
Cuando se crean pginas Web ASP.NET, se puede utilizar estos tipos de controles:

Controles de servidor HTML Elementos HTML expuestos al servidor para que se puedan programar.
Los controles de servidor HTML exponen un modelo de objeto que se relacionan muy estrechamente con los
elementos HTML que representan.

Controles de servidor web Controles con ms funciones incorporadas que los controles de servidor
HTML. Los controles de servidor web incluyen no slo controles de formulario como botones y cuadros de texto,
sino tambin controles con fines especiales como un calendario, mens y un control de vista de rbol. Los controles
de servidor web son ms abstractos que los controles de servidor HTML pues su modelo de objetos no refleja
necesariamente la sintaxis HTML.

Controles de validacin Controles que incorporan lgica para permitirle comprobar los controles de
entrada de los usuarios como el control TextBox. Los controles de validacin le permiten comprobar un campo
necesario, su adecuacin a un valor o un modelo de caracteres concreto, comprobar que un valor se encuentra en
un intervalo predefinido, etc.

Controles de usuario Controles que crea como pginas Web ASP.NET. Se pueden incrustar controles
de usuario de ASP.NET en otras pginas Web ASP.NET; esta es una forma sencilla de crear barras de herramientas
y otros elementos reutilizables.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

25

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Desde el punto de vista de organizacin en Visual Studio, los controles son agrupados como se muestra a
continuacin.

LECCION 12 Controles HTML y de Servidor Web


Controles de servidor HTML
Los controles de servidor HTML son elementos HTML (o elementos en otro marcado compatible, como XHTML) que
contienen atributos que los convierten en programables en cdigo del servidor. De forma predeterminada, los
elementos HTML en una pgina Web ASP.NET no estn disponibles para el servidor. En su lugar, se tratan como
texto opaco y se pasan al explorador. Sin embargo, cuando se convierten en controles de servidor HTML, los
elementos HTML quedan expuestos como elementos programables en el servidor.
El modelo de objetos de los controles de servidor HTML se relaciona estrechamente con el de los elementos
correspondientes.Por ejemplo, los atributos HTML se exponen en controles de servidor HTML como propiedades.
Cualquier elemento HTML de una pgina se puede convertir en control de servidor HTML agregando el
atributo runat="server". Durante el anlisis, el marco de trabajo de la pgina ASP.NET crea instancias de todos
los elementos que contienen el atributo runat="server". Si desea hacer referencia al control como un miembro
dentro del cdigo, tambin deber asignarle un atributo id al control.
El marco de trabajo de la pgina proporciona controles de servidor HTML predefinidos para los elementos HTML que
se utilizan con ms frecuencia dinmicamente en una pgina: el elemento form, los elementos input (cuadro de
texto, casilla, botn Enviar), el elemento select, etc. Estos controles de servidor HTML predefinidos comparten las
propiedades bsicas del control genrico y, adems, cada control normalmente proporciona su propio conjunto de
propiedades y su propio evento.
Los controles de servidor HTML ofrecen las funciones siguientes:

Un modelo de objetos que pueda volver a programar en el servidor con las tcnicas habituales orientadas
a objetos. Los controles de servidor exponen propiedades que permiten manipular los atributos de
marcado del control mediante programacin en el cdigo del servidor.

Un conjunto de eventos para los que pueda escribir controles de eventos de la misma forma que lo hara
en un formulario basado en cliente, con la excepcin de que un evento se controla en cdigo del servidor.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

26

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

La capacidad de controlar eventos en un script de cliente.


Mantenimiento automtico del estado del control. Cuando la pgina realiza una accin de ida y vuelta al
servidor, los valores que el usuario escriba en los controles de servidor HTML se mantendrn
automticamente y la pgina se devuelve al explorador.

Interaccin con los controles de validacin ASP.NET para poder comprobar que un usuario ha escrito la
informacin adecuada en un control.

Enlace de datos a una o varias de las propiedades del control.


Compatibilidad con estilos si la pgina Web ASP.NET se muestra en un explorador que admite hojas de
estilos en cascada.

Paso a travs de atributos personalizados. Pueden agregarse los atributos que se necesiten a un control
de servidor HTML: el marco de trabajo de pginas los representar sin ningn cambio en la funcionalidad.
Esto permite agregar atributos especficos del explorador a los controles.

Controles de servidor web


Los controles de servidor web son un segundo conjunto de controles diseado con otro enfoque. No se asignan
necesariamente uno a uno a controles de servidor HTML. En lugar de ello, se definen como controles abstractos, en
los que el marcado real representado por el control puede ser muy diferente al modelo con respecto al que se han
programado. Por ejemplo, un control RadioButtonList de servidor web podra representarse en una tabla o como un
texto en lnea con otro marcado.
Los controles de servidor web incluyen controles de formulario tradicionales como botones y cuadros de texto,
adems de controles complejos, como, por ejemplo, las tablas. Tambin incluyen controles que proporcionan
funcionalidad de formulario de uso frecuente, como la presentacin de datos en cuadrcula, la eleccin de fechas, la
visualizacin de mens, etc.
Los controles de servidor web ofrecen todas las funciones descritas anteriormente para los controles de servidor
HTML (excepto la asignacin uno a uno a elementos) y estas funciones adicionales:

Un modelo de objetos enriquecido que proporciona capacidades de programacin de tipo seguro.


Deteccin automtica del explorador. Los controles pueden detectar las funciones del explorador y
representar el marcado adecuado.

Para algunos controles, la capacidad para definir su propio diseo para el control utilizando Templates.
Para algunos controles, la capacidad de especificar si un evento del control provoca un envo inmediato al
servidor o, en su lugar, se almacena en cach y se activa cuando se enva la pgina.

Compatibilidad para temas, lo que le permite definir un aspecto uniforme para los controles en todo el
sitio. Capacidad para pasar eventos de un control anidado (como un botn en una tabla) al control
contenedor.

Los controles utilizan una sintaxis como la que se muestra a continuacin:


<asp:button attributes runat="server" id="Button1" />
En este caso los atributos no son los de los elementos HTML. En lugar de ello, son propiedades del control Web.
Cuando se ejecuta la pgina Web ASP.NET, el control de servidor web se representa en la pgina utilizando el
marcado apropiado, que con frecuencia no slo depende del tipo de explorador sino tambin de la configuracin
que haya realizado para el control. Por ejemplo, un control TextBox podra representarse como una
etiqueta input o una etiqueta textarea dependiendo de sus propiedades.

LECCION 13 Controles de datos ASP.Net :ListView, GridView, SqlDataSource, ChartControl

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

27

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Son controles de origen de datos que permiten utilizar un control Web para tener acceso a los datos de una base
de datos, as como dar formato a los controles que permiten mostrar y manipular los datos de una pgina Web
ASP.NET.
Los controles de servidor Web enlazados a datos son controles que pueden ser enlazados a un control de cdigo
fuente de datos para facilitar la operacin de mostrar y modificar datos en la aplicacin Web. Los controles de
servidor Web enlazados a datos son controles compuestos que combinan otros controles Web de ASP.NET, como
los controles Label y TextBox, en un diseo nico.
Por ejemplo, un control enlazado a datos, como el control DetailsView se puede enlazar a un conjunto de
resultados como una tabla de empleados que contenga el nombre de cada empleado, la direccin, el puesto de
trabajo, etc. Dentro del control DetailsView, se pueden enlazar controles Label a valores de datos nicos, como el
campo de nombre o de direccin para crear el diseo de datos de la pgina.
Adems de permitir enlazar el control a un conjunto de resultados de datos, los controles enlazados a datos
permiten personalizar el diseo del control mediante la utilizacin de plantillas. Tambin proporcionan un modelo
cmodo para controlar y cancelar los eventos.

Enlazar a datos un control de servidor Web enlazado a datos


Se puede trabajar con un control enlazado a datos enlazndolo a un control de cdigo fuente de datos como el
control ObjectDataSource o el control SqlDataSource. El control de cdigo fuente de datos conecta a un origen de
datos como una base de datos o el objeto de nivel medio y, a continuacin, recupera o actualiza los datos. El
control enlazado a datos puede utilizar entonces este dato. Para realizar el enlace, se establece la propiedad
DataSourceID del control enlazado a datos para sealar a un control de cdigo fuente de datos. Cuando un
control enlazado a datos se enlaza a un control de cdigo fuente de datos, apenas se necesita escribir cdigo
adicional, o no se necesita en absoluto, para realizar operaciones con datos, porque el control enlazado a datos
puede aprovecharse automticamente de los servicios de datos proporcionados por el control de cdigo fuente de
datos.

Usar controles de servidor web enlazados a datos con los datos dinmicos de ASP.NET
Los datos dinmicos de ASP.NET admiten algunos de los controles enlazados a datos de ASP.NET, como los
controles DetailsView, FormView, GridView y ListView.
Las interfaces IDataBoundControl, IDataBoundListControl, IDataBoundItemControl e IFieldControl exponen las
propiedades comunes que se requieren para la compatibilidad con los datos dinmicos. Si se va a crear un control
enlazado a datos personalizado que funcione con datos dinmicos, se podr implementar estas interfaces en lugar
de realizar una derivacin de la clase DataBoundControl.
Control ListView
El control ListView muestra los datos de un origen de datos en un formato que se define mediante plantillas. La
plantilla contiene el formato, los controles y las expresiones de enlace que se utilizan para definir el diseo de los
datos. El control ListView resulta til para los datos de cualquier estructura de repeticin, de forma similar a los
controles DataList y Repeater. Sin embargo, a diferencia de los controles DataList y Repeater, el control ListView
admite implcitamente las operaciones de edicin, insercin y eliminacin, as como la funcionalidad de ordenacin
y paginacin.
Enlazar datos al control ListView
Mediante la propiedad DataSourceID. Esto permite enlazar el control ListView a un control de origen de datos, por
ejemplo, SqlDataSource. Este mtodo porque permite al control ListView aprovechar las funciones del control de

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

28

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
origen de datos. Tambin proporciona funcionalidad integrada para ordenar, paginar, insertar, eliminar y
actualizar. Este enfoque tambin permite utilizar expresiones de enlace bidireccionales.
Mediante la propiedad DataSource. Esto permite enlazar a varios objetos, incluidos los conjuntos de datos y
lectores de datos ADO.NET, as como estructuras en memoria como colecciones. Si se utiliza este enfoque, se
deber escribir cdigo para otras funciones adicionales como ordenar, paginar y actualizar.
Plantillas control ListView, ejemplos
<asp:ListView runat="server" ID="ListView1"
DataSourceID="SqlDataSource1">
<LayoutTemplate>
<table runat="server" id="table1" >
<tr runat="server" id="itemPlaceholder" ></tr>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr runat="server">
<td runat="server">
<%-- Data-bound content. --%>
<asp:Label ID="NameLabel" runat="server"
Text='<%#Eval("Name") %>' />
</td>
</tr>
</ItemTemplate>
</asp:ListView>
Ejemplo ListView

<asp:ListView runat="server" ID="EmployeesListView"


DataSourceID="EmployeesDataSource"
DataKeyNames="EmployeeID">

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

29

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
<LayoutTemplate>
<table cellpadding="2" runat="server" id="tblEmployees"
style="width:460px">
<tr runat="server" id="itemPlaceholder">
</tr>
</table>
<asp:DataPager runat="server" ID="DataPager" PageSize="3">
<Fields>
<asp:NumericPagerField
ButtonCount="5"
PreviousPageText="<--"
NextPageText="-->" />
</Fields>
</asp:DataPager>
</LayoutTemplate>
<ItemTemplate>
<tr runat="server">
<td valign="top" colspan="2" align="center"
class="EmployeeName">
<asp:Label ID="FirstNameLabel" runat="server"
Text='<%#Eval("FirstName") %>' />
<asp:Label ID="LastNameLabel" runat="server"
Text='<%#Eval("LastName") %>' />
</td>
</tr>
<tr style="height:72px" runat="server">
<td valign="top" class="EmployeeInfo">
<asp:Label ID="JobTitleLabel" runat="server"
Text='<%#Eval("JobTitle") %>' />
<br />
<asp:HyperLink ID="EmailAddressLink" runat="server"
Text='<%#Eval("EmailAddress") %>'
NavigateUrl='<%#"mailto:" + Eval("EmailAddress") %>' />
<br />
<asp:Label ID="PhoneLabel" runat="server"
Text='<%#Eval("Phone") %>' />
</td>
<td valign="top" class="EmployeeAddress">
<asp:Label ID="AddressLine1Label" runat="server"
Text='<%#Eval("AddressLine1") %>' />
<br />
<asp:Panel ID="AddressLine2Panel" runat="server"
Visible='<%#Eval("AddressLine2").ToString() != String.Empty %>'>
<asp:Label ID="AddressLine2Label" runat="server"
Text='<%#Eval("AddressLine2").ToString()%>' />
<br />
</asp:Panel>
<asp:Label ID="CityLabel" runat="server"
Text='<%#Eval("City") %>' />,
<asp:Label ID="StateProvinceNameLabel" runat="server"

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

30

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Text='<%#Eval("StateProvinceName") %>' />
<asp:Label ID="PostalCodeLabel" runat="server"
Text='<%#Eval("PostalCode") %>' />
<br />
<asp:Label ID="CountryRegionNameLabel" runat="server"
Text='<%#Eval("CountryRegionName") %>' />
</td>
</tr>
</ItemTemplate>
</asp:ListView>

Control GridView
El control GridView muestra los datos en forma de tabla y ofrece la funcin de ordenar columnas, paginar los
datos y editar o eliminar un nico registro.
Una tarea recurrente en el desarrollo de software es mostrar los datos tabulares. ASP.NET proporciona varias
herramientas para mostrar los datos tabulares en una cuadrcula, entre las que se incluye el control GridView. Con
el control GridView, puede mostrar, editar y eliminar datos de muchos tipos diferentes de orgenes de datos, entre
los que se incluyen bases de datos, archivos XML y objetos comerciales que exponen los datos.
Se Puede usar el control GridView para hacer lo siguiente:
a)
b)

Enlazar y mostrar los datos automticamente desde un control de cdigo fuente de datos.
Seleccionar, ordenar, paginar, editar y eliminar datos desde un control de cdigo fuente de datos.

Adems, para personalizar la apariencia y el comportamiento del control GridView, se puede:


c)
d)
e)

Especificar columnas y estilos personalizados.


Utilizar plantillas para crear elementos de interfaz de usuario personalizados.
Agregar cdigo a la funcionalidad del control GridView controlando eventos.

Enlazar datos con el control GridView


El control GridView proporciona dos opciones para enlazar los datos:
Se pueden enlazar datos mediante la propiedad DataSourceID, que permite enlazar el control GridView a un
control de cdigo fuente de datos. ste es el enfoque recomendado, ya que permite al control GridView aprovechar
las funciones del control de cdigo fuente de datos y proporcionar una funcionalidad integrada para la ordenacin,
la actualizacin y la paginacin.
Se pueden enlazar datos mediante la propiedad DataSource, que permite establecer enlaces a distintos objetos,
incluidos los lectores de datos y los conjuntos de datos de ADO.NET. Si se utiliza este enfoque, se deber escribir
cdigo para cualquier funcin adicional como ordenacin, paginacin y actualizacin.
Cuando se establece un enlace a un origen de datos mediante la propiedad DataSourceID, el control GridView
admite el enlace de datos bidireccional. Adems de que el control muestre los datos devueltos, puede permitir que
el control admita automticamente las operaciones de actualizacin y eliminacin de los datos enlazados.
Dar Formato a los datos mostrados en el control GridView
Se puede especificar el diseo, el color, la fuente y la alineacin de las filas del control GridView. Se puede definir
la presentacin del texto y los datos incluidos en las filas. Adems, se puede especificar si las filas de datos se
muestran como elementos, elementos alternos, elementos seleccionados o elementos en modo de edicin. El
control GridView tambin permite definir el formato de las columnas.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

31

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Editar y eliminar datos mediante el control GridView
De forma predeterminada, el control GridView muestra los datos en modo de slo lectura. Sin embargo, el control
tambin admite un modo de edicin en el que muestra una fila que contiene controles modificables, como TextBox
o CheckBox. Tambin se puede configurar el control GridView para que muestre un botn Delete en el que los
usuarios pueden hacer clic para eliminar el registro correspondiente del origen de datos.
El control GridView puede realizar automticamente las operaciones de edicin y eliminacin con su origen de datos
asociado, lo que permite habilitar la funcin de edicin sin necesidad de escribir cdigo. Si se requiere, se puede
controlar tambin el proceso de edicin y eliminacin de los datos mediante programacin, por ejemplo en los
casos en los que el control GridView se enlaza a un control de cdigo fuente de datos de slo lectura.
Se puede personalizar los controles de entrada que se utilizan cuando una fila est en modo de edicin utilizando
una plantilla.
Funcionalidad de ordenacin de GridView
El control GridView permite realizar la ordenacin por el contenido de una nica columna sin que sea necesario
utilizar programacin. Se puede personalizar la funcionalidad de ordenacin del control GridView administrando el
evento de ordenacin, proporcionando una expresin de ordenacin o aplicando un estilo CSS a la columna por la
que se ordenan los datos. Se usan las propiedades SortedAscendingHeaderStyle, SortedDescendingCellStyle,
SortedDescendingHeaderStyle y SortedAscendingHeaderStyle para aplicar un estilo CSS a la columna ordenada.
Por ejemplo, se puede especificar un estilo para la columna por la que se ordenan los datos y aplicar un estilo de
encabezado para indicar la direccin de la ordenacin.
Funcionalidad de paginacin de GridView
El control GridView proporciona una funcionalidad sencilla de paginacin. Se puede personalizar la funcionalidad de
paginacin del control GridView utilizando la propiedad PagerTemplate del control GridView.
Se puede especificar cmo se conservan las filas seleccionadas cuando el control GridView se encuentra en modo
de paginacin. De forma predeterminada, la seleccin de filas est basada en el ndice de fila. La misma fila (por
ejemplo, la tercera fila) est seleccionada en cada pgina. Alternativamente, se puede habilitar la persistencia
basada en la clave de datos de la fila seleccionada. En ese caso, si selecciona la fila 3 en la pgina 1 y se desplaza
a la pgina 2, no habr ninguna fila seleccionada en la pgina 2. Si regresa a la pgina 1, la fila 3 an estar
seleccionada. Para habilitar esta funcionalidad se establece la propiedad EnablePersistedSelection en true.
Control SqlDataSource
El control SqlDataSource permite usar un control de datos para tener acceso a datos ubicados tanto en bases de
datos relacionales, como las bases de datos de Microsoft SQL Server y de Oracle, como en orgenes de datos OLE
DB y ODBC.
La forma ms comn de usar un control SqlDataSource es especificarlo en el Asistente para la configuracin de
orgenes de datos cuando se establece el Origen de datos de un control enlazado a datos, como GridView (control),
FormView (control), DetailsView (control), DataList (control) o Repeater (control).
Tambin se puede agregar un control SqlDataSource a una pgina arrastrndolo del panel de tareas Cuadro de
herramientas a la pgina. Cuando el control se encuentre en la pgina, clic en l con el botn secundario y se elige
Propiedades para abrir el panel de tareas Propiedades de etiqueta, en el que puede configurar las propiedades del
control.
Para conectar a una base de datos, se debe establecer la propiedad ConnectionString en una cadena de conexin
vlida. El control SqlDataSource admite cualquier base de datos relacional SQL que pueda conectarse mediante un
proveedor ADO.NET, tal como SqlClient, OleDb, Odbc o OracleClient.
Para recuperar datos de una base de datos subyacente, se establece la propiedad SelectCommand con una
consulta SQL. Si la base de datos a la que est asociada el control SqlDataSource admite procedimientos
almacenados, puede establecer la propiedad SelectCommand en el nombre de un procedimiento almacenado. La

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

32

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
consulta SQL que especifique tambin puede ser una consulta parametrizada. Puede agregar objetos Parameter
que asociados a una consulta parametrizada a la coleccin SelectParameters..
El control SqlDataSource recupera datos cada vez que se llama al mtodo Select. Este mtodo proporciona acceso
mediante programacin al mtodo especificado por la propiedad SelectMethod. Los controles que se enlazan a
SqlDataSource llaman automticamente al mtodo Select cuando se llama a su mtodo DataBind. Si establece la
propiedad DataSourceID de un control enlazado a datos, el control se enlaza automticamente a los datos del
origen de datos, segn sea necesario.
Dependiendo de las capacidades del producto de base de datos subyacente y de la configuracin de la instancia de
la clase SqlDataSource, se puede realizar operaciones de datos tales como actualizaciones, inserciones y
eliminaciones. Para realizar estas operaciones de datos, se establece el texto de comando adecuado y cualquier
parmetro asociado para la operacin a realizar. Por ejemplo, para una operacin de actualizacin, se establece la
propiedad UpdateCommand en una cadena SQL o en el nombre de un procedimiento almacenado y se agregan
los parmetros necesarios a la coleccin UpdateParameters. La actualizacin se realiza cuando se llama al
mtodo Update, explcitamente mediante cdigo o automticamente mediante un control enlazado a datos. El
mismo modelo general se sigue para las operaciones Delete e Insert.
Las consultas y comandos SQL que se utilizan en las propiedades SelectCommand, UpdateCommand,
InsertCommand y DeleteCommand se pueden parametrizar.

Chart Control
Los controles Chart permiten crear pginas ASP.NET o aplicaciones de Windows Forms con grficos sencillos,
intuitivos y visualmente persuasivos para un anlisis estadstico o financiero complejo.
A continuacin se muestran los pasos para crear un Chart
Agregar un control Chart
Para agregar un control de grfico a una aplicacin
1.

En la vista de diseo, abrir el Cuadro de herramientas.

2.

Arrastrar un control Chart hasta el rea de diseo.


El control Chart se encuentra en la referencia Componentes de .NET Framekwork:

o
o

System.Web.UI.DataVisualization.Charting
System.Windows.Forms.DataVisualization.Charting

3.

Clic con el botn secundario sobre el control Chart en el rea de diseo y seleccionar Propiedades.

4.

Parametrizar los elementos del grfico (ChartAreas, Series, Leyendas, Titulos, Anotaciones)

5.

Para agregar los datos, se usan DataPoint en los Datos de la Serie.

Para enlazar con los datos de una Base de datos, se especifica el DataSourceId en las Propiedades del Chart.
Luego en las Series se indica en el origen de datos la propiedad XValueMember y YValueMember.

LECCION 14 Clases : HttpRequest , HttpResponse , HttpServerUtility, HttpSessionState,


HttpApplicationState
Estas clases se encuentran en el espacio de nombres System.Web donde se encuentran las clases e interfaces
que permiten la comunicacin entre el explorador y el servidor. Este espacio de nombres incluye la clase
HttpRequest, que proporciona amplia informacin sobre la solicitud HTTP actual, la clase HttpResponse, que
administra la salida HTTP al cliente, y la clase HttpServerUtility, que proporciona acceso a las utilidades y
procesos del servidor. System.Web tambin incluye clases para la manipulacin de cookies, la transferencia de
archivos, la informacin de excepciones y el control de la memoria cach de resultados.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

33

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Clase HttpRequest
La clase HttpRequest permite leer los http valores enviados por un cliente durante un requerimiento Web
(web Request) en ASP.NET. Se encuentra dentro del espacio de nombres System.Web y se trata de una clase
sellada (no puede ser heredada).
System.Web.HttpRequest
[NotInheritable Public Class HttpRequest
Los mtodos y propiedades de la clase HttpRequest son accedidos empleando la propiedad Request de las clases
HttpApplication, HttpContext, Page, y UserControl.

A continuacin un ejemplo de cdigo sobre cmo utilizar la clase.


<%@ Page Language="C#" %>
<%@ import Namespace="System.Threading" %>
<%@ import Namespace="System.IO" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
/* NOTE: To use this sample, create a c:\temp\CS folder,
* add the ASP.NET account (in IIS 5.x <machinename>\ASPNET,
* in IIS 6.x NETWORK SERVICE), and give it write permissions
* to the folder.*/
private const string INFO_DIR = @"c:\temp\CS\RequestDetails";
public static int requestCount;
private void Page_Load(object sender, System.EventArgs e)
{
// Create a variable to use when iterating
// through the UserLanguages property.
int langCount;
int requestNumber = Interlocked.Increment(ref requestCount);
// Create the file to contain information about the request.
string strFilePath = INFO_DIR + requestNumber.ToString() + @".txt";

StreamWriter sw = File.CreateText(strFilePath);
try
{
// Write request information to the file with HTML encoding.
sw.WriteLine(Server.HtmlEncode(DateTime.Now.ToString()));
sw.WriteLine(Server.HtmlEncode(Request.CurrentExecutionFilePath));
sw.WriteLine(Server.HtmlEncode(Request.ApplicationPath));
sw.WriteLine(Server.HtmlEncode(Request.FilePath));
sw.WriteLine(Server.HtmlEncode(Request.Path));

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

34

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
// Iterate through the Form collection and write
// the values to the file with HTML encoding.
// String[] formArray = Request.Form.AllKeys;
foreach (string s in Request.Form)
{
sw.WriteLine("Form: " + Server.HtmlEncode(s));
}
// Write the PathInfo property value
// or a string if it is empty.
if (Request.PathInfo == String.Empty)
{
sw.WriteLine("The PathInfo property contains no information.");
}
else
{
sw.WriteLine(Server.HtmlEncode(Request.PathInfo));
}
// Write request information to the file with HTML encoding.
sw.WriteLine(Server.HtmlEncode(Request.PhysicalApplicationPath));
sw.WriteLine(Server.HtmlEncode(Request.PhysicalPath));
sw.WriteLine(Server.HtmlEncode(Request.RawUrl));
// Write a message to the file dependent upon
// the value of the TotalBytes property.
if (Request.TotalBytes > 1000)
{
sw.WriteLine("The request is 1KB or greater");
}
else
{
sw.WriteLine("The request is less than 1KB");
}
// Write request information to the file with HTML encoding.
sw.WriteLine(Server.HtmlEncode(Request.RequestType));
sw.WriteLine(Server.HtmlEncode(Request.UserHostAddress));
sw.WriteLine(Server.HtmlEncode(Request.UserHostName));
sw.WriteLine(Server.HtmlEncode(Request.HttpMethod));
// Iterate through the UserLanguages collection and
// write its HTML encoded values to the file.
for (langCount=0; langCount < Request.UserLanguages.Length; langCount++)
{
sw.WriteLine(@"User Language " + langCount +": " +
Server.HtmlEncode(Request.UserLanguages[langCount]));
}
}

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

35

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
finally
{
// Close the stream to the file.
sw.Close();
}
lblInfoSent.Text = "Information about this request has been sent to a file.";
}

private void btnSendInfo_Click(object sender, System.EventArgs e)


{
lblInfoSent.Text = "Hello, " + Server.HtmlEncode(txtBoxName.Text) +
". You have created a new request info file.";
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" runat="server">
<p>
</p>
<p>
Enter your name here:
<asp:TextBox id="txtBoxName" runat="server"></asp:TextBox>
</p>
<p>
<asp:Button id="btnSendInfo" onclick="btnSendInfo_Click" runat="server" Text="Click
Here"></asp:Button>
</p>
<p>
<asp:Label id="lblInfoSent" runat="server"></asp:Label>
</p>
</form>
</body>
</html>

Clase HttpResponse
La clase HttpResponse permite encapsular la informacin de respuesta http en una operacin de ASP.NET. Se
encuentra dentro del espacio de nombres System.Web y se trata de una clase sellada (no puede ser heredada).
sealed class HttpResponse
Los mtodos y propiedades de la clase HttpResponse son expuestos a travs de la propiedad Response de las
clases HttpApplication, HttpContext, Page, y UserControl.

A continuacin un ejemplo de cdigo sobre cmo utilizar la clase.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

36

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
<%@ Page Language="C#" %>
<%@ import Namespace="System.Drawing" %>
<%@ import Namespace="System.Drawing.Imaging" %>
<%@ import Namespace="System.Drawing.Drawing2D" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
private void Page_Load(object sender, EventArgs e)
{
// Set the page's content type to JPEG files
// and clears all content output from the buffer stream.
Response.ContentType = "image/jpeg";
Response.Clear();
// Buffer response so that page is sent
// after processing is complete.
Response.BufferOutput = true;
// Create a font style.
Font rectangleFont = new Font(
"Arial", 10, FontStyle.Bold);
// Create integer variables.
int height = 100;
int width = 200;
// Create a random number generator and create
// variable values based on it.
Random r = new Random();
int x = r.Next(75);
int a = r.Next(155);
int x1 = r.Next(100);
// Create a bitmap and use it to create a
// Graphics object.
Bitmap bmp = new Bitmap(
width, height, PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(bmp);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.Clear(Color.LightGray);
// Use the Graphics object to draw three rectangles.
g.DrawRectangle(Pens.White, 1, 1, width-3, height-3);
g.DrawRectangle(Pens.Aquamarine, 2, 2, width-3, height-3);
g.DrawRectangle(Pens.Black, 0, 0, width, height);
// Use the Graphics object to write a string

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

37

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
// on the rectangles.
g.DrawString(
"ASP.NET Samples", rectangleFont,
SystemBrushes.WindowText, new PointF(10, 40));
// Apply color to two of the rectangles.
g.FillRectangle(
new SolidBrush(
Color.FromArgb(a, 255, 128, 255)),
x, 20, 100, 50);
g.FillRectangle(
new LinearGradientBrush(
new Point(x, 10),
new Point(x1 + 75, 50 + 30),
Color.FromArgb(128, 0, 0, 128),
Color.FromArgb(255, 255, 255, 240)),
x1, 50, 75, 30);
// Save the bitmap to the response stream and
// convert it to JPEG format.
bmp.Save(Response.OutputStream, ImageFormat.Jpeg);
// Release memory used by the Graphics object
// and the bitmap.
g.Dispose();
bmp.Dispose();
// Send the output to the client.
Response.Flush();
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" runat="server">
</form>
</body>
</html>

Clase HttpServerUtility
Provee un conjunto de mtodos para facilitar el procesamiento de requerimientos Web en ASP.NET. Se encuentra
dentro del espacio de nombres System.Web y se trata de una clase sellada (no puede ser heredada).
System.Web.HttpServerUtility
sealed public class HttpServerUtility

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

38

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Los mtodos y propiedades de la clase HttpServerUtility son expuestos a travs del objeto intrnseco a ASP.NET's
llamado Server.
A continuacin un ejemplo de cdigo sobre cmo utilizar la clase.
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<script runat="server">
protected void Button1_Click(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(TextBox1.Text))
{
// Access the HttpServerUtility methods through
// the intrinsic Server object.
Label1.Text = "Welcome, " +
Server.HtmlEncode(TextBox1.Text) +
".<br/> The url is " +
Server.UrlEncode(Request.Url.ToString());
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>HttpServerUtility Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Enter your name:<br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Submit" />
<br />
<asp:Label ID="Label1" runat="server"/>
</div>
</form>
</body>
</html>
Clase HttpSessionState
Esta clase provee acceso a los valores del estado de una seccin as como los settings a nivel de seccin y los
mtodos para controlar el ciclo de vida de la seccin. Se encuentra dentro del espacio de nombres
System.Web.SessionState y se trata de una clase sellada (no puede ser heredada).
System.Object
System.Web.SessionState.HttpSessionState

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

39

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
sealed public class HttpSessionState
implements ICollection, IEnumerable
A continuacin un ejemplo de cdigo sobre cmo utilizar la clase.
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Collections" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<script runat="server">
public void Page_Load(object sender, EventArgs args)
{
if (!IsPostBack)
{
if (Session["address"] == null)
{
enterUserInfoPanel.Visible = true;
userInfoPanel.Visible = false;
}
else
{
enterUserInfoPanel.Visible = false;
userInfoPanel.Visible = true;
SetLabels();
}
}
}
protected void SetLabels()
{
firstNameLabel.Text = Session["firstName"].ToString();
lastNameLabel.Text = Session["lastName"].ToString();
addressLabel.Text = Session["address"].ToString();
cityLabel.Text = Session["city"].ToString();
stateOrProvinceLabel.Text = Session["stateOrProvince"].ToString();
zipCodeLabel.Text = Session["zipCode"].ToString();
countryLabel.Text = Session["country"].ToString();
}
protected void EnterInfoButton_OnClick(object sender, EventArgs e)
{
Session["firstName"] = Server.HtmlEncode(firstNameTextBox.Text);
Session["lastName"] = Server.HtmlEncode(lastNameTextBox.Text);
Session["address"] = Server.HtmlEncode(addressTextBox.Text);
Session["city"] = Server.HtmlEncode(cityTextBox.Text);
Session["stateOrProvince"] = Server.HtmlEncode(stateOrProvinceTextBox.Text);
Session["zipCode"] = Server.HtmlEncode(zipCodeTextBox.Text);
Session["country"] = Server.HtmlEncode(countryTextBox.Text);

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

40

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

enterUserInfoPanel.Visible = false;
userInfoPanel.Visible = true;
SetLabels();
}
protected void ChangeInfoButton_OnClick(object sender, EventArgs args)
{
enterUserInfoPanel.Visible = true;
userInfoPanel.Visible = true;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<meta http-equiv="Content-Type" content="text/html" />
<title>User Information</title>
</head>
<body>
<form id="form1" runat="server">
<h3>
User information</h3>
<asp:Label ID="Msg" ForeColor="maroon" runat="server" /><br />
<asp:Panel ID="enterUserInfoPanel" runat="server">
<table cellpadding="3" border="0">
<tr>
<td>
First name:</td>
<td>
<asp:TextBox ID="firstNameTextBox" runat="server" /></td>
</tr>
<tr>
<td>
Last name:</td>
<td>
<asp:TextBox ID="lastNameTextBox" runat="server" /></td>
</tr>
<tr>
<td>
Address:</td>
<td>
<asp:TextBox ID="addressTextBox" runat="server" /></td>
</tr>
<tr>
<td>
City:</td>
<td>
<asp:TextBox ID="cityTextBox" runat="server" /></td>
</tr>

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

41

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
<tr>
<td>
State or Province:</td>
<td>
<asp:TextBox ID="stateOrProvinceTextBox" runat="server" /></td>
</tr>
<tr>
<td>
Zip Code/Postal Code:</td>
<td>
<asp:TextBox ID="zipCodeTextBox" runat="server" /></td>
</tr>
<tr>
<td>
Country:</td>
<td>
<asp:TextBox ID="countryTextBox" runat="server" /></td>
</tr>
<tr>
<td>
&nbsp;</td>
<td>
<asp:Button ID="enterInfoButton" runat="server" Text="Enter user information"
OnClick="EnterInfoButton_OnClick" /></td>
</tr>
</table>
</asp:Panel>
<asp:Panel ID="userInfoPanel" runat="server">
<table cellpadding="3" border="0">
<tr>
<td>
Name:</td>
<td>
<asp:Label ID="firstNameLabel" runat="server" />
<asp:Label ID="lastNameLabel" runat="server" />
</td>
</tr>
<tr>
<td valign="top">
address:</td>
<td>
<asp:Label ID="addressLabel" runat="server" /><br />
<asp:Label ID="cityLabel" runat="server" />,
<asp:Label ID="stateOrProvinceLabel" runat="server" />
<asp:Label ID="zipCodeLabel" runat="server" /><br />
<asp:Label ID="countryLabel" runat="server" />
</td>
</tr>
<tr>
<td>

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

42

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
&nbsp;</td>
<td>
<asp:Button ID="changeInfoButton" runat="server" Text="Change user information"
OnClick="ChangeInfoButton_OnClick" /></td>
</tr>
</table>
</asp:Panel>
</form>
</body>
</html>

Clase HttpApplicationState

Permite compartir informacin global mediante mltiples sesiones y peticiones en una aplicacin ASP.NET.
Se encuentra dentro del espacio de nombres System.Web y se trata de una clase sellada (no puede ser
heredada).
System.Object
System.Collections.Specialized.NameObjectCollectionBase
System.Web.HttpApplicationState
sealed public class HttpApplicationState : NameObjectCollectionBase
Una aplicacin ASP.NET es la suma de todos los archivos, pginas, controladores, mdulos y cdigo que se
encuentran en el mbito de un directorio virtual y sus subdirectorios en un nico servidor Web.
La primera vez que un cliente solicita un recurso URL de un directorio virtual de una aplicacin ASP.NET se crea
una nica instancia de una clase HttpApplicationState. Para cada aplicacin ASP.NET de un servidor Web se crea
una nica instancia independiente. Despus, mediante el objeto intrnseco Application, se expone una referencia a
cada instancia.
Una aplicacin ASP.NET es la suma de todos los archivos, pginas, controladores, mdulos y cdigo que se
encuentran en el mbito de un directorio virtual y sus subdirectorios en un nico servidor Web.
La primera vez que un cliente solicita un recurso URL de un directorio virtual de una aplicacin ASP.NET se crea
una nica instancia de una clase HttpApplicationState.Para cada aplicacin ASP.NET de un servidor Web se crea
una nica instancia independiente.Despus, mediante el objeto intrnseco Application, se expone una referencia a
cada instancia.
El estado de la aplicacin no se comparte a travs de una granja de servidores web (donde mltiples servidores
hospedan la aplicacin) ni de una unidad Web (donde mltiples procesos del mismo equipo hospedan la aplicacin).

LECCION 15 Enrutamiento en ASP.NET


El enrutamiento ASP.NET permite usar direcciones URL que no es necesario asignar a archivos especficos de un
sitio web. Dado que la direccin URL no tiene que asignarse a un archivo, se pueden usar direcciones URL que
describan la accin del usuario y, por tanto, sean ms fciles de comprender.
El marco de MVC de ASP.NET y los datos dinmicos de ASP.NET extienden el enrutamiento para proporcionar
caractersticas que se usan nicamente en las aplicaciones de MVC y aplicaciones de datos dinmicos.
En una aplicacin ASP.NET que no utiliza el enrutamiento, una solicitud entrante de una direccin URL
normalmente se asigna a un archivo fsico que controla la solicitud, como un archivo .aspx. Por ejemplo, una
solicitud de http://server/application/Products.aspx?id=4 se asigna a un archivo denominado Products.aspx que
contiene cdigo y marcado para representar una respuesta al explorador. La pgina web utiliza el valor de cadena
de consulta id=4 para determinar el tipo de contenido que se va a mostrar.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

43

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
En el enrutamiento de ASP.NET, se pueden definir modelos de direccin URL que se asignen a archivos de
controlador de solicitudes pero que no necesariamente incluyan los nombres de esos archivos en la direccin URL.
Adems, se pueden incluir marcadores de posicin en un modelo de direccin URL de modo que se puedan pasar
datos variables al controlador de solicitudes sin necesidad de una cadena de consulta.
Por ejemplo, en la solicitud de http://server/application/Products/show/beverages, el analizador del enrutamiento
puede pasar los valores Products, show y beverages a un controlador de pginas. En este ejemplo, si se define la
ruta mediante el modelo de direccin server/application/{area}/{action}/{category}, el controlador de pginas
recibir una coleccin de diccionarios donde el valor asociado a la clave rea es Products, el valor de la clave action
es show y el valor de la clave category es beverages. En una solicitud no administrada por el enrutamiento de
direcciones URL, el fragmento /Products/show/beverages se interpretara como la ruta de acceso a un archivo de la
aplicacin.
Modelos de direccin URL
Un modelo de direccin URL puede contener valores literales y marcadores de posicin de variables
(denominados parmetros de direccin URL). Los literales y marcadores de posicin se encuentran
en segmentos de la direccin URL que estn delimitados por el carcter de barra diagonal (/).
Cuando se realiza una solicitud, la direccin URL se analiza en segmentos y marcadores de posicin, y se
proporcionan los valores de las variables al controlador de solicitudes. Este proceso es similar a la forma en que se
analizan los datos de las cadenas de consulta y se pasan al controlador de solicitudes. En ambos casos, la
informacin de las variables va incluida en la direccin URL y se pasa al controlador en forma de pares clavevalor. Para las cadenas de consulta, tanto las claves como los valores estn en la direccin URL. Para las rutas, las
claves son los nombres de marcador de posicin que se definen en el modelo de direccin URL y son solo los
valores los que se encuentran en la direccin URL.
En un modelo de direccin URL, los marcadores de posicin se definen entre llaves ({ y }). Se pueden definir
varios marcadores de posicin en un segmento, pero deben ir separados por un valor literal. Por
ejemplo, {language}-{country}/{action} es un modelo de ruta vlido. Sin
embargo, {language}{country}/{action} no es un modelo vlido porque no hay ningn valor literal ni delimitador
entre los marcadores de posicin. Por consiguiente, el enrutamiento no puede determinar dnde debe separar el
valor del marcador de posicin language del valor del marcador de posicin country.
En la tabla siguiente se muestran modelos de ruta vlidos y ejemplos de solicitudes URL que coinciden con los
modelos.

Definicin de la ruta

Ejemplo de direccin URL coincidente

{controller}/{action}/{id}

/Products/show/beverages

{table}/Details.aspx

/Products/Details.aspx

blog/{action}/{entry}

/blog/show/123

{reporttype}/{year}/{month}/{day}

/sales/2008/1/5

{locale}/{action}

/US/show

{language}-{country}/{action}

/en-US/show

Definir rutas para las aplicaciones de formularios Web Forms


Se crea una ruta definiendo un modelo para la direccin URL, especificando un controlador que se invoca en
respuesta a la solicitud y especificando los valores predeterminados o restricciones asociados.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

44

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Para crear una ruta en el archivo Global.asax de la aplicacin, se agrega un mtodo que acepte un solo parmetro
de tipo RouteCollection. En el mtodo, se agregan rutas a la aplicacin mediante el mtodo
RouteCollection.MapPageRoute (String, String, String) o una de sus sobrecargas. El mtodo base permite
establecer el nombre, el modelo de direccin URL y el archivo fsico de la ruta. Las sobrecargas permiten establecer
las siguientes propiedades:
PageRouteHandler.CheckPhysicalUrlAccess
Route.Defaults
Route.Constraints
Route.DataTokens
En el controlador Application_Start del archivo Global.asax, llame al nuevo mtodo.
Se puede agregar las rutas directamente en el mtodo Application_Start en lugar de utilizar un mtodo
independiente. Tambin se pueden agregar en otros puntos del ciclo de vida de una aplicacin. Si se agrega las
rutas en el controlador Application_Start, se asegura de que dichas rutas estn disponibles cuando se inicie la
aplicacin. Si se agrega las rutas en un mtodo independiente al que se llama desde el mtodo Application_Start,
se podrn agregarlas cuando someta la aplicacin a una prueba unitaria.
En el siguiente ejemplo, se muestra cmo definir las rutas para las aplicaciones de formularios Web Forms. Se
muestra un mtodo denominado RegisterRoutes al que se llama desde Application_Start en el archivo Global.asax.
El mtodo agrega seis rutas, una para cada sobrecarga del mtodo MapPageRoute. Todas las rutas tienen
parmetros denominados locale y cuatro rutas tienen parmetros denominados year. Cuatro rutas tambin tienen
un parmetro comodn denominado querystring. Todas las rutas salvo una tienen un nombre para que se pueden
distinguir por su nombre cuando se generen las direcciones URL. En el ejemplo, tambin se incluyen rutas con
restricciones, valores predeterminados y tokens de datos. Todas las rutas del informe de ventas estn asignadas al
archivo Sales.aspx y las rutas del informe de gastos estn asignadas al archivo Expenses.aspx.
void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}

void RegisterRoutes(RouteCollection routes)


{
routes.MapPageRoute("",
"SalesReport/{locale}/{year}/{*queryvalues}", "~/sales.aspx");
routes.MapPageRoute("SalesSummaryRoute",
"SalesReportSummary/{locale}", "~/sales.aspx");
routes.MapPageRoute("SalesDetailRoute",
"SalesReportDetail/{locale}/{year}/{*queryvalues}", "~/sales.aspx",
false);
routes.MapPageRoute("SalesCurrentYearRoute",
"SalesReportCurrent/{locale}/{year}/{*queryvalues}", "~/sales.aspx",
false,
new RouteValueDictionary
{ { "locale", "US" }, { "year", DateTime.Now.Year.ToString() } });

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

45

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
routes.MapPageRoute("ExpenseCurrentYearRoute",
"ExpenseReportCurrent/{locale}", "~/expenses.aspx",
false,
new RouteValueDictionary
{ { "locale", "US" }, { "year", DateTime.Now.Year.ToString() } },
new RouteValueDictionary
{ { "locale", "[a-z]{2}" }, { "year", @"\d{4}" } });
routes.MapPageRoute("ExpenseDetailRoute",
"ExpenseReportDetail/{locale}/{year}/{*queryvalues}", "~/expenses.aspx",
false,
new RouteValueDictionary
{ { "locale", "US" }, { "year", DateTime.Now.Year.ToString() } },
new RouteValueDictionary
{ { "locale", "[a-z]{2}" }, { "year", @"\d{4}" } },
new RouteValueDictionary
{ { "account", "1234" }, { "subaccount", "5678" } });
}

LECCION 16 Seguridad en ASP.NET: Autenticacin y Autorizacin, Proveedores de autenticacin,


Autorizacin en ASP.NET
ASP.NET proporciona un mayor control para implementar la seguridad de la aplicacin. Seguridad ASP.NET
funciona junto con la seguridad de Microsoft Internet Information Services (IIS) e incluye servicios de autenticacin
y autorizacin para implementar el modelo de seguridad ASP.NET. ASP.NET tambin incluye una caracterstica de
seguridad basada en funciones que se puede implementar para Microsoft Windows y las cuentas de usuario no son
de Windows.

Flujo de seguridad con una solicitud


Los pasos siguientes describen la secuencia de eventos cuando un cliente realiza una solicitud:

Un cliente solicita una pgina .aspx que reside en un servidor IIS.


Las credenciales del cliente se pasan a IIS.
IIS autentica al cliente y enva el smbolo autenticado junto con la solicitud del cliente para el proceso de
trabajo ASP.NET.

Basado en el smbolo autenticado de IIS y las opciones de configuracin de la aplicacin Web, ASP.NET decide si se
va a suplantar a un usuario en el subproceso que est procesando la solicitud. Una diferencia distintiva entre
pginas Active Server (ASP) de Microsoft y ASP.NET, ASP.NET ya no representa al usuario autenticado de forma
predeterminada. Para habilitar la suplantacin, debe establecer el atributo impersonate de la seccin de identidad
en el archivo Web.config en true.
Valores de configuracin relacionados
IIS mantiene valores de configuracin relacionados con la seguridad de la metabase de IIS. Sin embargo, ASP.NET
mantiene la seguridad (y otras) las opciones de configuracin en archivos de configuracin de lenguaje de marcado
Extensible (XML). Aunque, por lo general, esto simplifica la implementacin de la aplicacin desde el punto de vista
de seguridad, el modelo de seguridad que adopta la aplicacin necesita la configuracin correcta de la metabase de
IIS y la aplicacin ASP.NET a travs de su archivo de configuracin (Web.config).

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

46

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Las siguientes secciones de configuracin relacionadas con la seguridad ASP.NET:
<authentication>
</authentication>
<authorization>
</authorization>
<identity>
</identity>
<machineKey>
</machineKey>
Autenticacin
La autenticacin es el proceso por el que se obtienen credenciales de identificacin como el nombre y la contrasea
del usuario y se validan dichas credenciales contra alguna autoridad.
Proveedores de Autenticacin
La autenticacin es un proceso que consiste en obtener las credenciales de identificacin, como nombre y
contrasea, de un usuario y validarlas consultando a una autoridad determinada. Si las credenciales son vlidas, se
considera a la entidad que ha enviado las credenciales como una entidad autenticada. Una vez autenticada la
identidad, el proceso de autorizacin determina si esa identidad tiene acceso a un recurso especfico.
ASP.NET implementa este proceso a travs de proveedores de autenticacin, que son mdulos que contienen el
cdigo necesario para autenticar las credenciales del solicitante.
Proveedor de autenticacin de Windows
Proporciona informacin sobre cmo utilizar la autenticacin de Windows junto con la autenticacin de Microsoft
Internet Information Services (IIS) para proteger las aplicaciones ASP.NET.
Proveedor de autenticacin mediante formularios
Proporciona informacin sobre cmo crear un formulario de inicio de sesin especfico de la aplicacin y realizar la
autenticacin mediante cdigo propio. Una manera sencilla de trabajar con la autenticacin de formularios consiste
en utilizar la pertenencia a ASP.NET y los controles de inicio de sesin de ASP.NET, que conjuntamente
proporcionan un mtodo para recopilar las credenciales de usuario, autenticarlas y administrarlas, con muy poco
cdigo o nada en absoluto.
Tambin se puede considerar el uso de Windows Live ID para la autenticacin de usuarios

ASP.NET proporciona cuatro proveedores de autenticacin:

Autenticacin mediante formularios


Autenticacin de Windows
Autenticacin de Passport
Autenticacin predeterminada

Autenticacin mediante formularios

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

47

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Autenticacin mediante formularios hace referencia a un sistema que redirige las solicitudes no autenticadas a un
formulario de lenguaje de marcado de hipertexto (HTML) en el que los usuarios escriban sus credenciales. Despus
de que el usuario proporciona las credenciales y enva el formulario, la aplicacin autentica la solicitud y el sistema
emite un vale de autorizacin en forma de una cookie. Esta cookie contiene las credenciales o una clave para
volver a adquirir la identidad. Las solicitudes posteriores desde el explorador incluyen automticamente la cookie.
Autenticacin de Windows
En la autenticacin de Windows, IIS realiza la autenticacin y el smbolo autenticado se enva al proceso de trabajo
ASP.NET. La ventaja de utilizar la autenticacin de Windows es que requiere una codificacin mnima. Es
aconsejable utilizar la autenticacin de Windows para suplantar la cuenta de usuario de Windows que IIS autentica
antes de entregar la solicitud a ASP.NET.
Autenticacin de Passport
La autenticacin de Passport es un servicio de autenticacin centralizado, que proporciona Microsoft, que ofrece un
inicio de sesin nico y servicios de perfil principales para sitios Web suscritos. Normalmente, se utiliza la
autenticacin de Passport cuando se necesite capacidad de inicio de sesin nico en varios dominios.
Autenticacin predeterminada
Se utiliza la autenticacin de forma predeterminada si no se desea ninguna seguridad en una aplicacin Web; se
requiere para este proveedor de seguridad el acceso annimo. Entre todos los proveedores de autenticacin, la
autenticacin predeterminada proporciona el mximo rendimiento de la aplicacin. Este proveedor de autenticacin
tambin se utiliza cuando se utiliza el propio mdulo de seguridad personalizado.

Autorizacin
La autorizacin es el proceso que comprueba si el usuario autenticado tiene acceso a los recursos solicitados.
ASP.NET ofrece los siguientes proveedores de autorizacin:

FileAuthorization
UrlAuthorization

FileAuthorization
La clase FileAuthorizationModule realiza la autorizacin de archivo y est activa cuando se utiliza la
autenticacin de Windows. FileAuthorizationModule es responsable de realizar comprobaciones en Windows Access
Control Lists (ACL) para determinar si un usuario debe tener acceso.
UrlAuthorization
UrlAuthorizationModule (clase) realiza la autorizacin del localizador de recursos uniforme (URL), que controla la
autorizacin basada en el espacio de nombres URI. Los espacios de nombres URI pueden ser muy diferente de las
rutas de archivos y carpetas fsicas que utilizan los permisos NTFS.
UrlAuthorizationModule implementa aserciones de autorizacin positivas y negativas; es decir, puede usar el
mdulo para permitir o denegar el acceso a partes arbitrarias del espacio de nombres URI de los usuarios,
funciones (por ejemplo, el administrador, evaluadores y administradores) y verbos (por ejemplo, GET y POST) de
forma selectiva.
Seguridad basada en funciones
Seguridad basada en funciones en ASP.NET es similar a la seguridad basada en funciones que usan Microsoft COM
+ y Microsoft Transaction Server (MTS), aunque hay diferencias importantes. Seguridad basada en funciones en
ASP.NET no se limita a los grupos y cuentas de Windows. Por ejemplo, si est habilitada la autenticacin de

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

48

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Windows y la suplantacin, la identidad del usuario es una identidad de Windows (User.Identity.Name =
"Dominio\nombreDeUsuario"). Puede comprobar las identidades para la pertenencia a funciones especficas y
restringir el acceso segn corresponda. Por ejemplo:
if ( User.IsInRole("BUILTIN\\Administrators"))
Response.Write("You are an Admin");
else if (User.IsInRole("BUILTIN\\Users"))
Response.Write("You are a User");
else
Response.Write("Invalid user");
Si utiliza la autenticacin de formularios, funciones no se asignan al usuario autenticado; debe hacerlo mediante
programacin. Para asignar funciones al usuario autenticado, utilice el evento OnAuthenticate del mdulo de
autenticacin (que es el mdulo de autenticacin de formularios en este ejemplo) para crear un nuevo objeto
GenericPrincipal y asignarlo a la propiedad de usuario de HttpContext. El cdigo siguiente muestra esto:
public void Application_AuthenticateRequest(Object s, EventArgs e)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.AuthenticationType == "Forms" )
{
System.Web.Security.FormsIdentity id = HttpContext.Current.User.Identity;
String[] myRoles = new String[3];
myRoles[0]= "managers";
myRoles[1]= "testers";
myRoles[2]= "developers";
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles);
}
}
}
Para comprobar si el usuario es de un rol especfico y restringir el acceso en consecuencia, se utiliza el cdigo
siguiente (o similar) en las pginas. aspx:
if (User.IsInRole("managers"))
Response.Write("You are a Manager");
else if (User.IsInRole("testers"))

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

49

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Response.Write("You are a Tester");
else if (User.IsInRole("developers"))
Response.Write("You are a Developer");

LECCION 17 Archivo de configuracin


Los archivos de configuracin de ASP.NET son archivos XML. .NET Framework define un conjunto de elementos que
implementan valores de configuracin y el esquema de configuracin de ASP.NET contiene elementos que controlan
cmo se comportan las aplicaciones Web ASP.NET.
Los valores de configuracin predeterminados se especifican en el archivo Machine.config situado en el directorio
%SystemRoot%\Microsoft.NET\Framework\nmeroDeVersin\CONFIG\. Las aplicaciones y sitios secundarios
heredan los valores. Si hay un archivo de configuracin en una aplicacin o sitio secundario, los valores heredados
no aparecen, pero se pueden reemplazar y estn disponibles para la API de configuracin.
En el esquema de configuracin de ASP.NET se tillizan los archivos Machine.config y Web.config especficos de la
aplicacin. La tabla de contenido de esta seccin refleja la jerarqua del esquema.
Toda la informacin de configuracin de ASP.NET reside en los archivos .config. Un archivo Machine.config y un
archivo Web.config raz ubicados en una carpeta del sistema de .NET Framework proporcionan los valores
predeterminados de todos los sitios web que se ejecutan en un servidor. Para cada sitio web, un archivo
Web.config ubicado en la carpeta raz del sitio proporciona valores de reemplazo especficos del sitio. Pueden haber
archivos Web.config adicionales en las subcarpetas de un sitio web para proporcionar los valores de reemplazo que
se aplican especficamente a esas carpetas de ese sitio.
Un archivo .config contiene XML que tiene un elemento configuration como nodo raz. La informacin incluida en
este elemento se agrupa en dos reas principales: el rea de declaracin de los controladores de secciones de
configuracin y el rea de valores de las secciones de configuracin.
Un controlador de seccin es una clase de .NET Framework que implementa la interfaz ConfigurationSection. El
rea de declaracin identifica el espacio de nombres y el nombre de cada clase de controlador de seccin. Los
controladores de secciones se utilizan para leer y establecer los valores que pertenecen a una seccin. En el
siguiente ejemplo, se muestra una vista simplificada de la estructura XML de un archivo Web.config.
<configuration>
<!-- Configuration section-handler declaration area. -->
<configSections>
<section name="section1" type="section1Handler" />
<section name="section2" type="section2Handler" />
</configSections>
<!-- Configuration section settings area. -->
<section1>
<s1Setting1 attribute1="attr1" />
</section1>
<section2>

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

50

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
<s2Setting1 attribute1="attr1" />
</section2>
<system.web>
<authentication mode="Windows" />
</system.web>
</configuration>
En un archivo Web.config, las secciones pueden aparecer en el rea de configuracin no declarada en el rea de
declaracin si se declaran en un archivo .config ubicado en un nivel superior de la jerarqua de configuracin. Por
ejemplo, la seccin system.web se declara en el archivo Machine.config. Por consiguiente, no es necesario
declararla en archivos Web.config individuales de cada sitio. Si se declara una seccin en el archivo Web.config
ubicado en la carpeta raz de un sitio web, se pueden incluir los valores de esa seccin sin incluirlos en los archivos
Web.config ubicados en las subcarpetas.
Declaraciones del controlador de seccin de configuracin
El rea de declaracin de los controladores de secciones de configuracin est en el elemento configSections de los
archivos .config. Contiene elementos section de configuracin de ASP.NET donde se declaran los controladores de
seccin. Estas declaraciones de controlador de seccin de configuracin se pueden anidar en elementos
sectionGroup para ayudar a organizar la informacin de configuracin. Normalmente, los elementos sectionGroup
representan el espacio de nombres al que se aplican los valores de configuracin. Por ejemplo, todos los
controladores de secciones de configuracin de ASP.NET se aglutinan en el grupo de secciones system.web, tal
como se muestra en el ejemplo de cdigo siguiente.

<sectionGroup name="system.web"
type="System.Web.Configuration.SystemWebSectionGroup, System.Web, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a">
<!-- <section /> elements. -->
</sectionGroup>
Hay una declaracin de controlador de seccin para cada seccin de configuracin en el rea de valores de seccin
de configuracin. Las declaraciones de controlador de seccin contienen el nombre de una seccin de valores de
configuracin (como pages) y el nombre de la clase de controlador de seccin que procesa los datos de
configuracin de esa seccin (como System.Web.Configuration.PagesSection). En el siguiente ejemplo, se muestra
una clase de controlador de seccin que est asignada a una seccin de valores de configuracin.
<section name="pages"
type="System.Web.Configuration.PagesSection, System.Web, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a">
</section>
Cada controlador de seccin de configuracin solo se declara una vez. Los controladores de las secciones de
configuracin predeterminadas de ASP.NET ya estn declarados en el archivo Machine.config. El archivo Web.config
del sitio web y otros archivos de configuracin de las aplicaciones ASP.NET heredan automticamente los
controladores de configuracin que se declaran en el archivo Machine.config. Solo se declara un nuevo controlador
de seccin si se desea crear una clase de controlador de seccin personalizada que controle una seccin de
configuracin personalizada.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

51

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Valores de la seccin de configuracin
El rea de valores de la seccin de configuracin va a continuacin del rea de declaracin de controladores de
seccin de configuracin y contiene los valores de configuracin propiamente dichos.
De manera predeterminada, el archivo de configuracin actual o uno de los archivos de configuracin raz contiene
un elemento de seccin de configuracin para cada elemento section y sectionGroup en el rea configSections.
Estos valores predeterminados se pueden ver en el archivo
razDelSistema\Microsoft.NET\Framework\nmeroDeVersin\CONFIG\Machine.config.comments. El valor de
nmeroDeVersin para las versiones 2.0, 3.0 y 3.5 de ASP.NET es v2.0.50727.
Un elemento de seccin de configuracin tambin podra contener elementos secundarios controlados por el mismo
controlador de seccin que el elemento primario. Por ejemplo, el siguiente elemento pages contiene un elemento
namespaces que carece de un controlador de seccin porque lo controla el controlador de seccin de pages.
<pages
buffer="true"
enableSessionState="true"
asyncTimeout="45"
<!-- Other attributes. -->
>
<namespaces>
<add namespace="System" />
<add namespace="System.Collections" />
</namespaces>
</pages>
Ejemplo extrado de un archivo Web.config
En el siguiente ejemplo, se ampla el XML simplificado que figura anteriormente en este tema incluyendo elementos
de un archivo Web.config real. Para mayor claridad y para indicar las omisiones, se han agregado algunos
comentarios.

<?xml version="1.0"?>
<configuration>
<!-- Configuration section-handler declaration area. -->
<configSections>
<sectionGroup name="system.web.extensions"
type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup,
System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

52

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
<section name="scriptResourceHandler"
type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions,
Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false"
allowDefinition="MachineToApplication"/>
<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup,
System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection,
System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
requirePermission="false" allowDefinition="Everywhere" />
<!-- Other <section /> elements -->
</sectionGroup>
</sectionGroup>
</sectionGroup>
<!-- A custom section in a custom group. -->
<sectionGroup name="pageAppearanceGroup">
<section name="pageAppearance" type="Samples.AspNet.PageAppearanceSection" allowLocation="true"
allowDefinition="Everywhere"/>
</sectionGroup>
<!-- Other section and/or sectionGroup elements. -->
</configSections>

<!-- Configuration section settings area. -->


<!-- Settings for the custom section declared above. -->
<pageAppearanceGroup>
<pageAppearance remoteOnly="true">
<font name="TimesNewRoman" size="18"/>
<color background="000000" foreground="FFFFFF"/>
</pageAppearance>
</pageAppearanceGroup>
<!-- Settings for the default ASP.NET sections. -->
<appSettings/>
<connectionStrings/>
<system.web>
<compilation debug="false">

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

53

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
<authentication mode="Windows" />
<!-- More elements for system.web -->
</system.web>
<!-- More ASP.NET sections. -->

</configuration>

LECCION 18 Rendimiento y Manejo del Cach


Uno de los factores ms importantes a la hora de crear aplicaciones Web escalables de alto rendimiento es la
capacidad para almacenar elementos en memoria, ya sean objetos de datos, pginas o secciones de pginas, en el
momento en que se solicitan. Estos elementos se pueden guardar en cach o almacenar en el servidor web o en
otro software de la secuencia de la solicitud, como el servidor proxy o el explorador. De este modo, se evita volver
a crear la informacin que se envi para satisfacer a una solicitud anterior, en particular la que requiera un tiempo
de procesador significativo u otros recursos. El almacenamiento en cach de ASP.NET permite aplicar distintas
tcnicas para almacenar resultados de pginas o datos de aplicacin en las distintas solicitudes HTTP y volver a
utilizarlos.
ASP.NET ofrece dos tipos de almacenamiento en cach que permiten crear aplicaciones Web de alto rendimiento. El
primero es el almacenamiento en cach de resultados, que permite almacenar pginas dinmicas y respuestas a
controles de usuario en cualquier dispositivo compatible con cach HTTP 1.1 del flujo de salida, desde el servidor
de origen hasta el explorador que realiz la solicitud. En las solicitudes siguientes, el cdigo de la pgina o del
control de usuario no se ejecuta; se emplean los resultados en cach para atender la solicitud. El segundo tipo de
almacenamiento en cach es el almacenamiento de datos de la aplicacin, que se puede utilizar para almacenar
mediante programacin objetos arbitrarios, como datos de la aplicacin, en la memoria del servidor, de modo que
la aplicacin pueda ahorrar el tiempo y los recursos necesarios para volver a crearlos.
A menudo, una aplicacin puede aumentar el rendimiento si se almacenan en memoria los datos a los que se tiene
acceso con ms frecuencia y cuya creacin requiere un tiempo de procesamiento significativo. Por ejemplo, si la
aplicacin procesa grandes cantidades de datos utilizando una lgica compleja y, a continuacin, los devuelve en
un formato de informe que los usuarios consultan frecuentemente, resulta eficiente evitar la creacin de dicho
informe cada vez que un usuario lo solicita. De manera similar, si la aplicacin incluye una pgina que procesa
datos complejos pero que no se actualiza frecuentemente, no es eficiente que el servidor vuelva a crear dicha
pgina en cada solicitud.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

54

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Para ayudar a aumentar el rendimiento de la aplicacin en estas situaciones, ASP.NET proporciona almacenamiento
en cach mediante dos mecanismos bsicos. El primero es el almacenamiento en memoria cach de
aplicaciones, permite almacenar en memoria cach los datos que se generen, como un objeto DataSet o un
objeto comercial de informe personalizado. El segundo es el almacenamiento en cach de los resultados de
las pginas, permite guardar los resultados del procesamiento de pginas y reutilizarlo, en lugar de volver a
procesar la pgina cada vez que un usuario la solicite de nuevo.
Cach de aplicaciones
La memoria cach de aplicaciones permite almacenar en memoria datos arbitrarios mediante programacin
utilizando pares de clave y valor. El uso de la memoria cach de aplicaciones es similar al del estado de aplicacin.
Sin embargo, a diferencia del estado de aplicacin, los datos de la memoria cach de la aplicacin son voltiles.
Esto significa que no se almacenan en memoria durante la vida de la aplicacin. La ventaja de utilizar la memoria
cach de aplicaciones es que ASP.NET se encarga de administrarla y quita los elementos cuando expiran o se
invalidan, o cuando hay poca memoria. Tambin se puede configurar la memoria cach de aplicaciones para que
notifique a su aplicacin cuando se quita un elemento.
El modelo que se debe seguir al utilizar la memoria cach de aplicaciones consiste en determinar si un elemento
existe en cach cuando se tiene acceso al mismo y, si es as, utilizarlo. Si el elemento no existe, se puede volver a
crearlo y colocarlo de nuevo en la memoria cach. Este modelo le garantiza que siempre dispondr de los datos
ms recientes en cach.
Cach de resultados de pginas
Una forma caracterstica de almacenamiento en memoria cach para aplicaciones de servidor es el almacenamiento
en cach de resultados. El almacenamiento en memoria cach de resultados permite almacenar HTML presentado.
El HTML almacenado se sirve en respuesta a las solicitudes subsiguientes de la misma pgina. Se puede utilizar el
almacenamiento en la memoria cach de resultados para pginas web completas o solo para los resultados de un
control ASP.NET. El almacenamiento en la memoria cach de resultados permite hacer lo siguiente:
a)
b)
c)
d)

Configurar ASP.NET para almacenar en memoria cach una entrada de la memoria cach de resultados
determinada para un perodo concreto.
Almacenar en memoria cach una versin diferente del contenido basada en el tipo de explorador o
preferencias del lenguaje de los clientes que visitan la aplicacin.
Almacenar en memoria cach una versin mvil de una pgina que difiere de una versin que se optimiza
para un explorador de escritorio.
Configurar ASP.NET para expulsar las entradas de la memoria cach basadas en un evento externo.

El almacenamiento en memoria cach de resultados es extensible. Se puede utilizar un proveedor de cach de


resultados personalizado que almacene los datos en cualquier dispositivo de almacenamiento de datos.
La memoria cach de resultados de pginas almacena en memoria el contenido de una pgina ASP.NET procesada.
Esto permite que ASP.NET enve una pgina de respuesta a un cliente sin volver a recorrer el ciclo de vida de
procesamiento de la pgina. El almacenamiento en memoria cach de los resultados de las pginas resulta
especialmente til en aquellas pginas que no cambian a menudo, pero cuya creacin requiere una cantidad
significativa de procesamiento. Por ejemplo, si se est creando una pgina Web con trfico muy intenso para
mostrar datos que no se actualizan con frecuencia, el almacenamiento en cach de los resultados de la pgina
puede aumentar drsticamente el rendimiento de sta. El almacenamiento en cach de pginas se puede
configurar de forma individual para cada pgina o, de forma opcional, se pueden crear perfiles de cach en el
archivo Web.config, lo que permitir definir la configuracin de cach una sola vez y utilizarla con mltiples
pginas.
El almacenamiento en memoria cach de resultados de pginas proporciona dos modelos de almacenamiento:
almacenamiento en memoria cach de pginas completas y almacenamiento en memoria cach de una
parte de las pginas. El almacenamiento en memoria cach de pgina completa conserva el contenido completo
de una pgina y utiliza el contenido de la pgina almacenado en memoria cach para cumplir las solicitud de
cliente. El almacenamiento en memoria cach de la pgina parcial conserva las partes especificadas y permite que
las otras se creen dinmicamente.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

55

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
El almacenamiento en memoria cach de una parte de las pginas puede ser de dos clases: almacenamiento en
memoria cach de controles y sustitucin posterior al almacenamiento en memoria cach. El almacenamiento en
memoria cach de controles, a veces tambin denominado almacenamiento en memoria cach de fragmentos,
permite almacenar en memoria cach partes de la pgina resultante si la informacin se incluye en un control de
usuario que, a continuacin, se marca como almacenable en memoria cach. Esto habilita que se almacene en
memoria cach contenido concreto de una pgina, pero no la pgina completa, que se vuelve a crear con cada
solicitud. Por ejemplo, si crea una pgina que muestra principalmente contenido dinmico, como informacin
burstil, pero tambin tiene secciones que son estticas, como resmenes semanales, se puede colocar esas
secciones estticas en controles de usuario y especificar su almacenamiento en memoria cach.
La sustitucin posterior al almacenamiento en cach es lo contrario. La pgina en su conjunto se almacena en
memoria cach, pero los fragmentos situados dentro de la pgina son dinmicos. Por ejemplo, si crea una pgina
que es esttica durante ciertos perodos fijos de tiempo, se puede configurar la pgina completa para que se
almacene en cach. Si se ha agregado un control Label a la pgina que muestra el nombre del usuario, el control
Label no variar para cada actualizacin de pgina y para cada usuario, y mostrar el nombre del usuario que
solicit la pgina antes de que se almacenara en cach. Sin embargo, con la sustitucin posterior al
almacenamiento en cach, se puede configurar la pgina para que se almacene en cach, pero tambin marcar
secciones individuales como no almacenables en cach. En este caso, se podra agregar los controles Label a una
seccin no almacenable en memoria cach y se crearan dinmicamente para cada usuario y cada solicitud de
pgina.
Almacenar en cach pginas basadas en parmetros de solicitud
Adems de almacenar en cach una nica versin de una pgina, el almacenamiento en cach de resultados de
pginas ASP.NET proporciona caractersticas para crear mltiples versiones de la pgina que difieren en varios
parmetros de solicitud.
Almacenamiento en cach de resultados extensible
ASP.NET agrega extensibilidad al almacenamiento en memoria cach de resultados y permite configurar uno o ms
proveedores de memoria cach de resultados personalizados. Los proveedores de memoria cach de resultados
pueden usar cualquier mecanismo de almacenamiento para conservar el contenido HTML. Estas opciones de
almacenamiento pueden incluir discos locales o remotos, almacenamiento de nube y motores de memoria cach
distribuidos.
La extensibilidad de proveedores de memoria cach de resultados en ASP.NET permite disear estrategias de
almacenamiento en memoria cach de resultados ms dinmicas e inteligentes para los sitios web. Por ejemplo, se
puede crear un proveedor de memoria cach de resultados que almacena en cach las 10 pginas principales de un
sitio en memoria y almacena en cach las pginas con menos trfico en disco. O bien, se puede almacenar en
cach cada combinacin de variacin para una pgina representada y usar memoria cach distribuida para que el
consumo de memoria se descargue de los servidores web front-end.
El proveedor de memoria cach de resultados personalizado se crea como una clase que deriva del tipo
OutputCacheProvider. A continuacin, se puede configurar el proveedor en el archivo Web.config mediante la
nueva subseccin providers del elemento outputCache , tal y como se muestra en el ejemplo siguiente:
<caching>
<outputCache defaultProvider="AspNetInternalProvider">
<providers>
<add name="DiskCache"
type="Test.OutputCacheEx.DiskOutputCacheProvider, DiskCacheProvider"/>
</providers>
</outputCache>

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

56

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
</caching>
De forma predeterminada, todas las respuestas HTTP, las pginas presentadas y los controles usan la memoria
cach de resultados en memoria del ejemplo anterior (donde el atributo defaultProvider est establecido en
AspNetInternalProvider). Se puede cambiar el proveedor de memoria cach de resultados predeterminado que se
usa para una aplicacin web especificando un nombre de proveedor diferente para defaultProvider.
Tambin se puede seleccionar proveedores de memoria cach de resultados diferentes para controles individuales
y para solicitudes individuales. La manera ms fcil de elegir un proveedor de memoria cach de resultados
diferente para los distintos controles de usuario web es hacerlo mediante declaracin con el nuevo atributo
providerName de una directiva @ Page@ Control, tal y como se muestra en el ejemplo siguiente:
<%@ OutputCache Duration="60" VaryByParam="None"
providerName="DiskCache" %>
Para especificar un proveedor de memoria cach de resultados diferente para una solicitud HTTP, se invalida el
nuevo mtodo GetOutputCacheProviderName en el archivo Global.asax para especificar mediante
programacin qu proveedor se usar para una solicitud concreta.
Eliminacin de datos automtica
ASP.NET puede quitar los datos de la memoria cach por cualquiera de estos motivos:
a)
b)
c)

Hay poca memoria en el servidor y se produce un proceso conocido como barrido.


El elemento de la memoria cach ha expirado.
Ha cambiado la dependencia del elemento.

Para ayudar a administrar los elementos almacenados en memoria cach, ASP.NET puede notificar a su aplicacin
cuando los elementos se quitan de la memoria cach.
Barrido
El barrido es el proceso de eliminar elementos de la memoria cach cuando la memoria es escasa. Los elementos
se quitan cuando ha transcurrido cierto tiempo desde su ltima utilizacin o cuando se han marcado como de
prioridad baja al agregarse a la memoria cach. ASP.NET utiliza el objeto CacheItemPriority para determinar los
elementos que se deben compactar en primer lugar
Expiracin
Adems de utilizar el barrido, ASP.NET quita automticamente los elementos de la memoria cach cuando expiran.
Al agregar un elemento a la memoria cach se puede establecer su expiracin de acuerdo con las siguientes
alternativas.
Fecha de expiracin variable
Especifica el intervalo de tiempo que debe transcurrir desde el ltimo acceso al elemento para que ste expire. Por
ejemplo, puede establecer que un elemento expire 20 minutos despus del ltimo acceso en cach.
Expiracin absoluta
Especifica que un elemento expira en un momento determinado, sin tener en cuenta la frecuencia con que se ha
tenido acceso al mismo. Por ejemplo, se puede establecer que un elemento expire a las 6:00 p.m. o al cabo de
cuatro horas.
Dependencias
Se puede establecer que el perodo de duracin de un elemento en memoria cach dependa de otros elementos de
la aplicacin, como archivos o bases de datos. Cuando el elemento del que depende un elemento de la memoria

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

57

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
cach cambia, ASP.NET lo quita de sta. Por ejemplo, si su sitio Web muestra un informe creado por la aplicacin a
partir de un archivo XML, se puede colocar dicho informe en cach y configurarlo para que dependa del archivo
XML. Cuando el archivo XML cambie, ASP.NET quitar el informe de la memoria cach. Cuando el cdigo solicite el
informe, determinar en primer lugar si el informe est en memoria cach, y si no est, lo volver a crear. De este
modo, siempre estar disponible una versin actualizada del informe.
El almacenamiento en cach de ASP.NET admite el uso de las dependencias descritas a continuacin.
Dependencia de clave
Los elementos de la memoria cach de aplicaciones se almacenan en pares de clave y valor. La dependencia de
clave permite que un elemento sea dependiente de la clave de otro elemento de la memoria cach de la aplicacin.
Cuando se quita el elemento original, tambin se quita el elemento que tiene la dependencia de clave. Por ejemplo,
se podra agregar un elemento de cach denominado ReportsValid y, a continuacin, almacenar en cach varios
informes dependientes de la clave ReportsValid. Cuando se quite el elemento ReportsValid, tambin se quitarn
todos los informes dependientes almacenados en memoria cach.
Dependencia de archivo
Un elemento de la memoria cach depende de un archivo externo. Si se modifica o se elimina dicho archivo, se
quita el elemento almacenado en cach.
Dependencia de SQL
Un elemento de la memoria cach depende de los cambios realizados en una tabla de base de datos de Microsoft
SQL Server.
Dependencia de agregado
Un elemento de la memoria cach depende de mltiples elementos a travs del uso de la clase
AggregateCacheDependency. Si cambia cualquiera de las dependencias, el elemento se quita de la memoria cach.
Dependencia personalizada
Un elemento de la memoria cach se configura con una dependencia creada en su propio cdigo. Por ejemplo, se
puede crear una dependencia de cach de servicio Web personalizada que quite datos de la memoria cach cuando
una llamada a un servicio Web tenga como resultado un valor determinado.
Notificacin de eliminacin de elementos de la memoria cach de aplicaciones
Se puede recibir una notificacin cuando un elemento se quita de la memoria cach de aplicaciones. Por ejemplo, si
existe un elemento cuya creacin consume un tiempo de procesamiento considerable, se puede recibir una
notificacin cuando dicho elemento se quite de la memoria cach a fin de poder reemplazarlo inmediatamente. En
consecuencia, la prxima vez que se solicite el elemento, el usuario no tendr que esperar a que se procese.
Especificacin de Cache en Pginas
Para las pginas ASP.NET, puede establecer el almacenamiento en cach utilizando los valores en la enumeracin
HttpCacheability. La enumeracin tiene los valores siguientes. Los tres primeros se asignan directamente a las
opciones del encabezado HTTP Cache-Control y los tres ltimos son valores especiales.
NoCache Especifica que el dispositivo que realiza la solicitud debera recibir la respuesta del servidor Web cada
vez que la realiza.
Public

Permite almacenar en cach la respuesta en clientes y cachs compartidas (servidor proxy).

Private Especifica que la respuesta slo se puede almacenar en cach en el cliente y no en cachs compartidas
(servidor proxy).

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

58

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Server

Especifica que la respuesta slo se almacena en memoria cach en el servidor de origen.

ServerAndNoCache Aplica las opciones de Server y NoCache para indicar que el contenido se almacena en el
servidor, pero niega explcitamente a los dems la capacidad de almacenar la respuesta en cach.
ServerAndPrivate Especifica que una respuesta se puede almacenar en cach slo en el servidor de origen y en
el cliente que realiza la solicitud; los servidores proxy no pueden almacenar la respuesta en cach.
Se puede establecer de forma declarativa el almacenamiento en cach de una pgina incluyendo un atributo
Location en la directiva @ OutputCache y especificando uno de los valores de la enumeracin
OutputCacheLocation. Tambin se puede establecer mediante programacin el almacenamiento en cach de una
pgina utilizando el mtodo SetCacheability para especificar un valor HttpCacheability para la pgina. El mtodo
es accesible a travs de la propiedad Cache de la clase Response.
Ejemplos Especificacin de Cach
<%@ OutputCache Duration="60" VaryByParam="None"%>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="Cache30Seconds" duration="30"
varyByParam="none" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
<%@ OutputCache CacheProfile="Cache30Seconds" %>
// Estableciendo tipo de cach
Response.Cache.SetCacheability(HttpCacheability.Public);
// Ejemplo estableciendo duracin
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(true);
// Ejemplo dependencia de archivo
protected void Page_Load(object sender, EventArgs e)
{
string fileDependencyPath = Server.MapPath("TextFile1.txt");
Response.AddFileDependency(fileDependencyPath);

// Set additional properties to enable caching.


Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(true);

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

59

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
}
// Ejemplo dependencia de clave

protected void Page_Load(object sender, EventArgs e)


{
Response.AddCacheItemDependency("ProcessIntensiveReport");

// Set additional properties to enable caching.


Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(true);
}
// Ejemplo usando cache de aplicacin, agregar elementos
Cache["CacheItem1"] = "Cached Item 1";
Cache.Insert("CacheItem2", "Cached Item 2");
string[] dependencies = { "CacheItem2" };
Cache.Insert("CacheItem3", "Cached Item 3",
new System.Web.Caching.CacheDependency(null, dependencies));

Cache.Insert("CacheItem4", "Cached Item 4",


new System.Web.Caching.CacheDependency(
Server.MapPath("XMLFile.xml")));

System.Web.Caching.CacheDependency dep1 =
new System.Web.Caching.CacheDependency(Server.MapPath("XMLFile.xml"));
string[] keyDependencies2 = { "CacheItem1" };
System.Web.Caching.CacheDependency dep2 =
new System.Web.Caching.CacheDependency(null, keyDependencies2);
System.Web.Caching.AggregateCacheDependency aggDep =
new System.Web.Caching.AggregateCacheDependency();
aggDep.Add(dep1);
aggDep.Add(dep2);
Cache.Insert("CacheItem5", "Cached Item 5", aggDep);

Cache.Insert("CacheItem6", "Cached Item 6",


null, DateTime.Now.AddMinutes(1d),
System.Web.Caching.Cache.NoSlidingExpiration);

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

60

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Cache.Insert("CacheItem7", "Cached Item 7",
null, System.Web.Caching.Cache.NoAbsoluteExpiration,
new TimeSpan(0, 10, 0));

Cache.Insert("CacheItem8", "Cached Item 8",


null, System.Web.Caching.Cache.NoAbsoluteExpiration,
System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.High, null);

string CachedItem9 = (string)Cache.Add("CacheItem9",


"Cached Item 9", null,
System.Web.Caching.Cache.NoAbsoluteExpiration,
System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.Default,
null);
// Ejemplo usando cache de aplicacin, obtener elementos
string cachedString;
cachedString = (string)Cache["CacheItem"];
if (cachedString == null)
{
cachedString = "Hello, World.";
Cache.Insert("CacheItem", cachedString);
}

// Ejemplo usando cache de aplicacin, eliminar elementos


Cache.Remove("MyData1");
LECCION 19 Controles de Usuario
Introduccin
Adicionalmente a los controles built-in del lado del servidor provistos por ASP.NET, el programador puede
definir de una manera sencilla nuevos controles (en la terminologa .NET se denominan user controls) aplicando
las mismas tcnicas de programacin empleadas para escribir pginas basadas en formularios WEB. En efecto,
con solo realizar unas pequeas modificaciones, cualquier pgina web form puede ser reutilizada en otra pgina
como un control de servidor (La clase para de los controles de usuario System.Web.UI.UserControl, hereda
directamente de System.Web.UI.Control). Una manera directa de crear un User Control es a travs de la
combinacin de controles existentes, estos controles que agrupan estos controles ya existentes se denominan
Composite Controls.
Una pgina web form usada como un control de servidor es llamada user control. Para respetar una convencin
de nombres, la extensin .ascx es utilizada para identificar este tipo de controles. Esta convencin, tambin
garantiza que un archivo .ascx no puede ser ejecutado como un pgina web form standalone. Los User controls
son incluidos en una pgina Web Form empleando la directiva Register:
<%@ Register TagPrefix="GALA" TagName="Mensaje" Src="WUCGala.ascx" %>
TagPrefix determina un espacio de nombres nico para el user control (de esta manera mltiples user controls
con el mismo nombre pueden ser diferenciados de los otros). TagName es el nombre nico para el user control
(cualquier nombre puede ser utilizado). El atributo Src es el camino virtual para el user control por ejemplo
"UCGala.ascx" r "/application/incluye/UCGala.ascx". Despus de registrar el user control, el tag del user control

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

61

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
puede ser colocado en la pgina Web Forms como si se empleara in control de servidor
runat="server"):

(colocando el atributo

<GALA:Mensaje runat="server"/>
Facilidades de Visual Studio
Visual Studio ofrece un componente Web llamado Web User Control el cual permite desarrollar los controles de
usuario

Al crearse por ejemplo un control con el nombre WUCgala se crea el archivo WUCgala.ascx, el cual contiene el
siguiente cdigo. Este control mostrar una etiqueta identificada con lMensaje
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WUCgala.ascx.cs" Inherits="UC.WUCgala"
%>
<asp:Label ID="lMensaje" runat="server" Text="Mensaje WUC"></asp:Label>

Y el archivo de cdigo, WUCgala.ascx.cs, el cual contiene el siguiente cdigo.


using
using
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;

namespace UC
{
public partial class WUCgala : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
A continuacin se muestra cmo utilizar el Control desde un formulario Web.
Se crea una pgina llamada UC.aspx.
Para agregar el control simplemente se arrastra a la vista de diseo de la pgina el WebUserControl.
Visual Studio crea la directiva @Register con el siguiente cdigo en el archivo UC.aspx
<%@ Register src="WUCgala.ascx" tagname="WUCgala" tagprefix="uc1" %>

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

62

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Y luego la utilizacin del control
<uc1:WUCgala ID="WUCgala1" runat="server" />
El tagprefix permite definir cmo se van a iniciar los tags, por ejemplo todos los controles de servidor de asp.net
usan el tagprefix asp. El tagname representa el nombre de la clase del Control. Por lo tanto, la combinacin del
tagprefix con el carcter : y el tagname representan el tag del Web User Control.
A continuacin se renombra el tagprefix por GALA y el tagname por Mensaje, y el nombre del objeto se le coloca
Mejemplo

<%@Registersrc="WUCgala.ascx"tagname="Mensaje"tagprefix="GALA"%>
<GALA:MensajeID="Mejemplo"runat="server"/>
Exponiendo las propiedades de un User Control
Cuando una pgina de web form es tratada como un control, los campos pblicos y mtodos de la web form son
promocionados como propiedades pblicas (como atributos de tag) y mtodos del control. En este ejemplo se
muestra una extensin del anterior donde se agregan dos campos pblicos del tipo String. Estos campos pueden
ser especificados en la pgina de una manera programtica o de una manera declarativa.
A continuacin se extiende el ejemplo del User Control conteniendo dos propiedades color y textoMensaje.
namespace UC
{
public partial class WUCgala : System.Web.UI.UserControl
{
public string color="", textoMensaje="";
protected void Page_Load(object sender, EventArgs e)
{
if (textoMensaje != "")
this.lMensaje.Text = textoMensaje;
if (color != "")
this.lMensaje.BackColor = System.Drawing.Color.FromName(color);
}
}
}

Al tener propiedades pblicas ya se encuentran visibles en las pginas donde se incluye el User Control.
<GALA:Mensaje ID="Mejemplo" runat="server" color="blue" textoMensaje="Uso del Control"/>
Tambin es posible referenciar al user control a travs de instrucciones del lenguaje
WUCgala wuc;
wuc = this.Mejemplo;
wuc.color = "red";

LECCION 20 Cdigo del lado del cliente: JavaScript, JSON, AJAX, Herramientas de AJAX
Las aplicaciones web ASP.NET no se limitan a los lenguajes y las herramientas basados en servidor. Puede incluir
ECMAScript (JavaScript o JScript) en sus pginas web ASP.NET para crear funcionalidad enriquecida basada en
explorador. ASP.NET dispone de una amplia gama de caractersticas para la compatibilidad con los scripts de
cliente.
Una opcin consiste en crear y agregar fragmentos de cdigo individuales de script de cliente a las pginas web
ASP.NET para admitir el comportamiento de explorador que disee para la aplicacin. Esta opcin resulta prctica
si solo se desea incluir algunas partes pequeas de cdigo JavaScript o si trabaja con cdigo JavaScript ya
existente. Esta opcin tambin permite que el tamao de las pginas web ASP.NET sea el mnimo.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

63

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Asimismo, se puede aprovechar las eficaces caractersticas AJAX de ASP.NET. Entre estas caractersticas AJAX se
incluye un completo marco de trabajo que admite lo siguiente:

Programacin orientada a objetos en JavaScript.


Postbacks asincrnicos.
Servicios Web de aplicacin para autenticacin y perfiles.
Controles de servidor que administran los scripts de cliente con compatibilidad ampliada para depuracin y
seguimiento de traza.

Las caractersticas AJAX de ASP.NET permiten aprovechar las ventajas de la funcionalidad de JavaScript con menos
codificacin manual. Esto proporciona la funcionalidad de JavaScript ampliada, adems de un marco de trabajo
para crear la funcionalidad de cliente que se integra en ASP.NET.
Escenarios
Utilizar los scripts de cliente cuando se desee hacer lo siguiente:

Mejorar la experiencia del usuario con pginas web ms enriquecidas, que son ms receptivas a las
acciones del usuario y presentan un comportamiento similar a las aplicaciones cliente tradicionales. Por
ejemplo, se puede usar scripts de cliente para comprobar los datos proporcionados con el teclado en un
cuadro de texto a medida que se escribe cada uno de los caracteres.

Agregar funcionalidad AJAX a las pginas web ASP.NET, lo que le permite hacer lo siguiente:

Reducir las actualizaciones de pgina completa y evitar el parpadeo de la pgina mediante la


manipulacin dinmica de los elementos DOM de la pgina.

o
o

Actualizar y administrar la interfaz de usuario sin necesidad de un postback al servidor.


Organizar el cdigo en componentes de cliente. Los componentes de cliente son objetos
reutilizables que encapsulan JavaScript basado en Microsoft Ajax Library. Los componentes de
cliente tambin se pueden administrar mediante controles del lado servidor personalizados o
asociar a controles de servidor existentes para agregar funcionalidad de cliente.

Incluir script de cliente personalizado en pginas ASP.NET


Dado que las pginas web ASP.NET solo presentan marcado HTML, se puede agregar un script de cliente. Las
pginas ASP.NET admiten scripts de cliente en la medida en que el explorador que solicita la pgina admite dichos
scripts. Si la pgina se ejecuta en un explorador de un telfono u otro dispositivo mvil, el grado de compatibilidad
con el script de cliente variar segn el explorador.
Existen varias opciones para incluir scripts de cliente en las pginas ASP.NET:

Se Puede incluir scripts de cliente de forma esttica en un bloque script que incluya cdigo o que use un
atributo include para hacer referencia a un archivo JavaScript (.js). Usar esta opcin para insertar
bloques de script o archivos JavaScript que contengan scripts de cliente que no sea necesario crear
dinmicamente y que no requieran la funcionalidad AJAX adicional que proporciona Microsoft Ajax Library.

Se puede crear y agregar dinmicamente el script de cliente a una pgina web ASP.NET mediante la
clase ClientScriptManager. Usar esta opcin si desea crear scripts que dependan de informacin que
solo est disponible en tiempo de ejecucin.

Si se desea utilizar las caractersticas AJAX de ASP.NET, se puede administrar los archivos de script de cliente
mediante el control de servidor ScriptManager. El control de servidor ScriptManager tambin garantiza que
Microsoft Ajax Library se cargue en el explorador antes de ejecutarse los scripts.
Incluir bloques de script de cliente estticos

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

64

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Se pueden agregar bloques de script a una pgina ASP.NET del mismo modo que se hara en cualquier pgina
HTML. Tambin se pueden utilizar scripts de cliente para escribir controladores de eventos para eventos de cliente
como el evento onload de la pgina. Cuando una pgina ASP.NET se ejecuta en el explorador, los elementos de
marcado de la pgina son direccionables en el script de cliente. Estos generan los mismos eventos de cliente que
en una pgina HTML.
Una pgina web ASP.NET tambin puede tener acceso a un archivo de script al hacer referencia a este en el
atributo src de una etiqueta <script>, como en el ejemplo siguiente:
<script type="text/javascript" src="MyScript.js"></script>
Mantener los scripts de cliente en archivos .js externos en lugar de mantenerlos en las pginas en s puede ayudar
a organizarlos. Tambin puede facilitar su administracin por parte del control de versiones y hacer que sea ms
fcil compartirlos entre pginas.
El explorador almacena en cach los archivos .js externos, de forma similar a como se almacenan en cach las
imgenes y las pginas web. Una vez que el explorador carga el script como archivo externo, este est disponible
en la memoria cach para cualquier otra pgina web que lo necesite. Esto puede ayudar a aumentar el rendimiento
de la aplicacin web.
Crear script de cliente de forma dinmica
En muchos casos, el script de cliente para la pgina se puede crear mediante declaracin, normalmente como un
bloque de script. Sin embargo, tambin se puede crear script de cliente de forma dinmica. Esto resulta til si el
script depende de informacin que solo est disponible en tiempo de ejecucin. Por ejemplo, se puede insertar el
script de cliente en una pgina que direcciona un control de servidor cuyo nombre (identificador) no se conoce
hasta que se ejecuta la aplicacin, o se puede crear un script que depende de los valores recibidos de un usuario.
Para crear e insertar script de cliente de forma dinmica en una pgina presentada, se invocan a los mtodos de la
clase ClientScriptManager, como los siguientes:
RegisterClientScriptBlock , que inserta un bloque de script en la parte superior de la pgina presentada.
RegisterStartupScript , que inserta un bloque de script al final de la pgina presentada.
En el ejemplo siguiente se muestra cmo agregar a la pgina el script de cliente generado dinmicamente. El
cdigo comprueba si est activada la casilla denominada checkDisplayCount. En caso afirmativo, el cdigo realiza
las siguientes tareas:

Crea una funcin de script de cliente que usa un elemento span para mostrar el recuento de caracteres en
un control TextBox denominado TextBox1.

Agrega un evento de cliente al control TextBox.


Genera el elemento span.

El cdigo supone que la pgina contiene una casilla denominada checkDisplayCount cuya propiedad AutoPostBack
est establecida en true y un control PlaceHolder denominado PlaceHolder1.
void Page_Load(object sender, EventArgs e)
{
if(checkDisplayCount.Checked)
{
String scriptText = "";
scriptText += "function DisplayCharCount(){";

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

65

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
scriptText += "

spanCounter.innerText = " +

" document.forms[0].TextBox1.value.length";
scriptText += "}";
ClientScriptManager.RegisterClientScriptBlock(this.GetType(),
"CounterScript", scriptText, true);
TextBox1.Attributes.Add("onkeyup", "DisplayCharCount()");
LiteralControl spanLiteral = new
LiteralControl("<span id=\"spanCounter\"></span>");
PlaceHolder1.Controls.Add(spanLiteral);
}
}
Para los mtodos de la clase ClientScriptManager, se proporciona un tipo al que est asociado el bloque de script y
se asigna una clave a este bloque. Al proporcionar un tipo resulta ms fcil evitar colisiones si tanto la pgina como
los controles (controles personalizados o controles de usuario) agregan bloques de script a la misma pgina. El uso
de una clave permite evitar la duplicacin. Si se llama a uno de los mtodos para agregar el script y ya existe un
script con la misma clave y el mismo tipo, el script no se vuelve a agregar.
El tipo y la clave proporcionados permiten evitar una duplicacin innecesaria. Por lo tanto, generalmente no tendr
que determinar de forma explcita si ya existe un bloque de script. Sin embargo, si es til en la aplicacin
comprobar si ya existe un bloque de script, puede llamar a los mtodos siguientes:
IsClientScriptBlockRegistered
IsClientScriptIncludeRegistered
IsOnSubmitStatementRegistered
IsStartupScriptRegistered

Agregar un script de cliente mediante el control ScriptManager


Si se utilizan las caractersticas AJAX de ASP.NET, el control ScriptManager ofrece una forma de agregar archivos
de script a una pgina. Esto incluye los archivos de script estticos (archivos .js) del disco y los archivos de script
incrustados como recursos en un ensamblado. Los archivos de script se pueden especificar mediante declaracin en
el control. Como alternativa, se puede usar los mtodos de registro del control ScriptManager que permiten
administrar los archivos de script de cliente existentes mediante programacin y trabajar con scripts para admitir la
actualizacin parcial de la pgina.
Ejemplo de validacin del lado del Cliente
ASP.NET soporta varios controles de validacin como RequiredFieldValidator, CompareValidator, y otros - los
cuales son tiles para asegurar que los usuarios introducen valores vlidos en los campos de los formularios.
En el caso de Internet Explorer, estos controles generan JavaScript a ejecutar del lado del cliente. Par el caso de
navegadores no-Microsoft slo validacin del lado del servidor es posible.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

66

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Como se muestran los controles de validacin del lado del cliente

Todos
los
controles
de
validacin
de
ASP.NET
derivan
(heredan)
de
la
clase
System.Web.UI.WebControls.BaseValidator. La clase BaseValidator define los mtodos y las propiedades comunes
a todos los controles de validacin. Una de las funciones de esta clase es determinar cundo un control de
validacin puede o no ser ejecutado con un script del lado del cliente. Esto es realizado por el mtodo
DetermineRenderUplevel().
En las ltimas versiones de Visual Studio se ofrecen controles de validacin cada vez ms sofisticados.
Agregando Message Boxes del lado del cliente en ASP.NET
Una de las mayores ventajas de una aplicacin Windows es la utilizacin de los message boxes, como las alertas y
las confirmaciones.

El problema de los message boxes es que estos son creados en el cliente y no pueden ser creados como cdigo del
lado del servidor. En este caso el cdigo del lado del servidor necesita producir el cdigo JavaScript apropiado, el
cual se ejecuta del lado del cliente, con el HTML enviado al cliente para que ste pueda desplegar el message Box.
Para desplegar un messagebox, una manera de realizarlo ASP.NET se puede crear un botn HTML <input> y
agregar un evento JavaScript onclick al botn el cual invoca el mtodo confirm de JavaScript confirm(), para
desplegar el message box del lado del cliente cuando el botn es presionado.
Sin embargo en ASP.NET, existe otra manera ms eficiente de realizarlo y de una manera programtica. El primer
paso es aadir un control web button y colocar como id BBorrar, esto produce el cdigo:
<input type="submit" name="BBorrar" value="Borrar" id="BBorrar" />
Luego se le puede aadir el onclick event el cual contiene cdigo JavaScript, de la siguiente manera
<input type="submit" name="BBorrar" value="Borrar" id="BBorrar"
confirm('Seguro desea borrar?');" />

onclick="return

De una manera programtica, todos los controles Web de ASP.NET soportan la propiedad
Attributes
conteniendo una coleccin de atributos del elemento HTML mostrados (y se almacenan de pares atributo, valor). La
propiedad attributes posee un mtodo Add(key, value) , el cual puede ser utilizado para agregar un atributo
nuevo para el control web. De una manera programtica, se puede realizar:
private void Page_Load(System.Object sender As,
System.EventArgs e) {
if (! Page.IsPostBack) {
Me.BBorrar.Attributes.Add("onclick",
"return confirm('Seguro desea borrar?');");
}

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

67

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
}

Debido a que este cdigo slo necesita ser aadido una vez (y no cada vez que se carga la pgina) , este cdigo es
colocado en el bloque Page.IsPostBack.
La funcin confirm en JavaScript despliega un message confirmacin, con los botones OK y Cancel. Si se presiona
el botn Ok esta funcin retorna true, en caso contrario esta funcin retorna false. Por lo tanto, es necesario
colocar un return a la funcin confirm cuando se agrega la propiedad.
Si se requiere agregar un message box de confirmacin para varias pginas ASP.NET, se podra crear una clase
llamada Utilitarios con un mtodo esttico que reciba como parmetro un botn (de control Web) y un mensaje
que actualiza las propiedades del Botn apropiadamente.
public class Utilitarios {
public static void crearCajaConfir(
ref System.Object bot As , string mens) {
bot.Attributes.Add("onclick", "return confirm('" + mens + "');");
}
}
Entonces este mtodo puede ser invocado en el Page_Load:
Utilities.CreateConfirmBox(this.BBorrar, Seguro desea borrar?")
De esta manera se puede reutilizar este cdigo.
Agregando Alert Message Boxes del lado del cliente en ASP.NET
ASP.NET provee un conjunto de mtodos para manejar los JavaScript de html sin necesidad de modificar los HTML
de manera manual.
En estos casos se requiere registrar un bloque de script que se ejecuta en el cliente dentro de la pgina web
asp.net y esto debe ser ejecutado cuando el cliente ejecuta la pgina.
La clase Page de ASP.NET provee un mtodo llamado RegisterStartupScript
En el siguiente ejemplo se muestra el cdigo para el botn de Guardar.
private void BSalvar_Click(System.Object sender, System.EventArgs e) {
//Generar el mensaje

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

68

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
string mensaje;
if (this.CheckBox1.Checked()) {
mensaje = "Los datos fueron salvados";
}
Else {
Mensaje = " Los datos no fueron salvados ";
}
//Finaliza el procedimiento y retorna el script.
string scriptM = "<script language=JavaScript>";
scriptM += "alert(""" & Mensaje & """);";
scriptM += "</script>";
if (! Page.IsStartupScriptRegistered("scriptCliente")) {
Page.RegisterStartupScript("scriptCliente", scriptM);
}
}

El mtodo RegisterStartupScript() toma dos argumentos : el primero una clave que identifica al script registrado y
el cdigo del script. El Segundo parmetro incluye el tag <script> y el cdigo necesario para ejecutar (alert('...');).
Antes de ejecutar RegisterStartupScript() es importante revisar si el script fue previamente registrado.
AJAX en ASP.Net
Visual Studio ofrece los siguientes controles para la incorporacin de AJAX en las aplicaciones

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

69

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

A continuacin se explica cmo agregar compatibilidad con la actualizacin parcial de pginas a una pgina web
mediante dos controles de servidor de Microsoft Ajax: ScriptManager y UpdatePanel. Estos controles hacen que
no sea necesario actualizar toda la pgina con cada postback, lo que mejora la experiencia del usuario.
1.
2.

Crear una nueva pgina y cambie a la Vista de diseo.


En la ficha Extensiones AJAX del cuadro de herramientas, doble clic en el control

ScriptManager para

agregarlo a la pgina. NOTA: Cualquier pgina que requiera la utilizacin de un control AJAX debe tener
un control ScriptManager en la pgina.

3.

Doble clic en el control UpdatePanel para agregarlo a la pgina.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

70

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

4.

Clic dentro del control UpdatePanel y, a continuacin, en la ficha Estndar del cuadro de herramientas,

5.

Colocar en el Label el valor de Panel Creado y en el Button Boton.

6.

Doble clic en el control Button para agregar un controlador para el evento Click del botn.

doble clic en los controles Label y Button para agregarlos al control.

7.

Agregar el cdigo siguiente al controlador Click, que establece el valor de la etiqueta del panel en la hora
actual.
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "Refreshed at " +
DateTime.Now.ToString();
}

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

71

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

8.

Ejecutar la pgina.

9.

Hacer clic en el botn.


Observar que el texto del panel cambia para mostrar la ltima vez que se actualiz el contenido del
panel. Este texto se establece en el controlador de eventos Click del botn.

El contenido del panel cambia cada vez que hace clic en el botn, pero no se actualiza la pgina entera. De manera
predeterminada, la propiedad ChildrenAsTriggers de un control UpdatePanel se establece en true. Cuando esta
propiedad se establece en true, los controles incluidos dentro del panel participan de las actualizaciones parciales
de pgina cuando un control del panel genera una devolucin de datos.
Para probar efectivamente el caso, al agregar otros controles Label y Button fuera del Panel con el mismo cdigo y
al realizar click al botn se observa cmo se actualiza lla pgina completa,
ASP.Net Ajax Control Toolkit
En esta librera se consigue una implementacin completa de controles AJAX.

Una vez instalada la librera los controles aparecen en Visual Studio

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

72

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

73

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Para poder utilizar cada control debe revisarse la documentacin de la librera

LECCION 21 Internacionalizacin
La globalizacin es el proceso mediante el cual se disean y desarrollan aplicaciones que pueden funcionar con
diversas referencias culturales. Localizacin es el proceso mediante el cual se personaliza una aplicacin para una
referencia cultural y configuracin regional determinadas.
Los dos procesos anteriores permiten implementar la Internacionalizacin en aplicaciones ASP.Net.
Localizacin
La localizacin consiste principalmente en la traduccin de la interfaz de usuario.
Si se requiere crear pginas Web que leern personas que hablan idiomas diferentes, se debe ofrecer una forma
para que los lectores vean las pginas en su propio idioma. Un mtodo consiste en volver a crear la pgina en cada
idioma. Sin embargo, ese mtodo puede requerir mucho trabajo, es propenso a errores y es difcil de mantener
cuando se modifica la pgina original.
ASP.NET permite crear una pgina que puede obtener contenido y otros datos basndose en la configuracin de
idioma preferida para el explorador o la eleccin explcita del idioma por parte del usuario. El contenido y otros
datos se denominan recursos y esos datos pueden almacenarse en archivos de recursos o en otros orgenes.
En la pgina Web ASP.NET, se configuran controles para obtener los valores de sus propiedades de los recursos. En
tiempo de ejecucin, las expresiones de recursos se reemplazan con recursos del archivo de recursos adecuado.
Archivos de recursos
En ASP.NET se pueden crear archivos de recursos que tienen alcances diferentes. Se pueden crear archivos de
recursos globales, lo que significa que se puede leer el archivo de recursos desde cualquier pgina o cdigo
existente en el sitio Web. Tambin se pueden crear archivos de recursos locales, que almacenan los recursos
para una nica pgina Web ASP.NET (archivo .aspx).
Para crear un archivo de recursos global se coloca en la carpeta reservada App_GlobalResources, en la raz de la
aplicacin. Todos los archivos .resx que estn en la carpeta App_GlobalResources tienen alcance global. Adems,
ASP.NET genera un objeto fuertemente tipado que ofrece una manera sencilla de tener acceso mediante
programacin a los recursos globales.
Un archivo de recursos local es aquel que se aplica a un solo control de usuario o pgina ASP.NET (un archivo de
ASP.NET con la extensin de nombre de archivo .aspx, .ascx, o .master). Se deben colocar los archivos de recursos
locales en carpetas que tienen el nombre reservado App_LocalResources. A diferencia de la carpeta raz
App_GlobalResources, las carpetas App_LocalResources pueden ubicarse en cualquier carpeta de la aplicacin. Para
asociar un conjunto de archivos de recursos a una pgina web concreta se usa el nombre del archivo de recursos.
Por ejemplo, si se tiene una pgina denominada Default.aspx, en la carpeta App_LocalResources se podran crear
los archivos siguientes:
Default.aspx.resx. Este es el archivo de recursos local predeterminado (el archivo de recursos de reserva) si no se
encuentra ninguna coincidencia de idioma.
Default.aspx.es.resx. Este es el archivo de recursos para espaol, sin informacin de referencia cultural.
Default.aspx.es-mx.resx. Este es el archivo de recursos para espaol (Mxico), especficamente.
Default.aspx.fr.resx. Este es el archivo de recursos para francs, sin informacin de referencia cultural.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

74

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
El nombre base del archivo coincide con el nombre del archivo de paginacin, seguido por un idioma y un nombre
de referencia cultural, y termina con la extensin .resx.
Despus de crear los archivos de recursos, se pueden utilizar en pginas Web ASP.NET. Normalmente se utilizan
recursos para rellenar los valores de las propiedades de los controles que hay en la pgina. Por ejemplo, se podra
utilizar recursos para establecer la propiedad Text de un control Button, en lugar de codificar la propiedad a una
cadena concreta.
Si se desea utilizar recursos para establecer los valores de las propiedades de los controles, se puede utilizar la
localizacin implcita o la localizacin explcita, de la manera siguiente:

La localizacin implcita funciona con recursos locales y permite establecer automticamente las
propiedades de los controles en recursos coincidentes.

La localizacin explcita permite utilizar una expresin de recurso para establecer una propiedad de un
control en un recurso concreto de un archivo de recursos local o global.

Si se han creado archivos de recursos locales para una pgina concreta, se puede utilizar la localizacin implcita
para llenar los valores de las propiedades para un control a partir del archivo de recursos. En la localizacin
implcita, ASP.NET lee un archivo de recursos y hace coincidir los recursos con los valores de las propiedades.
Para utilizar la localizacin implcita, se debe emplear una convencin de nomenclatura para los recursos en el
archivo de recursos local segn el modelo siguiente:
Clave . Propiedad
Por ejemplo, si se va a crear recursos para un control Button denominado Button1, se podran crear los siguientes
pares de clave y valor en el archivo de recursos local:
Button1.Text
Button1.BackColor
Label1.Text
Se puede usar un nombre cualquiera para Clave, pero Propiedad debe coincidir con el nombre de una propiedad del
control que se va a localizar o adaptar.
En la pgina, se utiliza un atributo meta especial en el marcado para el control con el fin de especificar la
localizacin implcita. No se tiene que especificar explcitamente qu propiedades se adaptan. Un control Button
configurado para la localizacin implcita puede ser similar al siguiente:
<asp:Button ID="Button1" runat="server" Text="DefaultText"
meta:resourcekey="Button1" />
El valor resourcekey coincide con una clave del archivo de recursos correspondiente. En tiempo de ejecucin,
ASP.NET hace coincidir los recursos con las propiedades de los controles utilizando la etiqueta de control como
resourcekey. Si el valor de una propiedad est definido en el archivo de recursos, ASP.NET sustituye la propiedad
por el valor del recurso.
De forma alternativa, puede utilizar la localizacin explcita, donde se utiliza una expresin de recurso. A diferencia
de la localizacin implcita, se debe utilizar una expresin de recurso para cada propiedad que desee establecer.
Un control Button configurado para establecer la propiedad Text de un archivo de recursos global puede ser similar
al siguiente:
<asp:Button ID="Button1" runat="server"
Text="<%$ Resources:WebResources, Button1Caption %>" />

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

75

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Para la expresin de recurso se utiliza el formato siguiente, donde Clase es opcional, a menos que el recurso sea
global, e idRecurso es obligatorio:
<%$Resources:Clase,IdRecurso%>
El valor Clase identifica el archivo de recursos que se utilizar cuando se empleen recursos globales. Cuando se
compilan archivos .resx, se utiliza el nombre de archivo base, sin extensiones, como el nombre de clase del
ensamblado resultante, explcitamente. Si se desea usar recursos de un archivo de recursos local (uno que coincida
con el nombre de pgina actual), no se tiene que incluir un nombre de clase. Esto se debe a que ASP.NET hace
coincidir la clase de pgina con la clase de recurso.
El valor idRecurso es el identificador del recurso que se va a leer. En el ejemplo anterior, la propiedad Text para el
botn se lee del archivo de recursos global WebResources.resx (o la versin adaptada adecuada). En ese archivo,
ASP.NET utiliza el valor para el recurso con el identificador Button1Caption y para la propia pgina. Para establecer
las propiedades de pgina, se puede usar expresiones de recurso en la directiva @ Page.
Se puede especificar una expresin de recurso explcita o una expresin de recurso implcita para un control, pero
no ambas. Se producir un error del analizador si se usa la sintaxis declarativa siguiente en un control Button:
<asp:Button ID="Button1"
runat="server"
meta:resourcekey="Button1Resource1"
Text="<%$ Resources:WebResources, Button1Caption %>" />
En este ejemplo se especifica un archivo de recursos local implcito (que coincide con el nombre de la pgina
actual), as como un archivo de recursos explcito denominado WebResources. Para evitar que se produzca un error
de anlisis para este control, quite una de las expresiones de recurso.
Si una pgina incluye texto esttico, puede usar la adaptacin de ASP.NET incluyndolo en un control Localize y
usando despus la localizacin explcita para establecer el texto esttico. El control Localize no representa el
marcado; su nica funcin es actuar como marcador de posicin para el texto adaptado. El control Localize se
puede editar en la Vista de diseo, no solo en la cuadrcula de propiedades. En tiempo de ejecucin, ASP.NET trata
el control Localize como un control Literal. Por ejemplo, su pgina podra incluir el cdigo siguiente:
<h1>
<asp:Localize runat=server
ID="WelcomeMessage"
Text="Welcome!" meta:resourcekey="LiteralResource1" />
</h1>
<br />
<br />
<asp:Localize runat="server"
ID="NameCaption"
Text="Name: " meta:resourcekey="LiteralResource2" />
<asp:TextBox runat="server" ID="TextBox1"
meta:resourcekey="TextBox1Resource1" />

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

76

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Seleccionar archivos de recursos para idiomas diferentes
Cuando se ejecuta una pgina, ASP.NET selecciona la versin del archivo de recursos que ms se asemeje al valor
UICulture actual para la pgina. Si no existe ninguna coincidencia, ASP.NET usa la reserva de recursos para
obtener un recurso. Por ejemplo, si se est ejecutando la pgina Default.aspx y la propiedad UICulture actual est
establecida en es (espaol), ASP.NET utiliza la versin compilada del archivo de recursos local
Default.aspx.es.resx.
ASP.NET puede establecer las propiedades UICulture y Culture para la pgina en los valores de idioma y referencia
cultural que le pasa el explorador. Tambin se puede establecer explcitamente las propiedades UICulture y
Culture, ya sea mediante declaracin o en el cdigo. Asimismo, sepuede establecer los valores mediante
declaracin en archivos Web.config.

LECCION 22 Puesta en marcha aplicaciones


Lo nuevo en la publicacin de sitios Web en Visual Studio
En esta leccin se describen las nuevas caractersticas de Visual Studio para implementar, o publicar, sitios Web en
un servidor de ensayo o de produccin.
A partir de Visual Studio 2005, el proceso de trasladar un sitio Web en desarrollo a un servidor de ensayo o de
produccin es mucho ms fcil que con las versiones anteriores. En versiones anteriores, todas las partes del
cdigo del sitio Web se generaban en un ensamblado nico. A continuacin, el ensamblado generado, junto con los
archivos .aspx, el archivo Web.config y otros archivos que no son de cdigo se implementaban en el servidor de
destino. Las formas ms habituales de implementar los archivos eran las siguientes: usar la utilidad Copiar
proyecto, para lo que el servidor de destino tena que estar en una red de rea local; usar las Extensiones de
servidor de FrontPage de Microsoft, o crear un proyecto de instalacin para generar un archivo de instalacin
(.msi).
En la versin actual de Visual Studio, se puede implementar un proyecto utilizando las herramientas siguientes:

La herramienta Copiar sitio Web, que copia directamente el sitio Web actual en el servidor de destino.
La utilidad Publicar sitio Web, que compila el sitio Web en un conjunto de archivos ejecutables. A
continuacin, se puede copiar los archivos en el servidor de destino, utilizando el mtodo que desee.

La utilidad de publicacin de sitios Web no est disponible en Visual Web Developer Express.
Estas herramientas no requieren configuracin especial en el servidor de destino, como sucede con las Extensiones
de servidor de FrontPage.
Adems de crear el sitio Web e implementarlo en un servidor de destino, tambin puede crear un sitio Web del
Protocolo de transferencia de archivos (FTP). En ese caso, los archivos se crean y editan directamente en el
servidor de destino, lo que representa una forma muy cmoda de trabajar con un sitio Web en un servidor alojado.
Copiar sitios Web
La herramienta Copiar sitio Web es parecida a una utilidad de FTP: se puede abrir una carpeta en un servidor de
destino y, a continuacin, cargar y descargar archivos del sitio Web actual en el sitio Web de destino, y viceversa.
La herramienta Copiar sitio Web ofrece las mejoras siguientes respecto a la utilidad Copiar proyecto de las
versiones anteriores de Visual Studio:

No es necesario compilar los archivos en el sitio Web antes de copiarlos en el servidor de destino. En lugar
de ello, slo se debe copiar los archivos de cdigo fuente, incluidos los archivos .aspx y archivos de clase,
en el servidor de destino. Igual que sucede con cualquier sitio Web ASP.NET, las pginas Web se compilan
dinmicamente cuando se solicita.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

77

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

La herramienta Copiar sitio Web permite abrir y copiar archivos desde cualquier sitio Web compatible con
Visual Studio, incluidos los de Servicios de Internet Information Server (IIS), IIS remoto y FTP. No es
necesario que el servidor de destino tenga las Extensiones de servidor de FrontPage.

Adems de copiar un proyecto en un servidor de destino, la herramienta Copiar sitio Web se puede utilizar para
realizar otras tareas. Es compatible con una caracterstica de sincronizacin que examina los archivos de los dos
sitios Web y, automticamente, garantiza que las versiones de los archivos estn actualizadas en ambos sitios.
Antes de copiar los archivos de aplicacin, la herramienta Copiar sitio Web coloca un archivo denominado
App_offline.htm en el directorio raz del sitio Web de destino. Mientras exista el archivo App_offline.htm, todas las
solicitudes que se hagan al sitio Web se redirigirn a este archivo, que muestra un mensaje descriptivo para indicar
a los clientes que se est actualizando el sitio Web. Una vez que se han copiado todos los archivos del sitio Web, la
herramienta Copiar sitio Web elimina el archivo App_offline.htm del sitio Web de destino.
Debe tener la versin 2.0 de .NET Framework instalada en el servidor de destino para que las pginas Web se
ejecuten como se espera.
Si el servidor de destino es un servidor FTP, se pueden abrir y editar los archivos en el servidor creando un sitio
Web FTP. Tambin se pueden administrar el sitio de destino la herramienta Administracin de sitios Web.
Compilar sitios Web
La utilidad de publicacin de sitios Web realiza la compilacin previa del contenido del sitio Web, tanto las pginas
Web (archivos .aspx) como el cdigo, y copia el resultado en el directorio o ubicacin de servidor especificada. Se
puede publicar el contenido directamente como parte del proceso de compilacin previa, o realizar la compilacin
previa localmente y, despus, copiar los archivos. La utilidad de publicacin de sitios Web compila el sitio Web y
elimina el cdigo fuente de los archivos, y slo deja los archivos de cdigo auxiliar de las pginas y los
ensamblados compilados. Cuando los usuarios solicitan las pginas, ASP.NET da servicio a la solicitud desde los
ensamblados precompilados.
El proceso de compilacin previa de la utilidad de publicacin de sitios Web no es igual que el de las versiones
anteriores de Visual Studio, como se describe a continuacin:

En Visual Studio .NET 2003, slo se compilaban los archivos de cdigo. En la utilidad de publicacin de
sitios Web, se puede compilar opcionalmente el marcado de los archivos .aspx junto con el cdigo de
pgina y cualquier otro archivo ejecutable.

En Visual Studio .NET 2003, todo el cdigo se compilaba en un ensamblado nico. En el nuevo modelo,
todos los archivos de clase independientes se compilan en un ensamblado. Sin embargo, las pagina y el
cdigo correspondiente (de un solo archivo o subyacente) se compilan en ensamblados individuales.

En la utilidad de publicacin de sitios Web, el cdigo fuente se quita del sitio Web, incluido, si se desea, el marcado
de los archivos .aspx. Los archivos .aspx siguen estando presentes, pero slo contienen punteros que indican las
versiones compiladas de las pginas. De esta forma, el contenido queda ms protegido y resulta ms difcil que
otros usuarios tengan acceso al cdigo fuente del sitio.
En consecuencia, el sitio Web tiene las mismas ventajas que los resultados creados con versiones anteriores de
Visual Studio, con mayor rapidez de respuesta inicial de las pginas y compilacin previa que contribuye a
descubrir errores del cdigo en tiempo de compilacin. La utilidad de publicacin de sitios Web tambin compila
archivos que no son de cdigo, por ejemplo el archivo Web.config. As, sirve de ayuda para encontrar errores de
compilacin y problemas en el archivo de configuracin.

Copiar sitios Web con la herramienta Copiar sitio Web


La herramienta Copiar sitio Web permite copiar los archivos entre el sitio Web actual y otro sitio. La herramienta
Copiar sitio Web es similar a una utilidad FTP, pero se diferencia en lo siguiente:

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

78

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

Permite conectar y copiar archivos entre todos los tipos de sitios Web creados en Visual Studio, incluidos
los sitios Web locales, los sitios Web de ISS, los sitios Web remotos (FrontPage) y los sitios FTP.

Admite una caracterstica de sincronizacin, que examina los archivos en ambos sitios y se asegura de que
todos los archivos estn actualizados.

Se puede utilizar la herramienta Copiar sitio Web para mover archivos de su equipo local a un servidor de ensayo o
a un servidor de produccin. La herramienta Copiar sitio Web es especialmente til en situaciones donde no puede
abrir los archivos desde el sitio remoto para editarlos. Se puede utilizar la herramienta Copiar sitio Web para copiar
archivos en el equipo local, editarlos y copiarlos otra vez en el sitio remoto. Tambin se puede utilizar la
herramienta para copiar archivos de un servidor de ensayo a un servidor de produccin cuando haya terminado su
proceso de desarrollo.
Si copia una aplicacin que contiene una referencia a un componente personalizado registrado en la GAC, el
componente no se copiar con la aplicacin.

Sitios de origen y sitios remotos


La herramienta Copiar sitio Web copia archivos entre un sitio de origen y un sitio remoto. Estos trminos se utilizan
para distinguir los dos sitios con los que trabaja la herramienta. Los trminos se utilizan con significados
especficos:
Sitio de origen

El sitio de origen es el sitio que tiene actualmente abierto en Visual Studio.

Sitio remoto El sitio remoto es el sitio en el que desea copiar archivos. Un sitio remoto puede ser una ubicacin en
otro equipo al que puede tener acceso utilizando las Extensiones de servidor de FrontPage o FTP. En estos casos, el
sitio es literalmente remoto. Sin embargo, el sitio remoto tambin puede ser otro sitio en su propio equipo. Por
ejemplo, se puede publicar desde un sitio Web del sistema de archivos de su equipo en un sitio Web de ISS local
que est tambin en su equipo. En este caso, aunque el sitio es local en su equipo, es el sitio remoto a efectos de
la herramienta Copiar sitio Web.
Observe que el sitio de origen no es necesariamente el origen del que se copia. Se puede copiar del sitio remoto al
sitio de origen.
Sincronizar los sitios
Adems de copiar archivos, la herramienta Copiar sitio Web permite sincronizar los sitios. Al sincronizar, se
examinan los archivos de los sitios local y remoto y se asegura que todos los archivos de ambos sitios estn
actualizados. Por ejemplo, si un archivo en un sitio remoto es ms actual que la versin que hay del mismo archivo
en el sitio local, al sincronizar los archivos se copia el archivo del sitio remoto en el sitio local.
La herramienta Copiar sitio Web no combina archivos que tienen el mismo nombre pero diferente contenido. En ese
caso, la sincronizacin le da la oportunidad de especificar qu versin del archivo desea mantener.
La sincronizacin hace que la herramienta resulte adecuada para un entorno de varios desarrolladores en el que
stos mantienen copias del sitio Web en sus equipos locales. Cada desarrollador puede copiar los ltimos cambios
en un servidor remoto compartido y a la vez actualizar su equipo local con los archivos que han modificado otros
desarrolladores. Un desarrollador que sea nuevo en un proyecto puede tambin obtener rpidamente copias de
todos los archivos de un sitio Web mediante la creacin de un sitio Web local en su propio equipo y la
sincronizacin con el sitio del servidor compartido.
Estado de los archivos
Para sincronizar archivos, la herramienta Copiar sitio Web necesita informacin sobre el estado de los archivos en
ambos sitios. Por consiguiente, la herramienta mantiene informacin que consta de las marcas de hora de los
archivos ms la informacin adicional que se necesita para realizar la sincronizacin. Por ejemplo, la herramienta

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

79

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
mantiene una lista de cundo fue la ltima vez que se modificaron los archivos, lo que le permite a la herramienta
determinar, por ejemplo, si se ha eliminado un archivo.
Cuando se conecta a un sitio (o se actualiza), la herramienta compara las marcas de hora de los archivos en
ambos sitios as como la informacin almacenada sobre ambos sitios y se crea un informe del estado de cada
archivo. A continuacin se muestra el estado de los archivos.
Sin cambios El archivo no ha cambiado desde la ltima vez que se copi.
Modificado El archivo tiene una marca de hora ms reciente que la marca de hora que se tom cuando se copi el
archivo por ltima vez.
Nuevo Se ha agregado el archivo desde la ltima vez que se copi el sitio.
Eliminado Se ha eliminado el archivo desde la ltima vez que se copi el sitio. Si selecciona Mostrar archivos
eliminados en la herramienta Copiar sitio Web, en la ventana se muestra una entrada para el archivo.

LECCION 23 Servicios Web XML


Introduccin
La programacin en Internet evoluciona rpidamente desde las aplicaciones WEB ms comunes que permiten
a travs de un navegador mostrar interfaces de usuario con el contenido deseado hasta la prxima generacin
de aplicaciones que permiten la integracin de negocios, organizaciones, aplicaciones, servicios, y dispositivos
entre otros. La tecnologa que permite realizar esta integracin, se llama servicios WEB XML inteligentes,
permitiendo acceder a los recursos WEB como servicios de programacin.
El CLR (Common Language Runtime) de la plataforma .NET ofrece un soporte para la creacin y publicacin
de los servicios WEB, empleando una abstraccin de programacin la cual es consiste con los desarrolladores de
ASP.NET o los desarrolladores en otro lenguaje orientado por objetos. El modelo resultante es escalable y
extensible y se basa en estndares de Internet abiertos y pblicos (open source) como HTTP, XML, SOAP,
WSDL. Por lo tanto un servicio WEB puede ser utilizado y accedido (consumido en la terminologa de servicios
WEB) en cualquier plataforma donde Internet se encuentre disponible.
Servicios Web XML empleando ASP.NET

Visual Studio .Net ofrece una plantilla para la creacin de servicios web

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

80

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

ASP.NET ofrece soporte total para la creacin de servicios WEB XML con los archivos .asmx . Un archivo .asmx
es un archivo de texto similar a un archivo .aspx. Estos archivos (.asmx) tambin pueden ser parte de una
aplicacin ASP.NET que incluye archivos .aspx files. Los archivos .asmx, al igual que los archivos .aspx son
direccionables a travs de un URI.
A continuacin se muestra un ejemplo de un archivo .asmx sencillo

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

81

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

using
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.Services;

namespace ejemploSW
{
/// <summary>
/// Summary description for ejemploSW
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// [System.Web.Script.Services.ScriptService]
public class ejemploSW : System.Web.Services.WebService
{
[WebMethod]
public string mensaje()
{
return "Ejemplo SW";
}
}
}

Para poder utilizar los servicios se requiere utilizar el espacio de nombres System.Web.Services. Es necesario
tambin crear una clase derivada de WebService; no es obligatorio heredar de WebService , pero es til para
tener disponibles los mtodos y atributos. Los mtodos que sern accesibles como parte del servicio deben tener
el atributo [WebMethod] antes de especificar la firma del mtodo.
Para colocar este servicio disponible, el archivo .asmx debe ser colocado en un directorio virtual de un dominio y
el nombre del archivo .asmx puede ser invocado como un URL. Ejemplo, si el archivo del servicio web se llama
ejemploSW.asmx y se coloca en el directorio virtual local host, al escribir en el navegador
http:://localhost/ejemploSW1.asmx mostrar como
pgina resultante la informacin conteniendo los
mtodos pblicos de este servicio WEB (aquellos marcados con el atributo WebMethod ), e igualmente indicar
con cuales protocolos (SOAP o HTTP GET) se pueden invocar los mtodos.
Especificando la direccin http://localhost/ejemploSW.asmx?WSDL retornar un documento en formato
WSDL (Web Service Description Language). Este documento WSDL es muy importante y ser utilizado por los
clientes consumiendo el servicio.
Utilizando o Accediendo (consumiendo) servicios WEB

Adicionalmente a la tecnologa ASP.NET del lado del servidor que permite a los desarrolladores crear servicios
WEB XML, la plataforma .NET provee un conjunto de herramientas y clases sofisticadas para consumir los
servicios web XML. Debido a que los servicios web se basan en protocolos pblicos (open) como el SOAP
(Simple Object Access Protocol), esta tecnologa del lado del cliente tambin puede ser utilizada para
consumir servicios WEB no creados en la plataforma ASP.NET.
Dentro del Software Development Kit (SDK), existe una herramienta llamada Web Services Description
Language tool (WSDL.exe) Lenguaje de Descripcin de los Servicios Web). Esta herramienta es utilizada
para crear clases con interfaces (proxy classes) partiendo de una especificacin WSDL).
Por ejemplo, si en una lnea de comandos se coloca:
WSDL http://localhost /ejemploSW.asmx?WSDL
Se crea una clase interfaz llamada ejemploSW.cs.
Desde el punto de vista del cliente, el cdigo lucira como el siguiente.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

82

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
ejemploSW esw = new ejemploSW();
string sdev = esw.mensaje()

LECCION 24 Introduccin a los Servicios Web


Qu es un servicio Web ?
Es un servicio ofrecido a travs de la Web.
En un escenario tpico se servicios Web se siguen los siguientes pasos:

Una aplicacin cliente (de negocio) solicita un requerimiento a un servicio a travs de un URL empleando
el protocolo SOAP sobre HTTP
El servicio recibe el requerimiento, lo procesa y enva la respuesta

Los servicios web pueden verse como los habilitadores building blocks para implementar una arquitectura de
computacin distribuida en Internet. Adicionalmente los servicios Web trabajan bajo estndares abiertos como
XML, de all su gran potencial en las reas de integracin de aplicaciones.
Las aplicaciones son construidas invocando varios servicios web, servidos desde varias fuentes, para trabajar de
una manera colaborativa independientemente de donde residan o de cmo fueron implementados.
Los servicios web exportan su funcionalidad a travs de un protocolo web estndar, por lo general emplean SOAP
(Simple Object Access Protocol). Los servicios web proveen un mecanismo para describir sus interfaces lo
suficientemente detallado y preciso de modo que los clientes pueden comunicarse efectivamente con ellos para
solicitar un servicio.
La descripcin de las interfaces de los servicios Web se realiza a travs de un documento XML llamado
documento WSDL (Web Services Description Language). Adicionalmente, los servicios Web son registrados
de modo que los usuarios puedan fcilmente encontrarlos, esto se realiza a travs de un UDDI Universal
Discovery Description and Integration o empleando ebXML.

Componentes de un servicio web


Un servicio web es un servicio de software, el cual es:

publicado en la web a travs de SOAP

descrito con un documento XML llamado WSDL

registrado en un UDDI

En un nivel de detalle de implementacin, un servicio web contiene un conjunto de:

Especificaciones de puertos (Port Types)

Definiciones de esquemas XML

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

83

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

Definiciones de mensajes

Operaciones

Bindings (enlaces) que proveen los detalles de comunicacin y protocolos.

Servicios Web vs. Aplicaciones Web


Los servicios web son aplicaciones distribuidas, construidos con componentes ejecutndose del lado del servidor
similar a los sitios web comunes. Sin embargo, se diferencian de las aplicaciones web en el hecho de no poseer
interfaces con el usuario GUI y no ser diseadas para mostrar directamente en los navegadores.
Los servicios web es mejor interpretarlos como componentes de software reutilizables. Los servicios web se
encuentran diseados para ser consumidos por otras aplicaciones como:

aplicaciones clientes tradicionales

aplicaciones web

otros servicios web

Arquitectura de los servicios Web


La arquitectura de los servicios web posee tres caractersticas principales:

Una capa de invocacin del servicio (consumer)

Una capa para el manejo del flujo entre el servicio y el proceso

Una capa de funcionalidad del servicio

Beneficios de los servicios Web


El desarrollo de software industrial se encuentra migrando a una arquitectura basada en servicios web debido a
las mltiples ventajas que ofrece sobre la arquitectura tradicional de desarrollo. Una de estas ventajas es que
cualquiera de las capas puede ser cambiada independientemente de las otras y el grupo de desarrollo
responsable de desarrollar cada una de las capas no requiere conocer los detalles de las otras capas.
En los servicios web se separa la funcionalidad del servicio de la funcionalidad del cliente:

Permitiendo compartir y reutilizar la funcionalidad entre varias aplicaciones

Ofreciendo transparencia en las aplicaciones cliente, no requieren conocer cmo fue implementado el
servicio . Por ejemplo Microsoft .Net o Java 2 Enterprise Edition (J2EE) o Enterprise Java Beans (EJB)

Permite la migracin de la funcionalidad del servicio sin necesidad de cambiar o realizar pruebas en las
aplicaciones clientes.

Otro de los beneficios de adoptar una arquitectura basada en servicios web es la portabilidad de la plataforma
tanto en localidad como el tipo de invocacin de los servicios.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

84

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
LECCION 25 Construyendo Servicios Web
Codificando un ejemplo sencillo de Web Service

El desarrollo de un servicio web XML sencillo puede ser realizado en cuestin de minutos empleando cualquier
editor de texto (o en la plataforma de Visual Studio). En esta seccin se muestra un ejemplo del manejo de
operaciones matemticas, donde se tienen los mtodos de sumar, restar, multiplicar y dividir un par de nmeros
del tipo Single
En el archivo .asmx, se define una clase para encapsular la funcionalidad del servicio. Esta clase debe ser
pblica, y puede opcionalmente heredar de la clase base XML Web service. Se recomienda heredar la clase
base para poder reutilizar las propiedades y mtodos all definidos.
public class swMat : System.Web.Services.WebService
{
.
Cada mtodo a ser expuesto (publicado) por el servicio debe ser cualificado con el atributo [WebMethod]
como parte de su signature. Si este atributo no es colocado el mtodo no estar disponible como parte del
servicio. Por lo tanto, en caso de requerirse implementar estrategias de ocultamiento de informacin no se
colocara la cualificacin de [WebMethod].
[WebMethod]
public Single sumar(Single a, Single b)
{
return a + b;
}

A continuacin se muestra el cdigo completo de la clase


using
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.Services;

namespace ejemploSW
{
/// <summary>
/// Summary description for swMat
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class swMat : System.Web.Services.WebService
{
[WebMethod]
public Single sumar(Single a, Single b)
{
return a + b;
}
[WebMethod]
public Single restar(Single a, Single b)
{
return a - b;
}
[WebMethod]
public Single multiplicar(Single a, Single b)

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

85

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
{
return a * b;
}
[WebMethod]
public Single dividir(Single a, Single b)
{
return a / b;
}
}
}

Al igual que los archivos .aspx, los archivos implementando servicios web XML .asmx, son compilados
automticamente por el motor en tiempo de ejecucin de ASP.NET cuando el requerimiento al servicio es realizado
por primera vez. En los siguientes requerimientos, stos son servidos empleando la poltica de cach sde ASP.NET
donde se almacenan objetos de las pginas.

Cuando se solicita desde un navegador un archive .asmx, el motor de ejecucin de ASP.NET retorna una pgina de
ayuda asociada con el servicio Web XML describiendo el contrato del servicio web (los mtodos disponibles)
LECCION 26 Probando un Servicio Web utilizando el Internet Explorer
Para probar un servicio web desde Internet Explorer se coloca el nombre de la pgina .asmx igual que un URL.
http://localhost/swMat.asmx
En el ejemplo al colocarlo aparece la siguiente informacin.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

86

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

Si por ejemplo, se selecciona la operacin sumar, se muestra la siguiente informacin

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

87

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

Al especificar unos valores, por ejemplo 3 y 2 e invocar el mtodo, se muestra

LECCION 27 Creando un cliente consumiendo Servicios Web


En esta leccin se indican los pasos para consumir un servicio WEB en un cliente. Se utiliza el mismo ejemplo
de operaciones matemticas descrito en las lecciones anteriores.
Para poder consumir un servicio web (utilizar las llamadas a los mtodos publicados) se requiere emplear el
utilitario WSDL.exe desde la lnea de comandos. WSDL es la abreviatura de Web Services Description
Language , Lenguaje de Descripcin de Servicios Web. Este utilitario crea una clase con interfaz para poder
ser utilizada (proxy class) con el mismo contrato definido en el archive .asmx (pero solo contiene los mtodos
pblicos, los WebMethod)
Luego, se requiere compilar el cdigo con esta clase incluida.
WSDL.exe soporta una variada de opciones desde la lnea de comandos, sin embargo para crear un proxy solo
una opcin es requerida: el URI para el WSDL.
El archivo WSDL el cual se puede generar desde el navegador con el siguiente comando:

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

88

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
http://localhost/ swmat.asmx?WSDL
Producindose el siguiente document XML
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
targetNamespace="http://tempuri.org/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://tempuri.org/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"><wsdl:types><s:schema
targetNamespace="http://tempuri.org/"
elementFormDefault="qualified"><s:element
name="sumar"><s:complexType><s:sequence><s:element name="a" type="s:float" maxOccurs="1"
minOccurs="1"/><s:element
name="b"
type="s:float"
maxOccurs="1"
minOccurs="1"/></s:sequence></s:complexType></s:element><s:element
name="sumarResponse"><s:complexType><s:sequence><s:element
name="sumarResult"
type="s:float"
maxOccurs="1"
minOccurs="1"/></s:sequence></s:complexType></s:element><s:element
name="restar"><s:complexType><s:sequence><s:element name="a" type="s:float" maxOccurs="1"
minOccurs="1"/><s:element
name="b"
type="s:float"
maxOccurs="1"
minOccurs="1"/></s:sequence></s:complexType></s:element><s:element
name="restarResponse"><s:complexType><s:sequence><s:element
name="restarResult"
type="s:float"
maxOccurs="1"
minOccurs="1"/></s:sequence></s:complexType></s:element><s:element
name="multiplicar"><s:complexType><s:sequence><s:element
name="a"
type="s:float"
maxOccurs="1"
minOccurs="1"/><s:element
name="b"
type="s:float"
maxOccurs="1"
minOccurs="1"/></s:sequence></s:complexType></s:element><s:element
name="multiplicarResponse"><s:complexType><s:sequence><s:element name="multiplicarResult"
type="s:float"
maxOccurs="1"
minOccurs="1"/></s:sequence></s:complexType></s:element><s:element
name="dividir"><s:complexType><s:sequence><s:element name="a" type="s:float" maxOccurs="1"
minOccurs="1"/><s:element
name="b"
type="s:float"
maxOccurs="1"
minOccurs="1"/></s:sequence></s:complexType></s:element><s:element
name="dividirResponse"><s:complexType><s:sequence><s:element
name="dividirResult"
type="s:float"
maxOccurs="1"
minOccurs="1"/></s:sequence></s:complexType></s:element></s:schema></wsdl:types><wsdl:mess
age
name="sumarSoapIn"><wsdl:part
name="parameters"
element="tns:sumar"/></wsdl:message><wsdl:message
name="sumarSoapOut"><wsdl:part
name="parameters"
element="tns:sumarResponse"/></wsdl:message><wsdl:message
name="restarSoapIn"><wsdl:part
name="parameters"
element="tns:restar"/></wsdl:message><wsdl:message
name="restarSoapOut"><wsdl:part
name="parameters"
element="tns:restarResponse"/></wsdl:message><wsdl:message
name="multiplicarSoapIn"><wsdl:part
name="parameters"
element="tns:multiplicar"/></wsdl:message><wsdl:message
name="multiplicarSoapOut"><wsdl:part
name="parameters"
element="tns:multiplicarResponse"/></wsdl:message><wsdl:message
name="dividirSoapIn"><wsdl:part
name="parameters"
element="tns:dividir"/></wsdl:message><wsdl:message
name="dividirSoapOut"><wsdl:part
name="parameters"
element="tns:dividirResponse"/></wsdl:message><wsdl:portType
name="swMatSoap"><wsdl:operation
name="sumar"><wsdl:input
message="tns:sumarSoapIn"/><wsdl:output
message="tns:sumarSoapOut"/></wsdl:operation><wsdl:operation
name="restar"><wsdl:input
message="tns:restarSoapIn"/><wsdl:output
message="tns:restarSoapOut"/></wsdl:operation><wsdl:operation name="multiplicar"><wsdl:input

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

89

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
message="tns:multiplicarSoapIn"/><wsdl:output
message="tns:multiplicarSoapOut"/></wsdl:operation><wsdl:operation name="dividir"><wsdl:input
message="tns:dividirSoapIn"/><wsdl:output
message="tns:dividirSoapOut"/></wsdl:operation></wsdl:portType><wsdl:binding
name="swMatSoap"
type="tns:swMatSoap"><soap:binding
transport="http://schemas.xmlsoap.org/soap/http"/><wsdl:operation
name="sumar"><soap:operation
style="document"
soapAction="http://tempuri.org/sumar"/><wsdl:input><soap:body
use="literal"/></wsdl:input><wsdl:output><soap:body
use="literal"/></wsdl:output></wsdl:operation><wsdl:operation
name="restar"><soap:operation
style="document"
soapAction="http://tempuri.org/restar"/><wsdl:input><soap:body
use="literal"/></wsdl:input><wsdl:output><soap:body
use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="multiplicar"><soap:operation
style="document"
soapAction="http://tempuri.org/multiplicar"/><wsdl:input><soap:body
use="literal"/></wsdl:input><wsdl:output><soap:body
use="literal"/></wsdl:output></wsdl:operation><wsdl:operation
name="dividir"><soap:operation
style="document"
soapAction="http://tempuri.org/dividir"/><wsdl:input><soap:body
use="literal"/></wsdl:input><wsdl:output><soap:body
use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:binding name="swMatSoap12"
type="tns:swMatSoap"><soap12:binding
transport="http://schemas.xmlsoap.org/soap/http"/><wsdl:operation
name="sumar"><soap12:operation
style="document"
soapAction="http://tempuri.org/sumar"/><wsdl:input><soap12:body
use="literal"/></wsdl:input><wsdl:output><soap12:body
use="literal"/></wsdl:output></wsdl:operation><wsdl:operation
name="restar"><soap12:operation
style="document"
soapAction="http://tempuri.org/restar"/><wsdl:input><soap12:body
use="literal"/></wsdl:input><wsdl:output><soap12:body
use="literal"/></wsdl:output></wsdl:operation><wsdl:operation
name="multiplicar"><soap12:operation
style="document"
soapAction="http://tempuri.org/multiplicar"/><wsdl:input><soap12:body
use="literal"/></wsdl:input><wsdl:output><soap12:body
use="literal"/></wsdl:output></wsdl:operation><wsdl:operation
name="dividir"><soap12:operation
style="document"
soapAction="http://tempuri.org/dividir"/><wsdl:input><soap12:body
use="literal"/></wsdl:input><wsdl:output><soap12:body
use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service
name="swMat"><wsdl:port
name="swMatSoap"
binding="tns:swMatSoap"><soap:address
location="http://localhost/swMat.asmx"/></wsdl:port><wsdl:port
name="swMatSoap12"
binding="tns:swMatSoap12"><soap12:address
location="http://localhost/swMat.asmx"/></wsdl:port></wsdl:service></wsdl:definitions>

En este ejemplo, se pasan varias opciones el lenguaje a generar, el espacio de nombres y el directorio donde
colocar el Proxy.
wsdl.exe
/l:CS
/n:swMat
C:\Inetpub\wwwroot\SWOperMat.wsdl

/out:C:\Inetput\wwwroot\swMat.cs

Una vez creada la clase proxy se puede utilizar como cualquier clase en el lenguaje de programacin, permitiendo
la creacin de objetos. Cada llamada a un mtodo realizada con el objeto es interpretada como una salida del URI
del servicio web XML (generalmente como un requerimiento SOAP).

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

90

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
La manera ptima de consumir un servicio web es agregando una referencia web a un proyecto cliente, desde
Visual Studio .Net

Una vez agregada la referencia, puede ser consumida desde el cliente como una clase de .Net

LECCION 28 Seguridad en Servicios Web


Introduccin

La seguridad en servicios Web involucra modificaciones al servicio de mensajes SOAP para ofrecer un
mecanismo de proteccin el cual incluya integridad de los mensajes, confidencialidad en los mensajes y
autenticacin en los mensajes. Estos mecanismos pueden ser empleados para adaptar SOAP a una variedad de
modelos de seguridad y de encriptacin de datos.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

91

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
La seguridad en servicios Web tambin provee de un mecanismo de propsito general para asociar tokens de
seguridad con los mensajes. El manejo de los tokens de seguridad es extensible, i.e. cada aplicacin puede
crear sus propios tokens.
Adicionalmente, la seguridad en servicios Web describe como codificar y decodificar tokens de seguridad en
formato binario y encriptados.
Empleando SOAP como un modelo extensible, las especificaciones de SOAP pueden ser compuestas para lograr una
infraestructura de mensajes poderoso.
La seguridad en servicios Web debe ser codificada en conjunto con otros servicios web y protocolos especficos de
las aplicaciones de modo de utilizar servicios de encriptacin y modelos de seguridad disponibles.
La seguridad en servicios Web es flexible y es diseada para ser utilizada como base para la construccin de una
amplia variedad de modelos de seguridad incluyendo PKI, Kerberos, y SSL. Especficamente, WS-Security ofrece
soporte para manejar mltiples tokens de seguridad, mltiples dominios trust, mltiples formatos de firmas y
mltiples tecnologas de encriptacin.
WS-Security es una especificacin tcnica y la empleada en este manual contempla tres mecanismos
principales de seguridad: propagacin segura de tokens, integridad en los mensajes y confidencialidad en los
mensajes.
Estos mecanismos pueden ser utilizados de manera independiente o integrados unos con otros.
Ejemplo
A continuacin, se muestra un ejemplo de un documento escrito en el protocolo SOAP conteniendo mecanismos de
seguridad implementados

(
(001) <?xml version="1.0" encoding="utf-8"?>
(002) <S:Envelope xmlns:S="http://www.w3.org/2001/12/soap-envelope"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
(003) <S:Header>
(004)

<m:path xmlns:m="http://schemas.xmlsoap.org/rp/">

(005)

<m:action>http://fabrikam123.com/getQuote</m:action>

(006)

<m:to>http://fabrikam123.com/stocks</m:to>

(007)

<m:id>uuid:84b9f5d0-33fb-4a81-b02b-5b760641c1d6</m:id>

(008)

</m:path>

(009)

<wsse:Security
xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext">

(010)
(011)

wsse:UsernameToken Id="MyID">
<wsse:Username>Zoe</wsse:Username>

(012)

</wsse:UsernameToken>

(013)

<ds:Signature>

(014)
(015)

017)

<ds:SignedInfo>
<ds:CanonicalizationMethod
Algorithm=
"http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:Reference URI="#MsgBody">

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

92

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
(018)

<ds:DigestMethod
Algorithm=
"http://www.w3.org/2000/09/xmldsig#sha1"/>

(019)

<ds:DigestValue>LyLsF0Pi4wPU...</ds:DigestValue>

(020)

</ds:Reference>

(021)

</ds:SignedInfo>

(022)

<ds:SignatureValue>DJbchm5gK...</ds:SignatureValue>

(023)

<ds:KeyInfo>

(024)

<wsse:SecurityTokenReference>

(025)

<wsse:Reference URI="#MyID"/>

(026)

</wsse:SecurityTokenReference>

(027)

</ds:KeyInfo>

(028)

</ds:Signature>

(029)

</wsse:Security>

(030)

</S:Header>

(031)

<S:Body Id="MsgBody">

(032)

<tru:StockSymbol xmlns:tru="http://fabrikam123.com/payloads">
QQQ
</tru:StockSymbol>

(033)

</S:Body>

(034) </S:Envelope>

Las primeras dos lneas contienen el SOAP Envelope.


La lnea (003) comienza con los headers asociados con el con el mensaje.
Las lneas (004) a la (008) especifican como enrutar el mensaje.
La lnea (009) comienza con el tag <Security> , en este tag se coloca la informacin de seguridad del elemento a
recibir. Este tag finaliza en la lnea (029).
Las lneas (010) a (012) especifican un token de seguridad asociado con el mensaje. En este caso el nombre del
usuario es identificado con el token <UsernameToken>. En este ejemplo, se asume que el servicio conoce el
password.
Las lneas (013) a (028) especifican una firma digital. Esta firma garantiza la integridad de los elementos firmado.
La firma utiliza la especificacin XML Signature Specification . En este ejemplo, la firma se basa en una clave
generada por el password de los usuarios.
Las lneas (014) a (021) describen la firma digital. La lnea (015) especifica como normalizar los datos que estn
siendo firmados.
Las lneas (017) a (020) seleccionan los elementos que se encuentran firmados.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

93

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
Especficamente la lnea (017) indica que el elemento <S:Body> se encuentra firmado. En este ejemplo
nicamente el cuerpo (body) del mensaje es firmado
La lnea (022) especifica el valor de la firma de los datos normalizados.

Las lneas (023) a (027) provee una ayuda para indicar dnde encontrar el token de seguridad asociado con la
firma.
En las lneas (024) y (025) se especfica que el token puede ser extrado de un URL.
Las lneas (031) a (033) contienen el body del mensaje SOAP.
La descripcin de la especificacin de seguridad de los servicios Web se encuentra fuera del alcance de este
documento. Para mayor informacin se debe ubicar la especificacin de WSSecurity en la informacin disponible de
Microsoft.

LECCION 29 Servicios WEB REST


Una de las novedades de ASP.NET MVC son los templates de proyectos ASP.NET Web API. Estos nuevos tipos
de proyectos permiten crear, de una manera muy simple, aplicaciones cuyo propsito es exponer servicios bajo el
protocolo HTTP utilizando el estilo de arquitectura REST (Representational State Transfer).
REST (Representational State Transfer) es un estilo de arquitectura de software para sistemas hipermedios
distribuidos tales como Web. El trmino fue introducido en la tesis doctoral de Roy Fielding en el ao 2000, quien
es uno de los principales autores de la especificacin de HTTP.
Los servicios web basados en REST intentan trabajar de manera similar al protocolo HTTP, ya que la interfaz de los
mismos ser establecida a partir de un conjunto conocido de operaciones estndar (por ejemplo GET, POST,
PUT,). De esta forma, se abstrae de los protocolos basados en patrones de intercambio de mensajes, como los
utilizados en los servicios web basados en SOA (de seguro estar pensando en el viejo y conocido protocolo de
servicios web SOAP).
REST no es un estndar, sino un estilo de arquitectura que se basa en ciertos estndares, como HTTP, URL, XML,
JSON y MIME entre otros.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

94

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012

LECCION 30 Novedades en ASP.Net 4.5 y Visual Studio 2012: Framework y Tiempo de Ejecucin,
Formularios Web ASP, MVC 4, Pginas Web 2, IIS Express
ASP.NET 4.5 incluye las siguientes nuevas caractersticas:

Compatibilidad con los nuevos tipos de formulario HTML5.


Compatibilidad con los enlazadores de modelos en formularios Web Forms. Permiten enlazar controles de
datos directamente a los mtodos de acceso a datos y convertir automticamente los datos
proporcionados por el usuario en tipos de datos de .NET Framework, y viceversa.

Compatibilidad con JavaScript discreto en scripts de validacin en el cliente.


Control mejorado del script de cliente mediante agrupacin y minificacin para un rendimiento de la
pgina mejorado.

Rutinas integradas de codificacin de la biblioteca AntiXSS (previamente una biblioteca externa) para
protegerse de ataques de script entre sitios.

Compatibilidad con el protocolo de WebSockets.


Compatibilidad con la lectura y escritura de solicitudes y respuestas HTTP de forma asincrnica.
Compatibilidad con mdulos y controladores asincrnicos.
Compatibilidad con la reserva de red de distribucin de contenido (CDN) en el control ScriptManager.

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

95

Manual m032 CURSO VISUAL C#, ASP.NET


DESARROLLO de SITIOS y SERVICIOS WEB 2012
En el siguiente URL se encuentra la informacin de las caractersticas novedosas de ASP.Net

Todos los derechos reservados, prohibida la reproduccin, Instituto Gala de Venezuela

96

Das könnte Ihnen auch gefallen