You are on page 1of 68

ASP.NET 2.

NDICE

1. Programacin con ASP.NET...............................................1


1.1 Aplicaciones Web...........................................................................1
1.2. Fundamentos de ASP.NET..............................................................1
Componentes de una aplicacin ASP.NET............................................................2
Creacin de una aplicacin ASP.NET....................................................................2
Pginas aspx........................................................................................................ 3
Primera aplicacin ASP.NET.................................................................................3
1.3. Programacin basada en eventos...................................................5
Eventos en el formulario Web..............................................................................5
Eventos en controles Web...................................................................................6
Proceso de ejecucin del mtodo de respuesta a eventos...................................7
Asociacin de mtodos de respuesta a eventos..................................................7
1.4. Ciclo de vida de una pgina aspx....................................................8
Estructura de una pgina aspx............................................................................8
Estados de una pgina aspx................................................................................8
1.5. Componentes de la interfaz de usuario.........................................10
Controles Web................................................................................................... 11
Controles HTML................................................................................................. 11
1.6. Objetos ASP................................................................................12
1.7. Acceso a los datos de usuario......................................................12
Captura de datos mediante controles Web........................................................12
Captura de datos mediante controles HTML......................................................13
Captura de datos desde una pgina HTML........................................................13
Datos insertados en la URL................................................................................14
1.8. Transferencia de peticiones y redireccionamiento.........................14
Transferencia de una peticin............................................................................14
Redireccionamiento........................................................................................... 15
1.9. Acceso a informacin sobre el cliente...........................................15
1.10. Configuracin de aplicaciones ASP.NET.......................................16
El archivo Web.config........................................................................................16
Parmetros de configuracin del Web.config.....................................................17

2. Controles Web estndar.................................................19


2.1. Propiedades generales................................................................19
2.2. Controles bsicos........................................................................19
Control Label..................................................................................................... 19
Control TextBox.................................................................................................. 19
Control Button................................................................................................... 20
Control HyperLink.............................................................................................. 20
Control LinkButton............................................................................................. 20
Control RadioButton.......................................................................................... 21
Control CheckBox.............................................................................................. 21
2.3. Controles tipo lista......................................................................21
La clase ListItem................................................................................................ 21
ndice

La clase ListControl............................................................................................ 22
Tipos de controles Lista.....................................................................................22
2.4. Controles de validacin................................................................23
Propiedades comunes........................................................................................ 23
Tipos de controles de validacin........................................................................23
2.5. Controles avanzados....................................................................25
Control Table...................................................................................................... 25
Control FileUpload.............................................................................................. 25
Control Calendar................................................................................................ 26

3. Mantenimiento del estado..............................................27


3.1. Insercin de datos en URL............................................................27
3.2. Variables de tipo ViewState.........................................................27
3.3. Variables de sesin......................................................................28
Concepto de sesin........................................................................................... 28
Objeto Session y variables de sesin.................................................................28
Control de sesiones........................................................................................... 29
3.4. Variables de aplicacin................................................................29
El objeto Application y las variables de aplicacin.............................................29
3.5. Eventos de aplicacin..................................................................29
El archivo Global.asax y los eventos de aplicacin............................................29
3.6. Cookies.......................................................................................30
Creacin de una cookie y envo al cliente..........................................................30
Recuperacin de una cookie..............................................................................31
Eliminacin de una cookie.................................................................................31
Cookies de sesin.............................................................................................. 31

4. Acceso a datos..............................................................32
4.1. Cadena de conexin en Web.config...............................................32
4.2. Vinculacin de controles a datos..................................................33
Vinculacin de un control tipo lista....................................................................33
Control GridView................................................................................................ 34

5. Optimizacin y despliegue de aplicaciones ASP.NET.........35


5.1. Master Pages y Temas.................................................................35
Master Pages..................................................................................................... 35
Temas................................................................................................................ 38
5.2. Utilizacin de cach.....................................................................39
Cacheado de un formulario Web........................................................................39
Control de cach en cdigo...............................................................................39
Personalizacin de cach...................................................................................40
Cacheado de datos............................................................................................ 40
5.3. Despliegue de aplicaciones Web ASP.NET......................................41
Internet Information Services............................................................................42
Despliegue de la aplicacin...............................................................................43
Precompilacin de aplicaciones.........................................................................43

6. Servicios Web................................................................44
6.1. Conceptos bsicos sobre la arquitectura de servicios Web.............44
ndice

Caractersticas de los servicios Web..................................................................44


Estructura interna de un servicio Web...............................................................44
Tipos de servicios Web......................................................................................45
Roles en la arquitectura de servicios Web.........................................................45
Estndares de la arquitectura de servicios Web................................................46
6.2. Creacin de servicios Web con .NET..............................................49
6.3. Aplicaciones clientes de un servicio Web......................................50
Clases proxy...................................................................................................... 51
Creacin de la aplicacin cliente.......................................................................51
Acceso a un servicio Web en modo asncrono...................................................51

ndice

1. PROGRAMACIN CON ASP.NET


1.1 APLICACIONES WEB
Una aplicacin Web es un programa informtico que pueda dar servicio
simultneamente a mltiples usuarios que lo ejecutan a travs de Internet. Este tipo
de aplicaciones se basa en lo que se conoce como una arquitectura de tres capas,
donde los diferentes actores y elementos implicados en la misma se encuentran
distribuidos en tres bloques o capas. Estas tres capas son:

Capa cliente. Es la capa con la que interacta el usuario de la aplicacin.


Realiza principalmente dos funciones. Por un lado se encarga de capturar los
datos de usuario y envirselos a la aplicacin. La segunda funcin es
presentar al usuario los resultados generados por la aplicacin. Est
implementada por el navegador, que se encarga de visualizar las pginas
Web. Una pgina Web es un documento de texto, codificado en HTML, que
contiene informacin para ser visualizada por un navegador. Puede haber
otros clientes Web, como por ejemplo el telfono mvil, etc. Los clientes Web
se comuincan con la capa intermedia mediante el protocolo HTTP. Mediante
este protocolo, el navegador enva a la capa intermedia los datos
suministrados por el usuario y sta, a su vez, lo emplea para enviar al
navegador la informacin que debe presentar en pantalla.
Capa intermedia. Est constituida por la aplicacin en s, que se encuentra
instalada en una mquina independiente denominada servidor, a la que
acceden los clientes a travs de la red. Se pueden utilizar diferentes
tecnologas y lenguajes para la construccin de las aplicaciones, como por
ejemplo, ASP.NET, J2EE o PHP. Las funciones de la capa intermedia consiste
en:
o Recoger los datos enviados desde la capa cliente.
o Procesar la informacin y, en general, implementar la lgica de
aplicacin, incluyendo el acceso a los datos.
o Generar las respuestas para el cliente.
Capa de datos. Tiene como misin el almacenamiento permanente de la
informacin manejada por la aplicacin y la gestin de la seguridad de los
mismos. Para esta se utiliza, en la mayora de los casos, bases de datos
relacionales. Cada una de las tecnologas de desarrollo de capa intermedia
proporciona sus propias libreras para poder acceder a una base de datos
desde la aplicacin. En el caso de ASP.NET, esta librera es ADO.NET.

1.2. FUNDAMENTOS DE ASP.NET


ASP.NET es la parte de .NET Framework orientada a la creacin de aplicaciones de
tres capas. Estas aplicaciones se ejecutan sobre un servidor IIS y se comunican con
la capa cliente utilizando el protocolo HTTP.

Capa Intermedia
IIS
Aplicacin

HTTP

Programacin
ASP.NET

con

ASP.NET
BD

Programacin
ASP.NET

con

Entre las principales caractersticas de ASP.NET se puede citar:

Utilizacin de lenguajes orientados a objetos. Para escribir un programa


ASP.NET podemos utilizar cualquiera de los lenguajes orientados a objetos
soportados por la plataforma .NET, entre ellos C#.
Integracin en Visual Studio .NET.
Programacin basada en eventos.
Separacin de cdigo y presentacin. El cdigo y la presentacin se
encuentran en archivos independientes. Mientras que la informacin de la
interfaz grfica se almacena en un archivo .aspx, el cdigo de respuesta a
los eventos se almacena en un archivo .aspx.cs para aplicaciones escritas en
C#, o .aspx.vb para las que lo estn en Visual Basic.

COMPONENTES DE UNA APLICACIN ASP.NET

Formularios Web. Representan las pginas Web de la aplicacin a travs de


las cuales se producir la interaccin con el usuario.
Controles Web y controles HTML. Son los elementos grficos que permiten
realizar el diseo de la interfaz de usuario.
Objetos ASP. Permiten resolver los diferentes aspectos de la programacin de
aplicaciones Web, como mantenimiento del estado, acceso a datos del
cliente, etc.
Adems de estos elementos, las aplicaciones Web ASP.NET pueden hacer uso de las
libreras de clases proporcionadas por .NET Framework, entre ellas, ADO.NET para el
acceso a la capa de datos.

CREACIN DE UNA APLICACIN ASP.NET


El entorno de desarrollo Visual Studio proporciona un tipo de proyecto especial para
la creacin de aplicaciones ASP.NET, adems de incorporar un componente que
emula el comportamiento del servidor Web. No obstatne, una vez que la aplicacin
se vaya a poner en produccin, la mquina donde vaya a ser desplegada deber
contar con Microsoft Internet Information Server (IIS).
Una vez abierto Visual Studio, nos desplazamos a la opcin de men Archivo y
elegimos Nuevo Sitio Web. En el cuadro de dilogo elegiremos el tipo de plantilla
Sitio Web ASP.NET y mediante el botn Examinar nos desplazaremos a la carpeta
donde queramos guardar los archivos de la aplicacin. Una vez hecho esto, en la
caja donde aparece escrito el nombre de la carpeta elegida debemos escribir, a
continuacin de ste, el nombre que queramos darle a la carpeta de la aplicacin,
precedido de la barra /. La opcin Lenguaje nos permite elegir el lenguaje
utilizado para desarrollar el cdigo de la aplicacin, mientras que a travs de
Ubicacin podemos especificar si la aplicacin se ubicar en una carpeta estndar
del disco (opcin por defecto) o en un directorio virtual del IIS.

Programacin
ASP.NET

con

Las plantillas de tipo Sitio Web ASP.NET proporcionan el esqueleto bsico para
construir una aplicacin ASP.NET, cuyo elemento principal es la pgina aspx.

PGINAS ASPX
Desde un punto de vista global, una aplicacin ASP.NET se compone de una serie de
mdulos interrelacionados conocidos como pginas aspx. Estos mdulos contienen
tanto la parte visual como el cdigo de la aplicacin.
Cada pgina aspx est compuesta por dos partes:

El formulario Web. Es un archivo de texto con extensin .aspx que


contiene la interfaz grfica de la aplicacin. Aparentemente es similar a una
pgina HTML aunque adems de etiquetas y controles HTML, puede
contener controles Web y cdigo de servidor. Visual Studio ofrece dos vistas
de los archivos aspx: una de diseo, para facilitar el diseo de la interfaz
grfica mediante la tcnica de arrastrar y soltar, y otra de cdigo, donde se
puede ver el contenido generado en el archivo, que ser bsicamente HTML.
Adems de las etiquetas HTML que componen la pgina, el archivo .aspx
incluye una instruccin en la primera lnea de cdigo que no es una etiqueta
HTML. Se trata de una directiva y su aspecto es:
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>
Durante el proceso de ejecucin en el servidor, el archivo .aspx es
transformado en una clase. Las directivas son rdenes que se evalan
durante ese proceso de transformacin. En el caso de la directiva Page,
permite definir diferentes aspectos que afectan a la pgina a nivel global.
El archivo de cdigo asociado. En este archivo se incluir la parte del
cdigo de la aplicacin asociado a la pgina aspx que deba ser ejecutado en
el servidor. Dependiendo del lenguaje utilizado para la creacin de la
aplicacin, su extensin ser .aspx.cs para C# o .aspx.vb para Visual Basic.
Aunque el formulario Web puede incluir bloque de cdigo de servidor, la
utilizacin del archivo de cdigo asociado permite separar el diseo de la
interfaz grfica de la lgica de la aplicacin.
Si en el explorador de soluciones pulsamos sobre el signo + que se
encuentra a la izquierda de una pgina, aparecer el archivo de cdigo
asociado. Podemos acceder tambin al contenido de este archivo haciendo
doble clic sobre la vista de diseo del formulario Web.

Programacin
ASP.NET

con

El archivo est formado por una clase que hereda de System.Web.UI.Page


y que representa al propio formulario Web. Esta clase proporciona todo el
soporte bsico para la programacin en el servidor.
Todo el cdigo de servidor asociado a la pgina deber ser incluido en el
interior de mtodos definidos en el interior de esta clase. La mayora de
estos mtodos sern mtodos de respuesta a eventos producidos sobre los
elementos de la interfaz grfica de usuario y que se ejecutarn en el
servidor.

PRIMERA APLICACIN ASP.NET


Inclusin de cdigo de servidor en el formulario Web
Para incluir cdigo de servidor en el archivo aspx debemos desplazarnos hasta la
vista de cdigo del formulario web e incluir el cdigo entre los caracteres <% y %>
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Pgina sin ttulo</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<center>
<% for (int i = 1; i < 7; i++)
{
%>
<h<%=i%>>Bienvenido a ASP.NET</h<%=i%>>
<%
} %>
</center>
</div>
</form>
</body>
</html>
El cdigo de servidor, que aparece delimitado entre los smbolos <% y %>, se
entrelaza con las etiquetas HTML para generar dinmicamente el contenido de la
pgina.
A estos bloques de cdigo se les conoce como scripts de servidor y pueden
aparecer en cualquier parte de la pgina. Alguno de estos bloques de cdigo o
scripts tienen cmo misin insertar el resultado de una expresin o variable del
programa en la pgina de respuesta, por lo que son conocidos como expresiones
ASP y siguen el formato:
<%=expresin%>
La instruccin incluida en una expresin ASP nunca debe finalizar con un ;.
Una vez codificado el programa, debemos ejecutarlo desde un navegador Web. Al
elegir la opcin de men Depurar Iniciar sin depurar o pulsar las teclar Ctrl+F5, el
entorno de desarrollo de Visual Studio realizar la publicacin en el componente
emulador de servidor Web que lleva incorporado y crea una instancia del Navegador
Internet Explorer para realizar la solicitud del archivo Default.aspx.
La inclusin de cdigo de servidor directamente en la vista HTML de la pgina aspx
resulta bastante cmoda y sencilla, sin embargo, es difcilmente mantenible. Para
solucionar este problema, ASP.NET introduce los archivos de cdigo asociado.
Programacin
con
5
ASP.NET

Programacin en el archivo de cdigo asociado


Vamos a crear una segunda versin de la aplicacin anterior, programando dentro
del archivo de cdgio asociado. Para ello, hacemos doble clic en la vista de diseo y
nos desplazaremos hasta el archivo de cdigo asociado a la pgina e incluiremos en
el interior del mtodo Page_Load() de la clase las instrucciones que se indican a
continuacin:
using
using
using
using
using
using
using
using
using

System;
System.Data;
System.Configuration;
System.Web;
System.Web.Security;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.WebControls.WebParts;
System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page


