Mm032

96
7/23/2019 Mm032 http://slidepdf.com/reader/full/mm032 1/96 Manual m032 CURSO VISUAL C#, ASP.NET DESARROLLO de SITIOS y SERVICIOS WEB 2012 Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 1 Sé diferente, intégrate… Autor: Orlando Gutiérrez Fecha: 23 /09 / 2013 Manual Mm032 CURSO VISUAL C# 2012, ASP.NET DESARROLLO DE SITIOS y SERVICIOS WEB

Transcript of Mm032

Page 1: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 1/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  1 

Sé diferente, intégrate… 

Autor: Orlando Gutiérrez

Fecha: 23 /09 / 2013

Manual Mm032 CURSO VISUAL C# 2012,

ASP.NET DESARROLLO DE SITIOS ySERVICIOS WEB

Page 2: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 2/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  2 

INDICE

Pag. 5 Lección 1  Introducción al desarrollo de aplicaciones Web

Pag. 9 Lección 2  Requerimientos para trabajar con ASP.NET

Pag. 12 Lección 3  Configurar una aplicación Web con IIS

Pag. 13 Lección 4  Configuración automática de Visual Studio (Servidor Virtual)

Pag. 14 Lección 5  Los tres métodos para desarrollar aplicaciones WEB en ASP.NET : Páginas Web,Formularios Web, MVC

Pag. 16 Lección 6  Conceptos de Páginas Web: WebMatrix, Sintáxis Razor

Pag. 19 Lección 7  Conceptos de Formularios Web

Pag. 21 Lección 8  Introducción a MVC

Pag. 24 Lección 9  Creando un sitio básico

Pag. 25 Lección 10 Creando páginas maestras

Pag. 26 Lección 11 Controles ASP.NET

Pag. 27 Lección 12  Controles HTML y de Servidor Web

Pag. 29 Lección 13 Controles de datos ASP.Net :ListView, GridView, SqlDataSource, ChartControl

Pag. 35 Lección 14 Clases : HttpRequest , HttpResponse , HttpServerUtility, HttpSessionState,

HttpApplicationState

Pag. 45 Lección 15 Enrutamiento en ASP.NET

Pag. 48 Lección 16 Seguridad en ASP.NET: Autenticación y Autorización, Proveedores de autenticación,Autorización en ASP.NET

Pag. 52 Lección 17  Archivo de configuración

Pag. 56 Lección 18 Rendimiento y Manejo del Caché

Pag. 64 Lección 19 Controles de Usuario

Pag. 66 Lección 20 Código del lado del cliente: JavaScript, AJAX, Herramientas de AJAX

Pag. 77 Lección 21 Internacionalización

Pag. 80 Lección 22 Puesta en marcha aplicaciones

Pag. 83 Lección 23  Servicios Web XML

Pag. 88 Lección 24 Introducción a los Servicios Web

Pag. 89 Lección 25 Construyendo Servicios Web

Page 3: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 3/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  3 

Pag. 89 Lección 26 Probando un Servicio Web utilizando el Internet Explorer

Pag. 91 Lección 27  Creando un cliente consumiendo Servicios Web

Pag. 94 Lección 28 Seguridad en Servicios Web

Pag. 97 Lección 29 Servicios WEB REST

Pag. 98 Lección 30 Novedades en ASP.Net 4.5 y Visual Studio 2012: Framework y Tiempo de Ejecución,Formularios Web ASP, MVC 4, Páginas Web 2, IIS Express

Page 4: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 4/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  4 

LECCION 1 Introducción al desarrollo de aplicaciones Web

Introducción a ASP.NET

Microsoft® ASP.NET forma parte de la plataforma de computación Microsoft .NET. ASP.NET es empleado en el

desarrollo de aplicaciones WEB y en la implementación de servicios WEB XML. Las páginas ASP.NET se ejecutan enel servidor WEB y generan archivos en un lenguaje de “markup” como HTML, WML, o XML , los cuales son enviadosal cliente (al navegador) .

Las páginas ASP emplean un modelo compilado de programación orientada por eventos. Este modelo permitemejorar el rendimiento de la aplicación y permite separar la lógica de la interfaz con el usuario de la lógica de laaplicación. Las páginas ASP.NET y los archivos de implementación de los servicios Web XML contienen la lógicaejecutada en el servidor (server-side) contrastando con las aplicaciones donde la lógica se ejecuta del lado delcliente como aplicaciones escritas en Microsoft® Visual Basic® .NET, Microsoft® Visual C#® .NET, o en cualquierlenguaje de programación compatible con la plataforma de Microsoft.Net.

Archivos HTML y programación de páginas WEB

El protocolo empleado por Internet para el procesamiento de páginas Web es HTML. Los archivos HTML son

archivos de texto (hipertexto) interpretados por los servidores de páginas Web con IIS y Apache; así como por losnavegadores de Internet como Explorer o Netscape. El código programático asociado a una página Web escompilado por ASP.NET para ser transformado en HTML o alguna derivación de éste para ser desplegadofinalmente en un navegador.

Al desarrollar una aplicación, el diseño de las páginas WEB puede ser realizado con el diseñador o editor de supreferencia y la programación de la misma puede ser efectuada desde el ambiente de programación Visual Studio.Net o colocando los scripts ASP.Net de manera "embeded".

Dentro de una herramienta como Visual Studio.NET también es posible diseñar el formato de la página Web el cualserá desplegado.

Aunque en el caso especial de aplicaciones WEB en ASP.NET pareciera estar muy ligado el código de la aplicacióncon el de la interfaz gráfica es posible emplear técnicas de programación modular, estructurada u orientadas por

objetos permitiendo el desarrollo de aplicaciones de múltiples capas de una manera escalable.

Todas las técnicas de programación disponibles en Visual Studio .NET para el desarrollo de aplicaciones orientadasa datos o a Windows también son aplicables para el caso de desarrollo en Web.

Diseñando aplicaciones Web

Antes de desarrollar una aplicación se debe aplicar un proceso de diseño, en el cual deben tomarse decisionesacerca de las tecnologías para desarrollo del contenido WEB (diseño gráfico y edición), la modelación de losprocesos, la localización y la seguridad.

En el caso de ASP.NET existen varias pautas de diseño a considerar:

• Determinar la tecnología de IIS a emplear

• Diseñando aplicaciones en dos capas “Two-Tier”

• Diseñando aplicaciones en tres capas “Three-Tier”

• Diseñando aplicaciones de múltiples capas “Multi-Tier”

• Diseñando aplicaciones a través de servicios web “Web services”

• Especificando los límites de integración de las capas “Application Boundaries”

Page 5: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 5/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  5 

• Controlando el flujo de la aplicación

• Diseñando una arquitectura cliente-servidor

• Escalabilidad de aplicaciones

• Integrabilidad de aplicaciones

• Internacionalización de aplicaciones

Introducción a las páginas ASP.NET

ASP.NET ofrece un “kit” para el desarrollo de aplicaciones o SDK “Software Development Kit” para el soporte de lastareas y la programación de las páginas web en ASP.NET.

Al crear una aplicación en ASP.Net, deben ser considerados los siguientes puntos (todos estos puntos seránconsiderados en detalle a lo largo del manual):

• Ciclo de vida del proyecto

• Metodologías de desarrollo y fases del proyecto

• Consideraciones de seguridad de la página Web

• La edición, configuración y programación de los formularios Web

• El desarrollo de los controles ASP.NET (En la terminología de microsoft, un control es un objeto empleadopara el desarrollo de la interfaz gráfica).

• Manejo de datos en ASP.NET

• Código del lado del cliente (JavaScript, AJAX)

• Manejo del estado y la sección en una aplicación Web

• Servicios Web

• Desarrollando aplicaciones para consumir servicios Web.

Características de ASP.Net

1.  ASP.NET es un framework “libre” para desarrollar sitios, aplicaciones y servicios web, con HTML, CSS yJavaScript.

Page 6: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 6/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  6 

2.  Sitios Web: ASP.NET es una herramienta ponderosa para desarrollar Sitios Web basados en estándarescon HTML5, CSS3, y JavaScript.

3.  APIs: Se pueden desarrollar APis  ASP.Net para la Web produciendo JSON o XML para comunicarse

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

Page 7: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 7/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  7 

4.  Tiempo Real: Con SignalR  de ASP.NET se puede habilitar la comunicación bi-direccional en tiempo real

entre el cliente y el servidor con sockets web.

5.  Aplicaciones Móbiles : ASP.NET permite desarrollar aplicaciones móviles y soporta el uso de frameworkscomo jQuery Mobile.

Page 8: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 8/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  8 

Tendencias actuales desarrollo asp.net

El sitio oficial de la documentación de ASP.Net es www.asp.net.

Existen actualmente tres maneras de desarrollar aplicaciones WEB con esta tecnología:

• Páginas Web (Web Pages): Las páginas Web ASP.NET Web Pages y la nueva sintaxis Razor proveen unmecanismo rápido, efectivo u ligero de combinar código del servidor con HTML para generar contenido dinámicoweb. Incluyen como características: Conexión a las bases de datos, video, conexión con redes sociales y lascaracterísticas standard de los desarrollos web.

• Formularios Web (Web Forms): Los formularios Web de ASP.NET Web permiten la construcción desitios web dinámicos utilizando un modelo drag-and-drop orientado por eventos. Se basa en una superficie de

diseño y la incorporación sencilla de controles y componentes.

• Modelo Vista Controlador (MVC): Es la implementación del Patrón de Diseño, Modelo Vista Controladoren ASP.Net. Facilita la escritura de código empleando los principios de reutilización.

LECCION 2 Requerimientos para trabajar con ASP.NET

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

  .NET Framework.  Un entorno de creación de código IDE.  Un servidor Web como IIS (Internet Information Server) y permisos para guardar archivos en el servidor

Web.  Adicionalmente, se pueden utilizar los siguientes elementos:

** Un manejador de bases de datos DBMS, como Microsoft SQL Server, para proporcionar elalmacenamiento de datos de la aplicación.** Un servidor SMTP para enviar mensajes de correo electrónico de una aplicación Web ASP.NET.

Page 9: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 9/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  9 

Requisitos

El entorno .NET Framework

ASP.NET forma parte de .NET Framework como el espacio de nombres System.Web. Para utilizar ASP.NET, debetener .NET Framework instalado en el equipo que aloja los sitios Web de ASP.NET.

En la siguiente tabla se muestra la relación entre las versiones de ASP.Net y las del Framework .NET

VERSIÓNDEASP.NET

VERSION.NETFRAMEWORK

VERSIÓN DE VISUALSTUDIO

HITOS IMPORTANTES

1.0 1.0 VISUAL STUDIO .NET (2002)

1.1 1.1 VISUAL STUDIO .NET 2003 CONTROLES MOBILES

VALIDACION AUTOMATICA DE ENTRADA

2.0 2.0 VISUAL STUDIO 2005 CONTROLES DE DATOS

PROVEEDORES DE DATOS

MASTER PAGES

SKINS

3.0 3.0 WPF

WCF

WF

3.5 3.5 VISUAL STUDIO 2008 ASP.NET AJAX

LINQ

3.5SERVICEPACK 1

3.5 SERVICEPACK 1

ASP.NET AJAX DATOS DINÑAMICOS

4.0 4.0 VISUAL STUDIO 2010

4.5 4.5 VISUAL STUDIO 2012

Ambientes de creación de código

Se pueden crear clases y páginas ASP.NET utilizando cualquier editor de texto, como el Bloc de notas de Microsoft,que se suministra con Microsoft Windows. Sin embargo, Microsoft Visual Studio y otros ambientes de desarrollointegrados (IDE) proporcionan muchas características de programación, como plantillas de página, IntelliSense,llenado automático de código y compilación en tiempo de diseño. Estas características pueden acelerar el procesode desarrollo y proporcionar la organización para el proyecto.

Servidores Web

Page 10: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 10/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  10 

Para trabajar con una aplicación Web ASP.NET, se debe utilizar un explorador para realizar solicitudes al servidorWeb que aloja la aplicación. Las aplicaciones Web ASP.NET se alojan normalmente utilizando IIS como servidorWeb. Se pueden probar las aplicaciones ejecutando IIS localmente en el equipo o implementar páginas ycomponentes en un servidor compartido.

En Visual Studio, se pueden probar las páginas Web de ASP.NET usando el servidor de desarrollo de ASP.NET, queejecuta las páginas localmente en el equipo sin necesidad de instalar IIS.

Para trabajar con IIS como servidor Web, la cuenta de usuario en la que se realiza la ejecución debe tener permisode escritura en el directorio en el que reside la aplicación, ya sea como elemento secundario de la raíz del servidorWeb (normalmente la carpeta Inetpub/wwwroot) o como directorio virtual. La cuenta que requiere permiso para undirectorio de aplicaciones suele ser diferente en tiempo de diseño que en tiempo de ejecución. De manerapredeterminada, las aplicaciones Web ASP.NET se ejecutan en el contexto de una cuenta dependiendo de la versióndel Sistema de Operación.

Si se tiene IIS instalado, al instalar .NET Framework se registra la extensión ISAPI de ASP.NET (Aspnet_isapi.dll)en IIS. Si se instala IIS una vez que.NET Framework está instalado, se debe usar la utilidad Aspnet_regiis.exe pararegistrar ASP.NET con IIS..

Si se requiere desarrollar la aplicación mediante un servidor Web de IIS compartido. En este escenario, los mismosrequisitos de permiso se aplican en el escenario de IIS local.

Bases de datos

Si la aplicación requiere almacenamiento de datos, se necesita acceso a un manejador de base de datos comoMicrosoft SQL Server, y a los permisos adecuados para leer y escribir datos en la base de datos. En los escenariostípicos, una cuenta se utiliza para tener acceso a la base de datos en tiempo de diseño y se utiliza una cuentadiferente para tener acceso a la base de datos en tiempo de ejecución.

Servidores SMTP

Para enviar mensajes de correo electrónico desde una aplicación Web ASP.NET, la aplicación debe poder reenviarlos mensajes a un servidor SMTP. Algunos controles ASP.NET, como el control PasswordRecovery, requieren lacapacidad de enviar mensajes de correo electrónico.

Se puede utilizar el servidor virtual SMTP de IIS para reenviar mensajes de correo electrónico.

En la siguiente figura se muestra la arquitectura del Framework de .Net donde se muestra ASP.Net

Page 11: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 11/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  11 

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

LECCION 3 Configurar una aplicación Web con IIS

Para el momento de una implantación de una aplicación ASP.Net es bueno utilizar una implementación en IIS , laconfiguración del mismo depende de la versión de IIS y no de la versión del Framework. En esta lección se indicanlos pasos más importantes.

Introducción a IIS

Internet Information Services (IIS) convierte un computador en un servidor WEB para proveer: los servicios depublicación de WWW World Wide Web, los servicios de transferencia de archivos FTP File Transfer Protocol, losservicios de correo SMTP Simple Mail Transport Protocol, y los servicios de publicación de noticias Network NewsTransfer Protocol. IIS puede ser empleado para realizar “host” y para administrar sitios web y otro contenido enInternet una vez obtenida una dirección IP, registrado el dominio en un servidor DNS, y configurada la redapropiadamente. IIS es un componente del sistema de operación Microsoft® Windows®.

Cuando se establece un directorio virtual en IIS este puede ser colocado en cualquier ruta, la ruta por defectoasociada a localhost es C:\\Inetpub\\wwwroot\\

IIS ofrece una herramienta para desarrollar aplicaciones WEB, la sección de aplicaciones WEB del SDK (SoftwareDevelopment Kit). Estas utilidades se encuentran disponibles en las clases de ASP.NET.

Page 12: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 12/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  12 

Las aplicaciones ASP.NET requieren que la plataforma .NET se encuentre instalada en el servidor IIS.

Configuración IIS

Las versiones previas de ASP 3.0 requerían colocar la información de la configuración en los parámetros deconfiguración de IIS (IIS settings). Por ejemplo, parámetros de configuración como el estado de la sección, el

 “buffer”, el lenguaje de “script” por defecto y el “timeout” se configuraban ejecutando los siguientes pasos:

• Click en el botón derecho de IIS Application

• Seleccionar los parámetros (settings) de application´s property

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

Estos son sólo algunos de los “settings” necesarios a configurar a través de los parámetros de configuración deaplicaciones de Microsoft Management Console (MMC). Todos estos parámetros o modificaciones son aplicadosa “IIS metabase”, la cual es utilizada para calcular los parámetros de aplicación en tiempo de ejecución para laaplicación web.

ASP+, la versión manejada en este manual, no requiere trabajar directamente con “IIS metabase”. En su lugar, laconfiguración en ASP.NET se basa en archivos de configuración con formato XML, como por ejemplo config.web.

Crear y configurar directorios virtuales en IIS

Con el Administrador de Servicios de Internet Information Server (IIS) se puede crear un directorio virtual parauna aplicación Web ASP.NET. Un directorio virtual aparece en los exploradores de los clientes como si estuvieraincluido en el directorio raíz de un servidor Web, incluso si reside físicamente en otra parte. Este método permitepublicar el contenido Web que no se encuentra en la carpeta raíz del servidor Web, como el contenido que está enun equipo remoto. Es también una forma cómoda de configurar un sitio para el trabajo de desarrollo Web localporque no requiere una identidad de sitio única, lo que significa que se necesita un número menor de pasos paracrear un sitio único.

Para crear un directorio virtual, se debe haber creado ya un sitio Web en el servidor Web. IIS crea un sitio Web

predeterminado en el equipo durante la instalación. Si no se ha creado un sitio propio, se puede crear un directoriovirtual en el sitio Web predeterminado.

Como alternativa a la creación de un directorio virtual para la aplicación Web, es posible que quiera crear un nuevositio Web con una identidad única.

LECCION 4 Configuración automática de Visual Studio (Servidor Virtual)

Al seleccionar la opción de Sitio Web Nuevo, se ofrecen una serie de plantillas, entre ellas se puede seleccionarSitio Web ASP.Net. Existe una lista donde se indica la localización del sitio Web. Las opciones son Sistema dearchivos, HTTP y FTP. Con la opción de Sistema de Archivos se utiliza el servidor virtual de Microsoft Visual Studioy es una alternativa viable de desarrollo.

En la siguiente figura se muestra el ejemplo

Page 13: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 13/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  13 

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

LECCION 5 Los tres métodos para desarrollar aplicaciones WEB en ASP.NET : Páginas Web,Formularios Web, MVC

Existen actualmente tres maneras de desarrollar aplicaciones WEB con esta tecnología:

• Páginas Web (Web Pages): Las páginas Web ASP.NET Web Pages y la nueva sintaxis Razor proveen unmecanismo rápido, efectivo u ligero de combinar código del servidor con HTML para generar contenido dinámicoweb. Incluyen como características: Conexión a las bases de datos, video, conexión con redes sociales y lascaracterísticas standard de los desarrollos web.

Page 14: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 14/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  14 

Web Matrix es una herramienta gratuita para realizar estos desarrollos.

• Formularios Web (Web Forms): Los formularios Web de ASP.NET Web permiten la construcción desitios web dinámicos utilizando un modelo drag-and-drop orientado por eventos. Se basa en una superficie dediseño y la incorporación sencilla de controles y componentes.

Visual Studio Express es una herramienta gratuita para realizar estos desarrollos.

• Modelo Vista Controlador (MVC): Es la implementación del Patrón de Diseño, Modelo Vista Controladoren ASP.Net. Facilita la escritura de código empleando los principios de reutilización

Page 15: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 15/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  15 

Visual Studio ofrece en sus plantillas el tipo de proyectos MVC

LECCION 6 Conceptos de Páginas Web: WebMatrix, Sintáxis Razor

Web Matrix

Microsoft WebMatrix es una aplicación de la plataforma Windows libre, ligera, conectada a la nube para desarrolloen Web. WebMatriz habilita a los desarrolladores la construcción de sitios web utilizando plantillas o aplicaciones decódigo libre. Soporta totalmente ASP.Net, PHP, Node.js y HTML 5. El objetivo de Web Matrix es ofrecer unambiente integrado para la programación, configuración y publicación de sitios web.

La página oficial de Web Matrix es http://www.microsoft.com/web/webmatrix/ 

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

Page 16: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 16/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  16 

Razor

La tecnología de páginas Web ASP.NET ofrece la sintaxis Razor. Razor proporciona un lenguaje de programaciónsimple para escribir código en páginas web donde el código basado en servidor se incrusta en el formato HTML delas páginas web (esquema ASP clásico, PHP, JSP). El código de Razor se ejecuta en el servidor antes de que lapágina se envíe al explorador. Este código de servidor puede crear dinámicamente contenido de cliente, es decir,puede generar formato HTML u otro contenido sobre la marcha y, a continuación, enviarlo al explorador junto concualquier código HTML estático que contenga la página.

Razor proporciona una alternativa a formularios Web Forms de ASP.NET. Las páginas de formularios Web Forms secentran en controles de servidor web que generan código HTML automáticamente y emulan el modelo deprogramación basado en eventos usado para aplicaciones cliente. En cambio, las páginas de Razor funcionan másdirectamente como páginas HTML estándar, donde el propio usuario puede crear virtualmente todo el formatoHTML y, a continuación, agregar la funcionalidad alrededor de ese formato usando el código del servidor. Engeneral, las páginas de Razor son más ligeras que las páginas de los formularios Web Forms. Por esa razón yporque la sintaxis es simple, Razor puede ser más fácil de aprender para los programadores y más rápido paradesarrollar páginas web dinámicas.

