Aspnet
Aspnet
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
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
6. Servicios Web................................................................44
6.1. Conceptos bsicos sobre la arquitectura de servicios Web.............44
ndice
ndice
Capa Intermedia
IIS
Aplicacin
HTTP
Programacin
ASP.NET
con
ASP.NET
BD
Programacin
ASP.NET
con
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:
Programacin
ASP.NET
con
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;
Programacin
ASP.NET
con
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;
con
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.
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.
con
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:
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
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.
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:
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
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;
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;
con
16
Programacin
ASP.NET
con
17
con
18
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().
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:
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.
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>.
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:
<configuration>
<appSettings>
<add key="url" value="http://www.asp.org/listados"/>
</appSettings>
<connectionStrings/>
<system.web>
...
</system.web>
</configuration>
con
22
Programacin
ASP.NET
con
23
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
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
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:
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:
25
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:
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.
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:
LA CLASE LISTCONTROL
Todos los controles de tipo lista heredan de esta clase que contiene las principales
propiedades de listas.
Propiedades
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.
27
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:
28
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:
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:
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.
29
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:
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:
30
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:
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:
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:
32
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.
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:
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:
del
35
Application["contador"] = c + 2;
Application.UnLock();
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
del
37
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.
<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
Acceso a datos
40
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.
Acceso a datos
43
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.
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.
despliegue
de
45
</tr>
</table>
</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.
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.
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
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" />
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.
Optimizacin
y
aplicaciones ASP.NET
despliegue
de
49
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.
Optimizacin
y
aplicaciones ASP.NET
despliegue
de
51
enumerado
Cache
System.Web.Caching.
se
encuentra
en
el
espacio
de
nombres
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.
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.
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.
Web Service
Request (XML)
Response (XML)
Servicios Web
55
Servicio Web
Peticin SOAP
ASP.NET
Respuesta SOAP
ensamblado
56
Registro de servicios
Bsqueda
Cliente
Publicacin
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.
<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:
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:
<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>
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
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;
}
61
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.
Servicios Web
63
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;
Servicios Web
64