{
protected void Page_Load(object sender, EventArgs e)
{
this.Response.Write("<center>");
for (int i = 1; i < 7; i++)
{
this.Response.Write("<h" + i + ">Bienvenido a mi pgina
ASP.NET</h" + i + ">");
}
this.Response.Write("</center>");
}
}
Para generar dinmicamente las etiquetas HTML no podemos escribirlas
directamente en el cdigo, sino que tenemos que hacer uso del mtodo Write() del
objeto ASP Response para escribir contenido en la pgina de respuesta.
El acceso al objeto Response, se hace a travs de una propiedad del mismo nombre
expuesta por el objeto Page.
En el cdigo HTML recibido por el navegador, las etiquetas HTML generadas por el
mtodo Write() se insertan al principio de la pgina, por lo que no siguen el
estndar XHTML 1.0. Para solucionar este problema hay varias soluciones. Una
consistira en eliminar todas las etiquetas HTML existentes en el archivo .aspx,
generando el contenido completo de la pgina dinmicamente mediante el mtodo
Write() del objeto Response. La otra solucin consiste en la utilizacin de controles
Web, que permiten insertar bloques de texto HTML en cualquier parte de la pgina.

1.3. PROGRAMACIN BASADA EN EVENTOS


La programacin basada en eventos en ASP.NET consiste en implementar mtodos
dentro de la clase Page que sern invocados por el motor de ASP.NET, y por tanto
ejecutados en el servidor, como respuesta a ciertos eventos que se producen tanto
en los controles Web que forman la interfaz grfica de usuario como en el propio
formulario Web.

EVENTOS EN EL FORMULARIO WEB


Durante el proceso de peticin de una pgina aspx se producen una serie de
eventos en el servidor que estn definidos en la clase Page.
Algunos de los eventos ms significativos se producen en el siguiente orden:

Programacin
ASP.NET

con

Init. Se produce al recibir la peticin de la pgina en el servidor durante el


proceso de inicializacin de la misma. Normalmente, este evento se emplea
para realizar alguna tarea previa al procesamiento de la pgina.
Load. Una vez finalizada la inicializacin de la pgina se produce la carga en
memoria de la misma, hecho que es notificado lanzando el evento Load. Este
evento suele utilizarse para tareas de inicializacin de propiedades de los
controles Web incluidos en la pgina aspx.
PreRender. Se produce cuando se va a proceder al envo de la respuesta al
cliente. Tpicamente, se emplea para realizar los ltimos cambios en los
contenidos de la pgina.
Para responder a estos eventos, basta con definir unos mtodos con nombre
especial dentro de la subclase Page del archivo de cdigo asociado. Estos mtodos
deben ser nombrados segn el formato:
Page_Xxx
siendo Xxx el nombre del evento a capturar.
Esto es posible gracias a la utilizacin del atributo AutoEventWiredup de la
directiva Page. Al establecer este atributo al valor true, los eventos de la pgina son
asociados automticamente a los mtodos que utilizan la convencin de nombres
especificada, evitando tener que hacer dicha asociacin desde cdigo a travs de
delegados.
using
using
using
using
using
using
using
using
using

System;
System.Data;
System.Configuration;
System.Web;
System.Web.Security;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.WebControls.WebParts;
System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page


{
protected void Page_Init(object sender, EventArgs e)
{
this.Response.Write("Se produce el evento Init <br/>");
}
protected void Page_Load(object sender, EventArgs e)
{
this.Response.Write("Se produce el evento Load <br/>");
}

protected void Page_PreRender(object sender, EventArgs e)


{
this.Response.Write("Se produce el evento PreRender <br/>");
}

EVENTOS EN CONTROLES WEB


Los controles Web son objetos de servidor que proporcionan una interfaz grfica
basada en HTML para facilitar al cliente la interaccin con la aplicacin.
Algunos de los controles Web, adems de propiedades y mtodos, exponen eventos
que son disparados por el control al realizar el cliente algn tipo de accin sobre el
mismo.
Sin embargo, a pesar de que la accin que desencadena el evento se produce en la
pgina HTML cliente, el evento, y por tanto el mtodo de respuesta al mismo, es
ejecutado en el servidor.
Programacin
ASP.NET

con

Insercin de controles Web en un formulario


Los controles Web se insertan desde la vista de diseo de la pgina. A la izquierda
de la ventana aparece la ventana Cuadro de herramientas, en la que se incluyen
agrupados por categoras todos los controles y componentes que podemos utilizar
en la aplicacin. De momento trabajaremos con los controles Web estndar. Para
aadir uno de estos controles al formulario basta con hacer doble clic sobre el
nombre del mismo en el cuadro de herramientas.

A medida que se van aadiendo controles al formulario stos se van colocando


automticamente de arriba abajo y de izquierda a derecha, alineados a la izquierda
de la pgina. Si, una vez colocado, intentamos mover el control a otra parte del
formulario arrastrndolo con el ratn, veremos que no es posible hacerlo, ya que
para ello, es necesario utilizar en el cdigo HTML de la pgina un atributo en la
etiqueta <body> que no es compatible con el estndar XHTML. Por lo que si
queremos colocar un control Web en una determinada zona de la pgina habr que
recurrir al empleo de hojas de estilo.
Cuando aadimos controles al formulario, Visual Studio genera automticamente el
cdigo que representa a cada control, mediante la siguiente sintaxis:
<asp:TipoControl atributo=valor ></asp:TipoControl>
siendo TipoControl el nombre de la clase a la que pertenece el control y atributo las
propiedades del mismo que se establecen en tiempo de diseo. Aunque no se trata
de etiquetas HTML estndar, cada una de estas instrucciones tiene asociada una o
varias etiquetas HTML y cdigo JavaScript de cliente, de modo que al ser procesada
la pgina en el servidor antes de su envo al cliente, cada instruccin de control
Web es sustituida por su bloque HTML/JavaScript equivalente, recibiendo el
navegador nicamente el contenido compatible con XHTML 1.0.

Establecimiento de propiedades en controles Web


Para definir las propiedades iniciales de un control en tiempo de diseo podemos
utilizar la ventana de propiedades de Visual Studio. Algunas de las propiedades
bsicas que proporcionan todos los controles Web son:

Id. Identificador nico del control Web que se utiliza para acceder a las
propiedades y mtodos del objeto desde cdigo.
Text. Texto que aparece en el interior del control.

Codificacin de los mtodos de respuesta a eventos

Programacin
ASP.NET

con

Para programar un evento, por ejemplo el evento Click de un botn, nos situamos
en la vista de diseo de la pgina y hacemos doble clic sobre el objeto, lo que nos
llevar directamente al mtodo de respuesta al evento por defecto del control.
Al igual que ocurre con el formulario Web, los nombres de los mtodos de respuesta
a evento se ajustan a un formato del tipo NombreControl_Xxx, donde
NombreControl representa el valor de la propiedad id del control y Xxx el nombre
del evento, aunque en el caso de los controles la asociacin entre el evento y su
mtodo de respuesta no se realiza de forma automtica, sino a travs del atributo
AutoEventWiredUp.
Una vez en el interior del mtodo, podemos escribir la siguiente instruccin:
lblMensaje.Text = "<h1>Bienvenido a mi pgina ASP.NET</h1>";
Mediante esta instruccin se asigna a la propiedad Text del control Label un bloque
de texto HTML, lo que provocar que al ser pulsado el botn se visualice en el rea
ocupada por la etiqueta el mensaje asignado con tamao de encabezado de primer
nivel.

PROCESO DE EJECUCIN DEL MTODO DE RESPUESTA A EVENTOS


Los mtodos de respuesta a los eventos de un control se codifican en la subclase
Page que contiene a ste, ejecutndose en el servidor el cdigo incluido en los
mismos.
Cuando se produce el evento Click sobre un botn de tipo submit dentro de un
formulario HTML que apunta a su propio archivo .aspx, el navegador vuelve a
realizar una nueva solicitud de la pgina aspx, operacin que es conocida como
recarga de la pgina. En esta recarga de la pgina y gracias a la informacin
enviada desde campos ocultos del formulario HTML, el objeto Page determina que
debe ejecutarse el mtodo asociado al evento Click, tras lo cual vuelve de nuevo a
construirse la respuesta y a enviarse al cliente.
No todos los eventos de los controles Web provocan una recarga inmediata de la
pgina, ya que esto podra redundar en una prdida de rendimiento importante de
la aplicacin. En estos casos, los eventos que se producen pasan a una especie de
cola, de modo que cuando tenga lugar la recarga de la pgina, la informacin de
esa cola ser enviada en campos ocultos al servidor, donde se determinar qu
eventos se han producido y el orden de ejecucin de los mtodo de respuesta a los
mismos.

ASOCIACIN DE MTODOS DE RESPUESTA A EVENTOS


En el caso de los controles Web, la asociacin de los mtodos de respuesta a los
eventos se realiza a travs de atributos de la instruccin <asp:TipoControl>. El
nombre de estos atributos sigue el formato OnXxx, siendo Xxx el nombre del evento
a gestionar. El valor asignado al atributo ser el nombre del mtodo de respuesta al
evento.
<asp:Button ID="btnSaludar" runat="server" OnClick="btnSaludar_Click"
Text="Mostrar mensaje" />

1.4. CICLO DE VIDA DE UNA PGINA ASPX


Se denomina ciclo de vida de la pgina aspx al proceso de ejecucin que se
produce en el servidor cuando una pgina aspx es solicitada desde el navegador
cliente.

ESTRUCTURA DE UNA PGINA ASPX


Desde la ptica del desarrollador, una pgina aspx est formada por un formulario
Web que contiene la vista de la pgina, adems de algn que otro script de
servidor, y un archivo de cdigo asociado con una clase que hereda de
Programacin
ASP.NET

con

System.Web.UI.Page, donde se codifican los mtodos de respuesta a los distintos


eventos que se producen en el formulario o en los componentes del mismo.
Aunque este esquema es vlido para afrontar el desarrollo de una aplicacin, al
producirse la primera solicitud de una pgina aspx desde un cliente tiene lugar en el
servidor un proceso de generacin dinmica de clases que van a atender las
solicitudes de los clientes y a construir respuestas para ser enviadas a los mismos.
Este proceso es el siguiente:
1. Generacin de una segunda clase parcial. La clase que tneemos en el
archivo de cdigo asociado de la pgina aspx es una clase parcial, lo que
significa que es tan slo una parte de la subclase Page asociada al formulario
Web. Al recibirse la primera peticin de la pgina aspx, se genera
dinmicamente una segunda clase parcial que complementa a la existente
en el archivo de cdigo asociado y que contiene las variables que apuntan a
las instancias de los controles Web del formulario, as como las instrucciones
de vinculacin de los eventos de los controles a los mtodos de respuesta a
los mismos. La informacin para la generacin de esta clase es obtnida del
archivo .aspx. Posteriormente, las dos clases parciales son compiladas en
una nica subclase de Page.
2. Transformacin del archivo .aspx en una clase. Tras la creacin de la
clase anterior, se genera una nueva clase derivada de esta en la que se
incluyen las instrucciones que son generadas a partir del contenido de
marcado existente en el archivo .aspx. El atributo Inherits de la directiva
Page permite indicar de qu clase debe heredar esta nueva clase que se va
a generar dinmicamente. Esta subclase Page final ser la encargada de
atender todas las peticiones que, desde la capa cliente, se realicen de la
pgina aspx. As pues, el archivo aspx no es ms que una abstraccin creada
para facilitar la labor del programador, ya que, en ltima instancia, una
pgina aspx es una clase en la que estn incluidas tanto la lgica de
la aplicacin con los mtodos de respuesta a eventos como las
instrucciones para la generacin del contenido HTML.
3. Compilacin en una dll. Finalmente, esta ltima clase resultante es
compilada y almcenada conjuntamente con su clase base en un ensamblado
de tipo dll que es copiado a un directorio temporal del ASP.NET.
Todo este proceso tiene lugar cuando la pgina es solicitada por primera vez. A
partir de ese momento, las siguientes peticiones sern gestionadas por la subclase
final Page almacenada en la dll temporal. Es por eso que la primera peticin genera
cierto retardo hasta ser atendida con respecto al resto de las peticiones; sin
embargo, el hecho de que estas otras peticiones sean atendidas directamente por
la dll, permite que el proceso de ejecucin de aplicaciones Web en ASP.NET sea muy
rpido.
Si se produce alguna modificacin, bien en el archivo de cdigo asociado o bien en
el aspx, ASP.NET detecta este cambio y en el momento en que se reciba una nueva
peticin desde la capa cliente volver a repetirse el proceso anterior, generndose
una nueva dll que sustituya a la anterior.

ESTADOS DE UNA PGINA ASPX


Las peticiones de una pgina aspx que llegan al servidor son gestionadas por una
dll que contiene una clase Page con el cdigo de la pgina.
Cada vez que en el servidor se recibe una peticin de una pgina aspx, el entorno
de ejecucin de ASP.NET crea una instancia de la clase asociada y la
mantiene en memoria hasta que se produzca el envo de la respuesta al
cliente.
Durante este periodo de vida, la instancia pasa por una serie de estados en los que
se llevan a cabo todas las tareas definidas por el programador para el
procesamiento de la peticin, as como para la construccin de la respuesta que va
a ser enviada al cliente.
Programacin
ASP.NET

con

10

Los estados por los que va pasando la instancia asociada a la pgina aspx conforma
el llamado ciclo de vida de la pgina. Segn el orden en el que tienen lugar estos
estados son:

Comienzo. Este es el primer estado por el que pasa la instancia de Page, al


que llega nada ms crearse. Durante este estado se establecen algunas de
las propiedades ms importantes del objeto, como Request y Response, que
proporcionarn acceso a los datos de la peticin y de la respuesta,
respectivamente. Tambin en este estado el entorno de ejecucin determina
si la peticin es producto o no de una recarga de la pgina, inicializndose el
valor de la propiedad IsPostBack del objeto a true en caso de que as sea o a
false si no lo es. Una recarga es una peticin que se produce debido a un
evento que ha tenido lugar en algn control de la interfaz de usuario.
Inicializacin. En este estado se produce la inicializacin de los
componentes de la pgina. En este estado, los valores de las propiedades de
los controles son restaurados a sus valores iniciales, no estando disponible
an el ViewState del objeto, es decir, los cambios sobre la vista del objeto
realizados desde la pgina cliente. Cuando el objeto Page entra en este
estado, se dipara el evento Init.
Carga. En el caso de recargas de la pgina, el estado de las propiedades de
los controles Web ya ha sido establecido a los valores enviados desde la
capa cliente. Al llegar a este estado se produce el evento Load del objeto
Page.
Gestin de eventos. En el caso de que estemos ante una recarga de la
pgina, es en este estado cuando el objeto Page ejecuta los mtodos de
respuesta a los eventos producidos en los controles Web. Cuando se
producen los eventos en la interfaz del cliente, estos se guardan en una
especie de cola a la espera de que tenga lugar la recarga de la pgina,
hecho que suele producirse al producirse el evento Click sobre el botn
Submit. Esta cola determina el orden en que se ejecutarn los mtodos de
respuesta a eventos.
Rendering. Tras la ejecucin de los mtodos de respuesta a eventos, la
pgina entra en el estado rendering o previo al envo de respuesta, durante
el cual se prepara la respuesta HTML que va a ser enviada al cliente. El
evento PreRender, que se produce al llegar a este estado, permite al
programador realizar algn tipo de modificacin en la respuesta antes de
que sea enviada.
Unload. Una vez que la respuesta ha sido enviada, la pgina entra en el
estado previo a su destruccin. En l, los objetos Response y Request ya han
sido eliminados. El programador puede definir algn tipo de accin que se
deba ejecutar al llegar a este estado a travs del evento Unload.

Programacin
ASP.NET

con

11

Cliente
Default.aspx

Peticin 1

Instancia
Comienzo, inicializacin y carga de la instancia.
Generacin y envo de la respuesta.
Destruccin de la instancia.

Respuesta 1

Instancia

Peticin 2

Comienzo, inicializacin y carga de la instancia.


Ejecucin del mtodo de respuesta al evento click.
Generacin y envo de la respuesta.
Respuesta
2
Destruccin
de la instancia.

Es conveniente hacer hincapi en


funcionamiento de las pginas aspx:

dos

hechos

importantes

relativos

al

Las pginas aspx no mantienen el estado del cliente. Cada vez que se
produce una peticin de la pgina, una instancia de la clase Page es creada
para procesar la peticin y es destruida despus de enviar la respuesta al
cliente, perdindose toda la informacin asociada a la peticin, as como los
valores de los datos miembro existentes en la instancia. Debido a ello,
cuando se vuelve a realizar una nueva peticin de la pgina, la nueva
instancia no puede tener acceso a los datos manejados en la
peticin anterior por otra instancia. ASP.NET proporciona varias
alternativas para poder conservar datos entre peticiones, incluso entre
distintas pginas de la aplicacin.
Los datos manejados por un cliente no pueden ser utilizados por otro. En el
caso de dos peticiones simultneas a la pgina por clientes diferentes,
podra darse el caso de que ambas instancias coexistieran en memoria
durante un tiempo, an as, cada una tiene su propio contexto de ejecucin,
haciendo imposible que desde una de ellas se pudiera acceder a los datos de
la otra. ASP.NET dispone de un objeto que posibilita la comparticin de datos
entre peticiones de distintos clientes.

1.5. COMPONENTES DE LA INTERFAZ DE USUARIO


Una pgina aspx admite dos tipos de controles grficos:

Controles Web.

Programacin
ASP.NET

con

12

Controles HTML.

CONTROLES WEB
Los controles Web son objetos de servidor que proporcionan propiedades y mtodos
para ser usados por el programador en la implementacin de la aplicacin.
En la clase parcial generada dinmicamente durante la primera peticin de la
pgina se incluyen las instrucciones para la instanciacin de controles, de forma
que estos puedan ser referenciados desde el cdigo de la clase Page. Estas
instancias son almacenadas en variables, cuyos nombres se obtienen del valor de la
propiedad id de los controles.
Las clases de controles Web se encuentran en el espacio de nombres
System.Web.UI.WebControls. Todas ellas heredan de la clase WebControl, la cual
proporciona todas las propiedades bsicas del control, entre las que figuran las
relacionadas con el aspecto y estilo.
La clase System.Web.UI.WebControls.WebControl, a su vez, hereda de
System.Web.UI.Control que es la clase base de todos los controles que se pueden
emplear en aplicaciones Web .NET.

CONTROLES HTML
A la hora de disear la interfaz de la aplicacin ASP.NET tambin se pueden incluir
controles HTML estndar dentro de un formulario Web, aunque tienen capacidades
ms limitadas que los controles Web.
Para incluir un control HTML en una pgina aspx seguiremos el mismo
procedimiento de arrastrar y soltar utilizado para los controles Web. Los controles
HTML se encuentran en la seccin HTML del cuadro de herramientas.
En una pgina aspx un control HTML puede funcionar de dos modos:

Como control de cliente


Como control de servidor

Control HTML de cliente


Es es el modo de funcionamiento predeterminado del control, comportndose como
un control HTML clsico dentro de una pgina Web. En este caso, las propiedades
expuestas por el control solamente pueden ser manipuladas desde scripts de
cliente. En la vista HTML es traducido directamente por la etiqueta HTML
correspondiente.
Dado que los controles HTML en este modo de funcionamiento no son objetos de
servidor, no solamente no se puede acceder a sus propiedades desde la clase Page,
sino que tampoco generarn eventos que puedan gestionarse desde la misma.

Control HTML de servidor


En este modo de funcionamiento, el control HTML es tratado como un objeto de
servidor de la misma forma que lo son los controles Web.
Para que un control HTML funcione como un control de servidor, seleccionaremos la
opcin Ejecutar como control de servidor del men contextual del control. Si
entramos en la vista de HTML de la pgina, veremos que el control sigue siendo
representado por su etiqueta HTML estndar, aunque tiene el atributo runat =
server, que es lo que hace que el control HTML funcione como un control de
servidor.
<input id="Text1" type="text" runat="server" />
Al igual que con los controles Web, utilizando la propiedad Id del control HTML de
servidor podremos acceder desde el cdigo de la clase Page a las propiedades del
objeto. Tambin, cuando un control HTML es convertido en control de servidor,
Programacin
ASP.NET

con

13

expone una serie de eventos que pueden ser gestionados desde la clase Page de la
misma forma que se hace con los controles Web.

Programacin
ASP.NET

con

14

Clases de controles HTML de servidor


Los controles HTML de servidor son manejados por el programador a travs de
instancias de clases, referenciadas por variables cuyos nombres se indican en la
propiedad Id de los controles. Estas clases se encuentran en el espacio de nombres
System.Web.UI.HtmlControls y heredan todas ellas de la clase abstracta
HtmlControl que proporciona la funcionalidad bsica de los controles HTML de
servidor.

1.6. OBJETOS ASP


ASP.NET proporciona una serie de clases cuyos mtodos y propiedades permiten
realizar distintas operaciones como el mantenimiento del estado de las
aplicaciones, el acceso a la informacin de la peticin HTTP, la gestin de las
respuestas HTTP, etc.
Estas clases son instanciadas con cada peticin y almacenadas en propiedades del
objeto Page, exponindose al programador como objetos intrnsecos a la aplicacin.
Estos objetos son conocidos como objetos ASP. Algunos de ellos son:

Request. Proporciona acceso a la peticin actual. A travs de las


propiedades de este objeto pueden recuperarse los datos enviados por el
usuario, acceder a los encabezados de la peticin o recuperar las cookies del
cliente.
Response. Est asociado al stream de salida de la pgina, pudindose
utilizar para escribir texto en la respuesta que va a ser enviada al cliente o
para insertar una cookie en la misma.
Session. Permite realizar el control y gestin de las sesiones de los usuarios,
proporcionando adems un medio para el almacenamiento de informacin
accesible en el mbito de sesin para cada usuario.
Application. Permite el almacenamiento de informacin compartida por
todos los usuarios de la aplicacin.
Server. Proporciona una serie de mtodos de utilidades que permiten
realizar tareas tales como la transferencia del control de la peticin entre
pginas, la codificacin/decodificacin de texto HTML o el acceso a
direcciones fsicas a partir de direcciones virtuales.
Context. Proporciona acceso al contexto de ejecucin de la pgina,
incluyendo informacin acerca de la peticin, la respuesta, la sesin y la
aplicacin.

1.7. ACCESO A LOS DATOS DE USUARIO


En ASP.NET los datos que enva el usuario desde una pgina cliente, son recogidos
por una pgina aspx y la forma de acceder a ellos desde el cdigo de la clase Page
depender del mecanismo utilizado en la pgina cliente para su captura.

CAPTURA DE DATOS MEDIANTE CONTROLES WEB


ASP.NET proporciona controles Web para solicitar datos al usuario mediante una
pgina aspx.
Cuando se produce la recarga de la pgina, los datos capturados por estos controles
son enviados a la misma a travs de la peticin HTTP, pudiendo ser recuperados
desde el interior de los metodos de Page a travs de las propiedades expuestas
por los controles.
using
using
using
using

System;
System.Data;
System.Configuration;
System.Web;

Programacin
ASP.NET

con

15

using
using
using
using
using

System.Web.Security;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.WebControls.WebParts;
System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page


{
protected void Button1_Click(object sender, EventArgs e)
{
lblFirma.Text = "Su nombre es <b>" + txtNombre.Text + "</b>";
}
}

CAPTURA DE DATOS MEDIANTE CONTROLES HTML


Una pgina aspx puede contener tambin controles HTML. En el caso de que estos
funcionen como controles de servidor, la forma de recuperar los datos capturados
por ellos ser la misma que en el caso de los controles Web, es decir, utilizando las
propiedades del control desde cdigo de servidor.
Sin embargo, si el control HTML funciona como control de cliente no ser posible
acceder a sus propiedades desde cdigo de servidor. En ese caso, habr que
recurrir al objeto Request de ASP para acceder a los datos capturados por el
control.

Propiedad Form del objeto Request


Todos los controles, tanto Web como HTML, que se incluyen en un formulario Web,
quedan delimitados dentro de una etiqueta <form> a fin de que sus valores sean
enviados a la pgina cuando se produzca la recarga de la misma.
La propiedad Form del objeto Request contiene la coleccin con los datos de los
controles enviados por el formulario en la peticin. Cada uno de estos datos tiene
asociado un nombre, que es el aributo name asignado al control, y un valor de tipo
String, que es el atributo value de este.
As pues, para acceder a cada uno de los valores enviados por los controles desde la
clase Page podemos hacer uso del indizador de la coleccin Form de Request,
utilizando el nombre del control:
this.Request.Form[nombre_control]
Si el nombre indicado no existe o el control no tiene valor, la expresin anterior
devolver null.
using
using
using
using
using
using
using
using
using

System;
System.Data;
System.Configuration;
System.Web;
System.Web.Security;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.WebControls.WebParts;
System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page


{
protected void Button1_Click(object sender, EventArgs e)
{
lblFirma.Text = "Su nombre es <b>" +
this.Request.Form["txtNombre"] + "</b>";
}
}
Programacin
ASP.NET

con

16

CAPTURA DE DATOS DESDE UNA PGINA HTML


Podemos encontrarnos antes situaciones en las que una pgina aspx debe
interactuar con una pgina HTML, ya sea estando ambas en la misma aplicacin o
en aplicaciones diferentes.
En esta interaccin puede darse la situacin de que la pgina HTML tenga que
capturar una serie de datos mediante una serie de controles HTML para enviarlos a
una pgina aspx que los debe procesar. En este caso, desde el punto de vista de la
pgina aspx que va a recibir los datos, estamos ante la misma situacin que en el
escenario anterior, es decir, utilizando la propiedad Form del objeto Request
accederemos a los datos enviados por los controles HTML de l apgina.

Programacin
ASP.NET

con

17

DATOS INSERTADOS EN LA URL


No toda la informacin suministrada a la aplicacin Web desde una pgina cliente
es proporcionada a travs de controles Web/HTML de usuario.
En numerosas ocasiones, la pgina necesita enviar datos a la aplicacin que, sin ser
introducidos de forma explcita por el usuario, sirven para notificar aquella
determinada informacin asociada a este.
Para ello, estos datos deben ser insertados directamente en las URLs de los enlaces
o formularios que apuntan a la pgina aspx que debe recibirlos en la peticin,
siguiendo el formato
nombre_pagina.aspx?nombre_dato=valor&nombre_dato=valor
Los datos as enviados viajan en parejas nombre_dato=valor, donde nombre_dato
es el nombre asignado al dato y valor es el valor asociado al mismo.
Para recoger esta informacin desde la clase Page de la pgina solicitada, volvemos
a recurrir al objeto Request, slo que ahora debemos emplear su propiedad
QueryString en vez de Form. QueryString contiene la coleccin de datos enviados
en la URL de la peticin, disponiendo de un indizador para acceder de forma
individualizada a los valores de los mismos a partir de su nombre:
this.Request.QueryString[nombre_dato]
Al igual que sucede con la coleccin Form, el valor del dato devuelto por
QueryString es una cadena de caracteres.

1.8. TRANSFERENCIA DE PETICIONES Y REDIRECCIONAMIENTO


A veces, es necesario que los datos se recojan en una pgina y los resultados del
procesamiento se muestren en otra. Para conseguir esto, la solucin pasa por
transferir la peticin o hacer un redireccionamiento a otra pgina durante la recarga
de la pgina aspx que recoge los datos.
Aunque transferencia de peticin y redireccionamiento son procesos diferentes,
bsicamente ambos consisten en pasar el control del programa desde la pgina
solicitada a otra diferente, pudiendo ambas pginas realizar parte del
procesamiento de la peticin.

TRANSFERENCIA DE UNA PETICIN


Consiste en transferir la peticin HTTP que llega a una pgina hacia otra, operacin
que se realiza desde los mtodos de respuesta a eventos de la pgina inicial. Una
vez recibida la peticin por parte de la segunda pgina, esta continuar con el
procesamiento de la misma, pudiendo optar por enviar la respuesta al usuario o
devolver el control a la pgina inicial par aque sea ella la encargada de responder.
En ambos casos, los datos enviados por el usuario en la peticin estarn accesibles
tambin para la segunda pgina a travs del objeto Request.
La transferencia de una peticin se realiza a travs del objeto Server de ASP. Para
ello, dicho objeto proporciona los siguientes mtodos:

void Transfer (String url). Transfiere la peticin a la pgina cuya URL


relativa se especifica como argumento. Al completar su ciclo de vida, esta
pgina ser la encargada de generar la respuesta al usuario.
void Execute (String url). Transfiere la peticin a la pgina cuya URL
relativa se especifica como argumento. En este caso, una vez completado su
ciclo de vida, la pgina devolver el control a la pgina aspx inicial para que
sea esta la encargada de generar la respuesta.
En ambos casos, la pgina que recibe la peticin se procesa igual que si hubiera
sido solicitada directamente por el usuario, generndose dinmicamente la .dll con
las clases Page y completndose el ciclo de vida de la pgina.
Programacin
ASP.NET

con

18

Compartir datos entre pginas de una misma peticin


Adems de los datos de usuario, las dos pginas que tratan la peticin durante un
proceso de transferencia pueden necesitar compartir otro tipo de informacin.
Como la instancia de la pgina inicial sigue en memoria cuando se transfiere la
peticin a la segunda, el problema podra resolverse si desde esta se pudiera
obtener una referencia a aquella. Esto es posible gracias al objeto Context de ASP.
Context representa el contexto de ejecucin de una pgina y entre sus propiedades
est Handler, la cual contiene una referencia al objeto Page que recibe inicialmente
la peticin.
public partial class Pagina1 : Page
public partial class Pagina2 :
{
Page
.....
{
int x = 25;
....
this.Number = x;
int p;
Pagina1 pg;
pg =
this.Server.Transfer("Pagina2.aspx")
(Pagina1)this.Context.Handler;
;
p = pg.Number;
.....
.....
}
}

REDIRECCIONAMIENTO
La transferencia de una peticin desde una pgina a otra slo puede realizarse si
ambas pginas pertenecen a la misma aplicacin ASP.NET (Sitio Web). Si la
pgina aspx que recibe la peticin tiene que pasar el control a otra pgina (aspx,
html o asp) de una aplicacin diferente, debera realizar un redireccionamiento.
Un redireccionamiento consiste en redireccionar al usuario a otra URL diferente a la
que este ha solicitado. Esta operacin se lleva a cabo mediante el mtodo
Redirect() el objeto Response de ASP y su formato es el siguiente:
void Redirect (String url)
donde la cadena url representa la URL de la pgina a donde ser redireccionado el
usuario. Si la pgina se encuentra en otra aplicacin la URL debe ser absoluta. En
caso de la pgina redireccionada est en la misma aplicacin la URL ser relativa.
Durante el redireccionamiento la pgina que recibe la peticin inicial realiza la
llamada al mtodo Redirect(). Al ejecutarse esta instruccin, finaliza el proceso de
ejecucin de la Pagina 1 y se enva la respuesta HTTP al cliente de forma inmediata.
En ella se incluye un encabezado que fuerza al navegador a realizar la peticin de la
pagina2.aspx, antes de llegar a procesar el cuerpo de la respuesta.
Este proceso es totalmente transparente para el usuario, que lo nico que aprecia
es que la direccin que aparece en su navegador cambia repentinamente,
accediendo a una URL distinta a la que haba solicitado en un principio.
El proceso de redireccionamiento supone que para que el usuario llegue a la pgina
destino debe realizar dos peticiones HTTP. Esto, adems de suponer un retardo
adicional respecto a la transferencia de peticiones, donde el usuario realizaba una
nica peticin a la aplicacin, implica que tanto los datos que llegan en la
primera peticin a la pgina inicial como los que esta genera no estarn
accesibles para la segunda pgina.
En caso de que las dos pgina involucradas en un redireccionamiento necesiten
compartir datos, estos debern ser insertados en la URL utilizada como argumento
del mtodo Redirect().

1.9. ACCESO A INFORMACIN SOBRE EL CLIENTE


Adems de los datos de usuario, las peticiones HTTP incluyen otro tipo de
informacin en la cabecera que puede resultar de inters para la aplicacin. Entre
Programacin
ASP.NET

con

19

dicha informacin podemos encontrar por ejemplo la direccin IP del cliente que
realiza la solicitud, el nombre y versin del navegador utilizado, los tipos de formato
de respuesta aceptados, etc.
Para acceder a esta informacin desde cdigo, el objeto Request de ASP
proporciona diversas propiedades:

HttpMethod. Contiene una cadena de caracteres que indica el mtodo


utilizado por la peticin; su valor puede ser GET, POST o HEAD.
UserHostAddress. Contiene una cadena de caracteres con la direccin IP
del cliente.
Browser. Contiene un objeto HttpBrowserCapabilities que almacena
informacin sobre las caractersticas del navegador que realiza la peticin.
Entre las propiedades de este objeto, estn:
o Browser. Contiene una cadena de caracteres con el nombre del
navegador.
o Version. Contiene un nmero entero con la versin del navegador.
o Cookies. Valor de tipo bool que indica si el navegador admite o no
cookies.
o JavaScript. Valor de tipo bool que indica si el navegador admite o no
JavaScript.
o Frames. Valor de tipo bool que indica si el navegador admite o no
Frames.
o SupportsCss. Valor de tipo bool que indica si el navegador admite o
no hojas de estilo CSS.
o IsMobileDevice. Valor de tipo bool que indica si se trata de un
micronavegador de dispositivo mvil. Es una propiedad muy til para
aquellas aplicaciones que pretenden servir contenidos, tanto para
equipos de sobremesa como para terminales Wireless.
o PreferredRenderingMime. Contiene una cadena de caracteres con
el tipo de formato de respuesta preferido por el cliente.
ServerVariables. Contiene la coleccin de variables de servidor. Las
variables de servidor son variables de entorno del servidor Web donde se
almacena informacin, tanto acerca del navegador que realiz la peticin
como del propio servidor. Gran parte de la informacin proporcionada por las
propiedades anteriores se encuentra tambin disponible en las variables de
servidor. La coleccin ServerVariables es una coleccin de tipo
NameValueCollection, donde cada elemento almacenado tiene asociado
un nombre o clave que lo identifica. A travs de la propiedad AllKeys de este
tipo de coleccin podemos acceder al array de nombres de todos los
elementos almacenados, lo que facilita el recorrido de la misma a travs de
un bucle foreach y el indizador de la coleccin:
foreach(String s in this.Request.ServerVariables.AllKeys)
{
//se accedera al element mediante this.Request.ServerVariables[s]
}

1.10. CONFIGURACIN DE APLICACIONES ASP.NET


Adems de clases y pginas aspx, una aplicacin ASP.NET incluye un archivo de
configuracin en el que se definen distintos parmetros relativos a la misma y que
el servidor de aplicaciones utiliza durante su ejecucin.

EL ARCHIVO WEB.CONFIG
Este archivo de configuracin consiste en un documento XML en el que, mediante
una serie de etiquetas predefinidas, se establecen los valores de los distintos
parmetros configurables de la aplicacin. El nombre del archivo es Web.config y
debe estar situado en el directorio raz de la aplicacin Web.
Programacin
ASP.NET

con

20

Las aplicaciones de sitio web creadas con Visual Studio 2005 no incluyen de forma
predeterminada el archivo Web.config. Para aadirlo, no situaremos sobre el
nombre del proyecto en el explorador de soluciones y elegiremos Agregar nuevo
elemento en el men contextual; despus, en el cuadro de dilogo,
seleccionaremos la plantilla Archivo de configuracin Web que tiene como nombre
predeterminado Web.config.
En caso de que no se aada un archivo Web.config a una aplicacin ASP.NET, esta
tomar los valores de los parmetros establecidos de forma predeterminada para
todas las aplicaciones ASP.NET, los cuales se encuentran dfinidos en el archivo
machine.config. Este archivo se encuentra en el directorio de instalacin del .NET
Framework y contiene la definicin global de los parmetros para todas las
aplicaciones .NET (no solamente ASP.NET) instaladas en la mquina.

PARMETROS DE CONFIGURACIN DEL WEB.CONFIG


Vamos a comentar algunos de los parmetros dentro del elemento <system.web>.

Modo de compilacin
Cuando se compila una aplicacin ASP.NET con Visual Studio.NET, se debe
especificar si la ejecucin de esta admitir o no depuracin a travs del entorno de
desarrollo. Esta opcin se establece a travs del atributo debug del elemento
<compilation>, pudiendo ser su valor true (se admite depuracin) o false (no se
admite depuracin). De forma predeterminada el valor establecido es false:
<compilation debug="false" />
Si se asigna el valor true a este atributo, podremos aplicar todas las tcnicas de
depuracin proporcionadas por Visual Studio.NET.
Sin embargo, la inclusin de lo smbolos e instrucciones de depuracin en el
programa compilado redunda en un peor rendimiento de la aplicacin, por lo que
slo resulta conveniente trabajar con el modo de depuracin activado durante la
fase de desarrollo. Antes de proceder a la distribucin de aplicaciones, se deber
desactivar el modo de depuracin.

Parmetros de sesin
Se trata del elemento <sessionState>. A travs del mismo podemos configurar
diferentes aspectos sobre las sesiones, que se aplicarn de forma global a todos los
usuarios de la aplicacin.
De todos estos aspectos a configurar, nicamente hablaremos del periodo mximo
de inactividad (timeout) que define el intervalo de tiempo que como mximo
una sesin puede permanecer inactiva antes de que sea invalidada por el
servidor. Su valor viene definido en minutos y se establece a travs del atributo
timeout de la etiqueta.
<sessionState timeout="20" />
El elemento <sessionState> no aparece de fora predeterminada en el archivo
Web.config, debiendo ser aadido explcitamente de forma manual, siempre dentro
del elemento <system.web>.

Pginas de error personalizadas


ASP.NET proporciona unas pginas de error predefinidas para los distintos errores
que el protocolo HTTP pueda generar durante el acceso a una aplicacin Web.
A travs del archivo de configuracin Web.config es posible redireccionar al usuario
a pginas de error personalizadas para cada uno de los posibles errores HTTP que
se puedan producir.
Para ello se utiliza el elemento <customErrors>, en cuyo interior se indicar a
travs de una serie de subelementos <error> la direccin de la pgina html o aspx
asocada a cada error.
Programacin
ASP.NET

con

21

<customErrors mode="RemoteOnly"
defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
El elemento <customErrors> dispone adems de los siguientes atributos:

mode. Indica el modo en que sern activados los errores personalizados.


Sus posibles valores son:
o On. Los errores personalizados estn activados.
o Of. Los errores personalizados estn desactivados.
o RemoteOnly. Los errores personalizados estn activados solamente
para clientes que acceden remotamente, no en modo local.
defaultRedirect. Indica la pgina a la que ser redireccionado el usuario
cuando se produzca un error HTTP para el que no se ha definido una pgina
especfica.
El elemento <customErrors> aparece comentado de forma predeterminada en el
archivo Web.config, por tanto, bastar con quitar los comentarios para poder
utilizarlo.

Parmetros de aplicacin personalizados


Adems de los parmetros de configuracin de aplicaciones definidos por el .NET
Framework, es posible crear parmetros propios para la aplicacin que
permitan personalizar esta durante la fase de despliegue, utilizando estos
parmetros para suministrar valores a la aplicacin desde el exterior sin tener que
alterar el cdigo de la misma.

Definicin de parmetros personalizados


Para suministrar parmetros personalizados a travs de Web.config podemos hacer
uso de los elementos <appSettings> y <connectionString>. Ambos debern ser
incluidos directamente en el interior del elemento raz <configuration>, fuera de
la seccin <system.web>.
El elemento <appSettings> incluir tantos elementos <add> como parmetros
personalizados se vayan a definir. Cada uno de estos elementos contar con los
siguientes atributos:

key. Nombre del parmetro.


value. Valor establecido del parmetro.

<configuration>
<appSettings>
<add key="url" value="http://www.asp.org/listados"/>
</appSettings>
<connectionStrings/>
<system.web>
...
</system.web>
</configuration>

Recuperacin del valor de un parmetro personalizado


Para recuperar desde na pgina ASP.NET el valor establecido en la seccin
<appSettings> en una parmetro personalizado, debemos hacer uso de la clase
ConfigurationManager del espacio de nombres System.Configuration.
Esta clase dispone de una propiedad esttica llamada AppSettings que contiene la
coleccin de cadenas de caracteres que representan todos los valores de los
parmetros personalizados definidos en la seccin <appSettings>. Se trata de una
coleccin basada en claves, donde el valor de cada clave es el nombre del
Programacin
ASP.NET

con

22

parmetro. As pues, utilizando el nombre del parmetro en el indizador podramos


recuperar su valor.
String dir = ConfigurationManager.AppSettings["url"];

Programacin
ASP.NET

con

23

2. CONTROLES WEB ESTNDAR


2.1. PROPIEDADES GENERALES
Las siguientes propiedades estn presentes en la mayora de los controles Web,
aparte de la propiedad Id:

Text. Texto que aparece en el interior del control. El valor de esta propiedad
es de tipo String y en la mayora de los controles puede ser modificada
desde cdigo.
BackColor. Contiene el color de fondo del rea del control. Aunque a travs
de la ventana de propiedades puede establecerse de forma grfica, su valor
es un objeto de tipo System.Graphics.Color.
ForeColor. Color de texto del control.
AutoPostBack. Indica si los eventos generados en el control provocarn
una recarga automtica de la pgina (true), o por el contrario sern puestos
en cola de espera hasta que dicha recarga llegue a producirse (false); por
defecto su valor es false. Los nicos controles con eventos que no disponen
de esta propiedad son Button y LinkButton, dado que obligatoriamente
sus eventos Click y Command provocarn siempre la recarga de la
pgina.
CssClass. Contiene el nombre de la clase de estilo CSS que define el
aspecto del control. Dicha clase de estilo estar definida en la vista HTML de
la pgina o en un archivo .css con el que esta est vinculado.
Enabled. Permite habilitar/inhabilitar el uso del control por parte del usuario.
Height. Alto en pxeles del control.
Width. Ancho en pxeles del control.
TextAlign. Alineacin del texto contenido en el control.
ToolTip. Permite establecer un texto de ayuda para el control. Este texto
aparecer durante un corto periodo de tiempo en la parte inferior del control,
cuando el usuario site el puntero del ratn sobre el mismo.
Visible. Esta propiedad permite visualizar/ocultar el control durante la
ejecucin de la aplicacin

2.2. CONTROLES BSICOS


Consideramos controles bsicos a aquellos que aparecen de forma ms habitual en
un pgina Web y que tienen una equivalencia directa con controles o etiquetas
HTML estndares.

CONTROL LABEL
Permite presentar en el interior de la pgina un texto informativo al usuario, que
puede ser establecido o modificado desde el cdigo de servidor.
Durante la generacin de la respuesta para el cliente en el servidor, este objeto es
sustituido por una etiqueta HTML de tipo <span>.

CONTROL TEXTBOX
Se utiliza para capturar datos de usuario. Estos datos son recogidos a travs de la
propiedad Text como cadena de texto. Este control Web es equivalente a los
controles HTML de tipo Text, TextArea y Password, segn el modo de
funcionamiento establecido.

Propiedades
Controles Web estndar

24

Este control dispone de las siguientes propiedades especficas:

TextMode. Permite especificar el modo de funcionamiento del control.


Dependiendo de los tres posibles valores que puede tener esta propiedad,
podemos hacer que funcin como una caja de texto de una nica lnea,
multilnea o como una caja de texto con caracteres ocultos.
MaxLength. Nmero mximo de caracteres admitidos por el control.
ReadOnly. Si su valor es true el usuario podr desplazar el cursor por el
interior del control pero no podr modificar el contenido del mismo.

Evento TextChanged
Es posible programar cdigo como respuesta a sucesos en el control TextBox,
mediante el evento TextChanged, que se produce al desplazar el foco a otro control
slo si el usuario ha modificado previamente su contenido. A no ser que se
establezca la propiedad AutoPostBack al valor true, este evento no provoca la
recarga inmediata de la pgina por lo que el cdigo que se programe en el mtodo
de respuesta no se ejecutar hasta que dicha recarga tenga lugar.

CONTROL BUTTON
Se emplea normalmente para provocar la recarga de la pgina mediante el evento
Click. Este control equivale al botn submit de HTML.

Propiedades
Entre las propiedades especficas ms importantes de Button, estn:

AccessKey. Permite activar el control mediante el teclado utilizando la


combinacin de teclas [Alt] + el carcter especificado en esta propiedad.
OnClientScript. Contiene una cadena de caracteres que representa el script
de cliente que ser ejecutado antes de producirse la recarga de la pgina, lo
que permite realizar algn tipo de accin en el cliente antes de ejecutar el
cdigo del servidor.
PostBackUrl. Al producirse el evento Click en el botn se produce una
nueva llamada a la pgina, ejecutndose en el servidor el cdigo de los
mtodos de respuesta a los eventos programados en la clase Page. Sin
embargo, a partir de la versin .NET Framework 2.0 este modo de
funcionamiento puede ser alterado, ya que si queremos lanzar la peticin a
otra pgina diferente al producirse la pulsacin del botn, podemos hacerlo
indicando en esta propiedad la URL de la pgina que debe ser solicitada.

CONTROL HYPERLINK
Representa un enlace HTML. Su nic a propiedad destacable es NavigateUrl, en la
que se especificar la URL de la pgina solicitada al ser activado el enlace.
HyperLink no genera ningn tipo de evento en el servidor.

CONTROL LINKBUTTON
Tiene la misma funcin que el control Button. Tan slo se diferencian en el aspecto,
ya que LinkButton se presenta en la pgina como un enlace HTML; adems, en este
control suele ser ms habitual programar el evento Command en vez del evento
Click.

Propiedades
Adems de las del control Button, podemos utilizar las siguientes propiedades:

CommandArgument. Permite suministrar una cadena de texto al mtodo


de respuesta al evento Command.

Controles Web estndar

25

CommandName. Su uso es similar al de la propiedad anterior, aunque en


este caso se emplea ms como una especie de alias asociado al control.

Evento Command
Se produce al activar el enlace y provoca una recarga automtica de la pgina.
Los mtodos de respuesta a este evento estn representados por el delegado
CommandEventHandler, que define el siguiente formato para los mtodos de
respuesta:
void Metodo_respuesta (Object sender, CommandEventArgs e) { }
donde CommandEventArgs proporciona dos propiedades que permiten acceder a
informacin adicional suministrada por el control:

CommandArgument.
Recupera
el
valor
de
la
propiedad
CommandArgument del control.
CommandName. Recupera el valor de l apropiedad CommandName del
control.

CONTROL RADIOBUTTON
Se utilizan para presentar al usuario una serie de opciones excluyentes entre s,
entre las que se podr elegir una de ellas. Equivale al control Radio de HTML.

Propiedades
Sus dos propiedades ms importantes son:

Checked. Se utiliza para conocer y establecer el estado del control. Si su


valor es true el control estar activado, mientras que si es false estar
desactivado.
GroupName. Nombre del grupo al que est asociado el control. Todos los
controles que tengan el mismo nombre de grupo sern excluyentes entre s,
lo que implica que slo puede haber uno activado en cada momento. El valor
por defecto de esta propiedad es cadena vaca; esto significa que aquellos
controles para los que no se establezca esta propiedad no sern
excluyentes entre s.

CONTROL CHECKBOX
A diferencia de RadioButton, las opciones presentadas con los controles CheckBox
no son excluyentes entre s, pudiendo permanecer activados uno, ninguno o varios
de los controles existentes.

Propiedades
La nica propiedad a destacar es Checked, que tiene el mismo significado que en el
control RadioButton.

Evento CheckedChanged
Este evento se produce tanto en controles CheckBox como RadioButton, cada vez
que cambia el estado de la propiedad Checked. De forma predeterminada este
evento no genera recarga de la pgina.

2.3. CONTROLES TIPO LISTA


ASP.NET incluye varios controles para la manipulacin de listas de objetos. Todo
ellos heredan de la clase ListControl que proporciona la funcionalidad bsica de la
listas.

Controles Web estndar

26

LA CLASE LISTITEM
Independientemente del tipo que se trate, los elementos almacenados en una lista
son objetos de tipo ListItem.
Cada objeto ListItem tiene asociados dos valores, que pueden ser recuperados o
modificados con las siguientes propiedades:

Text. Representa la cadena de texto que el objeto ListItem presentar en la


lista.
Value. Consiste en una cadena de texto que se asocia al objeto y que puede
ser utilizado como valor identificativo del mismo.
Cuando se crea un objeto ListItem puede utilizarse el siguiente constructor para
asociar directamente al objeto las cadenas Text y Value:
ListItem (String text, String value)
Adems de las anteriores, la clase ListItem dispone tambin de la propiedad
Selected de tipo bool que permite conocer si el elemento correspondiente se
encuentra o no seleccionado en la lista.

LA CLASE LISTCONTROL
Todos los controles de tipo lista heredan de esta clase que contiene las principales
propiedades de listas.

Propiedades

Items. Esta propiedad proporciona acceso a la coleccin de objetos ListItem


almacenados en el control. Se trata de una coleccin de tipo
ListItemCollection yque permiten manipular el contenido de la lista. Entre
sus mtodos y propiedades destacan:
o Count. Propiedad que contiene el nmero de elementos almacenados
en la coleccin ListItemCollection.
o Item[int ndice]. Propiedad de tipo indizador que permite recuperar
el objeto ListItem que ocupa la posicin especificada.
o Add(ListItem item). Mtodo que permite aadir un nuevo elemento
a la lista.
o RemoveAt(int ndice). Mtodo que elimina de la lista el elemento
que ocupa la posicin especificada.
o Clear(). Mtodo que elimina todos los elementos de la lista.
SelectedIndex. Propiedad que contiene la posicin del elemento
seleccionado en la lista.
SelectedItem. Propiedad que contiene el objeto ListItem seleccionado en la
lista.
SelectedValue. Propiedad que contiene el valor de la propiedad Value del
elemento seleccionado en la lista. En el caso de que la lista admita seleccin
mltiple, tanto esta como las dos anteriores propiedades contendrn la
informacin relativa al elemento con ndice ms bajo de los
seleccionados.

Evento SelectedIndexChanged
Adems de las propiedades anteriores los objetos ListControl disponen del evento
SelectedIndexChanged, que se produce cada vez que un nuevo elemento es
seleccionado en el interior de la lista. De forma predeterminada, este evento no
genera recarga automtica de la pgina.

TIPOS DE CONTROLES LISTA


ASP.NET 2.0 proporciona cinco controles Web de tipo lista, que son:

Controles Web estndar

27

ListBox. Lista clsica de seleccin. Dispone de la propiedad SelectionMode


para configurar el modo de seleccin de la lista, que puede ser simple o
mltiple. A la hora de presentarlo en la pgina HTML este objeto es generado
mediante el control HTML de tipo <SELECT>.
DropDownList. Lista desplegable de seleccin simple. No dispone de
propiedades adicionales destacables.
RadioButtonList. Representa un control lista que encapsula la
funcionalidad de un grupo de controles RadioButton. Adems de las
propiedades de ListControl, la clase RadioButtonList aade las siguientes:
o RepeatDirection. Indica la direccin en la que sern colocados los
elementos de la lista. Solo tiene dos posibles valores: horizontal o
vertical.
o RepeatColumns. Nmero de columnas utilizadas para la
presentacin de los elementos de la lista. De forma predeterminada
se presentarn en una nica columna.
CheckBoxList. Representa un control de tipo lista que encapsula la
funcionalidad de un conjunto de controles de tipo CheckBox. Tambin
dispone de las propiedades RepeatDirection y RepeatColumns.
BulletedList. Representa una lista de elementos ListItem que son
presentados en la lista con un nmero o vieta asociado. Adems de las
propiedades bsicas, este control aade las siguientes:
o BulletStyle. Indica el tipo de numeracin o vieta que llevar
asociado caa elemento.
o BulletImageUrl. La vieta puede ser una imagen almacenada en un
archivo. Esta propiedad contiene la direccin URL de ese archivo.
o FirstBulletNumber. Cuando se trata de una marca de numeracin
en vez de una vieta esta propiedad indica el primer valor utilizado
en la numeracin.

2.4. CONTROLES DE VALIDACIN


Los controles de validacin incluyen en las pginas los scripts de cliente necesarios
para realizar las diferentes comprobaciones de los datos, evitando que se produzca
la recarga de la pgina si se incumple alguno de los criterios de validacin. La
ejecucin de estos scripts de cliente tiene lugar de forma automtica
cuando se intenta realizar la recarga de la pgina.
Si se desea realizar la validacin en servidor en vez de en el cliente, estos controles
pueden ser configurados tambin para ello.
ASP.NET proporciona varios controles de validacin, cada uno especializado en la
comprobacin de un determinado criterio.

PROPIEDADES COMUNES
Todos los controles de validacin heredan de la clase BaseValidator. Esta
proporciona una serie de propiedades que son comunes a todo este tipo de
controles; entre ellas destacan:

ControlToValidate. Todo control de validacin tiene que estar asociado al


control que tiene que validar. Este debe ser especificado en tiempo de
diseo en esta propiedad.
ErrorMessage. Representa el mensaje de error que debe aparecer cuando
se incumple el criterio de validacin asociado al control. Este mensaje puede
aparecer en el propio control de validacin, en un cuadro de dilogo o en
algn otro lugar de la interfaz grfica, segn se especifique en un objeto
llamado ValidationSummary.
EnabledClientScript. Esta propiedad permite activar/desactivar la
utilizacin de scripts de cliente para la validacin. Si su valor es false, la
validacin se realizar en el servidor, no en el cliente.

Controles Web estndar

28

IsValid. Se utiliza cuando se realiza la validacin en el servidor para conocer


si el control asociado cumple (true) o no (false) los criterios de validacin. La
clase Page tambin dispone de esta propiedad y su valor ser true cuando
todos los controles de validacin tengan su propiedad IsValid a true,
mientras que ser false si alguno de ellos la tiene a false.

TIPOS DE CONTROLES DE VALIDACIN


Los controles de validacin se encuentran en el cuadro de herramientas de Visual
Studio.NET dentro de la pestaa Validation.
La inclusin de estos controles en el formulario se realiza igual que en el caso de los
controles estndar. Normalmente, suelen colocarse al lado del control que tienen
que validar.

Control RequiredFieldValidator
Se utiliza para forzar la introduccin de un valor en un determinado control de la
interfaz de usuario, conviertiendo as al control en un campo requerido.
Cuando no se necesite comprobar que el contenido del control sea diferente a un
valor dado, podemos utilizar la propiedad InitialValue, de modo que si el contenido
del campo a validar tiene un valor distinto al indicado en esta propiedad, el control
habr incumplido el criterio de validacin.

Control RangeValidator
Permite comprobar que el contenido de un campo se encuentra dentro de un rango
de valores establecido; de no ser as el control asociado incumplir los criterios de
validacin y no se producir el envo de los datos al servidor.
Adems de las comunes al resto de los controles de validacin, RangeValidator
dispone de las siguientes propiedades especficas:

MaximumValue. Valor mximo que puede alcanzar el control para que se


considere vlido.
MinimumValue. Valor mnimo que puede alcanzar el control para que se
considere vlido.
Type. Tipo de datos de los valores que se van a comparar. Estos valores
pueden ser Integer, String, Double, Date y Currency.

Control CompareValidator
Mediante este control forzamos a que el contenido de un determinado campo sea
igual al de otro campo existente o a otro valor dado. Entre las propiedades
especficas de este control estn:

ControlToCompare. Control con cuyo valor debe ser comparado el del


control a validar.
Operador. Operador de comparacin utilizado. Esta propiedad permite que
la comparacin se pueda basar no slo en la igualdad, sino tambin en otros
criterios, incluso en la igualdad de tipos (DataTypeCheck).
Type. Tipo de datos de los valores comparados.
ValueToCompare. Valor con el que se quiere comparar el control. Se
configura esta propiedad, en vez de ControlToCompare, cuando el campo
tiene que ser comparado con un valor dado y no con otro campo.

Control RegularExpressionValidator
Con este control podemos obligar a que el contenido de un campo se ajuste a una
determinada mscara o formato, como, por ejemplo, un nmero de telfono, un
distrito postal o una direccin de correo electrnico.

Controles Web estndar

29

La propiedad especfica ms importante de RegularExpressionValidator es


ValidationExpression, en la cual se establece en tiempo de de diseo el formato que
deben tener los datos introducidos en el control asociado.

Control CustomValidator
Permite establecer criterios personalizados de validacin para aquellos casos donde
los dems controles de validacin no cubran los requerimientos necesitados.
La propiedad especfica ms importante de este control es ClientValidationFunction.
En ella se debe indicar el nombre de la funcin de JavaScript que debe ser
ejecutada para validar el control asociado. Esta funcin debera estar definida en la
vista HTML de la pgina y tendr el siguiente formato:
function Nombre_funcion(source, args)
{
// cdigo de validacin
}
donde, source representa el objeto HTML (control) que se tiene que validar y args es
un objeto que permite controlar el estado de la validacin. El objeto args
proporciona dos propiedades importantes:

Value. Valor que se debe validar. Representa el contenido del argumento


Value del control HTML correspondiente.
IsValid. Se utiliza para establecer el resultado de la validacin, asignndole
true cuando el control a evaluar cumpla los criterios de validacin y false
cuando no los cumpla. El valor que se asigne a esta propiedad ser
almacenado en la propiedad IsValid del control de validacin al finalizar la
ejecucin de la funcin.

function comprobar (source, args)


{
if (args.Value.length > 4)
args.IsValid = true;
else
args.IsValid = false;
}

Control ValidationSummary
Este no es control de validacin propiamente dicho. Su misin es definir la forma en
la que se van a mostrar los mensajes de error de los controles de validacin
existentes en la pgina.
Este control dispone de las siguientes propiedades:

ShowMessageBox. Indica si los mensajes de error sern mostrados o no en


un cuadro de dilogo. Si su valor es true, al intentar realizar el submit de la
pgina se presentar un cuadro de dilogo con los mensajes de error
correspondientes a los controles de validacin, cuyos criterios no hayan sido
cumplidos por los controles asociados.
ShowSummary. Indica si los mensajes de error se visualizarn o no en el
control ValidationSummary. Esta propiedad es compatible con la anterior,
pudindose mostrar los mensajes anto en un cuadro de dilogo como en
dicho control.
DisplayMode. Permite definir la forma en que sern mostrados los
mensajes de error en el control ValidationSummary. Sus valores pueden ser
en forma de lista simple, en forma de lista con vietas o como un nico
prrafo.

2.5. CONTROLES AVANZADOS

Controles Web estndar

30

Se considerar controles avanzados los que permiten realizar tareas complejas.

CONTROL TABLE
Permite generar tablas HTML desde cdigo sin necesidad de conocer la sintaxis
HTML.
Un control Table est formado por una coleccin de objetos TableRow a los que se
accede a travs de la propiedad Rows del objeto. Cada objeto TableRow representa
una fila de la tabla que, a su vez, est formada por objetos TableCell que
representan a cada una de las celdas de la fila. El acceso a la coleccin TableCell de
cada fila se realiza a travs de la propiedad Cols de la clase TableRow. Cada objeto
TableCell dispone de una propiedad Text que da acceso al contenido de la celda.
protected void Page_Load(object sender, EventArgs e)
{
for (int i = 1; i <= 10; i++)
{
TableRow tr = new TableRow();
for (int k = 1; k <= 10; k++)
{
TableCell tc = new TableCell();
tc.Text = (i * k).ToString();
tr.Cells.Add(tc);
}
tbmultiplica.Rows.Add(tr);
}
}
Adems, el objeto Table dispone de otras propiedades que permiten configurar los
distintos atributos de la tabla HTML:

HorizontalAlign. Orientacin horizontal de la tabla. Puede ser centrada,


izquierda o derecha.
BorderWidth. Ancho del borde de la tabla. Si no se establece ningn valor a
esta propiedad, la tabla aparecer sin borde.
CellSpacing. Espacio entre celdas en pxeles.
CellPadding. Espacio entre el borde de las celdas y su contenido en pxeles.

CONTROL FILEUPLOAD
Permite el envo de archivos al servidor desde una pgina HTML cliente. Este control
incorpora ya cierta funcionalidad por defecto, por ejemplo, al pulsar el botn
Examinar se abrir el cuadro de dilogo de abrir archivo en el cliente.
Cuando un usuario selecciona un fichero y se produce el submit de la pgina, el
fichero seleccionado es enviado como parte de la peticin. El control FileUpload
proporciona las propiedades necesarias para recuperar y manipular el fichero en el
servidor.
Las propiedades ms importantes de este control son:

HasFile. Indica si ha sido recibido o no un fichero en la peticin.


FileName. Nombre del fichero recibido. No incluye el path.
PostedFile. Devuelve el fichero recibido como un objeto HttpPostedFile.
Por su parte, la clase HttpPostedFile dispone del mtodo SaveAs(String ruta)
que permite almacenar en el servidor el fichero recibido en la ruta
especificada por el parmetro.

if (fdata.HasFile)
{
HttpPostedFile hpf = fdata.PostedFile;
String nombre = fdata.FileName;
hpf.SaveAs(this.Server.MapPath("imagenes/") + nombre);
}
Controles Web estndar

31

CONTROL CALENDAR
Permite trabajar con fechas de una forma grfica e interactiva. No tiene un
equivalente directo en HTML, sino que requiere de una combinacin de varias
etiquetas HTML y cdigo cliente JavaScript para su generacin.

Propiedades
Adems de las relativas al formato y estilo, el control Calendar dispone de
propiedades para manejar su funcionalidad:

SelectedDate. Contiene el objeto DateTime que representa la fecha


seleccionada por el usuario.
SelectedDates. En el caso de que el contro permita la seleccin de
mltiples fechas, esta propiedad contiene la coleccin de objetos DateTime
con las fechas seleccionadas.
SelectionMode. Modo de seleccin de fechas. Sus posibles valores son:
o None. No se permite seleccin de fechas.
o Day. Slo se pueden seleccionar fechas individuales (valor
predeterminado).
o DayWeek. Se permite la seleccin de semanas completas. En este
modo aparecern nuevos enlaces en el control para permitir la
seleccin de semanas.
o DayWeekMonth. Se permite la seleccin de meses completos.
FirstDayOfWeek. Permite indicar cul ser considerado como primer da de
la semana.
SelectedDayStyle. Permite definir el estilo de los das seleccionados.

Controles Web estndar

32

3. MANTENIMIENTO DEL ESTADO


HTTP es un protocolo que trabaja en modo desconectado. Esto significa que tras
recibir una respuesta a una peticin, el cliente se desconecta del servidor,
eliminando de su memoria toda la informacin manejada por aquel durante el
procesamiento de la peticin.
En ASP.NET esto se traduce en que la instancia de la clase Page creada para atender
la peticin de una pgina es destruida despus de enviar la respuesta al cliente,
perdindose la informacin manejada por sta.
ASP.NET proporciona diversas tcnicas para preservar los datos entre peticiones,
cuyas instancias pueden estar asociadas a una misma pgina, a distintas pginas e
incluso a distintos clientes. Estas tcnicas son:

Insercin de datos en URL.


Variables de tipo ViewState.
Variables de sesin.
Cookies.
Variables de aplicacin.

3.1. INSERCIN DE DATOS EN URL


Consiste en anexar en la cadena URL de la pgina destino que se utiliza como
argumento del mtodo Redirect() los datos que dicha pgina necesita utilizar, datos
que podrn ser recuperados a travs de la propiedad QueryString del objeto
Request.
Esta tcnica resulta bastante til cuando se tienen que compartir una pequea
cantidad de datos entre dos pginas aspx; sin embargo, puede resultar propensa a
errores cuando los datos tienen que ser transferidos entre varias pginas.

3.2. VARIABLES DE TIPO VIEWSTATE


ViewState es una tcnica utilizada por ASP.NET que permite almacenar datos en la
propia vista de la pgina, de modo que puedan estar accesibles durante todas las
recargas que un determinado cliente realiza de la misma.
Estos datos son almacenados por la aplicacin como cadenas de caracteres en
campos ocultas HTML antes de enviar la respuesta al cliente, as, cuando se
produce la recarga de la pgina, los datos son enviados de nuevo al servidor, por lo
que estarn disponibles para la nueva instancia de Page.
A travs de la propiedad ViewState de la clase Page tenemos acceso a la coleccin
de datos almacenados de esta forma. Cada uno de estos datos, denominados
variables ViewState, tienen asociado un nombre y un valor, pudiendo utilizar el
indizador con el nombre de la variable para acceder al valor.
Para almacenar un valor en una variable ViewState se debe utilizar la expresin:
this.ViewState[nombre_variable] = valor;
siendo nombre_variable el nombre que se le da a la variable y valor el objeto
almacenado.
La coleccin ViewState almacena refencias como Object, por lo que a la hora de
recuperar el contenido de una variable ViewState durante la recarga de la pgina se
debe realizar una conversin explcita al tipo original almacenado:
tipo variable = (tipo)this.ViewState[nombre_variable];
A pesar de que las variables ViewState admiten valores de tipo objeto, slo aquellos
tipos de objeto que admitan ser serializados podrn almacenarse en una variable
ViewState, pues son convertidos a cadena de caracteres antes de ser almacenados
en campos ocultos.
Mantenimiento
estado

del

33

Todos los controles Web cuentan con un ViewState asociado que permite mantener
entre recargas de la pgina los valores establecidos en las propiedades de los
controles desde la pgina cliente. Los controles HTML en cambio, no disponen de
esta capacidad, por lo que, aunque funcionen como controles de servidor, no
podrn mantener los valores establecidos en la vista del control al producirse la
recarga de la pgina.

3.3. VARIABLES DE SESIN


Las variables de tipo ViewState tienen dos limitaciones importantes:

Slo permiten conservar datos entre instancias de una misma pgina.


No podemos almacenar objetos de cualquier clase.

Si una aplicacin necesita mantener objetos de clases no serializables o debe tener


algn dato accesible para distintas pginas de la misma, es necesario recurrir a otra
solucin, como las variables de sesin.

CONCEPTO DE SESIN
La sesin es un concepto asociado al uso que un determinado cliente realiza de una
aplicacin Web.
Se puede decir que un cliente da por comenzada una sesin en la aplicacin en el
momento en que realiza una peticin de cualquiera de los recursos asociado a la
misma (pginas html, aspx o asp).
A partir de ese instante, todas las solicitudes posteriores que ese cliente realice a
algn otro elemento de la aplicacin pertenecern a la misma sesin.
La sesin se dar por finalizada cuando tenga lugar alguno de los siguientes
sucesos:

El usuario cierra el navegador cliente.


El cliente sobrepasa el periodo mximo de inactividad. El periodo mximo
de inactividad es el tiempo mximo que un cliente puede permanecer sin
realizar solicitudes a la aplicacin. Si se supera, la sesin se da por concluida
y todos los datos asociados a la misma se perdern, por lo que la siguiente
peticin que se realice dar comienzo a una nueva sesin. Este periodo
depende del servidor Web donde se aloje la aplicacin, aunque ASP.NET
dispone de mecanismos para configurar este tiempo a nivel de aplicacin.

OBJETO SESSION Y VARIABLES DE SESIN


El objeto Session de ASP permite gestionar las sesiones de los usuarios durante la
ejecucin de una aplicacin ASP.NET. Su principal funiconalidad es la de
proporcionar acceso a las variables de sesin.
Las variables de sesin son espacios de memoria del servidor, donde una aplicacin
puede almacenar datos que estn accesibles para todas las instancias de las
pginas a las que un determinado usuario accede durante la sesin.
Desde cualquiera de las pginas aspx de la aplicacin, se puede acceder a la
coleccin de variables de sesin del usuario actual a travs del indizador del objeto
Session:
this.Session[nombre_variable]
siendo nombre_variable el nombre de la variable de sesin.
A la hora de recuperar el contenido de una variable de sesin, hay que tener en
cuenta que la expresin anterior devuelve un Object, por lo que ser necesario
realizar una conversin explcita al tipo destino:
// almacenamiento de un enero
this.Session["numero"] = 5;
...
//recuperacin del nmero
Mantenimiento
estado

del

34

int p = (int)this.Session["numero"];
En caso de que no exista una variable de sesin con el nombre especificado, la
expresin this.Session[nombre_variable] contendr el valor null.
Aunque una variable de sesin pueda constituir una solucin ms sencilla para el
mantenimiento del estado que la insercin de datos en la URL o las variables
ViewState, supone un coste de recursos de memoria del servidor. Por ello, este tipo
de variables debe ser utilizado slo cuando sea realmente necesario ya que
un uso excesivo de las mismas puede provocar una prdida importante de
rendimiento en la aplicacin, especialmente cuando existe un elevado nmero de
usuarios accediendo a ellas.

CONTROL DE SESIONES
Adems de proporcionar acceso a las variables de sesin, el objeto Session dispone
de una serie de propiedades y mtodos que permiten realizar desde cdigo un uso
efectivo de las sesiones. Algunos de los ms importantes son:

Timeout. Esta propiedad permite recuperar y establecer el periodo mximo


de inactividad para la sesin actual. Su valor viene definido en minutos y no
podr ser superior a 525.600. Este valor puede ser establecido tambin de
forma general para todas las sesiones mediante el elemento <sessionState>
del archivo de configuracin web.config.
Invalidate(). Este mtodo invalida la sesin actual, haciendo que todas las
variables de sesin asociadas sean destruidas. Se debe llamar a este mtodo
cada vez que quiera darse por concluida la sesin del usuario.
Remove(String nombre). Permite eliminar de la sesin actual la variable
cuyo nombre se especifica.

3.4. VARIABLES DE APLICACIN


Las variables de aplicacin permiten compartir informacin entre los distintos
clientes de la aplicacin.

EL OBJETO APPLICATION Y LAS VARIABLES DE APLICACIN


El objeto Application de ASP es un objeto compartido por todos los usuarios de la
aplicacin, es decir, todas las peticiones que esta recibe comparten la misma
instancia Application.
A travs de este objeto se puede acceder a las variables de aplicacin, mediante las
cuales se puede compartir informacin entre todos los usuarios que tengan una
sesin activa en la aplicacin.
Al igual que Session, al objeto Application proporciona un indizador para acceder a
la coleccin de variables de aplicacin:
this.Application[nombre_variable]
Las variables de aplicacin pueden contener cualquier objeto de C#,
almacenndose como tipo Object.
Dado que este objeto es compartido por todos los usuarios de la aplicacin,
deberamos disponer de un mecanismo que evitara posibles conflictos cuando dos
usuarios intentan acceder al mismo tiempo.
Dicho mecanismo consiste en invocar al mtodo Lock() del objeto Application. La
llamada a este mtodo por parte de un usuario hace que se bloquee el acceso al
objeto Application para otros usuarios, quedando estos a la espera hasta que se
produzca la liberacin del objeto mediante el mtodo Unlock().
Por lo tanto, para realizar una operacin de escritura en una variable de aplicacin
debera bloquearse el acceso al objeto Application antes de hacer la operacin:
int c = 10;
Application.Lock();
Mantenimiento
estado

del

35

Application["contador"] = c + 2;
Application.UnLock();

3.5. EVENTOS DE APLICACIN


Se denominan as porque se producen en el mbito de aplicacin durante el ciclo de
vida de sta, en vez de a nivel de pgina. Los mtodos de respuesta a este tipo de
eventos se codifican en un archivo especial de aplicacin llamado Global.asax.

EL ARCHIVO GLOBAL.ASAX Y LOS EVENTOS DE APLICACIN


De forma predeterminada, las aplicaciones ASP.NET creadas con Visual Studio 2005
no incorporan el archivo Global.asax. Para aadirlo, pulsaremos el botn derecho,
elegiremos la opcin Agregar nuevo elemento del men contextual del proyecto en
el explorador de soluciones. Al hacer esto aparecer un cuadro de dilogo donde
seleccionaremos la plantilla Clase de aplicacin global. El nombre predeterminado
que aparece en el cuadro de dilogo al elegir esta plantilla es Global.asax.
El archivo Global.asax contiene un script de servidor en el que estn incluidos los
mtodos de respuesta a los distintos eventos de aplicacin. En tiempo de ejecucin,
este archivo es transformado en un subclase de HttpApplication que es compilada
dentro de la dll de la aplicacin.
Entre los eventos de aplicacin ms importantes estn:

Application_Start. Se produce cuando tiene lugar la primera solicitud de


cualquiera de las pginas de la aplicacin, momento en el que comienza su
ciclo de vida. El mtodo de respuesta a este evento suele utilizarse para
realizar tareas como la inicializacin de variables de aplicacin o la carga
inicial de datos.
Session_Start. Se produce cada vez que un usuario comienza una nueva
sesin en la aplicacin, emplendose este evento para inicializar variables
de sesin.
Session_End. Se produce cuando se da por finalizada una sesin de
usuario, por lo que se suele utilizar para realizar tareas de limpieza y
liberacin de recursos.
Application_End. Tiene lugar cuando la aplicacin va a ser descargada de
memoria. No es posible predecir el momento exacto en que Application_End
ser disparado, pero suceder a partir del momento en que todas las
sesiones hayan finalizado. Suele emplearse para tareas de limpieza.

3.6. COOKIES
Cuando una aplicacin necesita mantener informacin de un usuario ms all del
tiempo que dura una sesin, puede recurrir a la utilizacin de cookies.
Una cookie es una especie de varaible de tipo cadena de caracteres que es enviada
al cliente a travs de la cabecera de respuesta HTTP generada por la aplicacin, y
que este almacena en un archivo de texto de su disco duro. Posteriormente cuando
el cliente vuelva a realizar una nueva solicitud de alguna de las pginas aspx de la
aplicacin, enviar de nuevo la cookie al servidor como parte de la cabecera de la
peticin. Todo este proceso de envo y recepcin de cookies desde el cliente se
realiza de forma transparente para el usuario.
Dado que la cookie es almacenada en el disco duro del cliente, su contenido puede
perdurar durante un largo periodo de tiempo, permitiendo a la aplicacin disponer
de informacin relativa al usuario por un tiempo superior al de la duracin de la
sesin.
La utilizacin de cookies presenta algunas desventajas:

Mantenimiento
estado

del

36

Capacidad limitada. Una cookie no se puede utilizar para almacenar


grandes cantidades de informacin, ya que su tamao mximo est limitado
a unos cuantos bytes.
Bajo nivel de seguridad. Al estar fuera del control del servidor, la
informacin almacenada en una cookie no dispone de ningn tipo de
proteccin. Por un lado, la privacidad de los datos es nula pues al estar
almacenados en archivos de texto pueden ser ledos en el equipo cliente sin
ninguna dificultad. Por otro lado, nada impide que estos archivos sean
eliminados por el usuario accidental o inteniconadamente.
Inhabilitacin de cookies. Los navegadores pueden ser configurados por
los usuarios para que no admitan cookies enviadas desde las aplicaciones.
Esto implica que si la aplicacin hace uso de cookies para almacenar
informacin clave, su funcionamiento podra ser deficiente en aquellos
navegadores que tengan desactivado su uso.
Como conclusin, las cookies pueden ser usadas para almacenar informacin sobre
preferencias del usuario o para facilitar la navegacin por la aplicacin, pero nunca
deben usarse para almacenar informacin crtica.

CREACIN DE UNA COOKIE Y ENVO AL CLIENTE


Desde el punto de vista de la aplicacin ASP.NET una cookie es un objeto de la clase
System.Web.HttpCookie. Para crearla utilizaremos el siguiente constructor:
HttpCookie (String nombre, String valor)
donde nombre es el nombre que se asignar a la cookie y valor la cadena de
caracteres que se almacenar en la misma.
Una vez creada, se debe asignar a la cookie una fecha de caducidad en el cliente.
Transcurrido ese periodo, la cookie ser eliminada por el cliente de forma
automtica. La fecha de caducidad de una cookie se establece a travs de la
propiedad Expires de la clase HttpCookie. Expires es una propiedad de tipo
DateTime y, normalmente, se le suele asignar un valor relativo a la fecha actual.
Finalmente, la cookie debe ser aadida a la cabecera de respuesta a fin de que
pueda ser enviada al cliente cuando dicha respuesta se produzca. Esta operacin se
lleva a cabo aadiendo la cookie a la coleccin de cookies del objeto Response.
HttpCookie ck = new HttpCookie("color", "azul");
ck.Expires = DateTime.Now.AddDays(7);
this.Response.Cookies.Add(ck);

RECUPERACIN DE UNA COOKIE


Cuando la cookie llega al cliente, el navegador almacena su contenido en un archivo
de texto. Pero, la cookie vuelve a ser enviada a la aplicacin cada vez que se
solicita de nuevo alguna de las pginas aspx de esta. Un cliente slo enviar a la
aplicacin las cookies que le pertenezcan, es decir, aquellas que previamente le
hayan sido enviadas por la propia aplicacin.
La informacin sobre la aplicacin propietaria de una cookie queda tambin
almacenada en el fichero de texto, as como la fecha de caducidad y otro tipo de
informacin encriptada que permite asegurar la integridad de la cookie.
Para recuperar desde una pgina aspx las cookies enviadas por el cliente,
recurriremos a la propiedad Cookies del objeto Request. Esta propiedad contiene la
coleccin de objetos HttpCookie recibidos en la peticin. Se puede usar el indizador
para recuperar cualquiera de los objetos a partir del nombre de la cookie. En caso
de que no exista la cookie cuyo nombre se especifica, el indizador devuelve null.
Tras la recuperacin del objeto, podemos utilizar la propiedad Value de HttpCookie
para obtener el valor almacenado en la cookie.
HttpCookie ck = this.Request.Cookies["color"];
String col = ck.Value;
Mantenimiento
estado

del

37

ELIMINACIN DE UNA COOKIE


Una vez que se ha creado una cookie y ha sido enviada al cliente, esta no podr ser
eliminada desde cdigo hasta que caduque, envindose siempre desde el cliente a
la aplicacin con cada peticin realizada.
Si queremos forzar que una cookie sea eliminada por el cliente, debemos asignarle
al objeto HttpCookie una fecha de caducidad anterior a la fecha actual y volvrselo
a enviar al cliente en la respuesta.

COOKIES DE SESIN
Al crear la instancia de Session para un cliente se crea un identificador de sesin
que es enviado al cliente con la respuesta HTTP. Este identificador es almacenado
por el cliente en una cookie, conocida como cookie de sesin, de modo que es
vuelto a enviar a la aplicacin cuando se realiza una nueva peticin a la misma
desde ese cliente, permitiendo la identificacin de la sesin asociada al usuario.
Esto debe ser tenido en cuenta por el programador, ya que el cliente podra tener
desactivado el uso de cookies en su navegador y, por tanto, las variables de sesin
podran no funcionar para ese cliente.
Existe la posibilidad de evitar el uso de cookies para almacenar el identificador de
sesin, insertndolo en todas las URLs de las pginas que apuntan a algn recurso
de la aplicacin. Esto se conoce como reescritura en URL. La reescritura de los
identificadores de sesin en URL puede realizarse de forma automtica a travs del
archivo de configuracin Web.config, asignando al atributo cookieless del elemento
<sessionState> el valor true.
<sessionState cookieless ="true" />

Mantenimiento
estado

del

38

4. ACCESO A DATOS
La mayora de las aplicaciones Web trabajan con informacin almacenada en una
base de datos. La interaccin entre una aplicacin Web ASP.NET y un origen de
datos es posible gracias a ADO.NET. ADO.NET representa el modelo de objetos
incluido dentro del Framework .NET que permite a una aplicacin acceder a bases
de datos relacionales y a otros tipos de fuentes de datos, como por ejemplo,
documentos XML.
No analizaremos el conjunto de clases de la librera ADO.NET ya que se han
estudiado en mdulos anteriores, examinaremos los aspectos especficos de la
interaccin de ASP.NET con ADO.NET.

4.1. CADENA DE CONEXIN EN WEB.CONFIG


Podemos utilizar el archivo de configuracin Web.config para incluir parmetros
personalizados que nos permitan suministrar ciertos datos a la aplicacin desde
fuera del cdigo.
Adems de la seccin <appSettings> que nos permite aadir parmetros
personalizados de uso general, la versi .NET 2.0 soporta un nuevo elemento
llamado <connectionStrings>, especfico para registrar cadenas de conexin con
base de datos.
El elemento <connectionStrings> estar incluido directamente en <configuration>
y permitir registrar una cadena de conexin diferente para cada uno de los
proveedores de datos con los que puede trabajar la aplicacin. Cada cadena de
conexin debe ser registrada en el interior de <connectionStrings> a travs de un
elemento <add>, que deber especificar los datos de los parmetros de conexin
mediante los siguientes atributos:

name. Nombre del parmetro.


providerName. Espacio de nombres del proveedor al que corresponde la
cadena de conexin.
connectionString. Cadena de conexin.

<configuration>
<connectionStrings>
<clear/>
<add name="cadLibreria"
providerName ="System.Data.SqlClient"
connectionString ="Data Source=(local);
Initial Catalog=libreria;
IntegratedSecurity=true"/>
</connectionStrings>
...
El elemento <clear/> permite eliminar cualquier referencia a posibles cadenas de
conexin existentes.
Para recuperar el valor de la cadena de conexin desde cdigo utilizaremos la
propiedad ConnectionStrings de la clase ConfigurationManager que se encuentra
en el espacio de nombres System.Configuration. Esta propiedad contiene la
coleccin de objetos ConnectionStringSettings, que representan a cada uno de
los elementos <add> definidos en <connectionString>. Utilizando el indizador con
el nombre del parmetro podremos acceder a cada uno de estos objetos:
ConnectionStringSettings setbd;
setbd = ConfigurationManager.ConnectionStrings["cadLibreria"];
La clase ConnectionStringSettings contiene una serie de propiedades que nos
permiten acceder al resto de los atributos del elemento <add>, como por ejemplo,

Acceso a datos

39

ProviderName y ConnectionString, que contienen el espacio de nombres del


proveedor y la cadena de conexin, respectivamente.
String cadenaCon = setbd.ConnectionString;

Acceso a datos

40

4.2. VINCULACIN DE CONTROLES A DATOS


Una de las caractersticas de los controles Web es que podemos vincularlos a un
origen de datos. A travs de este vnculo los controles pueden mostrar en una
pgina Web la informacin almacenada en el origen de datos.
Los controles Web pueden ser vinculados a cualquier origen de datos representado
por un objeto de coleccin que implemente la interfaz IListSource, como por
ejemplo DataTable. La mayora de los controles Web pueden vincularse a datos,
aunque algunos como listas y tablas se vinculan con todo el conjunto de datos a la
vez.

VINCULACIN DE UN CONTROL TIPO LISTA


Los controles de tipo lista como DropDownList, ListBox, CheckBoxList, etc., pueden
ser vinculados a un origen de datos y mostrar todos los valores de una determinada
columna del conjunto. Para realizar la vinculacin es necesario establecer las
siguientes propiedades en el control:

DataTextField. Contiene el nombre del campo o columna del origen de


datos, cuyo contenido se quiere visualizar. En el momento en que se
produzca el vnculo se crearn tantos objetos ListItem como registros existan
en el origen de datos, almacenndose en la propiedad Text de cada uno de
estos objetos el valor del campo indicado en DataTextField.
DataValueField. Permite asociar un valor a cada elemento de la lista. En
esta propiedad se debe indicar el nombre del campo cuyos valores sern
almacenados como Value de cada objeto ListItem. Dicho valor asociado ser
el que figure como atribute value del elemento HTML <option> equivalente.
DataSource. Esta propiedad representa el origen de datos, por lo que debe
contener la referencia al objeto IListSource con el que se vincular el control.
Adems de estas propiedades, cuando se establece un valor en la propiedad
DataSource es necesario generar el vnculo con los datos. Dicha operacin se
realiza invocando al mtodo DataBind() del control. La llamada a este mtodo
deber tambin realizarse cada vez que la propiedad DataSource sea modificada
desde cdigo.
protected void Page_Load(object sender, EventArgs e)
{
String cadenaCon;
String cadenaSql;
SqlDataAdapter adp = null;
DataSet ds;
ConnectionStringSettings stLibreria;
stLibreria =
ConfigurationManager.ConnectionStrings["cadLibreria"];
cadenaCon = stLibreria.ConnectionString;
cadenaSql = "select * from temas";
ds = new DataSet();
try
{
adp = new SqlDataAdapter(cadenaSql, cadenaCon);
adp.Fill(ds, "temalibros");
lsttemas.DataTextField = "tema";
lsttemas.DataValueField = "idTema";
lsttemas.DataSource = ds.Tables["temaslibros"];
lsttemas.DataBind();
}
catch (Exception ex)
{
this.Response.Write(ex.Message);
Acceso a datos

41

}
}

Acceso a datos

42

CONTROL GRIDVIEW
Permite visualizar en una pgina Web el contenido completo del DataTable con el
que est vinculado, aunque tambin proporciona los medios necesarios par que el
usuario pueda modificar, aadir y eliminar registros directamente sobre el control.

Vinculacin de un objeto GridView


Para vincular un objeto GridView a un origen de datos nicamente debemos
establecer la propiedad DataSource del control. Ser necesario invocar al mtodo
DataBind() del control despus de asignar un valor a esta propiedad.
gvlibros.DataSource = ds.Tables["totallibros"];
gvlibros.DataBind();

Paginacin de un objeto GridView


Para poder paginar un control GridView, es necesario establecer una serie de
propiedades en el control. Esto puede realizarse durante la fase de diseo a travs
de la ventana de propiedades de Visual Studio.NET. Entre las ms importantes
estn:

AllowPaging. Permite activar la paginacin del control, para ello deber


tener asignado el valor true.
PageSize. Indica el nmero mximo de registros que deben ser incluidos en
cada pgina.
PagerSettings. Se trata de una propiedad compuesta que permite definir
distintas opciones sobre el paginado, como el modo de navegacin entre
pginas o la posicin y el tipo de controles de navegacin.
PagerStyle. Se trata de una propiedad compuesta, que permite definir
diferentes propiedades de estilo en las pginas, como el color de fondo,
alineacin, etc.
AlternatingRowStyle. A travs de esta propiedad podemos definir, para las
filas alternas de las pginas, estilos diferentes a los establecidos con la
propiedad anterior.
Una vez establecidas las propiedades, el control ya estar preparado para la
paginacin, no obstante, ser necesario aadirle desde cdigo cierta funcionalidad.
Esta consiste en actualizar la propiedad PageIndex del control al valor de pgina
actual cada vez que se intenta cambiar de pgina a travs de los controles de
navegacin. Esta operacin se puede programar en el mtodo de respuesta al
evento PageIndexChanging, que se produce cuando se activa alguno de los
botones:
protected void gvlibros_PageIndexChanging(object sender,
GridViewPageEventArgs e)
{
gvlibros.PageIndex = e.NewPageIndex;
gvlibros.DataBind();
}
Para que este mtodo responda correctamente al evento habra que registrarlo en
el delegado GridViewPageEventHandler:
gvlibros.PageIndexChanging += new
GridViewPageEventHandler(gvlibros_PageIndexChanging);

Acceso a datos

43

5. OPTIMIZACIN Y DESPLIEGUE DE APLICACIONES ASP.NET


5.1. MASTER PAGES Y TEMAS
Permiten conseguir un aspecto uniforme en todas las pginas que forman la
aplicacin, facilitando la modificacin al aplicarse de forma automtica los cambios
realizados a todas las pginas aspx de la aplicacin.

MASTER PAGES
Una Master Page es una pgina aspx que funciona como una especie de plantilla
para la aplicacin. Su misin es definir la estructura que deben tener todas las
pginas de la misma, as como establecer los elementos comunes que todas ellas
van a contener.

Creacin de una Master Page


Una vez cargado el proyecto donde las vamos a utilizar, desde el men contextual
del proyecto en el explorador de soluciones, elegiremos Aadir nuevo elemento.
Despus seleccionaremos el tipo de plantilla Pgina principal, y le asignaremos un
nombre. Las Master Pages se almacenan en archivos .master en vez de .aspx.

De forma predeterminada, una Master Page incluye un control de tipo


ContentPlaceHolder que representa la parte modificable para cada una de las
pginas aspx que utilicen esta Master Page como plantilla. Se pueden incluir
controles ContentPlaceHolder adicionales para definir varias reas de contenido en
la plantilla, aunque para conseguir una determinada colocacin de estas reas
deberamos incluir manualmente las etiquetas necesarias a travs de la vista HTML
de la Master Page.
Optimizacin
y
aplicaciones ASP.NET

despliegue

de

44

Una vez fijadas las reas de contenido, aadiremos fuera de stas los controles Web
y elementos HTML que han de aparecer en todas las pginas aspx que utilizarn la
Master Page.

El contenido HTML de esta Master Page es:


<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Pgina sin ttulo</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table Width="80%">
<tr>
<td>
<asp:contentplaceholder id="ContentPlaceHolder1"
runat="server">
</asp:contentplaceholder>
</td>
<td>
<asp:contentplaceholder id="ContentPlaceHolder2"
runat="server">
</asp:contentplaceholder>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<asp:Button ID="Button1" runat="server"
OnClick="Button1_Click" Text="Buscar" />
<asp:TextBox ID="txtSearch"
runat="server"></asp:TextBox></td>
Optimizacin
y
aplicaciones ASP.NET

despliegue

de

45

</tr>
</table>
&nbsp;&nbsp;&nbsp; &nbsp;
</div>
</form>
</body>
</html>
Una Master Page tambin puede contener cdigo para responder a los eventos del
ciclo de vida de la pgina y de los controles Web comunes. Tambin cuenta con un
archivo de cdigo asociado con extensin .master.cs que incluye una subclase de
System.Web.UI.MasterPage.

Creacin de una pgina de contenido


A las pginas aspx que van a utilizar como plantilla el formato definido por una
Master Page se les conoce como pginas de contenido.
La Master Page debe aadirse al proyecto antes que la pgina de contenido, ya que
la vinculacin entre ambas se produce durante el proceso de creacin de esta
ltima. Para ello, cuando se procede a aadir una nueva pgina aspx de contenido
al sitio web, habr que marcar la opcin Seleccionar la pgina principal en el cuadro
de dilogo de nuevo elemento.

Despus de pulsar el botn Agregar deberemos elegir la Master Page del proyecto
que queramos aplicar sobre la pgina.
Una vez creada la pgina aspx veremos que su aspecto es el mismo que el de la
Master Page asociada, aunque slo tendremos acceso a las zonas de contenido
definidas por los controles ContentPlaceHolder, no pudiendo modificar ninguno
de los elementos comunes. En la vista de diseo incluiremos en el interior de
estas zonas de contenido los controles Web y elementos HTML exclusivos de la
pgina aspx. Tambin podemos definir en la clase Page asociada los mtodos de
respuesta a los eventos que pueden producirse en las zonas de contenido, igual que
haramos con cualquier pgina aspx.

Interaccin entre una Master Page y las pginas de contenido


Una pgina de contenido puede necesitar acceder a algn dato existente en la
Master Page asociada. Dado que estos controles son privados a la Master Page,
Optimizacin
y
despliegue
de
46
aplicaciones ASP.NET

deberamos definir alguna propiedad pblica en la clase Master Page sobre la que
delegar el acceso a la propiedad del control que queremos exponer.

Optimizacin
y
aplicaciones ASP.NET

despliegue

de

47

public partial class MasterPage : System.Web.UI.MasterPage


{
public String TextoBusqueda
{
get { return txtSearch.Text; }
set { txtSearch.Text = value; }
}
}
En la pgina aspx de contenido podramos tener el siguiente cdigo:
MasterPage mp = (MasterPage)this.Master;
String text = mp.TextoBusqueda;

TEMAS
Permiten definir el formato de los distintos controles Web utilizados en las pginas.
Vienen a ser una especie de hoja de estilo para los controles Web aunque, a
diferencia de los hojas CSS que slo permiten modificar ciertos aspectos de estilo
de las etiquetas, con los Temas podemos establecer los valores de prcticamente
cualquier propiedad de la gran mayora de los controles Web proporcionados por
ASP.NET.

Creacin de un Tema
Un Tema est asociado a un sitio web y no puede ser compartido entre estos. Se
definen en archivos de texto con extensin .skin y deben estar situados en una
subcarpeta del proyecto llamada App_Themes.
Para crear un fichero .skin seleccionaremos la opcin Aadir nuevo elemento del
men contextual del proyecto, seleccionando la plantilla Archivo de mscara y
asignndole un nombre.
Una vez creado el archivo, la definicin de los controles deber hacerse de forma
manual, ya que Visual Studio.NET no dispone de ninguna herramienta grfica para
realizar esta tarea. El formato que hay que seguir es similar al que se utiliza en la
vista HTML de los archivos .aspx para la defincin de un control Web, sin especificar
el valor de la propiedad Id:
<asp:ControlWeb runat=server propiedad1=valor propiedad2=valor />
Ejemplo:
<asp:Button runat="server" BackColor="yellow" BorderColor="red" />
<asp:TextBox runat="server" BackColor="green" BorderColor="white" />

Aplicar Temas a pginas aspx


Para aplicar un Tema a una pgina aspx basta con indicar en el atributo Theme de
su directiva Page, el nombre del archivo skin sin la extensin:
<%@ Page Language="C#" Theme="EjemploTema" ... %>
Si queremos aplicar un tema a todas las pginas de la aplicacin podramos hacerlo
tambin incluyendo una referencia al mismo en el archivo de configuracin
Web.config, para lo que deberamos utilizar el elemento <pages> e indicar en su
atributo theme el nombre del archivo .skin:
<configuration>
<system.web>
<pages theme ="EjemploTema" />
...
</system.web>
</configuration>
Si en el interior de una pgina aspx se aplica un estilo a un control que entra en
contradiccin con el tema aplicado, ser el estilo del tema el que prevalezca. Si
Optimizacin
y
aplicaciones ASP.NET

despliegue

de

48

queremos conseguir el efecto contrario, es decir, que tenga prioridad el estilo propio
del control, deberamos haber utilizado el atributo StylesheetTheme en lugar de
Theme en la directiva Page, o styleSheetTheme en vez de theme en el elemento
<pages>, para hacer referencia al nombre del archivo .skin.

Utilizacin de diferentes Temas


Es posible definir ms de un tema para un mismo control, bien en un mismo archivo
.skin o en varios. En este caso, cada tema correspondiente a un mismo control
deber incluir un atributo SkinId con un nombre nico asociado al tema, lo que
permitir diferenciarlo de los dems. Slo uno de los temas, el considerado tema
por defecto, est exento de definir este atributo.
<asp:Button runat="server" BackColor="yellow" Enabled="true" />
<asp:Button SkinId="uno" runat="server" BackColor="green"
Enabled="true" />
<asp:Button SkinId="dos" runat="server" BackColor="green"
Enabled="true" />
De forma predeterminada, todos los controles Button de las pginas asociadas a
este archivo .skin adquirirn el tema por defecto. Si queremos modificarlo en un
determinado control, asignaremos el valor del SkinId del nuevo Tema a la propiedad
SkinId del control. Esta operacin solamente puede ser realizada en tiempo de
diseo, a travs de la ventana de propiedades o directamente en la vista HTML de
la pgina.

5.2. UTILIZACIN DE CACH


El empleo de la memoria cach del servidor para el almacenamiento de respuestas
puede suponer una importante mejora en el rendimiento de una aplicacin ASP.NET.
Durante el periodo de tiempo en que la respuesta HTML asociada a una pgina se
encuentra almacenada en cach, las peticiones que de sta llegan al servidor no
sern procesadas, enviando a los clientes la copia HTML almacenada en la cach.
Una pgina que debe mostrar informacin actualizada en tiempo real que vara de
forma continuada nunca deber ser cacheada, pues estaremos enviando a los
usuarios informacin obsoleta.

CACHEADO DE UN FORMULARIO WEB


Para que la respuesta HTML asociada a una pgina aspx quede almacenada en la
memoria cach del servidor la primera vez que es solicitada, debemos emplear la
directiva OutputCache en la vista HTML de la pgina:
<%@ OutputCache Duration="30" VaryByParam="none" %>
El atributo Duration indica el tiempo en segundos que ser mantenida en cach la
respuesta solicitada a la pgina. Una vez transcurrido este tiempo, cuando se reciba
una nueva peticin volver a procesarse de nuevo, almacenndose en la cach la
copia actualizada de la respuesta.
El atributo VaryByParam permite indicar al servidor cuntos tipos de respuesta debe
mantener en cach. Si su valor es none, se mantendr un nico tipo de respuesta,
pero si es * se mantendrn tantos tipos de respuestas como valores diferentes de
parmetros en la URL se pasen en la peticin. Tambin es posible almacenar un
determinado valor de parmetro; en este caso slo se cachear la respuesta
asociada con este valor.
Adems de Duration y VaryByParam, la directiva OutputCache admite otros
atributos opcionales:

VaryByHeader. Permite cachear una respuesta en funcin de un valor de


encabezado.
VaryByCustom. Permite establecer un criterio personalizado de cacheo.

Optimizacin
y
aplicaciones ASP.NET

despliegue

de

49

CONTROL DE CACH EN CDIGO


Adems de la directiva OutputCache, la clase HttpCachePolicy proporciona una
serie de propiedades y mtodos para el control de cacheo de respuestas desde
cdigo.
Toda respuesta tiene un objeto HttpCachePolicy, cuya referencia podemos
encontrarla en la propiedad Cache del objeto Response de ASP. Las principales
propiedades y mtodos de este objeto son:

VaryByParams. A travs de esta propiedad podemos establecer los mismos


valores que se definen en el atributo VaryByParam de la directiva
OutputCache. Por ejemplo, para indicar que se va a crear una nica copia,
independientemente de los parmetros de la URL, sera:
SetExpires(int tiempo). Este mtodo permite establecer el tiempo en
segundos que cada copia ser mantenida en cach. Equivale al atributo
Duration de OutputCache.
SetCacheability (HttpCacheabitlity site). Mediante este mtodo se
puede especificar dnde ser cacheada la respuesta. Los posibles valores
que admite este mtodo como parmetro estn definidos en el enumerado
HttpCacheability y son:
o HttpCacheability.Private. La respuesta asociada a la pgina es
cacheada en cliente, almacenndose una copia de la respuesta
recibida en el navegador. De esta forma, cada cliente tiene su propia
cach privada. El navegador utiliza la copia almacenada en cach
cuando el cliente regresa a la pgina o cuando vuelve a introducir la
misma URL, pero no si pulsa el botn refrescar del navegador,
momento en el cual volver a solicitarse la pgina al servidor.
o HttpCacheability.Public. La respuesta es cacheada tanto en el
cliente como en el servidor y en servidores Proxy intermedios.
o HttpCacheability.Server. La respuesta es cacheada nicamente en
el servidor donde est la aplicacin.
o HttpCacheability.NoCache. La respuesta no ser cacheada.

PERSONALIZACIN DE CACH
Es posible establecer criterios personalizados de cacheo de una pgina. Para ello
habr que definir un mtodo que sirva para determinar cundo hay que utilizar la
respuesta almacenada en cach para envirsela al cliente o cundo hay que
generar una nueva respuesta y volverla a cachear. Este mtodo se llama
GetVaryByCustomString() y debe ser definido en el archivo Global.asax. Su formato
ser el siguiente:
public override String GetVaryByCustomString (HttpContext context, String args)
{}
Al mismo tiempo, la directive OutputCache deber definir en el atributo
VaryByCustom la cadena de caracteres que determinar los criterios del cacheado.
El funcionamiento del cacheado personalizado es el siguiente: cada vez que se
produce una peticin de la pgina desde el cliente, se invocar al mtodo
GetVaryByCustomString() definido en el Global.asax, pasndole como segundo
argumento la cadena asignada al atributo VaryByCustom y como primero, el objeto
Context de ASP. Todas las peticiones para las que la llamada a este mtodo genere
el mismo resultado utilizarn la misma copia de la pgina de respuesta, que ser
almacenada en cach con la primera peticin de este tipo. As pues, habr tantas
respuestas en cach como resultados diferentes genere la llamada a
GetVaryByCustomString().
public override string GetVaryByCustomString(HttpContext context,
string custom)
{
if (custom == "navegador")
return context.Request.Browser.Browser;
Optimizacin
y
aplicaciones ASP.NET

despliegue

de

50

else
return "";

CACHEADO DE DATOS
La memoria cach del servidor no solamente permite el almacenamiento de
pginas de respuesta, tambin es posible guardar en ella de forma explcita datos
de aplicacin.
En este sentido, la cach se comporta para el almacenamiento de los datos de
aplicacin como una coleccin basada en claves. El acceso a esta coleccin se
realiza a travs del objeto Cache ASP.

El objeto Cache de ASP


La coleccin de datos de cach es compartida por todos los clientes de la
aplicacin, por lo que puede ser utilizada con la misma finalidad que las variables
de aplicacin. No obstante, hay algunas diferencias entre las colecciones Cache y
Application:

El objeto Cache es un thread seguro. Esto significa que no es necesario


bloquear y desbloquear explcitamente el acceso al mismo como sucede con
Application.
Los datos en cach tienen duracin limitada. La informacin que se
almacena en cach tiene una duracin limitada, mientras que el tiempo que
los datos permanecen almacenados en el objeto Application es indefinido.
Utilizacin de un mtodo para la insercin. Para almacenar datos en
cach de forma explcita, ser necesario recurrir a un mtodo especial del
objeto Cache llamado Insert().

Aadir datos en cach


El objeto Cache proporciona el mtodo Insert() para la insercin de datos de
aplicacin en la memoria cach. Aunque este mtodo est sobrecargado, la versin
ms extendida es la siguiente:
Insert (String key, Object value, CacheDependency dependencies,
DateTime absoluteExpiration, TimeSpan slidingExpiration)
El significado de estos parmetros es el siguiente:

key. Se trata de la cadena de caracteres identificativa del dato. A travs de


ella se podr acceder posteriormente a este utilizando el indizador.
value Es el dato que va a ser almacenado. Se puede guardar en cach
cualquier tipo de objeto.
dependencies. Se trata de un objeto de la clase CacheDependency que
permite establecer una dependencia entre el objeto almacenado en cach y
un elemento externo, como por ejemplo, un fichero. Al establecer esta
dependencia, cuando se produce un cambio en el fichero externo se
eliminar automticamente de la cach el objeto asociado. Si no se va a
crear ninguna dependencia este parmetro se debe establecer a null.
absoluteExpiration. Objeto DateTime que establece la fecha de caducidad
del dato. Se puede establecer una duracin relativa en vez de absoluta, en
cuyo caso el valor de este parmetro deber establecerse a
Cache.NoAbsoluteExpiration.
slidingExpiration. Permite establecer una duracin relativa del dato. Para
ello se debe indicar aqu el tiempo que el dato deber permanecer en cach
desde la ltima vez que fue utilizado. Su valor viene dado como un objeto
TimeSpan. Si se va a utilizar una duracin absoluta en vez de relativa, el
valor de este parmetro deber ser Cache.NoSlidingExpiration. El

Optimizacin
y
aplicaciones ASP.NET

despliegue

de

51

enumerado
Cache
System.Web.Caching.

se

encuentra

en

el

espacio

de

nombres

this.Cache.Insert("clave", s, null, DateTime.Now.AddMinutes(1),


Cache.NoSlidingExpiration);
Una vez aadido el dato en la cach, podemos acceder a l utilizando el indizador
del objeto Cache con el valor de clave asociada al objeto:
String d = (String)this.Cache["clave"];
Tambin es posible utilizar el indizador para realizar una modificacin en el dato:
this.Cache["clave"] = "otra cadena";

Eliminacin de datos de cach


Si queremos eliminar un dato de aplicacin almacenado en cach, antes de que
caduque, debemos utilizar el mtodo Remove() del objeto Cache:
this.Cache.Remove("clave");

5.3. DESPLIEGUE DE APLICACIONES WEB ASP.NET


Durante la fase de desarrollo de una aplicacin ASP.NET, Visual Studio.NET 2005
utiliza un componente especial que simula el comportamiento de un servidor Web
para probar el funcionamiento de la misma. Para que las aplicaciones puedan ser
utilizadas en el entorno de produccin, debern ser ejecutadas bajo un servidor
Web real (Internet Information Services).

INTERNET INFORMATION SERVICES


IIS es el servidor Web para plataformas Microsoft. Para ejecutar una aplicacin
ASP.NET, utiliza un motor de ASP que se encarga del procesamiento de las pginas
aspx. La parte ms importante de este motor es la dll aspnet_isapi.dll, conocida
tambin como componente ISAPI.

Directorios virtuales
Los directorios virtuales constituyen la forma lgica en que IIS organiza las
aplicaciones para que puedan ser utilizadas por los navegadores clientes a travs
de Internet. De esta forma, la URL asociada a una aplicacin Web tendr el
siguiente formato:
http://servidor/dirvirtual
siendo servidor el nombre de dominio o direccin IP de la mquina servidor y
dirvirtual el nombre del directorio virtual donde se encuentra instalada la aplicacin.
Los directorios virtuales se pueden anidar; incluso puede haber aplicaciones que
estn instaladas en directorios fsicos no virtuales, que sean subdirectorios de algn
directorio virtual. En este caso la URL asociada a la aplicacin sera:
http://servidor/dirvirtual/diraplicacion
donde diraplicacion es un directorio (virtual o no virtual) que se encuentra dentro de
dirvirtual.
Todo directorio virtual tiene asociado un directorio fsico que es donde se
encuentran los archivos de la aplicacin. Esta asociacin se realiza a travs de la
consola administrativa de IIS.

El directorio virtual raz


Cuando se instala IIS en la mquina se crea un directorio virtual por defecto,
conocido como directorio raz, cuya ubicacin fsica es la carpeta
c:\Inetpub\wwwroot. Este directorio virtual raz est asociado directamente al
nombre de dominio o direccin IP del servidor. Aunque este directorio es el raz de
Optimizacin
y
despliegue
de
52
aplicaciones ASP.NET

todos los directorios virtuales, los directorios fsicos asociados a estos no tienen
porqu ser subdirectorios de ste, sino que pueden estar en cualquier parte del
disco. De hecho, lo recomendable por motivos de seguridad es que no estn aqu,
pues se trata de un directorio propio de la aplicacin IIS.

Creacin de un directorio virtual


Para crear un directorio virtual utilizaremos la consola de administracin accesible
desde el panel de control Windows > Herramientas administrativas > Internet
Information Server.

En la parte izquierda de la ventana tenemos la distribucin de directorios virtuales


del servidor, siendo el directorio virtual raz el indicado por el icono Sitio Web
predeterminado.
Para crear un nuevo directorio virtual que cuelgue directamente del directorio
virtual raz, seleccionaremos en su men contextual la opcin Nuevo Directorio
Virtual, y se iniciar el asistente donde se solicitar el nombre del alias o nombre
del directorio virtual, la direccin del direcotrio fsico donde se ubicarn los archivos
de la aplicacin y los permisos que se habilitarn para el directorio virtual.
Si en el equipo de produccin tenemos instalada otra versin anterior de ASP.NET,
adems de la 2.0, es posible que de forma predeterminada el directorio virtual se
configure para trabajar con la versin ms antigua, por lo que si desplegamos en l
una aplicacin ASP.NET 2.0, no funcionar. Este comportamiento se modifica desde
las propiedades del directorio virtual, a las que accedemos desde el men
contextual.

DESPLIEGUE DE LA APLICACIN
Desplegar una aplicacin Web ASP.NET consiste bsicamente en trasladar los
ficheros que componen la misma al directorio virtual del servidor IIS que va a ser
utilizado en produccin. Este servidor Web de produccin debe estar en un equipo
que sea accesible para todos los usuarios de Internet.
La forma ms sencilla de desplegar una aplicacin consiste en copiar directamente
todos los ficheros y carpetas contenidos en el sitio web de desarrollo a la carpeta
asociada al directorio virtual de produccin. Si la aplicacin utiliza algn
componente personalizado deber copiarse en un subdirectorio \bin de la carpeta
de produccin. Visual Studio.NET proporciona una opcin para facilitar este proceso
de transferencia de archivos desde la opcin de men Sitio Web Copiar sitio Web
Optimizacin
y
aplicaciones ASP.NET

despliegue

de

53

PRECOMPILACIN DE APLICACIONES
La distribucin de una aplicacin ASP.NET no requiere ninguna operacin previa de
compilacin, dado que es el motor de ASP.NET el que compila en una dll el cdigo
asociado a la pgina aspx cuando esta es solicitada por primera vez. Esto facilita la
realizacin de cambios posteriores en la aplicacin, ya que basta con modificar
directamente en produccin el cdigo fuente de la clase o el archivo .aspx para que
la prxima vez que se vuelva a solicitar la pgina se regenere nuevamente la dll.
Sin embargo, puede resultar problemtico en algunas circunstancias, pues
cualquiera que tenga acceso al servidor de produccin puede ver el contenido de
estos archivos e incluso realizar modificaciones en el cdigo. Para evitar esto,
podemos realizar una precompilacin de la aplicacin y distribuir nicamente los
archivos .aspx y la dll con el cdigo compilado de la misma.
La operacin de precompilacin y despliegue de la aplicacin pueden realizarse de
forma conjunta a travs de Visual Studio.NET, con la opcin de men Generar
Publicar sitio web. Slo es necesario indicar la URL del directorio virtual del servidor
de produccin donde queremos instalar la aplicacin, dejando sin marcar el resto de
opciones. Los archivos aspx se copiarn en el directorio raz de la aplicacin
mientras que la dll se situar en el subdirectorio \bin.

Optimizacin
y
aplicaciones ASP.NET

despliegue

de

54

6. SERVICIOS WEB
El objetivo de los servicios Web es que las aplicaciones puedan ser utilizadas por
otros programas capaces de procesar las respuestas con otro fin que no sea el de la
presentacin de informacin en pantalla, permitiendo adems automatizar ciertos
procesos en la Web al posibilitar transacciones de datos sin la intervencin de un
usuario.

6.1. CONCEPTOS BSICOS SOBRE LA ARQUITECTURA DE SERVICIOS


WEB
Este nuevo modelo de arquitectura, conocido tambin como Arquitectura Orientada
al Servicio (SOA), se basa en proporcionar soluciones a problemas concretos. Estas
soluciones se encapsulan como un servicio y se exponen en la Red para que sean
accesibles a otras aplicaciones. Al disponer de estas soluciones o servicios, las
aplicaciones pueden centrarse en resolver problemas de mayor nivel.
Desde un punto de vista programtico, un servicio Web consiste en un componente
software que expone un conjunto de operaciones en la Web (mtodos), que pueden
ser utilizadas por otros programas. Los servicios Web pueden ser invocados por
otros programas sin la intervencin de un usuario, mientras que las apliaciones Web
tradicionales estn desarrolladas para ser utilizadas por un cliente tipo navegador.

CARACTERSTICAS DE LOS SERVICIOS WEB


Los servicios Web poseen una serie de caractersticas que los hacen preferibles a
otras tecnologas como CORBA o DCOM:

Utilizacin de estndares existentes. La base de la arquitectura de


servicios Web la constituye el protocolo HTTP y el estndar XML. De hecho, la
comunicacin cliente-servicio Web se lleva a cabo mediante el intercambio
de documentos XML entre ambos, utilizando HTTP como protocolo de
comunicacin.

Web Service

Request (XML)
Response (XML)

Independencia de la plataforma. La utilizacin de XML como formato de


intercambio de informacin entre cliente y el servicio Web permite que la
comunicacin entre ambos pueda realizarse independientemente de la
tecnologa o lenguaje con el que tanto uno como otro estn implementados,
as como de la plataforma en la que se ejecuten.
Nuevos estndares abiertos. HTTP y XML constituyen la base principal de
los servicios Web. No obstante, se han desarrollado una serie de tecnologas
que permiten estandarizar operaciones como la descripcin o la publicacin
de un servicio Web. Estas tecnologas han sido ampliamente aceptadas por
la mayora de fabricantes de software, que adems las han incluido en sus
plataformas y soluciones.

ESTRUCTURA INTERNA DE UN SERVICIO WEB


La estructura y complejidad de un servicio Web depende de las funciones a realizar
y del tipo de servicio que se trate. En cualquier caso se pueden distinguir dos
componentes bsicos:

Servicios Web

55

Componente software. Se trata de componentes de cdigo reutilizable


que implementan la funcionalidad del servicio, sus mtodos pueden incluir
acceso a diferentes fuentes de datos. La funcionalidad que proporcionan
puede ser compartida por el resto de mdulos que forman parte de la
aplicacin Web. Estos componentes pueden estar implementados con
cualquier tecnologa software; en el caso de .NET esta funcionalidad estara
implementada mediante clases independientes compiladas en un
ensamblado dll.
Servidor SOAP. Hace de interfaz entre el cliente y el componente que
implementa el servicio. La comunicacin entre el cliente y el servicio Web se
realiza va XML, utilizando un protocolo de codificacin conocido como SOAP.
As que por un lado este mdulo debe encargarse de decodificar las
peticiones SOAP que llegan desde el cliente e invocar a los mtodos del
componente, mientras que por otro, debe codificar los resultados devueltos
por el componente en mensajes SOAP y enviarlos al cliente. En .NET esta
labor se llevara a cabo mediante pginas aspx dentro de una aplicacin
Servidor
ASP.NET.

Servicio Web

Peticin SOAP

ASP.NET

Respuesta SOAP
ensamblado

TIPOS DE SERVICIOS WEB


En funcin de cmo va a ser procesada la informacin por un servicio Web,
podemos dividir estos en dos categoras:

Servicios Web orientados a mtodos.


Servicios Web orientados a documento.

Servicios Web orientados a mtodo


Se basan en una interaccin de tipo Llamada Remota a Mtodo (RPC), donde el
documento XML de peticin del servicio Web representa la llamada a un mtodo o
procedimiento con sus correspondientes parmetros de entrada, mientras que el
documento XML generado como respuesta representa el valor devuelto por dicho
mtodo.
Es el caso ms sencillo de servicio Web donde cliente y servicio se comunican de
forma sncrona.

Servicios Web orientados a documento


El documento XML enviado por el cliente al servicio Web es procesado por ste en
su totalidad. Este proceso se lleva a cabo de forma asncrona y el mismo puede
implicar llamadas a diferentes mtodos y procedimientos en los componentes del
servidor.
Un ejemplo de este tipo de servicios podra ser un servicio Web para procesamiento
de rdenes de compra. En este caso el cliente enva al servicio Web un documento
XML con el cdigo del producto a comprar, los datos bancarios y la direccin de
envo. Una vez decodificado el mensaje, el servicio Web comienza a ejecutar las
diferentes tareas, como la comprobacin de los datos bancarios del cliente, notificar
Servicios Web

56

el pedido al repartidor, etc. Finalmente, el servicio Web enva un documento de


respuesta con la confirmacin o rechazo de la orden de compra que es a su vez
interpretado por la aplicacin cliente.
La llamada a este tipo de servicios Web se realiza de forma asncrona, lo que
significa que el cliente puede continuar su ejecucin mientras el servicio Web
procesa el documento.

ROLES EN LA ARQUITECTURA DE SERVICIOS WEB


La arquitectura de servicios Web est basada en las interacciones entre tres
elementos que constituyen los roles principales dentro del modelo:

Cliente del servicio. Se trata de la aplicacin usuaria del servicio. Los


clientes se comunican con el servicio a travs de mensajes XML que son
transmitidos a travs de HTTP.
Proveedor de servicio. El proveedor de servicio es la plataforma que
hospeda el servicio y da acceso al mismo. Una vez que el servicio Web est
implementado, el proveedor de servicio define una descripcin con sus
caractersticas y lo publica para que sea accesible por los clientes.
Registro de servicios. Se trata de un elemento opcional dentro de la
arquitectura de servicios Web. El registro de servicios contiene la descripcin
de los servicios publicados por los distintos proveedores. Los clientes pueden
utilizar este registro para localizar un servicio Web y obtener del mismo,
como quin es el proveedor del servicio, qu protocolos utiliza y en general
cualquier informacin vlida que permita al cliente invocarlo.

Registro de servicios

Bsqueda

Cliente

Publicacin

Vinculacin Proveedor de servicios

ESTNDARES DE LA ARQUITECTURA DE SERVICIOS WEB


La arquitectura de servicios Web se basa en la utilizacin de XML como mecanismo
para intercambio de datos. Basndose en esta tecnologa, se han definido una serie
de estndares para posibilitar la interaccin entre los diferentes roles que forman la
arquitectura. Estos estndares son:

SOAP
WSDL
UDDI

SOAP
SOAP (Simple Object Access Protocol) es un protocolo definido por el W3C para
el intercambio de informacin entre aplicaciones en un entorno distribuido. SOAP
est basado en XML y define los formatos de los documentos XML (mensajes SOAP)
que van a intercambiarse las aplicaciones.
En el caso de un servicio Web basado en RCP, SOAP define el formato del
documento XML que la aplicacin cliente debe utilizar para invocar a los mtodos
del servicio y los parmetros de entrada necesarios, as como el formato del
documento XML generado como respuesta a la llamada.

Servicios Web

57

Aunque los mensajes SOAP pueden ser utilizados en combinacin con diferentes
protocolos de red, la definicin actual nicamente abarca HTTP.

Partes de un mensaje SOAP


Un mensaje SOAP est formado por tres partes:

Envelope. El elemento Envelope es el elemento principal del documento,


por lo que debe estar presente en todos los mensajes. Incluye las referencias
a los espacios de nombres utilizados por el documento y tambin puede
incluir algunos atributos adicionales, como encodingStyle, atributo que
indica las reglas para serializacin de los datos utilizados en el mensaje
SOAP.
Header. Se trata de un elemento opcional; si aparece debe ser el primer
elemento hijo de Envelope. Dado que un mensaje SOAP puede atravesar
diversos nodos hasta llegar a su destino, Header puede utilizarse para
suministrar algn tipo de informacin adicional a esos nodos.
Body. Este elemento contiene la parte principal del mensaje SOAP. Para los
mensajes de tipo RPC, contiene las llamdas y respuestas a procedimientos
remotos. En los servicios Web orientados a documento, contiene el
documento XML que va a ser procesado por el servicio.

<SOAP-ENV:envelope...>
<SOAP-ENV:Header>
<!Informacin adicional -->
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<!-- Cuerpo del mensaje -->
</SOAP-ENV:Body>
</SOAP-ENV:envelope>

SOAP en RPC
Una de las principales aplicaciones de SOAP es la encapsulacin de llamadas a
procedimientos remotos en documentos XML. En estos casos, el elemento Body
debe tener las siguientes caractersticas:

Cuando se trate de un mensaje de llamada a un mtodo, Body debe


contener un elemento cuyo nombre coincida con el nombre del mtodo
llamado. Dicho elemento debe contener en sus subelementos los valores de
los parmetros de entrada del mtodo. Por ejemplo, para invocar al siguiente
mtodo public float GetPrecio(String codigo), la estructura de Body debera
ser:
<SOAP-ENV:Body>
<GetPrecio xmlns=www.miesquema.com>
<codigo>DIS</codigo>
</GetPrecio>
</SOAP-ENV:Body>
En el caso de los mensajes de respuesta, Body debe contener un elemento
de respuesta al mtodo. El nombre de este elemento puede ser cualquiera
aunque por convenio se utiliza la palabra Response precedida del nombre
del mtodo. Si el mtodo devuelve un valor debera incluirse en un
subelemento del anterior, siendo tambin irrelevante el nombre de este
elemento. La estructura del Body del mensaje de respuesta en el ejemplo
anterior quedara:
<SOAP-ENV:Body>
<GetPrecioResponse xmlns=www.miesquema.com>
<Precio>34.5</Precio>
</GetPrecioResponse>
</SOAP-ENV:Body>

Servicios Web

58

WSDSL
Para que un cliente pueda interactuar con un servicio Web es necesario que ste,
est descrito de alguna manera. WSDL o Lenguaje de Descripcin de Servicios Web
es una especificacin basada en XML, utilizada para la descripcin de servicios Web.
Los proveedores de servicios Web utilizan WSDL para generar un documento XML
en el que describen las caractersticas del servicio que ofrecen.
Los clientes del servicio Web utilizan este documento para obtener la informacin
necesaria que les permita utilizarlo.
Normalmente no ser necesario generar este documento de forma manual, ya que
muchas de las herramientas existentes para la creacin de servicios Web son
capaces de generar directamente el documento WSDL correspondiente.
Un documento WSDL describe:

Los mtodos proporcionados por el servicio.


Los parmetros de entrada y salida.
Cmo conectarse con el servicio.

<definitions xmlns=http://schemas.xmlsoap.org/wsdl/
xmlns:tns=http://com.test/wsld/Cuenta
xmlns:xsd=http://www.w3.org/2001/XMLSchema
xmlns:soap=http://schemas.xmlsoap.org/wsdl/soap
targetNamespace=http://com.test/wsdl/Cuenta>
<types>
<xsd:schema targetNamespace=http://com.test/wsdl/Cuenta>
<xsd:element name=GetPrecio>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs=0 maxOccurs=1
name=codigo type=xsd:string />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=GetPrecioResponse>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs=1 maxOccurs=1
name=precio type=xsd:float />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</types>
<message name=GetPrecioSoapIn>
<part name=parameters element=tns:GetPrecio />
</message>
<message name=GetPrecioSoapOut>
<part name=parameters element=tns:GetPrecioResponse />
</message>
<portType name=Service1Soap>
<operation name=GetPrecio>
<input message=tns:GetPrecioSoapIn />
<output message=tns:GetPrecioSoapOut />
</operation>
</portType>
<binding name=Service1SoapBinding type=tns:Service1Soap>
<soap:binding transport=http://schemas.xmlsoap.org/soap/http
style=document />
<operation name=GetPrecio>
<soap:operation
Servicios Web

59

soapAction=http://com.test/wsdl/Cuenta/GetPrecio
style = document />

<input>
<soap:body use=literal />
</input>
<output>
<soap:body use=literal />
</output>
</operation>
</binding>
<service name=Primero>
<port name=ServicePrimero binding=tns:Service1SoapBinding>
<soap:address
location=http://localhost:8080/primero-jaxrpc/primero />
</port>
</service>
</definitions>

Estructura de un documento WSDL


Todo documento WSDL est formado por un elemento raz llamado definitions. En
l se declaran los diferentes espacios de nombres utilizados por el documento. Un
espacio de nombres representa a su vez un documento en el que se encuentran
definidas las reglas de utilizacin de un determinado grupo de etiquetas.
El resto de subelementos incluidos en definitions para la descripcin del servicio
son:

types. Se utiliza para definir los tipos de datos que van a ser utilizados por
el servicio, tanto en lo que se refiere a parmetros de mtodos como a
valores devueltos por estos. En la definicin de estos elementos se utiliza la
especificacin XML Schema. Cuando se trate de tipos de datos bsicos (int,
string, etc.) no es necesario definir nuevos tipos basados en estos, ya que
podr hacerse referencia directamente a los tipos e datos Schema desde el
elemento message.
message. Los elementos message representan la informacin (mensajes)
que va a ser intercambiada entre los mtodos del servicio Web y los clientes.
Cada message tiene un subelemento part que describe el tipo de datos
utilizado por el mensaje.
portType. Describe las operaciones expuestas por el servicio Web. Cada
operacin est definida con el elemento operation y llevar asociado un
mensaje de entrada y otro de salida. En los servicios Web basados en RPC,
las operaciones son los mtodos expuestos por el servicio.
binding. Una vez definidas las operaciones que va a realizar el servicio es
necesario vincularlas a un protocolo concreto. Esta es la labor realizada por
el elemento binding, donde se especifica el tipo de transporte utilizado
(SOAP, HTTP, POST, etc.) y los accesos de red necesarios para ejecutar una
determinada operacin.
service. Finalmente, es necesario especificar la direccin o punto de entrada
al servicio Web, informacin que se incluye dentro del elemento service.
Mediante el elemento port se especifica la direccin de cada elemento
binding. En el caso de SOAP, esta direccin se indica con el atributo location
del elemento address.

UDDI
UDDI (Universal Description Discovery and Integration) es una especificacin que
define cmo publicar y localizar un servicio Web en un registro de servicios
compatible con UDDI.
A un registro UDDI pueden acceder dos tipos de clientes:

Servicios Web

60

Proveedores de servicio. Acceden al registro para publicar sus servicios.


UDDI proporciona mecanismos para que los proveedores cuelguen en el
registro las descripciones de sus servicios Web.
Clientes de servicios. Utilizan el registro para localizar un servicio y poder
hacer uso de l (vinculacin al servicio). UDDI soporta mecanismos de
bsqueda de servicios.
UDDI utiliza mecanismos SOAP para publicar, editar y buscar informacin en el
registro. Mediante un esquema XML se definen los distintos tipos de datos que
pueden ser enviados al registro y recibidos desde este.
La especificacin UDDI est compuesta por dos partes:

Un esquema UDDI. Identifica los tipos de estructuras de datos XML que


componen una entrada de registro para un servicio Web.
Una API UDDI. Describe los mensajes SOAP utilizados para publicar y
localizar una entrada del registro.

6.2. CREACIN DE SERVICIOS WEB CON .NET


Visual Studio.NET dispone de una plantilla especial para la creacin de servicios
Web (Servicio Web ASP.NET), a la que se accede desde la opcin Nuevo Sitio web.
El elemento principal de este tipo de aplicacin es la pgina asmx, que es una
pgina similar a una aspx pero sin interfaz grfica. Dispone de un archivo de cdigo
asociado en el que se define una clase que hereda de WebService.
En esta clase es donde se implementarn los mtodos de negocio que el servicio
Web expondr a las aplicaciones. Cada uno de estos mtodos deber estar
declarado con el atributo [WebMethod].
using
using
using
using

System;
System.Web;
System.Web.Services;
System.Web.Services.Protocols;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
public Service () {
//Eliminar la marca de comentario de la lnea siguiente si
utiliza los componentes diseados
//InitializeComponent();
}

[WebMethod]
public int GetNumCars(String cadena) {
return cadena.Length;
}

La implementacin de los mtodos de negocio en esta clase es la nica tarea que


debe realizar el programador de un servicio Web, .NET Framework se encargar de
crear toda la infraestructura necesaria para que el servicio Web sea accesible a las
aplicaciones cliente a travs de SOAP/XML, de forma transparente para el
programador.
Una vez completada la codificacin podemos probar el funcionamiento desde Visual
Studio.NET pulsando el botn de ejecucin. Se enviar una solicitud de la pgina
asmx de la aplicacin, publicada en el emulador del servicio Web que incorpora
Visual Studio.NET. Se visualizar entonces en el navegador una pgina similar a la
siguiente, que nos permitir probar el funcionamiento de los mtodos del servicio
Web antes de ponerlo en produccin.
Servicios Web

61

6.3. APLICACIONES CLIENTES DE UN SERVICIO WEB


Para crear una aplicacin que haga uso de los mtodos de un servicio Web
publicado en un servidor remoto, el programador no tendr que preocuparse de los
detalles relativos a la generacin de mensajes XML para invocacin a los mtodos ni
de la decodificacin de los documentos de respuesta, haciendo que resulten
transparentes para el programador.

CLASES PROXY
Para comunicar una aplicacin con un servicio Web remoto, la plataforma .NET hace
uso de las llamadas clases proxy. Una clase proxy esuna clase que sirve de
interfaz entre el cliente y el servicio Web, exponiendo los mismos mtodos de ste a
la aplicacin, a fin de que pueda invocar a los mtodos del servicio Web utilizando
un objeto local. De esta forma, la aplicacin no tendr que preocuparse de los
detalles XML/SOAP de bajo nivel.

Objeto Proxy
Aplicacin cliente .NET

XML-SOAP
Web Service
XML-SOAP

El objeto proxy traduce las llamadas a los mtodos en mensajes XML/SOAP que son
enviados al servicio Web. Del mismo modo, las respuestas generadas por este sern
convertidas por el objeto proxy al tipo correspondiente .NET, a fin de que puedan
ser manipuladas por la aplicacin.
Servicios Web

62

La clase proxy se genera a partir del documento WSDL que describe al servicio Web,
es decir, independiente de la naturaleza e implementacin de ste.

CREACIN DE LA APLICACIN CLIENTE


La fase ms importante del proceso de creacin de una aplicacin cliente de un
servicio Web ser la generacin de la clase proxy. A partir de ese momento, el
desarrollo de la aplicacin no difiere del de cualquier aplicacin estndar .NET.
Visual Studio .NET permite crear una clase proxy para todos los tipos de proyecto
(Consola, Windows o ASP.NET), lo que significa que cualquier aplicacin .NET puede
ser cliente de un servicio Web. Para crear la clase proxy, seleccionaremos la opcin
Agregar referencia web del men contextual del proyecto y especificaremos la URL
correspondiente al documento WSDL que describe el servicio Web que queremos
utilizar, y el espacio de nombres en el que se crear la clase proxy (por defecto
aparece el nombre del servidor donde est publicado).

ACCESO A UN SERVICIO WEB EN MODO ASNCRONO


Los servicios Web .NET disponen de la infraestructura necesaria para ser utilizados
en modo asncrono, es decir, las aplicaciones pueden invocar a los mtodos del
servicio Web y continuar su ejecucin mientras se procesan las llamadas a los
mtodos. Una vez completada la ejecucin del mtodo, el objeto proxy notificar
este hecho a la aplicacin desencadenando un evento, en cuyo mtodo de
respuesta el programa podr tener acceso al resultado de la llamada.
Para hacer uso en modo asncrono de un mtodo del servicio Web, debemos realizar
las siguientes acciones:

Implementar mtodo de respuesta al evento de finalizacin.


Realizar la llamada en modo asncrono.

Servicios Web

63

Implementar mtodo de respuesta al evento de finalizacin


Por cada mtodo expuesto por el servicio Web, la clase proxy dispone de un evento
del tipo XxxCompleted, siendo Xxx el nombre del mtodo definido en el servicio
Web. Si queremos definir algn tipo de accin asociada a este evento, debemos
proceder como con cualquier otro evento, es decir, habr que implementar el
mtodo de respuesta y, a partir de ste, crear una instancia del delegado
correspondiente y asociarla al evento del objeto proxy. El nombre del delegado
asociado al evento de finalizacin tendr el formato XxxCompletedEventHandler,
mientras que el de la clase de tipo EventArgs ser XxxCompledtedEventArgs.
Ambos estarn definidos en el mismo espacio de nombres donde se encuentra la
clase proxy. La clase proporciona una propiedad llamada Result donde el objeto
proxy habr depositado el resultado de la llamada al mtodo.
void respuesta (Object sender, GetNumCarsCompletedEventArgs e){
//cdigo para la captura de la respuesta
}

Llamada asncrona al mtodo


Por cada mtodo expuesto por el servicio Web, la clase proxy proporciona un
mtodo para realizar la invocacin en modo asncrono cuyo nombre ser del tipo
XxxAsync(), siendo Xxx el nombre definido en el servicio Web para el mtodo.
using
using
using
using
using
using
using
using
using
using

System;
System.Data;
System.Configuration;
System.Collections;
System.Web;
System.Web.Security;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.WebControls.WebParts;
System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page


{
protected void Button1_Click(object sender, EventArgs e)
{
localhost.Service sw = new localhost.Service();
sw.GetNumCarsCompleted +=new
localhost.GetNumCarsCompletedEventHandler(muestra);
sw.GetNumCarsAsync(txtcadena.Text);
for(int i=1; i<=10; i++=
lblResultado.Text += "wait ";
}
protected void muestra(Object sender,
localhost.GetNumCarsCompletedEventArgs e)
{
lblResultado.Text += "El nmero de caracteres es " +
e.Result.ToString();
}
}
Para que una aplicacin Web cliente de un servicio Web pueda invocar a los
mtodos de este en modo asncrono, es necesario establecer el atributo Async al
valor true en la directiva Page de la pgina aspx desde donde se realiza el acceso.

Servicios Web

64

You might also like