Las páginas web que incluyen contenido de Razor tienen una extensión de archivo especial (.cshtml para C# o.vbhtml para VB). El servidor reconoce estas extensiones, ejecuta el código que está marcado con sintaxis de Razory, a continuación, envía la página resultante al explorador.

Para trabajar con Razor se debe instalar las herramientas de Razor para ASP.Net para Visual Studio

Page 17: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 17/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  17 

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

Ejemplos de código Razor en C#

var weekDay = DateTime.Now.DayOfWeek;

<p>Today is: @weekDay</p>

Page 18: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 18/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  18 

@for(var i = 10; i < 16; i++)

{

<p style="font-size: @(i + "pt")">My font size is now: @i</p>

}

<ul>@foreach (var myItem in Request.ServerVariables)

{

<li>@myItem</li>

}

</ul>

LECCION 7 Conceptos de Formularios Web

Los formularios Web es la funcionalidad ofrecida por Visual Studio .Net para desarrollar formularios web orientadospor eventos, de manera similar a como se desarrollan los formularios Windows ofreciendo un nivel de abstracción.

Introducción

La plataforma .NET ofrece un ambiente para el desarrollo de formularios ASP.NET para WEB. Este ambiente sebasa en un modelo de programación escalable soportado por el CLR  (Common Language R untime), el cual esempleado en el servidor para generar dinámicamente páginas WEB.

Web Forms en ASP.NET es una Clase de la librería de clases disponibles. Por lo tanto, un Web Form debe serconsiderado como un objeto y no debe confundirse con el archivo .aspx asociado el cual contiene código en HTML ycódigo en un lenguaje de "scripting".

ASP.NET surge como la evolución lógica de ASP (ActiveX Server Pages), por lo tanto ASP.NET es sintácticamentecompatible con las páginas ASP existentes. El ambiente para el desarrollo de formularios WEB en ASP.NET seencuentra diseñado para resolver algunas deficiencias existentes en el modelo previo de ASP. En particular,ASP.NET provee:

• La habilidad para crear y utilizar controles de interfaz de usuario (UI Controls) encapsulando la funcionalidadcomún y por lo tanto reduciendo la cantidad de código a implementar por un desarrollador de páginas WEB.

• La habilidad otorgada a los desarrolladores de generar código de páginas WEB limpio, eficiente y estructurado.

• La habilidad ofrecida a los desarrolladores de generar interfaces WYSIWYG (What You See Is What You Get),típico de los ambientes de desarrollo visual.

Archivos WEB Forms

Las páginas WEB en ASP.NET son archivos de texto con la extensión .aspx. Estas páginas pueden ser desplegadasa través de un directorio virtual raíz de IIS. Cuando un “browser” (navegador) cliente solicita un recurso .aspx, laplataforma .NET (a través del módulo de “runtime” de ASP.NET) realiza la compilación y “parsing” del archivo .aspx(código fuente) y lo transforma en una clase de la plataforma .NET. Esta clase puede ser utilizada para procesar lassolicitudes de la página WEB dinámicamente.

Observación: El archivo .aspx solo es compilado la primera vez que es accedido y esta instancia compilada esreutilizada cada vez que una solicitud de servicio de la página web es requerido.

Una página ASP.NET puede ser creada simplemente tomando un archivo HTML existente y cambiando su extensióna .aspx. No es requerida ninguna modificación al código de la página.

Page 19: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 19/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  19 

A continuación se indican los espacios de nombres utilizados en la plataforma .NET para desarrollar formulariosWeb

Los espacios de nombres System.Web contienen tipos que habilitan la comunicación entre el explorador y elservidor. Los espacios de nombres secundarios incluyen tipos que admiten autenticación de formularios deASP.NET, servicios de aplicación, almacenamiento en caché de datos en el servidor, configuración de aplicacionesASP.NET, datos dinámicos, controladores HTTP, serialización de JSON, incorporación de funcionalidad AJAX a

ASP.NET, seguridad de ASP.NET y servicios Web.

La documentación actualizada de los espacios de nombres se encuentra definida en

http://msdn.microsoft.com/es‐es/library/gg145018.aspx 

En Visual Studio .Net se ofrecen plantillas para la creación de formularios web, como se muestran a continuación

Page 20: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 20/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  20 

Al crearse un Proyecto de este tipo, se crea un formulario Web por defecto, Default.aspx

En un formulario se pueden agregar controles y programar eventos

LECCION 8 Introducción a MVC

El Patrón Modelo - Vista - Controlador (MVC)ASP.NET MVC es, básicamente, una implementación del patrón Modelo - Vista - Controlador (MVC) para tecnologíaASP.NET. El patrón MVC no es ni nuevo (data de finales de los años 70) ni está pensado para aplicaciones web,pero en realidad en aplicaciones web encaja perfectamente.Brevemente se puede afirmar que el patrón MVC separa la lógica (y acceso a datos) de una aplicación de supresentación,usando 3 componentes:1. Modelo: Representa las reglas de negocio de la aplicación (y el acceso a datos subyacente).2. Vistas: Representan la presentación de la aplicación.

Page 21: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 21/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  21 

3. Controlador: Actúan de intermediario entre el usuario y el Modelo y las Vistas. Recogen las peticiones delusuario, interactúan con el modelo y deciden que vista es la que debe mostrar los datos.

En el contexto de ASP.NET MVC:

• Toda la lógica de negocio y el acceso a datos es el Modelo (en muchos casos el Modelo puede estar en uno ovarios assemblies referenciados).• Las vistas contienen, básicamente, el código que se envía al navegador, es decir el código HTML (y código deservidor asociado, siempre y cuando este código haga cosas de presentación, no de lógica de negocio).• Los controladores reciben las peticiones del navegador y en base a esas, deciden que vista debe enviarse devuelta al navegador y con qué datos.

Ventajas de ASP.NET MVC 

La ventaja más visible de ASP.NET con MVC es la facilidad con la que se generan URL semánticas (conocidas comorutas en otros frameworks), es decir URL que tengan la forma http://servidor/ver/productos/cafeteras en lugar dehttp://servidor/productos/ver.aspx?code=cafeteras.

Las URLs semánticas se indexan mejor en los buscadores y son una práctica SEO habitual. No es que en webformsno se puedan hacer, es que en ASP.NET MVC vienen por defecto.

Otras ventajas, más a nivel técnico, son que con ASP.NET MVC se facilita mucho la fase de pruebas de la aplicación(especialmente usando pruebas unitarias) y que el uso correcto del patrón MVC facilita la reutilización de código demanera mucho más efectiva que en webforms.

Por supuesto, todo esto tiene un precio: la curva de aprendizaje de ASP.NET MVC puede ser más alta que la dewebforms, especialmente si nunca se ha desarrollado para web. A diferencia de webforms, dónde se abstrae deHTTP y HTML, ASP.NET MVC está "mucho más cerca de la web", lo que hace necesario conocer HTTP, HTML yJavascript para trabajar con él.

MVC en Visual Studio

Visual Studio ofrece plantillas para el desarrollo MVC

Page 22: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 22/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  22 

Al crear una aplicación MVC , Visual Studio crea una serie de elementos y directorios siguiendo el patrón MVC de laseparación en capas.

LECCION 9 Creando un sitio básico

Un sitio Web se compone de varios elementos conteniendo la aplicación Web. El principal elemento de los sitiosweb son las páginas web.

Las páginas WEB en ASP.NET son archivos de texto con la extensión .aspx. Una página ASP.NET puede ser creadasimplemente tomando un archive HTML existente y cambiando su extensión a .aspx. No es requerida ningunamodificación al código de la página.

Las páginas Web, desarriolladas en Visual Studio, contienen dos archivos:

  Archivos con extensión .aspx (conteniendo el código de la página). La sintáxis es la de HTML con lasdirectivas del Framework de .Net (identificadas con @) y las etiquetas especiales definidas en .Net paralos controles (identificadas con <asp>).

Page 23: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 23/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  23 

  Archivos con extensión .aspx.cs (donde se coloca el código “Behind” para procesar los eventos ocurridos

en el formulario

using System;using System.Collections.Generic;using System.Linq;using System.Web;

using System.Web.UI;using System.Web.UI.WebControls;

namespace appWeb{

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

protected void Page_Load(object sender, EventArgs e){

}}

}

Las páginas web son formularios web heredando de la clase Page. Los eventos se programan como el resto de lasaplicaciones de Visual Studio.

Para crear una página web nueva, se agrega un nuevo elemento del tipo Formulario Web

Page 24: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 24/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  24 

LECCION 10 Creando páginas maestras

Una página maestra en Visual Studio es una página que sirve de modelo o plantilla para otras páginas, Es utilizadacuando se requieren que todas las páginas de una aplicación tengan la misma apariencia. Cuando se crea unapágina web en Visual Studio se indica si requiere o no utilizar una página maestra. Cualquier cambio realizado en lapágina maestra será propagado en todas las páginas donde se utilice.

Las páginas maestras tienen como extensión .Master y se definen empleando la directiva @Master. 

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="appWeb.SiteMaster" %>

Las páginas utilizando una página maestra indican a través de la propiedad MasterPageFile de la directiva @Pagecuál es la página maestra.

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="appWeb._Default" %>

Visual Studio ofrece plantillas para la creación de páginas maestras y páginas maestras anidadas.

Page 25: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 25/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  25 

En Visual Studio es posible indicar la creación de una página web utilizando una página maestra.

LECCION 11 Controles ASP.NET

Una página web en ASP.Net se encuentra conformada por controles.

Cuando se crean páginas Web ASP.NET, se puede utilizar estos tipos de controles:

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

• Controles de servidor web  Controles con más funciones incorporadas que los controles de servidorHTML. Los controles de servidor web incluyen no sólo controles de formulario como botones y cuadros de texto,sino también controles con fines especiales como un calendario, menús y un control de vista de árbol. Los controlesde servidor web son más abstractos que los controles de servidor HTML pues su modelo de objetos no refleja

necesariamente la sintaxis HTML.

• Controles de validación  Controles que incorporan lógica para permitirle comprobar los controles deentrada de los usuarios como el control TextBox. Los controles de validación le permiten comprobar un camponecesario, su adecuación a un valor o un modelo de caracteres concreto, comprobar que un valor se encuentra enun intervalo predefinido, etc.

• Controles de usuario  Controles que crea como páginas Web ASP.NET. Se pueden incrustar controlesde usuario de ASP.NET en otras páginas Web ASP.NET; esta es una forma sencilla de crear barras de herramientasy otros elementos reutilizables.

Page 26: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 26/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  26 

Desde el punto de vista de organización en Visual Studio, los controles son agrupados como se muestra acontinuación.

LECCION 12 Controles HTML y de Servidor Web

Controles de servidor HTML

Los controles de servidor HTML son elementos HTML (o elementos en otro marcado compatible, como XHTML) que

contienen atributos que los convierten en programables en código del servidor. De forma predeterminada, los

elementos HTML en una página Web ASP.NET no están disponibles para el servidor. En su lugar, se tratan comotexto opaco y se pasan al explorador. Sin embargo, cuando se convierten en controles de servidor HTML, los

elementos HTML quedan expuestos como elementos programables en el servidor.

El modelo de objetos de los controles de servidor HTML se relaciona estrechamente con el de los elementos

correspondientes.Por ejemplo, los atributos HTML se exponen en controles de servidor HTML como propiedades.

Cualquier elemento HTML de una página se puede convertir en control de servidor HTML agregando el

atributo runat="server". Durante el análisis, el marco de trabajo de la página ASP.NET crea instancias de todos

los elementos que contienen el atributo runat="server". Si desea hacer referencia al control como un miembro

dentro del código, también deberá asignarle un atributo id al control.

El marco de trabajo de la página proporciona controles de servidor HTML predefinidos para los elementos HTML que

se utilizan con más frecuencia dinámicamente en una página: el elemento form, los elementos input (cuadro de

texto, casilla, botón Enviar), el elemento select, etc. Estos controles de servidor HTML predefinidos comparten las

propiedades básicas del control genérico y, además, cada control normalmente proporciona su propio conjunto de

propiedades y su propio evento.

Los controles de servidor HTML ofrecen las funciones siguientes:

  Un modelo de objetos que pueda volver a programar en el servidor con las técnicas habituales orientadas

a objetos. Los controles de servidor exponen propiedades que permiten manipular los atributos de

marcado del control mediante programación en el código del servidor.

  Un conjunto de eventos para los que pueda escribir controles de eventos de la misma forma que lo haría

en un formulario basado en cliente, con la excepción de que un evento se controla en código del servidor.

Page 27: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 27/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  27 

  La capacidad de controlar eventos en un script de cliente.

  Mantenimiento automático del estado del control. Cuando la página realiza una acción de ida y vuelta al

servidor, los valores que el usuario escriba en los controles de servidor HTML se mantendrán

automáticamente y la página se devuelve al explorador.

  Interacción con los controles de validación ASP.NET para poder comprobar que un usuario ha escrito la

información adecuada en un control.  Enlace de datos a una o varias de las propiedades del control.

  Compatibilidad con estilos si la página Web ASP.NET se muestra en un explorador que admite hojas de

estilos en cascada.

  Paso a través de atributos personalizados. Pueden agregarse los atributos que se necesiten a un control

de servidor HTML: el marco de trabajo de páginas los representará sin ningún cambio en la funcionalidad.

Esto permite agregar atributos específicos del explorador a los controles.

Controles de servidor web

Los controles de servidor web son un segundo conjunto de controles diseñado con otro enfoque. No se asignan

necesariamente uno a uno a controles de servidor HTML. En lugar de ello, se definen como controles abstractos, en

los que el marcado real representado por el control puede ser muy diferente al modelo con respecto al que se hanprogramado. Por ejemplo, un control RadioButtonList de servidor web podría representarse en una tabla o como un

texto en línea con otro marcado.

Los controles de servidor web incluyen controles de formulario tradicionales como botones y cuadros de texto,

además de controles complejos, como, por ejemplo, las tablas. También incluyen controles que proporcionan

funcionalidad de formulario de uso frecuente, como la presentación de datos en cuadrícula, la elección de fechas, la

visualización de menús, etc.

Los controles de servidor web ofrecen todas las funciones descritas anteriormente para los controles de servidor

HTML (excepto la asignación uno a uno a elementos) y estas funciones adicionales:

  Un modelo de objetos enriquecido que proporciona capacidades de programación de tipo seguro.

  Detección automática del explorador. Los controles pueden detectar las funciones del explorador y

representar el marcado adecuado.  Para algunos controles, la capacidad para definir su propio diseño para el control utilizando Templates.

  Para algunos controles, la capacidad de especificar si un evento del control provoca un envío inmediato al

servidor o, en su lugar, se almacena en caché y se activa cuando se envía la página.

  Compatibilidad para temas, lo que le permite definir un aspecto uniforme para los controles en todo el

sitio. Capacidad para pasar eventos de un control anidado (como un botón en una tabla) al control

contenedor.

Los controles utilizan una sintaxis como la que se muestra a continuación:<asp:button attributes runat="server" id="Button1" />

En este caso los atributos no son los de los elementos HTML. En lugar de ello, son propiedades del control Web.

Cuando se ejecuta la página Web ASP.NET, el control de servidor web se representa en la página utilizando el

marcado apropiado, que con frecuencia no sólo depende del tipo de explorador sino también de la configuración

que haya realizado para el control. Por ejemplo, un control TextBox podría representarse como una

etiqueta input o una etiqueta textarea dependiendo de sus propiedades.

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

Page 28: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 28/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  28 

Son controles de origen de datos que permiten utilizar un control Web para tener acceso a los datos de una basede datos, así como dar formato a los controles que permiten mostrar y manipular los datos de una página WebASP.NET.

Los controles de servidor Web enlazados a datos son controles que pueden ser enlazados a un control de códigofuente de datos para facilitar la operación de mostrar y modificar datos en la aplicación Web. Los controles deservidor Web enlazados a datos son controles compuestos que combinan otros controles Web de ASP.NET, como

los controles Label y TextBox, en un diseño único.

Por ejemplo, un control enlazado a datos, como el control DetailsView se puede enlazar a un conjunto deresultados como una tabla de empleados que contenga el nombre de cada empleado, la dirección, el puesto detrabajo, etc. Dentro del control DetailsView, se pueden enlazar controles Label a valores de datos únicos, como elcampo de nombre o de dirección para crear el diseño de datos de la página.

Además de permitir enlazar el control a un conjunto de resultados de datos, los controles enlazados a datospermiten personalizar el diseño del control mediante la utilización de plantillas. También proporcionan un modelocómodo para controlar y cancelar los eventos.

Enlazar a datos un control de servidor Web enlazado a datos

Se puede trabajar con un control enlazado a datos enlazándolo a un control de código fuente de datos como elcontrol ObjectDataSource o el control SqlDataSource. El control de código fuente de datos conecta a un origen dedatos como una base de datos o el objeto de nivel medio y, a continuación, recupera o actualiza los datos. Elcontrol enlazado a datos puede utilizar entonces este dato. Para realizar el enlace, se establece la propiedadDataSourceID del control enlazado a datos para señalar a un control de código fuente de datos. Cuando uncontrol enlazado a datos se enlaza a un control de código fuente de datos, apenas se necesita escribir códigoadicional, o no se necesita en absoluto, para realizar operaciones con datos, porque el control enlazado a datospuede aprovecharse automáticamente de los servicios de datos proporcionados por el control de código fuente dedatos.

Usar controles de servidor web enlazados a datos con los datos dinámicos de ASP.NET

Los datos dinámicos de ASP.NET admiten algunos de los controles enlazados a datos de ASP.NET, como loscontroles DetailsView, FormView, GridView y ListView.

Las interfaces IDataBoundControl, IDataBoundListControl, IDataBoundItemControl e IFieldControl exponen laspropiedades comunes que se requieren para la compatibilidad con los datos dinámicos. Si se va a crear un controlenlazado a datos personalizado que funcione con datos dinámicos, se podrá implementar estas interfaces en lugarde realizar una derivación de la clase DataBoundControl.

Control ListView

El control ListView muestra los datos de un origen de datos en un formato que se define mediante plantillas. Laplantilla contiene el formato, los controles y las expresiones de enlace que se utilizan para definir el diseño de losdatos. El control ListView resulta útil para los datos de cualquier estructura de repetición, de forma similar a los

controles DataList y Repeater. Sin embargo, a diferencia de los controles DataList y Repeater, el control ListView

admite implícitamente las operaciones de edición, inserción y eliminación, así como la funcionalidad de ordenacióny paginación.

Enlazar datos al control ListView

Mediante la propiedad DataSourceID. Esto permite enlazar el control ListView a un control de origen de datos, porejemplo, SqlDataSource. Este método porque permite al control ListView aprovechar las funciones del control de

Page 29: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 29/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  29 

origen de datos. También proporciona funcionalidad integrada para ordenar, paginar, insertar, eliminar yactualizar. Este enfoque también permite utilizar expresiones de enlace bidireccionales.

Mediante la propiedad DataSource. Esto permite enlazar a varios objetos, incluidos los conjuntos de datos ylectores de datos ADO.NET, así como estructuras en memoria como colecciones. Si se utiliza este enfoque, sedeberá escribir código para otras funciones adicionales como ordenar, paginar y actualizar.

Plantillas control ListView, ejemplos

<asp:ListView runat="server" ID="ListView1"DataSourceID="SqlDataSource1">

<LayoutTemplate><table runat="server" id="table1" >

<tr runat="server" id="itemPlaceholder" ></tr></table>

</LayoutTemplate><ItemTemplate><tr runat="server">

<td runat="server"><%-- Data-bound content. --%><asp:Label ID="NameLabel" runat="server"Text='<%#Eval("Name") %>' />

</td></tr>

</ItemTemplate></asp:ListView>

Ejemplo ListView

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

DataSourceID="EmployeesDataSource"

DataKeyNames="EmployeeID">

Page 30: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 30/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  30 

<LayoutTemplate>

<table cellpadding="2" runat="server" id="tblEmployees"

style="width:460px">

<tr runat="server" id="itemPlaceholder">

</tr>

</table>

<asp:DataPager runat="server" ID="DataPager" PageSize="3">

<Fields>

<asp:NumericPagerField

ButtonCount="5"

PreviousPageText="<--"

NextPageText="-->" />

</Fields>

</asp:DataPager>

</LayoutTemplate>

<ItemTemplate>

<tr runat="server">

<td valign="top" colspan="2" align="center"

class="EmployeeName">

<asp:Label ID="FirstNameLabel" runat="server"

Text='<%#Eval("FirstName") %>' />

<asp:Label ID="LastNameLabel" runat="server"

Text='<%#Eval("LastName") %>' />

</td>

</tr>

<tr style="height:72px" runat="server">

<td valign="top" class="EmployeeInfo">

<asp:Label ID="JobTitleLabel" runat="server"

Text='<%#Eval("JobTitle") %>' />

<br />

<asp:HyperLink ID="EmailAddressLink" runat="server"

Text='<%#Eval("EmailAddress") %>'

NavigateUrl='<%#"mailto:" + Eval("EmailAddress") %>' />

<br />

<asp:Label ID="PhoneLabel" runat="server"

Text='<%#Eval("Phone") %>' />

</td>

<td valign="top" class="EmployeeAddress">

<asp:Label ID="AddressLine1Label" runat="server"

Text='<%#Eval("AddressLine1") %>' />

<br />

<asp:Panel ID="AddressLine2Panel" runat="server"

Visible='<%#Eval("AddressLine2").ToString() != String.Empty %>'>

<asp:Label ID="AddressLine2Label" runat="server"

Text='<%#Eval("AddressLine2").ToString()%>' />

<br />

</asp:Panel>

<asp:Label ID="CityLabel" runat="server"

Text='<%#Eval("City") %>' />,

<asp:Label ID="StateProvinceNameLabel" runat="server"

Page 31: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 31/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  31 

Text='<%#Eval("StateProvinceName") %>' />

<asp:Label ID="PostalCodeLabel" runat="server"

Text='<%#Eval("PostalCode") %>' />

<br />

<asp:Label ID="CountryRegionNameLabel" runat="server"

Text='<%#Eval("CountryRegionName") %>' />

</td>

</tr>

</ItemTemplate>

</asp:ListView>

Control GridView

El control GridView muestra los datos en forma de tabla y ofrece la función de ordenar columnas, paginar losdatos y editar o eliminar un único registro.

Una tarea recurrente en el desarrollo de software es mostrar los datos tabulares. ASP.NET proporciona variasherramientas para mostrar los datos tabulares en una cuadrícula, entre las que se incluye el control GridView. Con

el control GridView, puede mostrar, editar y eliminar datos de muchos tipos diferentes de orígenes de datos, entrelos que se incluyen bases de datos, archivos XML y objetos comerciales que exponen los datos.

Se Puede usar el control GridView para hacer lo siguiente:

a)  Enlazar y mostrar los datos automáticamente desde un control de código fuente de datos.b)  Seleccionar, ordenar, paginar, editar y eliminar datos desde un control de código fuente de datos.

Además, para personalizar la apariencia y el comportamiento del control GridView, se puede:

c)  Especificar columnas y estilos personalizados.d)  Utilizar plantillas para crear elementos de interfaz de usuario personalizados.e)  Agregar código a la funcionalidad del control GridView controlando eventos.

Enlazar datos con el control GridView

El control GridView proporciona dos opciones para enlazar los datos:

Se pueden enlazar datos mediante la propiedad DataSourceID, que permite enlazar el control GridView a uncontrol de código fuente de datos. Éste es el enfoque recomendado, ya que permite al control GridView aprovecharlas funciones del control de código fuente de datos y proporcionar una funcionalidad integrada para la ordenación,la actualización y la paginación.

Se pueden enlazar datos mediante la propiedad DataSource, que permite establecer enlaces a distintos objetos,incluidos los lectores de datos y los conjuntos de datos de ADO.NET. Si se utiliza este enfoque, se deberá escribircódigo para cualquier función adicional como ordenación, paginación y actualización.

Cuando se establece un enlace a un origen de datos mediante la propiedad DataSourceID, el control GridView

admite el enlace de datos bidireccional. Además de que el control muestre los datos devueltos, puede permitir queel control admita automáticamente las operaciones de actualización y eliminación de los datos enlazados.

Dar Formato a los datos mostrados en el control GridView

Se puede especificar el diseño, el color, la fuente y la alineación de las filas del control GridView. Se puede definirla presentación del texto y los datos incluidos en las filas. Además, se puede especificar si las filas de datos semuestran como elementos, elementos alternos, elementos seleccionados o elementos en modo de edición. Elcontrol GridView también permite definir el formato de las columnas.

Page 32: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 32/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  32 

Editar y eliminar datos mediante el control GridView

De forma predeterminada, el control GridView muestra los datos en modo de sólo lectura. Sin embargo, el controltambién admite un modo de edición en el que muestra una fila que contiene controles modificables, como TextBoxo CheckBox. También se puede configurar el control GridView para que muestre un botón Delete en el que losusuarios pueden hacer clic para eliminar el registro correspondiente del origen de datos.

El control GridView puede realizar automáticamente las operaciones de edición y eliminación con su origen de datosasociado, lo que permite habilitar la función de edición sin necesidad de escribir código. Si se requiere, se puedecontrolar también el proceso de edición y eliminación de los datos mediante programación, por ejemplo en loscasos en los que el control GridView se enlaza a un control de código fuente de datos de sólo lectura.

Se puede personalizar los controles de entrada que se utilizan cuando una fila está en modo de edición utilizandouna plantilla.

Funcionalidad de ordenación de GridView

El control GridView permite realizar la ordenación por el contenido de una única columna sin que sea necesarioutilizar programación. Se puede personalizar la funcionalidad de ordenación del control GridView administrando elevento de ordenación, proporcionando una expresión de ordenación o aplicando un estilo CSS a la columna por laque se ordenan los datos. Se usan las propiedades SortedAscendingHeaderStyle, SortedDescendingCellStyle,

SortedDescendingHeaderStyle y SortedAscendingHeaderStyle para aplicar un estilo CSS a la columna ordenada.Por ejemplo, se puede especificar un estilo para la columna por la que se ordenan los datos y aplicar un estilo deencabezado para indicar la dirección de la ordenación.

Funcionalidad de paginación de GridView

El control GridView proporciona una funcionalidad sencilla de paginación. Se puede personalizar la funcionalidad depaginación del control GridView utilizando la propiedad PagerTemplate del control GridView.

Se puede especificar cómo se conservan las filas seleccionadas cuando el control GridView se encuentra en modode paginación. De forma predeterminada, la selección de filas está basada en el índice de fila. La misma fila (porejemplo, la tercera fila) está seleccionada en cada página. Alternativamente, se puede habilitar la persistenciabasada en la clave de datos de la fila seleccionada. En ese caso, si selecciona la fila 3 en la página 1 y se desplazaa la página 2, no habrá ninguna fila seleccionada en la página 2. Si regresa a la página 1, la fila 3 aún estará

seleccionada. Para habilitar esta funcionalidad se establece la propiedad EnablePersistedSelection en true.

Control SqlDataSource

El control SqlDataSource permite usar un control de datos para tener acceso a datos ubicados tanto en bases dedatos relacionales, como las bases de datos de Microsoft SQL Server y de Oracle, como en orígenes de datos OLEDB y ODBC.

La forma más común de usar un control SqlDataSource es especificarlo en el Asistente para la configuración deorígenes de datos cuando se establece el Origen de datos de un control enlazado a datos, como GridView (control),FormView (control), DetailsView (control), DataList (control) o Repeater (control).

También se puede agregar un control SqlDataSource a una página arrastrándolo del panel de tareas Cuadro deherramientas a la página. Cuando el control se encuentre en la página, clic en él con el botón secundario y se elige

Propiedades para abrir el panel de tareas Propiedades de etiqueta, en el que puede configurar las propiedades delcontrol.

Para conectar a una base de datos, se debe establecer la propiedad ConnectionString en una cadena de conexiónválida. El control SqlDataSource admite cualquier base de datos relacional SQL que pueda conectarse mediante unproveedor ADO.NET, tal como SqlClient, OleDb, Odbc o OracleClient.

Para recuperar datos de una base de datos subyacente, se establece la propiedad SelectCommand con unaconsulta SQL. Si la base de datos a la que está asociada el control SqlDataSource admite procedimientosalmacenados, puede establecer la propiedad SelectCommand en el nombre de un procedimiento almacenado. La

Page 33: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 33/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  33 

consulta SQL que especifique también puede ser una consulta parametrizada. Puede agregar objetos Parameter que asociados a una consulta parametrizada a la colección SelectParameters..

El control SqlDataSource recupera datos cada vez que se l lama al método Select. Este método proporciona accesomediante programación al método especificado por la propiedad SelectMethod. Los controles que se enlazan aSqlDataSource llaman automáticamente al método Select cuando se l lama a su método DataBind. Si establece lapropiedad DataSourceID de un control enlazado a datos, el control se enlaza automáticamente a los datos del

origen de datos, según sea necesario.

Dependiendo de las capacidades del producto de base de datos subyacente y de la configuración de la instancia dela clase SqlDataSource, se puede realizar operaciones de datos tales como actualizaciones, inserciones yeliminaciones. Para realizar estas operaciones de datos, se establece el texto de comando adecuado y cualquierparámetro asociado para la operación a realizar. Por ejemplo, para una operación de actualización, se establece lapropiedad UpdateCommand en una cadena SQL o en el nombre de un procedimiento almacenado y se agreganlos parámetros necesarios a la colección UpdateParameters. La actualización se realiza cuando se llama almétodo Update, explícitamente mediante código o automáticamente mediante un control enlazado a datos. Elmismo modelo general se sigue para las operaciones Delete e Insert.

Las consultas y comandos SQL que se utilizan en las propiedades SelectCommand, UpdateCommand,InsertCommand y DeleteCommand se pueden parametrizar.

Chart Control

Los controles Chart permiten crear páginas ASP.NET o aplicaciones de Windows Forms con gráficos sencillos,intuitivos y visualmente persuasivos para un análisis estadístico o financiero complejo.

A continuación se muestran los pasos para crear un Chart

Agregar un control Chart

Para agregar un control de gráfico a una aplicación

1.  En la vista de diseño, abrir el Cuadro de herramientas.

2.  Arrastrar un control Chart hasta el área de diseño.El control Chart se encuentra en la referencia Componentes de .NET Framekwork:

o  System.Web.UI.DataVisualization.Charting 

o  System.Windows.Forms.DataVisualization.Charting 

3.  Clic con el botón secundario sobre el control Chart en el área de diseño y seleccionar Propiedades.

4.  Parametrizar los elementos del gráfico (ChartAreas, Series, Leyendas, Titulos, Anotaciones)

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

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

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

Estas clases se encuentran en el espacio de nombres System.Web donde se encuentran las clases e interfacesque permiten la comunicación entre el explorador y el servidor. Este espacio de nombres incluye la claseHttpRequest, que proporciona amplia información sobre la solicitud HTTP actual, la clase HttpResponse, queadministra la salida HTTP al cliente, y la clase HttpServerUtility, que proporciona acceso a las utilidades yprocesos del servidor. System.Web también incluye clases para la manipulación de cookies, la transferencia dearchivos, la información de excepciones y el control de la memoria caché de resultados.

Page 34: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 34/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  34 

Clase HttpRequest

La clase HttpRequest permite leer los http valores enviados por un cliente durante un requerimiento Web(web Request) en ASP.NET. Se encuentra dentro del espacio de nombres System.Web y se trata de una clasesellada (no puede ser heredada).System.Web.HttpRequest [NotInheritable Public Class HttpRequest

Los métodos y propiedades de la clase HttpRequest son accedidos empleando la propiedad Request de las clasesHttpApplication, HttpContext, Page, y UserControl.

A continuación un ejemplo de código sobre cómo utilizar la clase.

<%@ Page Language="C#" %>

<%@ import Namespace="System.Threading" %>

<%@ import Namespace="System.IO" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

 /* NOTE: To use this sample, create a c:\temp\CS folder,

* add the ASP.NET account (in IIS 5.x <machinename>\ASPNET,

* in IIS 6.x NETWORK SERVICE), and give it write permissions

* to the folder.*/ 

private const string INFO_DIR = @"c:\temp\CS\RequestDetails";

public static int requestCount;

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

{

 // Create a variable to use when iterating 

 // through the UserLanguages property. 

int langCount;

int requestNumber = Interlocked.Increment(ref  requestCount);

 // Create the file to contain information about the request. 

string strFilePath = INFO_DIR + requestNumber.ToString() + @".txt";

StreamWriter sw = File.CreateText(strFilePath);

try 

{

 // Write request information to the file with HTML encoding. 

sw.WriteLine(Server.HtmlEncode(DateTime.Now.ToString()));

sw.WriteLine(Server.HtmlEncode(Request.CurrentExecutionFilePath));

sw.WriteLine(Server.HtmlEncode(Request.ApplicationPath));

sw.WriteLine(Server.HtmlEncode(Request.FilePath));

sw.WriteLine(Server.HtmlEncode(Request.Path));

Page 35: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 35/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  35 

 // Iterate through the Form collection and write 

 // the values to the file with HTML encoding. 

 // String[] formArray = Request.Form.AllKeys; 

foreach (string s in Request.Form)

{

sw.WriteLine("Form: " + Server.HtmlEncode(s));

}

 // Write the PathInfo property value 

 // or a string if it is empty. 

if  (Request.PathInfo == String.Empty)

{

sw.WriteLine("The PathInfo property contains no information.");

}

else 

{

sw.WriteLine(Server.HtmlEncode(Request.PathInfo));

}

 // Write request information to the file with HTML encoding. 

sw.WriteLine(Server.HtmlEncode(Request.PhysicalApplicationPath));

sw.WriteLine(Server.HtmlEncode(Request.PhysicalPath));

sw.WriteLine(Server.HtmlEncode(Request.RawUrl));

 // Write a message to the file dependent upon 

 // the value of the TotalBytes property. 

if  (Request.TotalBytes > 1000)

{

sw.WriteLine("The request is 1KB or greater");

}

else 

{

sw.WriteLine("The request is less than 1KB");

}

 // Write request information to the file with HTML encoding. 

sw.WriteLine(Server.HtmlEncode(Request.RequestType));

sw.WriteLine(Server.HtmlEncode(Request.UserHostAddress));

sw.WriteLine(Server.HtmlEncode(Request.UserHostName));

sw.WriteLine(Server.HtmlEncode(Request.HttpMethod));

 // Iterate through the UserLanguages collection and 

 // write its HTML encoded values to the file. 

for (langCount=0; langCount < Request.UserLanguages.Length; langCount++)

{

sw.WriteLine(@"User Language " + langCount +": " +

Server.HtmlEncode(Request.UserLanguages[langCount]));

}

}

Page 36: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 36/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  36 

finally 

{

 // Close the stream to the file. 

sw.Close();

}

lblInfoSent.Text = "Information about this request has been sent to a file.";

}

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

{

lblInfoSent.Text = "Hello, " + Server.HtmlEncode(txtBoxName.Text) +

". You have created a new request info file.";

}

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head>

<title>ASP.NET Example</title>

</head>

<body>

<form id="form1" runat="server">

<p>

</p>

<p>

Enter your name here:

<asp:TextBox id="txtBoxName" runat="server"></asp:TextBox>

</p>

<p>

<asp:Button id="btnSendInfo" onclick="btnSendInfo_Click" runat="server" Text="Click

Here"></asp:Button>

</p>

<p>

<asp:Label id="lblInfoSent" runat="server"></asp:Label>

</p>

</form>

</body>

</html>

Clase HttpResponse

La clase HttpResponse permite encapsular la información de respuesta http en una operación de ASP.NET. Seencuentra dentro del espacio de nombres System.Web y se trata de una clase sellada (no puede ser heredada).

sealed class HttpResponse 

Los métodos y propiedades de la clase HttpResponse son expuestos a través de la propiedad Response de lasclases HttpApplication, HttpContext, Page, y UserControl.

A continuación un ejemplo de código sobre cómo utilizar la clase.

Page 37: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 37/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  37 

<%@ Page Language="C#" %>

<%@ import Namespace="System.Drawing" %>

<%@ import Namespace="System.Drawing.Imaging" %>

<%@ import Namespace="System.Drawing.Drawing2D" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

private void Page_Load(object sender, EventArgs e)

{

 // Set the page's content type to JPEG files 

 // and clears all content output from the buffer stream. 

Response.ContentType = "image/jpeg";

Response.Clear();

 // Buffer response so that page is sent 

 // after processing is complete. 

Response.BufferOutput = true;

 // Create a font style. 

Font rectangleFont = new Font(

"Arial", 10, FontStyle.Bold);

 // Create integer variables. 

int height = 100;

int width = 200;

 // Create a random number generator and create 

 // variable values based on it. 

Random r = new Random();

int x = r.Next(75);

int a = r.Next(155);

int x1 = r.Next(100);

 // Create a bitmap and use it to create a 

 // Graphics object. 

Bitmap bmp = new Bitmap(

width, height, PixelFormat.Format24bppRgb);

Graphics g = Graphics.FromImage(bmp);

g.SmoothingMode = SmoothingMode.AntiAlias;

g.Clear(Color.LightGray);

 // Use the Graphics object to draw three rectangles. 

g.DrawRectangle(Pens.White, 1, 1, width-3, height-3);

g.DrawRectangle(Pens.Aquamarine, 2, 2, width-3, height-3);

g.DrawRectangle(Pens.Black, 0, 0, width, height);

 // Use the Graphics object to write a string 

Page 38: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 38/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  38 

 // on the rectangles. 

g.DrawString(

"ASP.NET Samples", rectangleFont,

SystemBrushes.WindowText, new PointF(10, 40));

 // Apply color to two of the rectangles. 

g.FillRectangle(

new SolidBrush(

Color.FromArgb(a, 255, 128, 255)),

x, 20, 100, 50);

g.FillRectangle(

new LinearGradientBrush(

new Point(x, 10),

new Point(x1 + 75, 50 + 30),

Color.FromArgb(128, 0, 0, 128),

Color.FromArgb(255, 255, 255, 240)),

x1, 50, 75, 30);

 // Save the bitmap to the response stream and 

 // convert it to JPEG format. 

bmp.Save(Response.OutputStream, ImageFormat.Jpeg);

 // Release memory used by the Graphics object 

 // and the bitmap. 

g.Dispose();

bmp.Dispose();

 // Send the output to the client. 

Response.Flush();

}

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head>

<title>ASP.NET Example</title>

</head>

<body>

<form id="form1" runat="server">

</form>

</body>

</html>

Clase HttpServerUtility

Provee un conjunto de métodos para facilitar el procesamiento de requerimientos Web en ASP.NET. Se encuentradentro del espacio de nombres System.Web y se trata de una clase sellada (no puede ser heredada).

System.Web.HttpServerUtility sealed public class HttpServerUtility

Page 39: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 39/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  39 

Los métodos y propiedades de la clase HttpServerUtility son expuestos a través del objeto intrínseco a ASP.NET'sllamado Server.

A continuación un ejemplo de código sobre cómo utilizar la clase.

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-

transitional.dtd">

<script runat="server">

protected void Button1_Click(object sender, EventArgs e)

{

if  (!String.IsNullOrEmpty(TextBox1.Text))

{

 // Access the HttpServerUtility methods through 

 // the intrinsic Server object. 

Label1.Text = "Welcome, " +

Server.HtmlEncode(TextBox1.Text) +

".<br/> The url is " +

Server.UrlEncode(Request.Url.ToString());

}

}

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>HttpServerUtility Example</title>

</head>

<body>

<form id="form1" runat="server">

<div>

Enter your name:<br />

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Submit" />

<br />

<asp:Label ID="Label1" runat="server" />

</div>

</form>

</body>

</html>

Clase HttpSessionState

Esta clase provee acceso a los valores del estado de una sección así como los “settings” a nivel de sección y losmétodos para controlar el ciclo de vida de la sección. Se encuentra dentro del espacio de nombresSystem.Web.SessionState y se trata de una clase sellada (no puede ser heredada).

System.Object System.Web.SessionState.HttpSessionState 

Page 40: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 40/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  40 

sealed public class HttpSessionState

implements ICollection, IEnumerable

A continuación un ejemplo de código sobre cómo utilizar la clase.

<%@ Page Language="C#" %>

<%@ Import Namespace="System.Collections" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-

transitional.dtd">

<script runat="server">

public void Page_Load(object sender, EventArgs args)

{

if  (!IsPostBack)

{

if  (Session["address"] == null)

{

enterUserInfoPanel.Visible = true;

userInfoPanel.Visible = false;}

else 

{

enterUserInfoPanel.Visible = false;

userInfoPanel.Visible = true;

SetLabels();

}

}

}

protected void SetLabels(){

firstNameLabel.Text = Session["firstName"].ToString();

lastNameLabel.Text = Session["lastName"].ToString();

addressLabel.Text = Session["address"].ToString();

cityLabel.Text = Session["city"].ToString();

stateOrProvinceLabel.Text = Session["stateOrProvince"].ToString();

zipCodeLabel.Text = Session["zipCode"].ToString();

countryLabel.Text = Session["country"].ToString();

}

protected void EnterInfoButton_OnClick(object sender, EventArgs e)

{Session["firstName"] = Server.HtmlEncode(firstNameTextBox.Text);

Session["lastName"] = Server.HtmlEncode(lastNameTextBox.Text);

Session["address"] = Server.HtmlEncode(addressTextBox.Text);

Session["city"] = Server.HtmlEncode(cityTextBox.Text);

Session["stateOrProvince"] = Server.HtmlEncode(stateOrProvinceTextBox.Text);

Session["zipCode"] = Server.HtmlEncode(zipCodeTextBox.Text);

Session["country"] = Server.HtmlEncode(countryTextBox.Text);

Page 41: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 41/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  41 

enterUserInfoPanel.Visible = false;

userInfoPanel.Visible = true;

SetLabels();

}

protected void ChangeInfoButton_OnClick(object sender, EventArgs args)

{

enterUserInfoPanel.Visible = true;

userInfoPanel.Visible = true;

}

</script>

<html xmlns="http://www.w3.org/1999/xhtml">

<head id="Head1" runat="server">

<meta http-equiv="Content-Type" content="text/html" />

<title>User Information</title>

</head>

<body>

<form id="form1" runat="server">

<h3>

User information</h3>

<asp:Label ID="Msg" ForeColor="maroon" runat="server" /><br />

<asp:Panel ID="enterUserInfoPanel" runat="server">

<table cellpadding="3" border="0">

<tr>

<td>

First name:</td>

<td>

<asp:TextBox ID="firstNameTextBox" runat="server" /></td>

</tr>

<tr>

<td>

Last name:</td>

<td>

<asp:TextBox ID="lastNameTextBox" runat="server" /></td>

</tr>

<tr>

<td>

Address:</td>

<td>

<asp:TextBox ID="addressTextBox" runat="server" /></td>

</tr>

<tr>

<td>

City:</td>

<td>

<asp:TextBox ID="cityTextBox" runat="server" /></td>

</tr>

Page 42: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 42/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  42 

<tr>

<td>

State or Province:</td>

<td>

<asp:TextBox ID="stateOrProvinceTextBox" runat="server" /></td>

</tr>

<tr>

<td>

Zip Code/Postal Code:</td>

<td>

<asp:TextBox ID="zipCodeTextBox" runat="server" /></td>

</tr>

<tr>

<td>

Country:</td>

<td>

<asp:TextBox ID="countryTextBox" runat="server" /></td>

</tr>

<tr>

<td>

&nbsp;</td>

<td>

<asp:Button ID="enterInfoButton" runat="server" Text="Enter user information" 

OnClick="EnterInfoButton_OnClick" /></td>

</tr>

</table>

</asp:Panel>

<asp:Panel ID="userInfoPanel" runat="server">

<table cellpadding="3" border="0">

<tr>

<td>

Name:</td>

<td>

<asp:Label ID="firstNameLabel" runat="server" />

<asp:Label ID="lastNameLabel" runat="server" />

</td>

</tr>

<tr>

<td valign="top">

address:</td>

<td>

<asp:Label ID="addressLabel" runat="server" /><br />

<asp:Label ID="cityLabel" runat="server" />,

<asp:Label ID="stateOrProvinceLabel" runat="server" />

<asp:Label ID="zipCodeLabel" runat="server" /><br />

<asp:Label ID="countryLabel" runat="server" />

</td>

</tr>

<tr>

<td>

Page 43: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 43/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  43 

&nbsp;</td>

<td>

<asp:Button ID="changeInfoButton" runat="server" Text="Change user information" 

OnClick="ChangeInfoButton_OnClick" /></td>

</tr>

</table>

</asp:Panel>

</form>

</body>

</html>

Clase HttpApplicationState

Permite compartir información global mediante múltiples sesiones y peticiones en una aplicación ASP.NET.

Se encuentra dentro del espacio de nombres System.Web  y se trata de una clase sellada (no puede serheredada).

System.ObjectSystem.Collections.Specialized.NameObjectCollectionBase

System.Web.HttpApplicationState 

sealed public class HttpApplicationState : NameObjectCollectionBaseUna aplicación ASP.NET es la suma de todos los archivos, páginas, controladores, módulos y código que seencuentran en el ámbito de un directorio virtual y sus subdirectorios en un único servidor Web.La primera vez que un cliente solicita un recurso URL de un directorio virtual de una aplicación ASP.NET se creauna única instancia de una clase HttpApplicationState. Para cada aplicación ASP.NET de un servidor Web se creauna única instancia independiente. Después, mediante el objeto intrínseco Application, se expone una referencia acada instancia.Una aplicación ASP.NET es la suma de todos los archivos, páginas, controladores, módulos y código que seencuentran en el ámbito de un directorio virtual y sus subdirectorios en un único servidor Web.

La primera vez que un cliente solicita un recurso URL de un directorio virtual de una aplicación ASP.NET se crea

una única instancia de una clase HttpApplicationState.Para cada aplicación ASP.NET de un servidor Web se creauna única instancia independiente.Después, mediante el objeto intrínseco Application, se expone una referencia acada instancia.

El estado de la aplicación no se comparte a través de una granja de servidores web (donde múltiples servidoreshospedan la aplicación) ni de una unidad Web (donde múltiples procesos del mismo equipo hospedan la aplicación).

LECCION 15 Enrutamiento en ASP.NET

El enrutamiento ASP.NET permite usar direcciones URL que no es necesario asignar a archivos específicos de unsitio web. Dado que la dirección URL no tiene que asignarse a un archivo, se pueden usar direcciones URL quedescriban la acción del usuario y, por tanto, sean más fáciles de comprender.

El marco de MVC de ASP.NET y los datos dinámicos de ASP.NET extienden el enrutamiento para proporcionarcaracterísticas que se usan únicamente en las aplicaciones de MVC y aplicaciones de datos dinámicos.

En una aplicación ASP.NET que no utiliza el enrutamiento, una solicitud entrante de una dirección URLnormalmente se asigna a un archivo físico que controla la solicitud, como un archivo .aspx. Por ejemplo, unasolicitud de http://server/application/Products.aspx?id=4 se asigna a un archivo denominado Products.aspx quecontiene código y marcado para representar una respuesta al explorador. La página web utiliza el valor de cadenade consulta id=4 para determinar el tipo de contenido que se va a mostrar.

Page 44: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 44/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  44 

En el enrutamiento de ASP.NET, se pueden definir modelos de dirección URL que se asignen a archivos decontrolador de solicitudes pero que no necesariamente incluyan los nombres de esos archivos en la dirección URL.Además, se pueden incluir marcadores de posición en un modelo de dirección URL de modo que se puedan pasardatos variables al controlador de solicitudes sin necesidad de una cadena de consulta.

Por ejemplo, en la solicitud de http://server/application/Products/show/beverages, el analizador del enrutamientopuede pasar los valores Products, show y beverages a un controlador de páginas. En este ejemplo, si se define la

ruta mediante el modelo de dirección server/application/{area}/{action}/{category}, el controlador de páginasrecibirá una colección de diccionarios donde el valor asociado a la clave área es Products, el valor de la clave actiones show y el valor de la clave category es beverages. En una solicitud no administrada por el enrutamiento dedirecciones URL, el fragmento /Products/show/beverages se interpretaría como la ruta de acceso a un archivo de laaplicación.

Modelos de dirección URL

Un modelo de dirección URL puede contener valores literales y marcadores de posición de variables(denominados parámetros de dirección URL). Los literales y marcadores de posición se encuentranen segmentos de la dirección URL que están delimitados por el carácter de barra diagonal (/).Cuando se realiza una solicitud, la dirección URL se analiza en segmentos y marcadores de posición, y seproporcionan los valores de las variables al controlador de solicitudes. Este proceso es similar a la forma en que seanalizan los datos de las cadenas de consulta y se pasan al controlador de solicitudes. En ambos casos, la

información de las variables va incluida en la dirección URL y se pasa al controlador en forma de pares clave-valor. Para las cadenas de consulta, tanto las claves como los valores están en la dirección URL. Para las rutas, lasclaves son los nombres de marcador de posición que se definen en el modelo de dirección URL y son solo losvalores los que se encuentran en la dirección URL.En un modelo de dirección URL, los marcadores de posición se definen entre llaves ({ y }). Se pueden definirvarios marcadores de posición en un segmento, pero deben ir separados por un valor literal. Porejemplo, {language}-{country}/{action} es un modelo de ruta válido. Sinembargo, {language}{country}/{action} no es un modelo válido porque no hay ningún valor literal ni delimitadorentre los marcadores de posición. Por consiguiente, el enrutamiento no puede determinar dónde debe separar elvalor del marcador de posición language del valor del marcador de posición country.En la tabla siguiente se muestran modelos de ruta válidos y ejemplos de solicitudes URL que coinciden con losmodelos.

Definición de la ruta Ejemplo de dirección URL coincidente

{controller}/{action}/{id}   /Products/show/beverages 

{table}/Details.aspx   /Products/Details.aspx 

blog/{action}/{entry}   /blog/show/123 

{reporttype}/{year}/{month}/{day}   /sales/2008/1/5 

{locale}/{action}   /US/show 

{language}-{country}/{action}   /en-US/show 

Definir rutas para las aplicaciones de formularios Web Forms

Se crea una ruta definiendo un modelo para la dirección URL, especificando un controlador que se invoca enrespuesta a la solicitud y especificando los valores predeterminados o restricciones asociados.

Page 45: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 45/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  45 

Para crear una ruta en el archivo Global.asax de la aplicación, se agrega un método que acepte un solo parámetrode tipo RouteCollection. En el método, se agregan rutas a la aplicación mediante el métodoRouteCollection.MapPageRoute (String, String, String) o una de sus sobrecargas. El método base permiteestablecer el nombre, el modelo de dirección URL y el archivo físico de la ruta. Las sobrecargas permiten establecerlas siguientes propiedades:

PageRouteHandler.CheckPhysicalUrlAccess

Route.Defaults

Route.Constraints

Route.DataTokens

En el controlador Application_Start del archivo Global.asax, llame al nuevo método.

Se puede agregar las rutas directamente en el método Application_Start en lugar de utilizar un métodoindependiente. También se pueden agregar en otros puntos del ciclo de vida de una aplicación. Si se agrega lasrutas en el controlador Application_Start, se asegura de que dichas rutas estén disponibles cuando se inicie laaplicación. Si se agrega las rutas en un método independiente al que se llama desde el método Application_Start,se podrán agregarlas cuando someta la aplicación a una prueba unitaria.

En el siguiente ejemplo, se muestra cómo definir las rutas para las aplicaciones de formularios Web Forms. Semuestra un método denominado RegisterRoutes al que se l lama desde Application_Start en el archivo Global.asax.El método agrega seis rutas, una para cada sobrecarga del método MapPageRoute. Todas las rutas tienenparámetros denominados locale y cuatro rutas tienen parámetros denominados year. Cuatro rutas también tienenun parámetro comodín denominado querystring. Todas las rutas salvo una tienen un nombre para que se puedendistinguir por su nombre cuando se generen las direcciones URL. En el ejemplo, también se incluyen rutas conrestricciones, valores predeterminados y tokens de datos. Todas las rutas del informe de ventas están asignadas alarchivo Sales.aspx y las rutas del informe de gastos están asignadas al archivo Expenses.aspx.

void Application_Start(object sender, EventArgs e)

{

RegisterRoutes(RouteTable.Routes);

}

void RegisterRoutes(RouteCollection routes)

{

routes.MapPageRoute("",

"SalesReport/{locale}/{year}/{*queryvalues}", "~/sales.aspx");

routes.MapPageRoute("SalesSummaryRoute",

"SalesReportSummary/{locale}", "~/sales.aspx");

routes.MapPageRoute("SalesDetailRoute",

"SalesReportDetail/{locale}/{year}/{*queryvalues}", "~/sales.aspx",

false);

routes.MapPageRoute("SalesCurrentYearRoute",

"SalesReportCurrent/{locale}/{year}/{*queryvalues}", "~/sales.aspx",

false,

new RouteValueDictionary

{ { "locale", "US" }, { "year", DateTime.Now.Year.ToString() } });

Page 46: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 46/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  46 

routes.MapPageRoute("ExpenseCurrentYearRoute",

"ExpenseReportCurrent/{locale}", "~/expenses.aspx",

false,

new RouteValueDictionary

{ { "locale", "US" }, { "year", DateTime.Now.Year.ToString() } },

new RouteValueDictionary

{ { "locale", "[a-z]{2}" }, { "year", @"\d{4}" } });

routes.MapPageRoute("ExpenseDetailRoute",

"ExpenseReportDetail/{locale}/{year}/{*queryvalues}", "~/expenses.aspx",

false,

new RouteValueDictionary

{ { "locale", "US" }, { "year", DateTime.Now.Year.ToString() } },

new RouteValueDictionary

{ { "locale", "[a-z]{2}" }, { "year", @"\d{4}" } },

new RouteValueDictionary

{ { "account", "1234" }, { "subaccount", "5678" } });

}

LECCION 16 Seguridad en ASP.NET: Autenticación y Autorización, Proveedores de autenticación,Autorización en ASP.NET

ASP.NET proporciona un mayor control para implementar la seguridad de la aplicación. Seguridad ASP.NETfunciona junto con la seguridad de Microsoft Internet Information Services (IIS) e incluye servicios de autenticacióny autorización para implementar el modelo de seguridad ASP.NET. ASP.NET también incluye una característica deseguridad basada en funciones que se puede implementar para Microsoft Windows y las cuentas de usuario no sonde Windows.

Flujo de seguridad con una solicitud

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

  Un cliente solicita una página .aspx que reside en un servidor IIS.

  Las credenciales del cliente se pasan a IIS.

  IIS autentica al cliente y envía el símbolo autenticado junto con la solicitud del cliente para el proceso detrabajo ASP.NET.

Basado en el símbolo autenticado de IIS y las opciones de configuración de la aplicación Web, ASP.NET decide si seva a suplantar a un usuario en el subproceso que está procesando la solicitud. Una diferencia distintiva entrepáginas Active Server (ASP) de Microsoft y ASP.NET, ASP.NET ya no representa al usuario autenticado de formapredeterminada. Para habilitar la suplantación, debe establecer el atributo impersonate de la sección de identidad

en el archivo Web.config en true.

Valores de configuración relacionados

IIS mantiene valores de configuración relacionados con la seguridad de la metabase de IIS. Sin embargo, ASP.NETmantiene la seguridad (y otras) las opciones de configuración en archivos de configuración de lenguaje de marcadoExtensible (XML). Aunque, por lo general, esto simplifica la implementación de la aplicación desde el punto de vistade seguridad, el modelo de seguridad que adopta la aplicación necesita la configuración correcta de la metabase deIIS y la aplicación ASP.NET a través de su archivo de configuración (Web.config).

Page 47: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 47/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  47 

Las siguientes secciones de configuración relacionadas con la seguridad ASP.NET:

<authentication>

</authentication>

<authorization>

</authorization>

<identity>

</identity>

<machineKey>

</machineKey>

Autenticación

La autenticación es el proceso por el que se obtienen credenciales de identificación como el nombre y la contraseña

del usuario y se validan dichas credenciales contra alguna autoridad.

Proveedores de Autenticación

La autenticación es un proceso que consiste en obtener las credenciales de identificación, como nombre ycontraseña, de un usuario y validarlas consultando a una autoridad determinada. Si las credenciales son válidas, seconsidera a la entidad que ha enviado las credenciales como una entidad autenticada. Una vez autenticada laidentidad, el proceso de autorización determina si esa identidad tiene acceso a un recurso específico.

ASP.NET implementa este proceso a través de proveedores de autenticación, que son módulos que contienen elcódigo necesario para autenticar las credenciales del solicitante.

Proveedor de autenticación de Windows

Proporciona información sobre cómo utilizar la autenticación de Windows junto con la autenticación de MicrosoftInternet Information Services (IIS) para proteger las aplicaciones ASP.NET.

Proveedor de autenticación mediante formularios

Proporciona información sobre cómo crear un formulario de inicio de sesión específico de la aplicación y realizar laautenticación mediante código propio. Una manera sencilla de trabajar con la autenticación de formularios consisteen utilizar la pertenencia a ASP.NET y los controles de inicio de sesión de ASP.NET, que conjuntamenteproporcionan un método para recopilar las credenciales de usuario, autenticarlas y administrarlas, con muy pococódigo o nada en absoluto.

También se puede considerar el uso de Windows Live ID para la autenticación de usuarios

ASP.NET proporciona cuatro proveedores de autenticación:

  Autenticación mediante formularios

  Autenticación de Windows

  Autenticación de Passport

  Autenticación predeterminada

Autenticación mediante formularios

Page 48: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 48/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  48 

Autenticación mediante formularios hace referencia a un sistema que redirige las solicitudes no autenticadas a unformulario de lenguaje de marcado de hipertexto (HTML) en el que los usuarios escriban sus credenciales. Despuésde que el usuario proporciona las credenciales y envía el formulario, la aplicación autentica la solicitud y el sistemaemite un vale de autorización en forma de una cookie. Esta cookie contiene las credenciales o una clave paravolver a adquirir la identidad. Las solicitudes posteriores desde el explorador incluyen automáticamente la cookie.

Autenticación de Windows

En la autenticación de Windows, IIS realiza la autenticación y el símbolo autenticado se envía al proceso de trabajoASP.NET. La ventaja de utilizar la autenticación de Windows es que requiere una codificación mínima. Esaconsejable utilizar la autenticación de Windows para suplantar la cuenta de usuario de Windows que IIS autenticaantes de entregar la solicitud a ASP.NET.

Autenticación de Passport

La autenticación de Passport es un servicio de autenticación centralizado, que proporciona Microsoft, que ofrece uninicio de sesión único y servicios de perfil principales para sitios Web suscritos. Normalmente, se utiliza laautenticación de Passport cuando se necesite capacidad de inicio de sesión único en varios dominios.

Autenticación predeterminada

Se utiliza la autenticación de forma predeterminada si no se desea ninguna seguridad en una aplicación Web; serequiere para este proveedor de seguridad el acceso anónimo. Entre todos los proveedores de autenticación, laautenticación predeterminada proporciona el máximo rendimiento de la aplicación. Este proveedor de autenticacióntambién se utiliza cuando se utiliza el propio módulo de seguridad personalizado.

Autorización

La autorización es el proceso que comprueba si el usuario autenticado tiene acceso a los recursos solicitados.

ASP.NET ofrece los siguientes proveedores de autorización:

  FileAuthorization

 

UrlAuthorization

FileAuthorization

La clase FileAuthorizationModule realiza la autorización de archivo y está activa cuando se utiliza laautenticación de Windows. FileAuthorizationModule es responsable de realizar comprobaciones en Windows AccessControl Lists (ACL) para determinar si un usuario debe tener acceso.

UrlAuthorization

UrlAuthorizationModule (clase) realiza la autorización del localizador de recursos uniforme (URL), que controla laautorización basada en el espacio de nombres URI. Los espacios de nombres URI pueden ser muy diferente de lasrutas de archivos y carpetas físicas que utilizan los permisos NTFS.

UrlAuthorizationModule implementa aserciones de autorización positivas y negativas; es decir, puede usar elmódulo para permitir o denegar el acceso a partes arbitrarias del espacio de nombres URI de los usuarios,funciones (por ejemplo, el administrador, evaluadores y administradores) y verbos (por ejemplo, GET y POST) deforma selectiva.

Seguridad basada en funciones

Seguridad basada en funciones en ASP.NET es similar a la seguridad basada en funciones que usan Microsoft COM+ y Microsoft Transaction Server (MTS), aunque hay diferencias importantes. Seguridad basada en funciones enASP.NET no se limita a los grupos y cuentas de Windows. Por ejemplo, si está habilitada la autenticación de

Page 49: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 49/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  49 

Windows y la suplantación, la identidad del usuario es una identidad de Windows (User.Identity.Name ="Dominio\nombreDeUsuario"). Puede comprobar las identidades para la pertenencia a funciones específicas yrestringir el acceso según corresponda. Por ejemplo:

if ( User.IsInRole("BUILTIN\\Administrators"))

Response.Write("You are an Admin");

else if (User.IsInRole("BUILTIN\\Users"))

Response.Write("You are a User");

else

Response.Write("Invalid user");

Si utiliza la autenticación de formularios, funciones no se asignan al usuario autenticado; debe hacerlo medianteprogramación. Para asignar funciones al usuario autenticado, utilice el evento OnAuthenticate del módulo deautenticación (que es el módulo de autenticación de formularios en este ejemplo) para crear un nuevo objetoGenericPrincipal y asignarlo a la propiedad de usuario de HttpContext. El código siguiente muestra esto:

public void Application_AuthenticateRequest(Object s, EventArgs e)

{

if (HttpContext.Current.User != null)

{

if (HttpContext.Current.User.Identity.AuthenticationType == "Forms" )

{

System.Web.Security.FormsIdentity id = HttpContext.Current.User.Identity;

String[] myRoles = new String[3];

myRoles[0]= "managers";

myRoles[1]= "testers";

myRoles[2]= "developers";

HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles);

}

}

}

Para comprobar si el usuario es de un rol específico y restringir el acceso en consecuencia, se utiliza el códigosiguiente (o similar) en las páginas. aspx:

if (User.IsInRole("managers"))

Response.Write("You are a Manager");

else if (User.IsInRole("testers"))

Page 50: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 50/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  50 

Response.Write("You are a Tester");

else if (User.IsInRole("developers"))

Response.Write("You are a Developer");

LECCION 17 Archivo de configuración

Los archivos de configuración de ASP.NET son archivos XML. .NET Framework define un conjunto de elementos queimplementan valores de configuración y el esquema de configuración de ASP.NET contiene elementos que controlancómo se comportan las aplicaciones Web ASP.NET.

Los valores de configuración predeterminados se especifican en el archivo Machine.config situado en el directorio%SystemRoot%\Microsoft.NET\Framework\númeroDeVersión\CONFIG\. Las aplicaciones y sitios secundariosheredan los valores. Si hay un archivo de configuración en una aplicación o sitio secundario, los valores heredadosno aparecen, pero se pueden reemplazar y están disponibles para la API de configuración.

En el esquema de configuración de ASP.NET se útillizan los archivos Machine.config y Web.config específicos de laaplicación. La tabla de contenido de esta sección refleja la jerarquía del esquema.

Toda la información de configuración de ASP.NET reside en los archivos .config. Un archivo Machine.config y unarchivo Web.config raíz ubicados en una carpeta del sistema de .NET Framework proporcionan los valorespredeterminados de todos los sitios web que se ejecutan en un servidor. Para cada sitio web, un archivoWeb.config ubicado en la carpeta raíz del sitio proporciona valores de reemplazo específicos del sitio. Pueden haberarchivos Web.config adicionales en las subcarpetas de un sitio web para proporcionar los valores de reemplazo quese aplican específicamente a esas carpetas de ese sitio.

Un archivo .config contiene XML que tiene un elemento configuration como nodo raíz. La información incluida eneste elemento se agrupa en dos áreas principales: el área de declaración de los controladores de secciones deconfiguración y el área de valores de las secciones de configuración.

Un controlador de sección es una clase de .NET Framework que implementa la interfaz ConfigurationSection. Elárea de declaración identifica el espacio de nombres y el nombre de cada clase de controlador de sección. Los

controladores de secciones se utilizan para leer y establecer los valores que pertenecen a una sección. En elsiguiente ejemplo, se muestra una vista simplificada de la estructura XML de un archivo Web.config.

<configuration>

<!-- Configuration section-handler declaration area. -->

<configSections>

<section name="section1" type="section1Handler" />

<section name="section2" type="section2Handler" />

</configSections>

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

<section1>

<s1Setting1 attribute1="attr1" />

</section1>

<section2>

Page 51: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 51/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  51 

<s2Setting1 attribute1="attr1" />

</section2>

<system.web>

<authentication mode="Windows" />

</system.web>

</configuration>

En un archivo Web.config, las secciones pueden aparecer en el área de configuración no declarada en el área dedeclaración si se declaran en un archivo .config ubicado en un nivel superior de la jerarquía de configuración. Porejemplo, la sección system.web se declara en el archivo Machine.config. Por consiguiente, no es necesariodeclararla en archivos Web.config individuales de cada sitio. Si se declara una sección en el archivo Web.configubicado en la carpeta raíz de un sitio web, se pueden incluir los valores de esa sección sin incluirlos en los archivosWeb.config ubicados en las subcarpetas.

Declaraciones del controlador de sección de configuración

El área de declaración de los controladores de secciones de configuración está en el elemento configSections de losarchivos .config. Contiene elementos section de configuración de ASP.NET donde se declaran los controladores desección. Estas declaraciones de controlador de sección de configuración se pueden anidar en elementossectionGroup para ayudar a organizar la información de configuración. Normalmente, los elementos sectionGrouprepresentan el espacio de nombres al que se aplican los valores de configuración. Por ejemplo, todos loscontroladores de secciones de configuración de ASP.NET se aglutinan en el grupo de secciones system.web, talcomo se muestra en el ejemplo de código siguiente.

<sectionGroup name="system.web"

type="System.Web.Configuration.SystemWebSectionGroup, System.Web, Version=2.0.0.0, Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a">

<!-- <section /> elements. -->

</sectionGroup>

Hay una declaración de controlador de sección para cada sección de configuración en el área de valores de secciónde configuración. Las declaraciones de controlador de sección contienen el nombre de una sección de valores deconfiguración (como pages) y el nombre de la clase de controlador de sección que procesa los datos deconfiguración de esa sección (como System.Web.Configuration.PagesSection). En el siguiente ejemplo, se muestrauna clase de controlador de sección que está asignada a una sección de valores de configuración.

<section name="pages"

type="System.Web.Configuration.PagesSection, System.Web, Version=2.0.0.0, Culture=neutral,

PublicKeyToken=b03f5f7f11d50a3a">

</section>

Cada controlador de sección de configuración solo se declara una vez. Los controladores de las secciones deconfiguración predeterminadas de ASP.NET ya están declarados en el archivo Machine.config. El archivo Web.configdel sitio web y otros archivos de configuración de las aplicaciones ASP.NET heredan automáticamente loscontroladores de configuración que se declaran en el archivo Machine.config. Solo se declara un nuevo controladorde sección si se desea crear una clase de controlador de sección personalizada que controle una sección deconfiguración personalizada.

Page 52: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 52/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  52 

Valores de la sección de configuración

El área de valores de la sección de configuración va a continuación del área de declaración de controladores desección de configuración y contiene los valores de configuración propiamente dichos.

De manera predeterminada, el archivo de configuración actual o uno de los archivos de configuración raíz contieneun elemento de sección de configuración para cada elemento section y sectionGroup en el área configSections.

Estos valores predeterminados se pueden ver en el archivoraízDelSistema\Microsoft.NET\Framework\númeroDeVersión\CONFIG\Machine.config.comments. El valor denúmeroDeVersión para las versiones 2.0, 3.0 y 3.5 de ASP.NET es v2.0.50727.

Un elemento de sección de configuración también podría contener elementos secundarios controlados por el mismocontrolador de sección que el elemento primario. Por ejemplo, el siguiente elemento pages contiene un elementonamespaces que carece de un controlador de sección porque lo controla el controlador de sección de pages.

<pages

buffer="true"

enableSessionState="true"

asyncTimeout="45"

<!-- Other attributes. -->

>

<namespaces>

<add namespace="System" />

<add namespace="System.Collections" />

</namespaces>

</pages>Ejemplo extraído de un archivo Web.config

En el siguiente ejemplo, se amplía el XML simplificado que figura anteriormente en este tema incluyendo elementosde un archivo Web.config real. Para mayor claridad y para indicar las omisiones, se han agregado algunoscomentarios.

<?xml version="1.0"?>

<configuration>

<!-- Configuration section-handler declaration area. -->

<configSections>

<sectionGroup name="system.web.extensions"type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0,Culture=neutral, PublicKeyToken=31BF3856AD364E35">

<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup,System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

Page 53: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 53/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  53 

<section name="scriptResourceHandler"type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions,Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false"allowDefinition="MachineToApplication"/>

<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup,System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection,System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"requirePermission="false" allowDefinition="Everywhere" />

<!-- Other <section /> elements -->

</sectionGroup>

</sectionGroup>

</sectionGroup>

<!-- A custom section in a custom group. -->

<sectionGroup name="pageAppearanceGroup">

<section name="pageAppearance" type="Samples.AspNet.PageAppearanceSection" allowLocation="true"allowDefinition="Everywhere"/>

</sectionGroup>

<!-- Other section and/or sectionGroup elements. -->

</configSections>

<!-- Configuration section settings area. --><!-- Settings for the custom section declared above. -->

<pageAppearanceGroup>

<pageAppearance remoteOnly="true">

<font name="TimesNewRoman" size="18"/>

<color background="000000" foreground="FFFFFF"/>

</pageAppearance>

</pageAppearanceGroup>

<!-- Settings for the default ASP.NET sections. -->

<appSettings/>

<connectionStrings/>

<system.web>

<compilation debug="false">

Page 54: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 54/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  54 

<assemblies>

<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral,PublicKeyToken=31BF3856AD364E35"/>

<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral,PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral,PublicKeyToken=B77A5C561934E089"/>

</assemblies>

</compilation>

<authentication mode="Windows" />

<!-- More elements for system.web -->

</system.web>

<!-- More ASP.NET sections. -->

</configuration>

LECCION 18 Rendimiento y Manejo del Caché

Uno de los factores más importantes a la hora de crear aplicaciones Web escalables de alto rendimiento es lacapacidad para almacenar elementos en memoria, ya sean objetos de datos, páginas o secciones de páginas, en elmomento en que se solicitan. Estos elementos se pueden guardar en caché o almacenar en el servidor web o enotro software de la secuencia de la solicitud, como el servidor proxy o el explorador. De este modo, se evita volvera crear la información que se envió para satisfacer a una solicitud anterior, en particular la que requiera un tiempode procesador significativo u otros recursos. El almacenamiento en caché de ASP.NET permite aplicar distintastécnicas para almacenar resultados de páginas o datos de aplicación en las distintas solicitudes HTTP y volver autilizarlos.

ASP.NET ofrece dos tipos de almacenamiento en caché que permiten crear aplicaciones Web de alto rendimiento. Elprimero es el almacenamiento en caché de resultados, que permite almacenar páginas dinámicas y respuestas acontroles de usuario en cualquier dispositivo compatible con caché HTTP 1.1 del flujo de salida, desde el servidorde origen hasta el explorador que realizó la solicitud. En las solicitudes siguientes, el código de la página o delcontrol de usuario no se ejecuta; se emplean los resultados en caché para atender la solicitud. El segundo tipo dealmacenamiento en caché es el almacenamiento de datos de la aplicación, que se puede utilizar para almacenarmediante programación objetos arbitrarios, como datos de la aplicación, en la memoria del servidor, de modo que

la aplicación pueda ahorrar el tiempo y los recursos necesarios para volver a crearlos.

A menudo, una aplicación puede aumentar el rendimiento si se almacenan en memoria los datos a los que se tieneacceso con más frecuencia y cuya creación requiere un tiempo de procesamiento significativo. Por ejemplo, si laaplicación procesa grandes cantidades de datos utilizando una lógica compleja y, a continuación, los devuelve enun formato de informe que los usuarios consultan frecuentemente, resulta eficiente evitar la creación de dichoinforme cada vez que un usuario lo solicita. De manera similar, si la aplicación incluye una página que procesadatos complejos pero que no se actualiza frecuentemente, no es eficiente que el servidor vuelva a crear dichapágina en cada solicitud.

Page 55: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 55/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  55 

Para ayudar a aumentar el rendimiento de la aplicación en estas situaciones, ASP.NET proporciona almacenamientoen caché mediante dos mecanismos básicos. El primero es el almacenamiento en memoria caché deaplicaciones, permite almacenar en memoria caché los datos que se generen, como un objeto DataSet o unobjeto comercial de informe personalizado. El segundo es el almacenamiento en caché de los resultados delas páginas, permite guardar los resultados del procesamiento de páginas y reutilizarlo, en lugar de volver aprocesar la página cada vez que un usuario la solicite de nuevo.

Caché de aplicaciones

La memoria caché de aplicaciones permite almacenar en memoria datos arbitrarios mediante programaciónutilizando pares de clave y valor. El uso de la memoria caché de aplicaciones es similar al del estado de aplicación.Sin embargo, a diferencia del estado de aplicación, los datos de la memoria caché de la aplicación son volátiles.Esto significa que no se almacenan en memoria durante la vida de la aplicación. La ventaja de utilizar la memoriacaché de aplicaciones es que ASP.NET se encarga de administrarla y quita los elementos cuando expiran o seinvalidan, o cuando hay poca memoria. También se puede configurar la memoria caché de aplicaciones para quenotifique a su aplicación cuando se quita un elemento.

El modelo que se debe seguir al utilizar la memoria caché de aplicaciones consiste en determinar si un elementoexiste en caché cuando se tiene acceso al mismo y, si es así, utilizarlo. Si el elemento no existe, se puede volver acrearlo y colocarlo de nuevo en la memoria caché. Este modelo le garantiza que siempre dispondrá de los datosmás recientes en caché.

Caché de resultados de páginas

Una forma característica de almacenamiento en memoria caché para aplicaciones de servidor es el almacenamientoen caché de resultados. El almacenamiento en memoria caché de resultados permite almacenar HTML presentado.El HTML almacenado se sirve en respuesta a las solicitudes subsiguientes de la misma página. Se puede utilizar elalmacenamiento en la memoria caché de resultados para páginas web completas o solo para los resultados de uncontrol ASP.NET. El almacenamiento en la memoria caché de resultados permite hacer lo siguiente:

a)  Configurar ASP.NET para almacenar en memoria caché una entrada de la memoria caché de resultadosdeterminada para un período concreto.

b)  Almacenar en memoria caché una versión diferente del contenido basada en el tipo de explorador opreferencias del lenguaje de los clientes que visitan la aplicación.

c)  Almacenar en memoria caché una versión móvil de una página que difiere de una versión que se optimizapara un explorador de escritorio.

d)  Configurar ASP.NET para expulsar las entradas de la memoria caché basadas en un evento externo.

El almacenamiento en memoria caché de resultados es extensible. Se puede utilizar un proveedor de caché deresultados personalizado que almacene los datos en cualquier dispositivo de almacenamiento de datos.

La memoria caché de resultados de páginas almacena en memoria el contenido de una página ASP.NET procesada.Esto permite que ASP.NET envíe una página de respuesta a un cliente sin volver a recorrer el ciclo de vida deprocesamiento de la página. El almacenamiento en memoria caché de los resultados de las páginas resultaespecialmente útil en aquellas páginas que no cambian a menudo, pero cuya creación requiere una cantidadsignificativa de procesamiento. Por ejemplo, si se está creando una página Web con tráfico muy intenso paramostrar datos que no se actualizan con frecuencia, el almacenamiento en caché de los resultados de la páginapuede aumentar drásticamente el rendimiento de ésta. El almacenamiento en caché de páginas se puedeconfigurar de forma individual para cada página o, de forma opcional, se pueden crear perfiles de caché en elarchivo Web.config, lo que permitirá definir la configuración de caché una sola vez y utilizarla con múltiplespáginas.

El almacenamiento en memoria caché de resultados de páginas proporciona dos modelos de almacenamiento:almacenamiento en memoria caché de páginas completas y almacenamiento en memoria caché de unaparte de las páginas. El almacenamiento en memoria caché de página completa conserva el contenido completode una página y utiliza el contenido de la página almacenado en memoria caché para cumplir las solicitud decliente. El almacenamiento en memoria caché de la página parcial conserva las partes especificadas y permite quelas otras se creen dinámicamente.

Page 56: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 56/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  56 

El almacenamiento en memoria caché de una parte de las páginas puede ser de dos clases: almacenamiento enmemoria caché de controles y sustitución posterior al almacenamiento en memoria caché. El almacenamiento enmemoria caché de controles, a veces también denominado almacenamiento en memoria caché de fragmentos,permite almacenar en memoria caché partes de la página resultante si la información se incluye en un control deusuario que, a continuación, se marca como almacenable en memoria caché. Esto habilita que se almacene enmemoria caché contenido concreto de una página, pero no la página completa, que se vuelve a crear con cadasolicitud. Por ejemplo, si crea una página que muestra principalmente contenido dinámico, como informaciónbursátil, pero también tiene secciones que son estáticas, como resúmenes semanales, se puede colocar esassecciones estáticas en controles de usuario y especificar su almacenamiento en memoria caché.

La sustitución posterior al almacenamiento en caché es lo contrario. La página en su conjunto se almacena enmemoria caché, pero los fragmentos situados dentro de la página son dinámicos. Por ejemplo, si crea una páginaque es estática durante ciertos períodos fijos de tiempo, se puede configurar la página completa para que sealmacene en caché. Si se ha agregado un control Label a la página que muestra el nombre del usuario, el controlLabel no variará para cada actualización de página y para cada usuario, y mostrará el nombre del usuario quesolicitó la página antes de que se almacenara en caché. Sin embargo, con la sustitución posterior alalmacenamiento en caché, se puede configurar la página para que se almacene en caché, pero también marcarsecciones individuales como no almacenables en caché. En este caso, se podría agregar los controles Label a unasección no almacenable en memoria caché y se crearían dinámicamente para cada usuario y cada solicitud depágina.

Almacenar en caché páginas basadas en parámetros de solicitud

Además de almacenar en caché una única versión de una página, el almacenamiento en caché de resultados depáginas ASP.NET proporciona características para crear múltiples versiones de la página que difieren en variosparámetros de solicitud.

Almacenamiento en caché de resultados extensible

ASP.NET agrega extensibilidad al almacenamiento en memoria caché de resultados y permite configurar uno o másproveedores de memoria caché de resultados personalizados. Los proveedores de memoria caché de resultadospueden usar cualquier mecanismo de almacenamiento para conservar el contenido HTML. Estas opciones dealmacenamiento pueden incluir discos locales o remotos, almacenamiento de nube y motores de memoria cachédistribuidos.

La extensibilidad de proveedores de memoria caché de resultados en ASP.NET permite diseñar estrategias dealmacenamiento en memoria caché de resultados más dinámicas e inteligentes para los sitios web. Por ejemplo, sepuede crear un proveedor de memoria caché de resultados que almacena en caché las 10 páginas principales de unsitio en memoria y almacena en caché las páginas con menos tráfico en disco. O bien, se puede almacenar encaché cada combinación de variación para una página representada y usar memoria caché distribuida para que elconsumo de memoria se descargue de los servidores web front-end.

El proveedor de memoria caché de resultados personalizado se crea como una clase que deriva del tipoOutputCacheProvider. A continuación, se puede configurar el proveedor en el archivo Web.config mediante lanueva subsección providers del elemento outputCache , tal y como se muestra en el ejemplo siguiente:

<caching>

<outputCache defaultProvider="AspNetInternalProvider">

<providers>

<add name="DiskCache"

type="Test.OutputCacheEx.DiskOutputCacheProvider, DiskCacheProvider"/>

</providers>

</outputCache>

Page 57: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 57/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  57 

</caching>

De forma predeterminada, todas las respuestas HTTP, las páginas presentadas y los controles usan la memoriacaché de resultados en memoria del ejemplo anterior (donde el atributo defaultProvider está establecido enAspNetInternalProvider). Se puede cambiar el proveedor de memoria caché de resultados predeterminado que seusa para una aplicación web especificando un nombre de proveedor diferente para defaultProvider.

También se puede seleccionar proveedores de memoria caché de resultados diferentes para controles individualesy para solicitudes individuales. La manera más fácil de elegir un proveedor de memoria caché de resultadosdiferente para los distintos controles de usuario web es hacerlo mediante declaración con el nuevo atributoproviderName de una directiva @ Page@ Control, tal y como se muestra en el ejemplo siguiente:

<%@ OutputCache Duration="60" VaryByParam="None"

providerName="DiskCache" %>

Para especificar un proveedor de memoria caché de resultados diferente para una solicitud HTTP, se invalida elnuevo método GetOutputCacheProviderName en el archivo Global.asax para especificar medianteprogramación qué proveedor se usará para una solicitud concreta.

Eliminación de datos automática

ASP.NET puede quitar los datos de la memoria caché por cualquiera de estos motivos:

a)  Hay poca memoria en el servidor y se produce un proceso conocido como barrido.b)  El elemento de la memoria caché ha expirado.c)  Ha cambiado la dependencia del elemento.

Para ayudar a administrar los elementos almacenados en memoria caché, ASP.NET puede notificar a su aplicacióncuando los elementos se quitan de la memoria caché.

Barrido

El barrido es el proceso de eliminar elementos de la memoria caché cuando la memoria es escasa. Los elementosse quitan cuando ha transcurrido cierto tiempo desde su última utilización o cuando se han marcado como de

prioridad baja al agregarse a la memoria caché. ASP.NET utiliza el objeto CacheItemPriority para determinar loselementos que se deben compactar en primer lugar

Expiración

Además de utilizar el barrido, ASP.NET quita automáticamente los elementos de la memoria caché cuando expiran.Al agregar un elemento a la memoria caché se puede establecer su expiración de acuerdo con las siguientesalternativas.

Fecha de expiración variable

Especifica el intervalo de tiempo que debe transcurrir desde el último acceso al elemento para que éste expire. Porejemplo, puede establecer que un elemento expire 20 minutos después del último acceso en caché.

Expiración absoluta

Especifica que un elemento expira en un momento determinado, sin tener en cuenta la frecuencia con que se hatenido acceso al mismo. Por ejemplo, se puede establecer que un elemento expire a las 6:00 p.m. o al cabo decuatro horas.

Dependencias

Se puede establecer que el período de duración de un elemento en memoria caché dependa de otros elementos dela aplicación, como archivos o bases de datos. Cuando el elemento del que depende un elemento de la memoria

Page 58: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 58/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  58 

caché cambia, ASP.NET lo quita de ésta. Por ejemplo, si su sitio Web muestra un informe creado por la aplicación apartir de un archivo XML, se puede colocar dicho informe en caché y configurarlo para que dependa del archivoXML. Cuando el archivo XML cambie, ASP.NET quitará el informe de la memoria caché. Cuando el código solicite elinforme, determinará en primer lugar si el informe está en memoria caché, y si no está, lo volverá a crear. De estemodo, siempre estará disponible una versión actualizada del informe.

El almacenamiento en caché de ASP.NET admite el uso de las dependencias descritas a continuación.

Dependencia de clave

Los elementos de la memoria caché de aplicaciones se almacenan en pares de clave y valor. La dependencia declave permite que un elemento sea dependiente de la clave de otro elemento de la memoria caché de la aplicación.Cuando se quita el elemento original, también se quita el elemento que tiene la dependencia de clave. Por ejemplo,se podría agregar un elemento de caché denominado ReportsValid y, a continuación, almacenar en caché variosinformes dependientes de la clave ReportsValid. Cuando se quite el elemento ReportsValid, también se quitarántodos los informes dependientes almacenados en memoria caché.

Dependencia de archivo

Un elemento de la memoria caché depende de un archivo externo. Si se modifica o se elimina dicho archivo, sequita el elemento almacenado en caché.

Dependencia de SQL

Un elemento de la memoria caché depende de los cambios realizados en una tabla de base de datos de MicrosoftSQL Server.

Dependencia de agregado

Un elemento de la memoria caché depende de múltiples elementos a través del uso de la claseAggregateCacheDependency. Si cambia cualquiera de las dependencias, el elemento se quita de la memoria caché.

Dependencia personalizada

Un elemento de la memoria caché se configura con una dependencia creada en su propio código. Por ejemplo, se

puede crear una dependencia de caché de servicio Web personalizada que quite datos de la memoria caché cuandouna llamada a un servicio Web tenga como resultado un valor determinado.

Notificación de eliminación de elementos de la memoria caché de aplicaciones

Se puede recibir una notificación cuando un elemento se quita de la memoria caché de aplicaciones. Por ejemplo, siexiste un elemento cuya creación consume un tiempo de procesamiento considerable, se puede recibir unanotificación cuando dicho elemento se quite de la memoria caché a fin de poder reemplazarlo inmediatamente. Enconsecuencia, la próxima vez que se solicite el elemento, el usuario no tendrá que esperar a que se procese.

Especificación de Cache en Páginas

Para las páginas ASP.NET, puede establecer el almacenamiento en caché utilizando los valores en la enumeraciónHttpCacheability. La enumeración tiene los valores siguientes. Los tres primeros se asignan directamente a las

opciones del encabezado HTTP Cache-Control y los tres últimos son valores especiales.

NoCache  Especifica que el dispositivo que realiza la solicitud debería recibir la respuesta del servidor Web cadavez que la realiza.

Public Permite almacenar en caché la respuesta en clientes y cachés compartidas (servidor proxy).

Private Especifica que la respuesta sólo se puede almacenar en caché en el cliente y no en cachés compartidas(servidor proxy).

Page 59: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 59/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  59 

Server  Especifica que la respuesta sólo se almacena en memoria caché en el servidor de origen.

ServerAndNoCache  Aplica las opciones de Server y NoCache para indicar que el contenido se almacena en elservidor, pero niega explícitamente a los demás la capacidad de almacenar la respuesta en caché.

ServerAndPrivate  Especifica que una respuesta se puede almacenar en caché sólo en el servidor de origen y enel cliente que realiza la solicitud; los servidores proxy no pueden almacenar la respuesta en caché.

Se puede establecer de forma declarativa el almacenamiento en caché de una página incluyendo un atributoLocation en la directiva @ OutputCache y especificando uno de los valores de la enumeraciónOutputCacheLocation. También se puede establecer mediante programación el almacenamiento en caché de unapágina utilizando el método SetCacheability para especificar un valor HttpCacheability para la página. El métodoes accesible a través de la propiedad Cache de la clase Response.

Ejemplos Especificación de Caché

<%@ OutputCache Duration="60" VaryByParam="None"%>

<caching>

<outputCacheSettings>

<outputCacheProfiles><add name="Cache30Seconds" duration="30"

varyByParam="none" />

</outputCacheProfiles>

</outputCacheSettings>

</caching>

<%@ OutputCache CacheProfile="Cache30Seconds" %>

 // Estableciendo tipo de caché

Response.Cache.SetCacheability(HttpCacheability.Public);

 // Ejemplo estableciendo duraciónResponse.Cache.SetExpires(DateTime.Now.AddSeconds(60));

Response.Cache.SetCacheability(HttpCacheability.Public);

Response.Cache.SetValidUntilExpires(true);

 // Ejemplo dependencia de archivoprotected void Page_Load(object sender, EventArgs e)

{

string fileDependencyPath = Server.MapPath("TextFile1.txt");

Response.AddFileDependency(fileDependencyPath);

 // Set additional properties to enable caching.

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));

Response.Cache.SetCacheability(HttpCacheability.Public);

Response.Cache.SetValidUntilExpires(true);

Page 60: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 60/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  60 

}

 // Ejemplo dependencia de clave

protected void Page_Load(object sender, EventArgs e)

{

Response.AddCacheItemDependency("ProcessIntensiveReport");

 // Set additional properties to enable caching.

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));

Response.Cache.SetCacheability(HttpCacheability.Public);

Response.Cache.SetValidUntilExpires(true);

}

 // Ejemplo usando cache de aplicación, agregar elementos

Cache["CacheItem1"] = "Cached Item 1";

Cache.Insert("CacheItem2", "Cached Item 2");

string[] dependencies = { "CacheItem2" };

Cache.Insert("CacheItem3", "Cached Item 3",

new System.Web.Caching.CacheDependency(null, dependencies));

Cache.Insert("CacheItem4", "Cached Item 4",new System.Web.Caching.CacheDependency(

Server.MapPath("XMLFile.xml")));

System.Web.Caching.CacheDependency dep1 =

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

string[] keyDependencies2 = { "CacheItem1" };

System.Web.Caching.CacheDependency dep2 =

new System.Web.Caching.CacheDependency(null, keyDependencies2);

System.Web.Caching.AggregateCacheDependency aggDep =

new System.Web.Caching.AggregateCacheDependency();

aggDep.Add(dep1);aggDep.Add(dep2);

Cache.Insert("CacheItem5", "Cached Item 5", aggDep);

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

null, DateTime.Now.AddMinutes(1d),

System.Web.Caching.Cache.NoSlidingExpiration);

Page 61: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 61/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  61 

Cache.Insert("CacheItem7", "Cached Item 7",

null, System.Web.Caching.Cache.NoAbsoluteExpiration,

new TimeSpan(0, 10, 0));

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

null, System.Web.Caching.Cache.NoAbsoluteExpiration,System.Web.Caching.Cache.NoSlidingExpiration,

System.Web.Caching.CacheItemPriority.High, null);

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

"Cached Item 9", null,

System.Web.Caching.Cache.NoAbsoluteExpiration,

System.Web.Caching.Cache.NoSlidingExpiration,

System.Web.Caching.CacheItemPriority.Default,

null); // Ejemplo usando cache de aplicación, obtener elementos

string cachedString;

cachedString = (string)Cache["CacheItem"];

if  (cachedString == null)

{

cachedString = "Hello, World.";

Cache.Insert("CacheItem", cachedString);

}

 // Ejemplo usando cache de aplicación, eliminar elementos

Cache.Remove("MyData1");

LECCION 19 Controles de Usuario

Introducción

Adicionalmente a los controles “built-in” del lado del servidor provistos por ASP.NET, el programador puededefinir de una manera sencilla nuevos controles (en la terminología .NET se denominan user controls) aplicandolas mismas técnicas de programación empleadas para escribir páginas basadas en formularios WEB. En efecto,con solo realizar unas pequeñas modificaciones, cualquier página web form puede ser reutilizada en otra páginacomo un control de servidor (La clase para de los controles de usuario System.Web.UI.UserControl, heredadirectamente de System.Web.UI.Control). Una manera directa de crear un User Control es a través de lacombinación de controles existentes, estos controles que agrupan estos controles ya existentes se denominanComposite Controls.

Una página web form usada como un control de servidor es llamada user control. Para respetar una convención

de nombres, la extensión .ascx es utilizada para identificar este tipo de controles. Esta convención, tambiéngarantiza que un archivo .ascx no puede ser ejecutado como un página web form “standalone”. Los User controlsson incluidos en una página Web Form empleando la directiva Register:

<%@ Register TagPrefix="GALA" TagName="Mensaje" Src="WUCGala.ascx" %> 

TagPrefix determina un espacio de nombres único para el user control (de esta manera múltiples user controlscon el mismo nombre pueden ser diferenciados de los otros). TagName es el nombre único para el user control(cualquier nombre puede ser utilizado). El atributo Src  es el camino virtual para el user control – por ejemplo"UCGala.ascx" r "/application/incluye/UCGala.ascx". Después de registrar el user control, el tag del user control

Page 62: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 62/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  62 

puede ser colocado en la página Web Forms como si se empleara in control de servidor (colocando el atributorunat="server"):

<GALA:Mensaje runat="server"/> 

Facilidades de Visual Studio

Visual Studio ofrece un componente Web llamado Web User Control el cual permite desarrollar los controles deusuario

Al crearse por ejemplo un control con el nombre WUCgala se crea el archivo WUCgala.ascx, el cual contiene elsiguiente código. Este control mostrará una etiqueta identificada con lMensaje

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WUCgala.ascx.cs" Inherits="UC.WUCgala" %><asp:Label ID="lMensaje" runat="server" Text="Mensaje WUC"></asp:Label>

Y el archivo de código, WUCgala.ascx.cs, el cual contiene el siguiente código.

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

namespace UC{

public partial class WUCgala : System.Web.UI.UserControl {

protected void Page_Load(object sender, EventArgs e)

{

}}

}

A continuación se muestra cómo utilizar el Control desde un formulario Web.Se crea una página llamada UC.aspx.Para agregar el control simplemente se arrastra a la vista de diseño de la página el WebUserControl.Visual Studio crea la directiva @Register con el siguiente código en el archivo UC.aspx<%@ Register src="WUCgala.ascx" tagname="WUCgala" tagprefix="uc1" %>

Page 63: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 63/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  63 

Y luego la utilización del control<uc1:WUCgala ID="WUCgala1" runat="server"  />

El tagprefix permite definir cómo se van a iniciar los tags, por ejemplo todos los controles de servidor de asp.netusan el tagprefix asp. El tagname representa el nombre de la clase del Control. Por lo tanto, la combinación deltagprefix con el carácter : y el tagname representan el tag del Web User Control.A continuación se renombra el tagprefix por GALA y el tagname por Mensaje, y el nombre del objeto se le colocaMejemplo

<%@ Register src="WUCgala.ascx" tagname="Mensaje" tagprefix="GALA" %> 

<GALA:Mensaje ID="Mejemplo" runat="server" /> 

Exponiendo las propiedades de un User Control

Cuando una página de web form es tratada como un control, los campos públicos y métodos de la web form sonpromocionados como propiedades públicas (como atributos de tag) y métodos del control. En este ejemplo semuestra una extensión del anterior donde se agregan dos campos públicos del tipo String. Estos campos puedenser especificados en la página de una manera programática o de una manera declarativa.

A continuación se extiende el ejemplo del User Control conteniendo dos propiedades color y textoMensaje.

namespace UC{

public partial class WUCgala : System.Web.UI.UserControl {

public string color="", textoMensaje="";protected void Page_Load(object sender, EventArgs e){

if  (textoMensaje != "")this.lMensaje.Text = textoMensaje;

if  (color != "")this.lMensaje.BackColor = System.Drawing.Color.FromName(color);

}}

}

Al tener propiedades públicas ya se encuentran visibles en las páginas donde se incluye el User Control.

<GALA:Mensaje ID="Mejemplo" runat="server" color="blue" textoMensaje="Uso del Control"/> 

También es posible referenciar al user control a través de instrucciones del lenguaje

WUCgala wuc;wuc = this.Mejemplo;wuc.color = "red";

LECCION 20 Código del lado del cliente: JavaScript, JSON, AJAX, Herramientas de AJAX

Las aplicaciones web ASP.NET no se limitan a los lenguajes y las herramientas basados en servidor. Puede incluirECMAScript (JavaScript o JScript) en sus páginas web ASP.NET para crear funcionalidad enriquecida basada enexplorador. ASP.NET dispone de una amplia gama de características para la compatibilidad con los scripts decliente.

Una opción consiste en crear y agregar fragmentos de código individuales de script de cliente a las páginas webASP.NET para admitir el comportamiento de explorador que diseñe para la aplicación. Esta opción resulta prácticasi solo se desea incluir algunas partes pequeñas de código JavaScript o si trabaja con código JavaScript yaexistente. Esta opción también permite que el tamaño de las páginas web ASP.NET sea el mínimo.

Page 64: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 64/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  64 

Asimismo, se puede aprovechar las eficaces características AJAX de ASP.NET. Entre estas características AJAX seincluye un completo marco de trabajo que admite lo siguiente:

  Programación orientada a objetos en JavaScript.

  Postbacks asincrónicos.

  Servicios Web de aplicación para autenticación y perfiles.

 

Controles de servidor que administran los scripts de cliente con compatibilidad ampliada para depuración yseguimiento de traza.

Las características AJAX de ASP.NET permiten aprovechar las ventajas de la funcionalidad de JavaScript con menoscodificación manual. Esto proporciona la funcionalidad de JavaScript ampliada, además de un marco de trabajopara crear la funcionalidad de cliente que se integra en ASP.NET.

Escenarios

Utilizar los scripts de cliente cuando se desee hacer lo siguiente:

  Mejorar la experiencia del usuario con páginas web más enriquecidas, que son más receptivas a las

acciones del usuario y presentan un comportamiento similar a las aplicaciones cliente tradicionales. Por

ejemplo, se puede usar scripts de cliente para comprobar los datos proporcionados con el teclado en un

cuadro de texto a medida que se escribe cada uno de los caracteres.

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

o  Reducir las actualizaciones de página completa y evitar el parpadeo de la página mediante la

manipulación dinámica de los elementos DOM de la página.

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

o  Organizar el código en componentes de cliente. Los componentes de cliente son objetos

reutilizables que encapsulan JavaScript basado en Microsoft Ajax Library. Los componentes de

cliente también se pueden administrar mediante controles del lado servidor personalizados o

asociar a controles de servidor existentes para agregar funcionalidad de cliente.

Incluir script de cliente personalizado en páginas ASP.NET

Dado que las páginas web ASP.NET solo presentan marcado HTML, se puede agregar un script de cliente. Laspáginas ASP.NET admiten scripts de cliente en la medida en que el explorador que solicita la página admite dichosscripts. Si la página se ejecuta en un explorador de un teléfono u otro dispositivo móvil, el grado de compatibilidadcon el script de cliente variará según el explorador.

Existen varias opciones para incluir scripts de cliente en las páginas ASP.NET:

  Se Puede incluir scripts de cliente de forma estática en un bloque script que incluya código o que use unatributo include para hacer referencia a un archivo JavaScript (.js). Usar esta opción para insertarbloques de script o archivos JavaScript que contengan scripts de cliente que no sea necesario creardinámicamente y que no requieran la funcionalidad AJAX adicional que proporciona Microsoft Ajax Library.

  Se puede crear y agregar dinámicamente el script de cliente a una página web ASP.NET mediante la

clase ClientScriptManager. Usar esta opción si desea crear scripts que dependan de información quesolo está disponible en tiempo de ejecución.

Si se desea utilizar las características AJAX de ASP.NET, se puede administrar los archivos de script de clientemediante el control de servidor ScriptManager. El control de servidor ScriptManager también garantiza queMicrosoft Ajax Library se cargue en el explorador antes de ejecutarse los scripts.

Incluir bloques de script de cliente estáticos

Page 65: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 65/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  65 

Se pueden agregar bloques de script a una página ASP.NET del mismo modo que se haría en cualquier páginaHTML. También se pueden utilizar scripts de cliente para escribir controladores de eventos para eventos de clientecomo el evento onload de la página. Cuando una página ASP.NET se ejecuta en el explorador, los elementos demarcado de la página son direccionables en el script de cliente. Estos generan los mismos eventos de cliente queen una página HTML.

Una página web ASP.NET también puede tener acceso a un archivo de script al hacer referencia a este en el

atributo src de una etiqueta <script>, como en el ejemplo siguiente:

<script type="text/javascript" src="MyScript.js"></script>

Mantener los scripts de cliente en archivos .js externos en lugar de mantenerlos en las páginas en sí puede ayudara organizarlos. También puede facilitar su administración por parte del control de versiones y hacer que sea másfácil compartirlos entre páginas.

El explorador almacena en caché los archivos .js externos, de forma similar a como se almacenan en caché lasimágenes y las páginas web. Una vez que el explorador carga el script como archivo externo, este está disponibleen la memoria caché para cualquier otra página web que lo necesite. Esto puede ayudar a aumentar el rendimientode la aplicación web.

Crear script de cliente de forma dinámica

En muchos casos, el script de cliente para la página se puede crear mediante declaración, normalmente como unbloque de script. Sin embargo, también se puede crear script de cliente de forma dinámica. Esto resulta útil si elscript depende de información que solo está disponible en tiempo de ejecución. Por ejemplo, se puede insertar elscript de cliente en una página que direcciona un control de servidor cuyo nombre (identificador) no se conocehasta que se ejecuta la aplicación, o se puede crear un script que depende de los valores recibidos de un usuario.

Para crear e insertar script de cliente de forma dinámica en una página presentada, se invocan a los métodos de laclase ClientScriptManager, como los siguientes:

RegisterClientScriptBlock , que inserta un bloque de script en la parte superior de la página presentada.

RegisterStartupScript , que inserta un bloque de script al final de la página presentada.

En el ejemplo siguiente se muestra cómo agregar a la página el script de cliente generado dinámicamente. Elcódigo comprueba si está activada la casilla denominada checkDisplayCount. En caso afirmativo, el código realizalas siguientes tareas:

  Crea una función de script de cliente que usa un elemento span para mostrar el recuento de caracteres enun control TextBox denominado TextBox1.

  Agrega un evento de cliente al control TextBox.

  Genera el elemento span.

El código supone que la página contiene una casilla denominada checkDisplayCount cuya propiedad AutoPostBackestá establecida en true y un control PlaceHolder denominado PlaceHolder1.

void Page_Load(object sender, EventArgs e)

{

if(checkDisplayCount.Checked)

{

String scriptText = "";

scriptText += "function DisplayCharCount(){";

Page 66: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 66/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  66 

scriptText += " spanCounter.innerText = " +

" document.forms[0].TextBox1.value.length";

scriptText += "}";

ClientScriptManager.RegisterClientScriptBlock(this.GetType(),

"CounterScript", scriptText, true);

TextBox1.Attributes.Add("onkeyup", "DisplayCharCount()");

LiteralControl spanLiteral = new

LiteralControl("<span id=\"spanCounter\"></span>");

PlaceHolder1.Controls.Add(spanLiteral);

}

}

Para los métodos de la clase ClientScriptManager, se proporciona un tipo al que está asociado el bloque de script yse asigna una clave a este bloque. Al proporcionar un tipo resulta más fácil evitar colisiones si tanto la página comolos controles (controles personalizados o controles de usuario) agregan bloques de script a la misma página. El usode una clave permite evitar la duplicación. Si se llama a uno de los métodos para agregar el script y ya existe unscript con la misma clave y el mismo tipo, el script no se vuelve a agregar.

El tipo y la clave proporcionados permiten evitar una duplicación innecesaria. Por lo tanto, generalmente no tendráque determinar de forma explícita si ya existe un bloque de script. Sin embargo, si es útil en la aplicacióncomprobar si ya existe un bloque de script, puede llamar a los métodos siguientes:

IsClientScriptBlockRegistered

IsClientScriptIncludeRegistered

IsOnSubmitStatementRegistered

IsStartupScriptRegistered

Agregar un script de cliente mediante el control ScriptManager

Si se utilizan las características AJAX de ASP.NET, el control ScriptManager ofrece una forma de agregar archivosde script a una página. Esto incluye los archivos de script estáticos (archivos .js) del disco y los archivos de scriptincrustados como recursos en un ensamblado. Los archivos de script se pueden especificar mediante declaración enel control. Como alternativa, se puede usar los métodos de registro del control ScriptManager que permitenadministrar los archivos de script de cliente existentes mediante programación y trabajar con scripts para admitir laactualización parcial de la página.

Ejemplo de validación del lado del Cliente

ASP.NET soporta varios controles de validación como RequiredFieldValidator, CompareValidator, y otros - loscuales son útiles para asegurar que los usuarios introducen valores válidos en los campos de los formularios.

En el caso de Internet Explorer, estos controles generan JavaScript a ejecutar del lado del cliente. Par el caso denavegadores no-Microsoft sólo validación del lado del servidor es posible.

Page 67: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 67/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  67 

Como se muestran los controles de validación del lado del cliente

Todos los controles de validación de ASP.NET derivan (heredan) de la claseSystem.Web.UI.WebControls.BaseValidator. La clase BaseValidator define los métodos y las propiedades comunesa todos los controles de validación. Una de las funciones de esta clase es determinar cuándo un control de

validación puede o no ser ejecutado con un script del lado del cliente. Esto es realizado por el métodoDetermineRenderUplevel().

En las últimas versiones de Visual Studio se ofrecen controles de validación cada vez más sofisticados.

Agregando Message Boxes del lado del cliente en ASP.NET

Una de las mayores ventajas de una aplicación Windows es la utilización de los message boxes, como las alertas ylas confirmaciones.

El problema de los message boxes es que estos son creados en el cliente y no pueden ser creados como código dellado del servidor. En este caso el código del lado del servidor necesita producir el código JavaScript apropiado, el

cual se ejecuta del lado del cliente, con el HTML enviado al cliente para que éste pueda desplegar el message Box.

Para desplegar un messagebox, una manera de realizarlo ASP.NET se puede crear un botón HTML <input> yagregar un evento JavaScript onclick al botón el cual invoca el método confirm de JavaScript confirm(), paradesplegar el message box del lado del cliente cuando el botón es presionado.

Sin embargo en ASP.NET, existe otra manera más eficiente de realizarlo y de una manera programática. El primerpaso es añadir un control web button y colocar como id BBorrar, esto produce el código:

<input type="submit" name="BBorrar" value="Borrar" id="BBorrar" />

Luego se le puede añadir el onclick event el cual contiene código JavaScript, de la siguiente manera

<input type="submit" name="BBorrar" value="Borrar" id="BBorrar" onclick="returnconfirm('Seguro desea borrar?');" />

De una manera programática, todos los controles Web de ASP.NET soportan la propiedad Attributes conteniendo una colección de atributos del elemento HTML mostrados (y se almacenan de pares atributo, valor). Lapropiedad attributes posee un método Add(k e y , v a l u e  )  , el cual puede ser utilizado para agregar un atributonuevo para el control web. De una manera programática, se puede realizar:

private void Page_Load(System.Object sender As,

System.EventArgs e) {

if (! Page.IsPostBack) {

Me.BBorrar.Attributes.Add("onclick",

"return confirm('Seguro desea borrar?');"); 

}

Page 68: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 68/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  68 

}

Debido a que este código sólo necesita ser añadido una vez (y no cada vez que se carga la página) , este código es

colocado en el bloque Page.IsPostBack.

La función confirm en JavaScript despliega un message confirmación, con los botones OK y Cancel. Si se presionael botón Ok esta función retorna true, en caso contrario esta función retorna false. Por lo tanto, es necesariocolocar un return a la función confirm cuando se agrega la propiedad.

Si se requiere agregar un message box de confirmación para varias páginas ASP.NET, se podría crear una clasellamada Utilitarios con un método estático que reciba como parámetro un botón (de control Web) y un mensajeque actualiza las propiedades del Botón apropiadamente.

public class Utilitarios {

public static void crearCajaConfir(

ref System.Object bot As , string mens) {

bot.Attributes.Add("onclick", "return confirm('" + mens + "');"); 

}

}

Entonces este método puede ser invocado en el Page_Load:

Utilities.CreateConfirmBox(this.BBorrar, “Seguro desea borrar?")

De esta manera se puede reutilizar este código.

Agregando Alert Message Boxes del lado del cliente en ASP.NET

ASP.NET provee un conjunto de métodos para manejar los JavaScript de html sin necesidad de modificar los HTMLde manera manual.

En estos casos se requiere registrar un bloque de script que se ejecuta en el cliente dentro de la página webasp.net y esto debe ser ejecutado cuando el cliente ejecuta la página.

La clase Page de ASP.NET provee un método llamado RegisterStartupScript 

En el siguiente ejemplo se muestra el código para el botón de Guardar.

private void BSalvar_Click(System.Object sender, System.EventArgs e) {

 //Generar el mensaje

Page 69: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 69/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  69 

string mensaje;

if (this.CheckBox1.Checked()) {

mensaje = "Los datos fueron salvados";

}

Else {

Mensaje = " Los datos no fueron salvados ";

}

 //Finaliza el procedimiento y retorna el script.

string scriptM = "<script language=JavaScript>";

scriptM += "alert(""" & Mensaje & """);";

scriptM += "</script>";

if (! Page.IsStartupScriptRegistered("scriptCliente")) {

Page.RegisterStartupScript("scriptCliente", scriptM);

}

}

El método RegisterStartupScript() toma dos argumentos : el primero una clave que identifica al script registrado yel código del script. El Segundo parámetro incluye el tag <script> y el código necesario para ejecutar (alert('...');).

Antes de ejecutar RegisterStartupScript() es importante revisar si el script fue previamente registrado.

AJAX en ASP.Net

Visual Studio ofrece los siguientes controles para la incorporación de AJAX en las aplicaciones

Page 70: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 70/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  70 

A continuación se explica cómo agregar compatibilidad con la actualización parcial de páginas a una página webmediante dos controles de servidor de Microsoft Ajax: ScriptManager y UpdatePanel. Estos controles hacen queno sea necesario actualizar toda la página con cada postback, lo que mejora la experiencia del usuario.

1.  Crear una nueva página y cambie a la Vista de diseño.

2.  En la ficha Extensiones AJAX del cuadro de herramientas, doble clic en el control ScriptManager  para

agregarlo a la página. NOTA: Cualquier página que requiera la utilización de un control AJAX debe tener

un control ScriptManager en la página.

3.  Doble clic en el control UpdatePanel para agregarlo a la página.

Page 71: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 71/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  71 

4.  Clic dentro del control UpdatePanel y, a continuación, en la ficha Estándar del cuadro de herramientas,

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

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

6.  Doble clic en el control Button para agregar un controlador para el evento Click del botón.

7.  Agregar el código siguiente al controlador Click, que establece el valor de la etiqueta del panel en la horaactual.

protected void Button1_Click(object sender, EventArgs e)

{

Label1.Text = "Refreshed at " +

DateTime.Now.ToString();

}

Page 72: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 72/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  72 

8.  Ejecutar la página.

9.  Hacer clic en el botón.

Observar que el texto del panel cambia para mostrar la última vez que se actualizó el contenido del

panel. Este texto se establece en el controlador de eventos Click del botón.

El contenido del panel cambia cada vez que hace clic en el botón, pero no se actualiza la página entera. De manerapredeterminada, la propiedad ChildrenAsTriggers de un control UpdatePanel se establece en true. Cuando estapropiedad se establece en true, los controles incluidos dentro del panel participan de las actualizaciones parcialesde página cuando un control del panel genera una devolución de datos.

Para probar efectivamente el caso, al agregar otros controles Label y Button fuera del Panel con el mismo código yal realizar click al botón se observa cómo se actualiza lla página completa,

ASP.Net Ajax Control Toolkit

En esta librería se consigue una implementación completa de controles AJAX.

Una vez instalada la librería los controles aparecen en Visual Studio

Page 73: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 73/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  73 

Page 74: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 74/96

Page 75: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 75/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  75 

El nombre base del archivo coincide con el nombre del archivo de paginación, seguido por un idioma y un nombrede referencia cultural, y termina con la extensión .resx.

Después de crear los archivos de recursos, se pueden utilizar en páginas Web ASP.NET. Normalmente se utilizanrecursos para rellenar los valores de las propiedades de los controles que hay en la página. Por ejemplo, se podríautilizar recursos para establecer la propiedad Text de un control Button, en lugar de codificar la propiedad a unacadena concreta.

Si se desea utilizar recursos para establecer los valores de las propiedades de los controles, se puede utilizar lalocalización implícita o la localización explícita, de la manera siguiente:

  La localización implícita funciona con recursos locales y permite establecer automáticamente laspropiedades de los controles en recursos coincidentes.

  La localización explícita permite utilizar una expresión de recurso para establecer una propiedad de uncontrol en un recurso concreto de un archivo de recursos local o global.

Si se han creado archivos de recursos locales para una página concreta, se puede utilizar la localización implícitapara llenar los valores de las propiedades para un control a partir del archivo de recursos. En la localizaciónimplícita, ASP.NET lee un archivo de recursos y hace coincidir los recursos con los valores de las propiedades.

Para utilizar la localización implícita, se debe emplear una convención de nomenclatura para los recursos en elarchivo de recursos local según el modelo siguiente:

Clave . Propiedad

Por ejemplo, si se va a crear recursos para un control Button denominado Button1, se podrían crear los siguientespares de clave y valor en el archivo de recursos local:

Button1.Text

Button1.BackColor

Label1.Text

Se puede usar un nombre cualquiera para Clave, pero Propiedad debe coincidir con el nombre de una propiedad del

control que se va a localizar o adaptar.

En la página, se utiliza un atributo meta especial en el marcado para el control con el fin de especificar lalocalización implícita. No se tiene que especificar explícitamente qué propiedades se adaptan. Un control Buttonconfigurado para la localización implícita puede ser similar al siguiente:

<asp:Button ID="Button1" runat="server" Text="DefaultText"

meta:resourcekey="Button1" />

El valor resourcekey coincide con una clave del archivo de recursos correspondiente. En tiempo de ejecución,ASP.NET hace coincidir los recursos con las propiedades de los controles utilizando la etiqueta de control comoresourcekey. Si el valor de una propiedad está definido en el archivo de recursos, ASP.NET sustituye la propiedadpor el valor del recurso.

De forma alternativa, puede utilizar la localización explícita, donde se utiliza una expresión de recurso. A diferenciade la localización implícita, se debe utilizar una expresión de recurso para cada propiedad que desee establecer.

Un control Button configurado para establecer la propiedad Text de un archivo de recursos global puede ser similaral siguiente:

<asp:Button ID="Button1" runat="server"

Text="<%$ Resources:WebResources, Button1Caption %>" />

Page 76: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 76/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  76 

Para la expresión de recurso se utiliza el formato siguiente, donde Clase es opcional, a menos que el recurso seaglobal, e idRecurso es obligatorio:

<%$Resources:Clase,IdRecurso%>

El valor Clase identifica el archivo de recursos que se utilizará cuando se empleen recursos globales. Cuando secompilan archivos .resx, se utiliza el nombre de archivo base, sin extensiones, como el nombre de clase del

ensamblado resultante, explícitamente. Si se desea usar recursos de un archivo de recursos local (uno que coincidacon el nombre de página actual), no se tiene que incluir un nombre de clase. Esto se debe a que ASP.NET hacecoincidir la clase de página con la clase de recurso.

El valor idRecurso es el identificador del recurso que se va a leer. En el ejemplo anterior, la propiedad Text para elbotón se lee del archivo de recursos global WebResources.resx (o la versión adaptada adecuada). En ese archivo,ASP.NET utiliza el valor para el recurso con el identificador Button1Caption y para la propia página. Para establecerlas propiedades de página, se puede usar expresiones de recurso en la directiva @ Page.

Se puede especificar una expresión de recurso explícita o una expresión de recurso implícita para un control, perono ambas. Se producirá un error del analizador si se usa la sintaxis declarativa siguiente en un control Button:

<asp:Button ID="Button1"

runat="server"

meta:resourcekey="Button1Resource1"

Text="<%$ Resources:WebResources, Button1Caption %>" />

En este ejemplo se especifica un archivo de recursos local implícito (que coincide con el nombre de la páginaactual), así como un archivo de recursos explícito denominado WebResources. Para evitar que se produzca un errorde análisis para este control, quite una de las expresiones de recurso.

Si una página incluye texto estático, puede usar la adaptación de ASP.NET incluyéndolo en un control Localize yusando después la localización explícita para establecer el texto estático. El control Localize no representa elmarcado; su única función es actuar como marcador de posición para el texto adaptado. El control Localize sepuede editar en la Vista de diseño, no solo en la cuadrícula de propiedades. En tiempo de ejecución, ASP.NET trata

el control Localize como un control Literal. Por ejemplo, su página podría incluir el código siguiente:

<h1>

<asp:Localize runat=server

ID="WelcomeMessage"

Text="Welcome!" meta:resourcekey="LiteralResource1" />

</h1>

<br />

<br /><asp:Localize runat="server"

ID="NameCaption"

Text="Name: " meta:resourcekey="LiteralResource2" />

<asp:TextBox runat="server" ID="TextBox1"

meta:resourcekey="TextBox1Resource1" />

Page 77: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 77/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  77 

Seleccionar archivos de recursos para idiomas diferentes

Cuando se ejecuta una página, ASP.NET selecciona la versión del archivo de recursos que más se asemeje al valorUICulture actual para la página. Si no existe ninguna coincidencia, ASP.NET usa la reserva de recursos paraobtener un recurso. Por ejemplo, si se está ejecutando la página Default.aspx y la propiedad UICulture actual estáestablecida en es (español), ASP.NET utiliza la versión compilada del archivo de recursos localDefault.aspx.es.resx.

ASP.NET puede establecer las propiedades UICulture y Culture para la página en los valores de idioma y referenciacultural que le pasa el explorador. También se puede establecer explícitamente las propiedades UICulture yCulture, ya sea mediante declaración o en el código. Asimismo, sepuede establecer los valores mediantedeclaración en archivos Web.config.

LECCION 22 Puesta en marcha aplicaciones

Lo nuevo en la publicación de sitios Web en Visual Studio

En esta lección se describen las nuevas características de Visual Studio para implementar, o publicar, sitios Web enun servidor de ensayo o de producción.

A partir de Visual Studio 2005, el proceso de trasladar un sitio Web en desarrollo a un servidor de ensayo o deproducción es mucho más fácil que con las versiones anteriores. En versiones anteriores, todas las partes delcódigo del sitio Web se generaban en un ensamblado único. A continuación, el ensamblado generado, junto con losarchivos .aspx, el archivo Web.config y otros archivos que no son de código se implementaban en el servidor dedestino. Las formas más habituales de implementar los archivos eran las siguientes: usar la utilidad Copiarproyecto, para lo que el servidor de destino tenía que estar en una red de área local; usar las Extensiones deservidor de FrontPage de Microsoft, o crear un proyecto de instalación para generar un archivo de instalación(.msi).

En la versión actual de Visual Studio, se puede implementar un proyecto utilizando las herramientas siguientes:

  La herramienta Copiar sitio Web, que copia directamente el sitio Web actual en el servidor de destino.

  La utilidad Publicar sitio Web, que compila el sitio Web en un conjunto de archivos ejecutables. Acontinuación, se puede copiar los archivos en el servidor de destino, utilizando el método que desee.

La utilidad de publicación de sitios Web no está disponible en Visual Web Developer Express.

Estas herramientas no requieren configuración especial en el servidor de destino, como sucede con las Extensionesde servidor de FrontPage.

Además de crear el sitio Web e implementarlo en un servidor de destino, también puede crear un sitio Web delProtocolo de transferencia de archivos (FTP). En ese caso, los archivos se crean y editan directamente en elservidor de destino, lo que representa una forma muy cómoda de trabajar con un sitio Web en un servidor alojado.

Copiar sitios Web

La herramienta Copiar sitio Web es parecida a una utilidad de FTP: se puede abrir una carpeta en un servidor de

destino y, a continuación, cargar y descargar archivos del sitio Web actual en el sitio Web de destino, y viceversa.La herramienta Copiar sitio Web ofrece las mejoras siguientes respecto a la utilidad Copiar proyecto de lasversiones anteriores de Visual Studio:

  No es necesario compilar los archivos en el sitio Web antes de copiarlos en el servidor de destino. En lugarde ello, sólo se debe copiar los archivos de código fuente, incluidos los archivos .aspx y archivos de clase,en el servidor de destino. Igual que sucede con cualquier sitio Web ASP.NET, las páginas Web se compilandinámicamente cuando se solicita.

Page 78: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 78/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  78 

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

Además de copiar un proyecto en un servidor de destino, la herramienta Copiar sitio Web se puede utilizar pararealizar otras tareas. Es compatible con una característica de sincronización que examina los archivos de los dossitios Web y, automáticamente, garantiza que las versiones de los archivos están actualizadas en ambos sitios.

Antes de copiar los archivos de aplicación, la herramienta Copiar sitio Web coloca un archivo denominadoApp_offline.htm en el directorio raíz del sitio Web de destino. Mientras exista el archivo App_offline.htm, todas lassolicitudes que se hagan al sitio Web se redirigirán a este archivo, que muestra un mensaje descriptivo para indicara los clientes que se está actualizando el sitio Web. Una vez que se han copiado todos los archivos del sitio Web, laherramienta Copiar sitio Web elimina el archivo App_offline.htm del sitio Web de destino.

Debe tener la versión 2.0 de .NET Framework instalada en el servidor de destino para que las páginas Web seejecuten como se espera.

Si el servidor de destino es un servidor FTP, se pueden abrir y editar los archivos en el servidor creando un sitioWeb FTP. También se pueden administrar el sitio de destino la herramienta Administración de sitios Web.

Compilar sitios Web

La utilidad de publicación de sitios Web realiza la compilación previa del contenido del sitio Web, tanto las páginasWeb (archivos .aspx) como el código, y copia el resultado en el directorio o ubicación de servidor especificada. Sepuede publicar el contenido directamente como parte del proceso de compilación previa, o realizar la compilaciónprevia localmente y, después, copiar los archivos. La utilidad de publicación de sitios Web compila el sitio Web yelimina el código fuente de los archivos, y sólo deja los archivos de código auxiliar de las páginas y losensamblados compilados. Cuando los usuarios solicitan las páginas, ASP.NET da servicio a la solicitud desde losensamblados precompilados.

El proceso de compilación previa de la utilidad de publicación de sitios Web no es igual que el de las versionesanteriores de Visual Studio, como se describe a continuación:

  En Visual Studio .NET 2003, sólo se compilaban los archivos de código. En la utilidad de publicación de

sitios Web, se puede compilar opcionalmente el marcado de los archivos .aspx junto con el código depágina y cualquier otro archivo ejecutable.

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

En la utilidad de publicación de sitios Web, el código fuente se quita del sitio Web, incluido, si se desea, el marcadode los archivos .aspx. Los archivos .aspx siguen estando presentes, pero sólo contienen punteros que indican lasversiones compiladas de las páginas. De esta forma, el contenido queda más protegido y resulta más difícil queotros usuarios tengan acceso al código fuente del sitio.

En consecuencia, el sitio Web tiene las mismas ventajas que los resultados creados con versiones anteriores deVisual Studio, con mayor rapidez de respuesta inicial de las páginas y compilación previa que contribuye adescubrir errores del código en tiempo de compilación. La utilidad de publicación de sitios Web también compila

archivos que no son de código, por ejemplo el archivo Web.config. Así, sirve de ayuda para encontrar errores decompilación y problemas en el archivo de configuración.

Copiar sitios Web con la herramienta Copiar sitio Web

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

Page 79: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 79/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  79 

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

  Admite una característica de sincronización, que examina los archivos en ambos sitios y se asegura de quetodos los archivos están actualizados.

Se puede utilizar la herramienta Copiar sitio Web para mover archivos de su equipo local a un servidor de ensayo o

a un servidor de producción. La herramienta Copiar sitio Web es especialmente útil en situaciones donde no puedeabrir los archivos desde el sitio remoto para editarlos. Se puede utilizar la herramienta Copiar sitio Web para copiararchivos en el equipo local, editarlos y copiarlos otra vez en el sitio remoto. También se puede utilizar laherramienta para copiar archivos de un servidor de ensayo a un servidor de producción cuando haya terminado suproceso de desarrollo.

Si copia una aplicación que contiene una referencia a un componente personalizado registrado en la GAC, elcomponente no se copiará con la aplicación.

Sitios de origen y sitios remotos

La herramienta Copiar sitio Web copia archivos entre un sitio de origen y un sitio remoto. Estos términos se utilizanpara distinguir los dos sitios con los que trabaja la herramienta. Los términos se utilizan con significadosespecíficos:

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

Sitio remoto El sitio remoto es el sitio en el que desea copiar archivos. Un sitio remoto puede ser una ubicación enotro equipo al que puede tener acceso utilizando las Extensiones de servidor de FrontPage o FTP. En estos casos, elsitio es literalmente remoto. Sin embargo, el sitio remoto también puede ser otro sitio en su propio equipo. Porejemplo, se puede publicar desde un sitio Web del sistema de archivos de su equipo en un sitio Web de ISS localque está también en su equipo. En este caso, aunque el sitio es local en su equipo, es el sitio remoto a efectos dela herramienta Copiar sitio Web.

Observe que el sitio de origen no es necesariamente el origen del que se copia. Se puede copiar del sitio remoto alsitio de origen.

Sincronizar los sitios

Además de copiar archivos, la herramienta Copiar sitio Web permite sincronizar los sitios. Al sincronizar, seexaminan los archivos de los sitios local y remoto y se asegura que todos los archivos de ambos sitios estánactualizados. Por ejemplo, si un archivo en un sitio remoto es más actual que la versión que hay del mismo archivoen el sitio local, al sincronizar los archivos se copia el archivo del sitio remoto en el sitio local.

La herramienta Copiar sitio Web no combina archivos que tienen el mismo nombre pero diferente contenido. En esecaso, la sincronización le da la oportunidad de especificar qué versión del archivo desea mantener.

La sincronización hace que la herramienta resulte adecuada para un entorno de varios desarrolladores en el queéstos mantienen copias del sitio Web en sus equipos locales. Cada desarrollador puede copiar los últimos cambiosen un servidor remoto compartido y a la vez actualizar su equipo local con los archivos que han modificado otrosdesarrolladores. Un desarrollador que sea nuevo en un proyecto puede también obtener rápidamente copias detodos los archivos de un sitio Web mediante la creación de un sitio Web local en su propio equipo y lasincronización con el sitio del servidor compartido.

Estado de los archivos

Para sincronizar archivos, la herramienta Copiar sitio Web necesita información sobre el estado de los archivos enambos sitios. Por consiguiente, la herramienta mantiene información que consta de las marcas de hora de losarchivos más la información adicional que se necesita para realizar la sincronización. Por ejemplo, la herramienta

Page 80: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 80/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  80 

mantiene una lista de cuándo fue la última vez que se modificaron los archivos, lo que le permite a la herramientadeterminar, por ejemplo, si se ha eliminado un archivo.

Cuando se conecta a un sitio (o se actualiza), la herramienta compara las marcas de hora de los archivos enambos sitios así como la información almacenada sobre ambos sitios y se crea un informe del estado de cadaarchivo. A continuación se muestra el estado de los archivos.

Sin cambios El archivo no ha cambiado desde la última vez que se copió.

Modificado El archivo tiene una marca de hora más reciente que la marca de hora que se tomó cuando se copió elarchivo por última vez.

Nuevo Se ha agregado el archivo desde la última vez que se copió el sitio.

Eliminado Se ha eliminado el archivo desde la última vez que se copió el sitio. Si selecciona Mostrar archivoseliminados en la herramienta Copiar sitio Web, en la ventana se muestra una entrada para el archivo.

LECCION 23 Servicios Web XML

Introducción

La programación en Internet evoluciona rápidamente desde las aplicaciones WEB más comunes que permitena través de un navegador mostrar interfaces de usuario con el contenido deseado hasta la próxima generaciónde aplicaciones que permiten la integración de negocios, organizaciones, aplicaciones, servicios, y dispositivosentre otros. La tecnología que permite realizar esta integración, se llama servicios WEB XML inteligentes,permitiendo acceder a los recursos WEB como servicios de programación.

El CLR (Common Language Runtime) de la plataforma .NET ofrece un soporte para la creación y publicaciónde los servicios WEB, empleando una abstracción de programación la cual es consiste con los desarrolladores deASP.NET o los desarrolladores en otro lenguaje orientado por objetos. El modelo resultante es escalable yextensible y se basa en estándares de Internet abiertos y públicos (open source) como HTTP, XML, SOAP,WSDL. Por lo tanto un servicio WEB puede ser utilizado y accedido (consumido en la terminología de serviciosWEB) en cualquier plataforma donde Internet se encuentre disponible.

Servicios Web XML empleando ASP.NET

Visual Studio .Net ofrece una plantilla para la creación de servicios web

Page 81: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 81/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  81 

ASP.NET ofrece soporte total para la creación de servicios WEB XML con los archivos .asmx . Un archivo .asmxes un archivo de texto similar a un archivo .aspx. Estos archivos (.asmx) también pueden ser parte de unaaplicación ASP.NET que incluye archivos .aspx files. Los archivos .asmx, al igual que los archivos .aspx sondireccionables a través de un URI.

A continuación se muestra un ejemplo de un archivo .asmx sencillo

Page 82: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 82/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  82 

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

namespace ejemploSW{ /// <summary>  /// Summary description for ejemploSW  /// </summary> [WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)][System.ComponentModel.ToolboxItem(false)]

 // [System.Web.Script.Services.ScriptService] public class ejemploSW : System.Web.Services.WebService {

[WebMethod]public string mensaje(){

return "Ejemplo SW";}}

}

Para poder utilizar los servicios se requiere utilizar el espacio de nombres System.Web.Services. Es necesariotambién crear una clase derivada de WebService; no es obligatorio heredar de WebService , pero es útil paratener disponibles los métodos y atributos. Los métodos que serán accesibles como parte del servicio deben tenerel atributo [WebMethod] antes de especificar la firma del método.

Para colocar este servicio disponible, el archivo .asmx debe ser colocado en un directorio virtual de un dominio yel nombre del archivo .asmx puede ser invocado como un URL. Ejemplo, si el archivo del servicio web se llamaejemploSW.asmx y se coloca en el directorio virtual local host, al escribir en el navegadorhttp:://localhost/ejemploSW1.asmx  mostrará como página resultante la información conteniendo losmétodos públicos de este servicio WEB (aquellos marcados con el atributo WebMethod ), e igualmente indicarácon cuales protocolos (SOAP o HTTP GET) se pueden invocar los métodos.

Especificando la dirección http://localhost/ejemploSW.asmx?WSDL  retornará un documento en formatoWSDL (Web Service Description Language). Este documento WSDL es muy importante y será utilizado por losclientes consumiendo el servicio.

Utilizando o Accediendo (consumiendo) servicios WEB

Adicionalmente a la tecnología ASP.NET del lado del servidor que permite a los desarrolladores crear serviciosWEB XML, la plataforma .NET provee un conjunto de herramientas y clases sofisticadas para consumir losservicios web XML. Debido a que los servicios web se basan en protocolos públicos (open) como el SOAP(Simple Object Access Protocol), esta tecnología del lado del cliente también puede ser utilizada paraconsumir servicios WEB no creados en la plataforma ASP.NET.

Dentro del Software Development Kit (SDK), existe una herramienta llamada Web Services DescriptionLanguage tool (WSDL.exe) – Lenguaje de Descripción de los Servicios Web). Esta herramienta es utilizadapara crear clases con interfaces (“proxy classes”) partiendo de una especificación WSDL).

Por ejemplo, si en una línea de comandos se coloca:WSDL http://localhost /ejemploSW.asmx?WSDL

Se crea una clase interfaz llamada ejemploSW.cs.Desde el punto de vista del cliente, el código luciría como el siguiente.

Page 83: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 83/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  83 

ejemploSW esw = new ejemploSW();

string sdev = esw.mensaje()

LECCION 24 Introducción a los Servicios Web

¿Qué es un servicio Web ? 

Es un servicio ofrecido a través de la Web. 

En un escenario típico se servicios Web se siguen los siguientes pasos:

· Una aplicación cliente (de negocio) solicita un requerimiento a un servicio a través de un URL empleandoel protocolo SOAP sobre HTTP 

· El servicio recibe el requerimiento, lo procesa y envía la respuesta

Los servicios web pueden verse como los habilitadores “building blocks” para implementar una arquitectura decomputación distribuida en Internet. Adicionalmente los servicios Web trabajan bajo estándares abiertos comoXML, de allí su gran potencial en las áreas de integración de aplicaciones.

Las aplicaciones son construidas invocando varios servicios web, servidos desde varias fuentes, para trabajar deuna manera colaborativa independientemente de donde residan o de cómo fueron implementados.

Los servicios web exportan su funcionalidad a través de un protocolo web estándar, por lo general emplean SOAP(Simple Object Access Protocol). Los servicios web proveen un mecanismo para describir sus interfaces losuficientemente detallado y preciso de modo que los clientes pueden comunicarse efectivamente con ellos parasolicitar un servicio.

La descripción de las interfaces  de los servicios Web se realiza a través de un documento XML  llamado

documento WSDL (Web Services Description Language). Adicionalmente, los servicios Web son registradosde modo que los usuarios puedan fácilmente encontrarlos, esto se realiza a través de un UDDI UniversalDiscovery Description and Integration  o empleando ebXML. 

Componentes de un servicio web

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

· publicado en la web a través de SOAP 

· descrito con un documento XML llamado WSDL 

· registrado en un UDDI 

En un nivel de detalle de implementación, un servicio web contiene un conjunto de:

· Especificaciones de puertos (Port Types)

· Definiciones de esquemas XML 

Page 84: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 84/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  84 

· Definiciones de mensajes 

· Operaciones 

· “Bindings” (enlaces) que proveen los detalles de comunicación y protocolos.

Servicios Web vs. Aplicaciones Web

Los servicios web son aplicaciones distribuidas, construidos con componentes ejecutándose del lado del servidor similar a los sitios web comunes. Sin embargo, se diferencian de las aplicaciones web en el hecho de no poseerinterfaces con el usuario GUI y no ser diseñadas para mostrar directamente en los navegadores.

Los servicios web es mejor interpretarlos como componentes de “software” reutilizables. Los servicios web seencuentran diseñados para ser consumidos por otras aplicaciones como:

· aplicaciones clientes tradicionales

· aplicaciones web

· otros servicios web

Arquitectura de los servicios Web

La arquitectura de los servicios web posee tres características principales:

· Una capa de invocación del servicio (“consumer”)

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

· Una capa de funcionalidad del servicio 

Beneficios de los servicios Web

El desarrollo de “software” industrial se encuentra migrando a una arquitectura basada en servicios web debido alas múltiples ventajas que ofrece sobre la arquitectura tradicional de desarrollo. Una de estas ventajas es quecualquiera de las capas puede ser cambiada independientemente de las otras y el grupo de desarrolloresponsable de desarrollar cada una de las capas no requiere conocer los detalles de las otras capas.

En los servicios web se separa la funcionalidad del servicio de la funcionalidad del cliente:

· Permitiendo compartir y reutilizar la funcionalidad entre varias aplicaciones

· Ofreciendo transparencia en las aplicaciones cliente, no requieren conocer cómo fue implementado elservicio . Por ejemplo Microsoft .Net o Java 2 Enterprise Edition (J2EE) o Enterprise Java Beans (EJB)

· Permite la migración de la funcionalidad del servicio sin necesidad de cambiar o realizar pruebas en lasaplicaciones clientes.

Otro de los beneficios de adoptar una arquitectura basada en servicios web es la portabilidad de la plataformatanto en localidad como el tipo de invocación de los servicios.

Page 85: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 85/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  85 

LECCION 25 Construyendo Servicios Web

Codificando un ejemplo sencillo de Web Service

El desarrollo de un servicio web XML sencillo puede ser realizado en cuestión de minutos empleando cualquiereditor de texto (o en la plataforma de Visual Studio). En esta sección se muestra un ejemplo del manejo de

operaciones matemáticas, donde se tienen los métodos de sumar, restar, multiplicar y dividir un par de númerosdel tipo Single

En el archivo .asmx, se define una clase para encapsular la funcionalidad del servicio. Esta clase debe serpública, y puede opcionalmente heredar de la clase base XML Web service. Se recomienda heredar la clasebase para poder reutilizar las propiedades y métodos allí definidos.

public class swMat : System.Web.Services.WebService {

….

Cada método a ser expuesto (publicado) por el servicio debe ser cualificado con el atributo [WebMethod] como parte de su “signature”. Si este atributo no es colocado el método no estará disponible como parte delservicio. Por lo tanto, en caso de requerirse implementar estrategias de ocultamiento de información no secolocaría la cualificación de [WebMethod].

[WebMethod]public Single sumar(Single a, Single b){

return a + b;}

A continuación se muestra el código completo de la clase

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

namespace ejemploSW{

 /// <summary>  /// Summary description for swMat  /// </summary> [WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)][System.ComponentModel.ToolboxItem(false)]

 // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. // [System.Web.Script.Services.ScriptService] public class swMat : System.Web.Services.WebService {

[WebMethod]public Single sumar(Single a, Single b){

return a + b;}

[WebMethod]public Single restar(Single a, Single b){

return a - b;}

[WebMethod]public Single multiplicar(Single a, Single b)

Page 86: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 86/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  86 

{return a * b;

}

[WebMethod]public Single dividir(Single a, Single b){

return a / b;}

}}

Al igual que los archivos .aspx, los archivos implementando servicios web XML .asmx, son compiladosautomáticamente por el motor en tiempo de ejecución de ASP.NET cuando el requerimiento al servicio es realizadopor primera vez. En los siguientes requerimientos, éstos son servidos empleando la política de caché sde ASP.NETdonde se almacenan objetos de las páginas.

Cuando se solicita desde un navegador un archive .asmx, el motor de ejecución de ASP.NET retorna una página deayuda asociada con el servicio Web XML describiendo el contrato del servicio web (los métodos disponibles)

LECCION 26 Probando un Servicio Web utilizando el Internet Explorer

Para probar un servicio web desde Internet Explorer se coloca el nombre de la página .asmx igual que un URL.

http://localhost/swMat.asmx

En el ejemplo al colocarlo aparece la siguiente información.

Page 87: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 87/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  87 

Si por ejemplo, se selecciona la operación sumar, se muestra la siguiente información

Page 88: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 88/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  88 

Al especificar unos valores, por ejemplo 3 y 2 e invocar el método, se muestra

LECCION 27 Creando un cliente consumiendo Servicios Web

En esta lección se indican los pasos para consumir un servicio WEB en un cliente. Se utiliza el mismo ejemplode operaciones matemáticas descrito en las lecciones anteriores.

Para poder consumir un servicio web (utilizar las llamadas a los métodos publicados) se requiere emplear elutilitario WSDL.exe  desde la línea de comandos. WSDL es la abreviatura de Web Services DescriptionLanguage , Lenguaje de Descripción de Servicios Web. Este utilitario crea una clase con interfaz para poderser utilizada (proxy class) con el mismo contrato definido en el archive .asmx (pero solo contiene los métodospúblicos, los WebMethod)

Luego, se requiere compilar el código con esta clase incluida.

WSDL.exe soporta una variada de opciones desde la línea de comandos, sin embargo para crear un proxy solouna opción es requerida: el URI para el WSDL.

El archivo WSDL el cual se puede generar desde el navegador con el siguiente comando:

Page 89: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 89/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  89 

http://localhost/ swmat.asmx?WSDL

Produciéndose el siguiente document XML

<?xml version="1.0" encoding="UTF-8"?>

<wsdl:definitions  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"

targetNamespace="http://tempuri.org/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://tempuri.org/"xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"><wsdl:types><s:schema targetNamespace="http://tempuri.org/" elementFormDefault="qualified"><s:element name="sumar"><s:complexType><s:sequence><s:element  name="a" type="s:float" maxOccurs="1"minOccurs="1"/><s:element  name="b" type="s:float" maxOccurs="1"minOccurs="1"/></s:sequence></s:complexType></s:element><s:element name="sumarResponse"><s:complexType><s:sequence><s:element  name="sumarResult"type="s:float" maxOccurs="1"minOccurs="1"/></s:sequence></s:complexType></s:element><s:element name="restar"><s:complexType><s:sequence><s:element  name="a" type="s:float" maxOccurs="1"minOccurs="1"/><s:element  name="b" type="s:float" maxOccurs="1"minOccurs="1"/></s:sequence></s:complexType></s:element><s:element name="restarResponse"><s:complexType><s:sequence><s:element  name="restarResult"type="s:float" maxOccurs="1"minOccurs="1"/></s:sequence></s:complexType></s:element><s:element name="multiplicar"><s:complexType><s:sequence><s:element  name="a" type="s:float"maxOccurs="1" minOccurs="1"/><s:element  name="b" type="s:float" maxOccurs="1"minOccurs="1"/></s:sequence></s:complexType></s:element><s:element name="multiplicarResponse"><s:complexType><s:sequence><s:element  name="multiplicarResult"type="s:float" maxOccurs="1"minOccurs="1"/></s:sequence></s:complexType></s:element><s:element name="dividir"><s:complexType><s:sequence><s:element  name="a" type="s:float" maxOccurs="1"

minOccurs="1"/><s:element  name="b" type="s:float" maxOccurs="1"minOccurs="1"/></s:sequence></s:complexType></s:element><s:element name="dividirResponse"><s:complexType><s:sequence><s:element  name="dividirResult"type="s:float" maxOccurs="1"minOccurs="1"/></s:sequence></s:complexType></s:element></s:schema></wsdl:types><wsdl:message  name="sumarSoapIn"><wsdl:part  name="parameters"element="tns:sumar"/></wsdl:message><wsdl:message  name="sumarSoapOut"><wsdl:part name="parameters" element="tns:sumarResponse"/></wsdl:message><wsdl:message name="restarSoapIn"><wsdl:part  name="parameters"element="tns:restar"/></wsdl:message><wsdl:message  name="restarSoapOut"><wsdl:part name="parameters" element="tns:restarResponse"/></wsdl:message><wsdl:message name="multiplicarSoapIn"><wsdl:part  name="parameters"element="tns:multiplicar"/></wsdl:message><wsdl:message name="multiplicarSoapOut"><wsdl:part  name="parameters"

element="tns:multiplicarResponse"/></wsdl:message><wsdl:message name="dividirSoapIn"><wsdl:part  name="parameters"element="tns:dividir"/></wsdl:message><wsdl:message  name="dividirSoapOut"><wsdl:part name="parameters" element="tns:dividirResponse"/></wsdl:message><wsdl:portType name="swMatSoap"><wsdl:operation  name="sumar"><wsdl:input message="tns:sumarSoapIn"/><wsdl:output message="tns:sumarSoapOut"/></wsdl:operation><wsdl:operation  name="restar"><wsdl:input message="tns:restarSoapIn"/><wsdl:output message="tns:restarSoapOut"/></wsdl:operation><wsdl:operation  name="multiplicar"><wsdl:input 

Page 90: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 90/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  90 

message="tns:multiplicarSoapIn"/><wsdl:output message="tns:multiplicarSoapOut"/></wsdl:operation><wsdl:operation  name="dividir"><wsdl:input message="tns:dividirSoapIn"/><wsdl:output message="tns:dividirSoapOut"/></wsdl:operation></wsdl:portType><wsdl:binding name="swMatSoap" type="tns:swMatSoap"><soap:binding transport="http://schemas.xmlsoap.org/soap/http"/><wsdl:operation name="sumar"><soap:operation  style="document"soapAction="http://tempuri.org/sumar"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation  name="restar"><soap:operation style="document" soapAction="http://tempuri.org/restar"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation  name="multiplicar"><soap:operation style="document" soapAction="http://tempuri.org/multiplicar"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation  name="dividir"><soap:operation style="document" soapAction="http://tempuri.org/dividir"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:binding  name="swMatSoap12"type="tns:swMatSoap"><soap12:binding 

transport="http://schemas.xmlsoap.org/soap/http"/><wsdl:operation name="sumar"><soap12:operation  style="document"soapAction="http://tempuri.org/sumar"/><wsdl:input><soap12:body use="literal"/></wsdl:input><wsdl:output><soap12:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation  name="restar"><soap12:operation style="document" soapAction="http://tempuri.org/restar"/><wsdl:input><soap12:body use="literal"/></wsdl:input><wsdl:output><soap12:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="multiplicar"><soap12:operation  style="document"soapAction="http://tempuri.org/multiplicar"/><wsdl:input><soap12:body use="literal"/></wsdl:input><wsdl:output><soap12:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation  name="dividir"><soap12:operation style="document" soapAction="http://tempuri.org/dividir"/><wsdl:input><soap12:body use="literal"/></wsdl:input><wsdl:output><soap12:body 

use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="swMat"><wsdl:port  name="swMatSoap" binding="tns:swMatSoap"><soap:address location="http://localhost/swMat.asmx"/></wsdl:port><wsdl:port  name="swMatSoap12"binding="tns:swMatSoap12"><soap12:address location="http://localhost/swMat.asmx"/></wsdl:port></wsdl:service></wsdl:definitions>

En este ejemplo, se pasan varias opciones el lenguaje a generar, el espacio de nombres y el directorio dondecolocará el Proxy.

wsdl.exe /l:CS /n:swMat /out:C:\Inetput\wwwroot\swMat.csC:\Inetpub\wwwroot\SWOperMat.wsdl

Una vez creada la clase proxy se puede utilizar como cualquier clase en el lenguaje de programación, permitiendola creación de objetos. Cada llamada a un método realizada con el objeto es interpretada como una salida del URIdel servicio web XML (generalmente como un requerimiento SOAP).

Page 91: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 91/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  91 

La manera óptima de consumir un servicio web es agregando una referencia web a un proyecto cliente, desdeVisual Studio .Net

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

LECCION 28 Seguridad en Servicios Web

Introducción

La seguridad en servicios Web  involucra modificaciones al servicio de mensajes SOAP para ofrecer unmecanismo de protección el cual incluya integridad de los mensajes, confidencialidad en los mensajes yautenticación en los mensajes. Estos mecanismos pueden ser empleados para adaptar SOAP a una variedad demodelos de seguridad y de encriptación de datos.

Page 92: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 92/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  92 

La seguridad en servicios Web también provee de un mecanismo de propósito general para asociar “tokens” deseguridad  con los mensajes. El manejo de los “tokens” de seguridad es extensible, i.e. cada aplicación puedecrear sus propios “tokens”.

Adicionalmente, la seguridad en servicios Web describe como codificar y decodificar “tokens” de seguridad enformato binario y encriptados.Empleando SOAP como un modelo extensible, las especificaciones de SOAP pueden ser compuestas para lograr unainfraestructura de mensajes poderoso.La seguridad en servicios Web debe ser codificada en conjunto con otros servicios web y protocolos específicos delas aplicaciones de modo de utilizar servicios de encriptación y modelos de seguridad disponibles.

La seguridad en servicios Web es flexible y es diseñada para ser utilizada como base para la construcción de unaamplia variedad de modelos de seguridad incluyendo PKI, Kerberos, y SSL. Específicamente, WS-Security ofrecesoporte para manejar múltiples “tokens” de seguridad, múltiples dominios “trust”, múltiples formatos de firmas ymúltiples tecnologías de encriptación.

WS-Security  es una especificación técnica y la empleada en este manual contempla tres mecanismosprincipales de seguridad: propagación segura de “tokens”, integridad en los mensajes y confidencialidad en losmensajes.Estos mecanismos pueden ser utilizados de manera independiente o integrados unos con otros.

Ejemplo

A continuación, se muestra un ejemplo de un documento escrito en el protocolo SOAP conteniendo mecanismos deseguridad implementados

(

(001) <?xml version="1.0" encoding="utf-8"?>(002) <S:Envelope xmlns:S="http://www.w3.org/2001/12/soap-envelope"

xmlns:ds="http://www.w3.org/2000/09/xmldsig#">(003) <S:Header>

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

(005) <m:action>http://fabrikam123.com/getQuote</m:action>

(006) <m:to>http://fabrikam123.com/stocks</m:to>

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

(008) </m:path>

(009) <wsse:Security

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

(010) wsse:UsernameToken Id="MyID">

(011) <wsse:Username>Zoe</wsse:Username>

(012) </wsse:UsernameToken>

(013) <ds:Signature>

(014) <ds:SignedInfo>

(015) <ds:CanonicalizationMethod

Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>

017) <ds:Reference URI="#MsgBody">

Page 93: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 93/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  93 

(018) <ds:DigestMethod

Algorithm=

"http://www.w3.org/2000/09/xmldsig#sha1"/>

(019) <ds:DigestValue>LyLsF0Pi4wPU...</ds:DigestValue>

(020) </ds:Reference>

(021) </ds:SignedInfo>

(022) <ds:SignatureValue>DJbchm5gK...</ds:SignatureValue>

(023) <ds:KeyInfo>

(024) <wsse:SecurityTokenReference>

(025) <wsse:Reference URI="#MyID"/>

(026) </wsse:SecurityTokenReference>

(027) </ds:KeyInfo>

(028) </ds:Signature>

(029) </wsse:Security>

(030) </S:Header>

(031) <S:Body Id="MsgBody">

(032) <tru:StockSymbol xmlns:tru="http://fabrikam123.com/payloads">

QQQ

</tru:StockSymbol>

(033) </S:Body>

(034) </S:Envelope>

Las primeras dos líneas contienen el “SOAP Envelope”.

La línea (003) comienza con los “headers” asociados con el con el mensaje.

Las líneas (004) a la (008) especifican como enrutar el mensaje.

La línea (009) comienza con el tag <Security> , en este tag se coloca la información de seguridad del elemento arecibir. Este tag finaliza en la línea (029).

Las líneas (010) a (012) especifican un token de seguridad asociado con el mensaje. En este caso el nombre delusuario es identificado con el token <UsernameToken>. En este ejemplo, se asume que el servicio conoce el

password.

Las líneas (013) a (028) especifican una firma digital. Esta firma garantiza la integridad de los elementos firmado.La firma utiliza la especificación “XML Signature Specification” . En este ejemplo, la firma se basa en una clavegenerada por el password de los usuarios.

Las líneas (014) a (021) describen la firma digital. La línea (015) especifica como normalizar los datos que estánsiendo firmados.

Las líneas (017) a (020) seleccionan los elementos que se encuentran firmados.

Page 94: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 94/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  94 

Específicamente la línea (017) indica que el elemento <S:Body> se encuentra firmado. En este ejemploúnicamente el cuerpo (body) del mensaje es firmado

La línea (022) especifica el valor de la firma de los datos normalizados.

Las líneas (023) a (027) provee una ayuda para indicar dónde encontrar el token de seguridad asociado con la

firma.En las líneas (024) y (025) se específica que el token puede ser extraído de un URL.

Las líneas (031) a (033) contienen el “body” del mensaje SOAP.

La descripción de la especificación de seguridad de los servicios Web se encuentra fuera del alcance de estedocumento. Para mayor información se debe ubicar la especificación de WSSecurity en la información disponible deMicrosoft.

LECCION 29 Servicios WEB REST

Una de las novedades de ASP.NET MVC son los templates de proyectos ASP.NET Web API. Estos nuevos “tipos”de proyectos permiten crear, de una manera muy simple, aplicaciones cuyo propósito es exponer servicios bajo elprotocolo HTTP utilizando el estilo de arquitectura REST (Representational State Transfer).

REST (Representational State Transfer) es un estilo de arquitectura de software para sistemas hipermediosdistribuidos tales como Web. El término fue introducido en la tesis doctoral de Roy Fielding en el año 2000, quienes uno de los principales autores de la especificación de HTTP.

Los servicios web basados en REST intentan trabajar de manera similar al protocolo HTTP, ya que la interfaz  de losmismos será establecida a partir de un conjunto conocido de operaciones estándar (por ejemplo GET, POST,PUT,…). De esta forma, se abstrae de los protocolos basados en patrones de intercambio de mensajes, como losutilizados en los servicios web basados en SOA (de seguro estará pensando en el viejo y conocido protocolo deservicios web SOAP).

REST no es un estándar, sino un estilo de arquitectura que se basa en ciertos estándares, como HTTP, URL, XML,

JSON y MIME entre otros.

Page 95: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 95/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela  95 

LECCION 30 Novedades en ASP.Net 4.5 y Visual Studio 2012: Framework y Tiempo de Ejecución,Formularios Web ASP, MVC 4, Páginas Web 2, IIS Express

ASP.NET 4.5 incluye las siguientes nuevas características:

  Compatibilidad con los nuevos tipos de formulario HTML5.

  Compatibilidad con los enlazadores de modelos en formularios Web Forms. Permiten enlazar controles de

datos directamente a los métodos de acceso a datos y convertir automáticamente los datos

proporcionados por el usuario en tipos de datos de .NET Framework, y viceversa.

  Compatibilidad con JavaScript discreto en scripts de validación en el cliente.

  Control mejorado del script de cliente mediante agrupación y minificación para un rendimiento de la

página mejorado.

  Rutinas integradas de codificación de la biblioteca AntiXSS (previamente una biblioteca externa) para

protegerse de ataques de script entre sitios.

  Compatibilidad con el protocolo de WebSockets.

  Compatibilidad con la lectura y escritura de solicitudes y respuestas HTTP de forma asincrónica.

  Compatibilidad con módulos y controladores asincrónicos.

  Compatibilidad con la reserva de red de distribución de contenido (CDN) en el control ScriptManager.

Page 96: Mm032

7/23/2019 Mm032

http://slidepdf.com/reader/full/mm032 96/96

Manual m032 CURSO VISUAL C#, ASP.NETDESARROLLO de SITIOS y SERVICIOS WEB 2012

En el siguiente URL se encuentra la información de las características novedosas de ASP.Net