399
5/25/2018 ASP.net4.5enC#ConVisualStudio2012-slidepdf.com http://slidepdf.com/reader/full/aspnet-45-en-c-con-visual-studio-2012 1/399  

ASP.net 4.5 en C# Con Visual Studio 2012

Embed Size (px)

Citation preview

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    1/399

    http://www.detodoprogramacion.com/http://www.detodoprogramacion.com/
  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    2/399

    ndice

    Informacino Ttulo, autor...

    Prlogoo Prlogo

    Visual Studio 2012 y .NET 4.5o Novedades de Visual Studio 2012o C#4 de un vistazo

    Los sitios web ASP.NET 4.5o El modelo de compilacino El rol del servidor webo El pipeline HTTP de IIS

    Los Web Formso Los Web Formso Organizar la presentacino Componentes personalizadoso AJAX

    Los sitios web MVCo El enfoque MVCo Los sitios ASP.NET MVCo Definicin de las rutaso Ir ms allo Sitios MVC 4 y Razor para dispositivos mviles

    El acceso a datos con ADO.NET 4.5o Bases de ADO.NETo Acceso a los datos mediante proveedoreso Componentes grficos de presentacin de datoso

    Crear informes con Reporting Services Gestin del estado

    o Los distintos medios para mantener el estadoo Las sesioneso Los objetos Application y Cache

    Personalizacin y securizacino Securizacin de los sitios ASP.NETo Presentacin personalizadao Los Web Parts

    Los servicios Web WCF y RESTo Los servicios Web WCFo Los servicios Web REST

    Configuracin, despliegue y administracino Configuracino Despliegue de aplicaciones ASP.NETo Supervisin de aplicaciones ASP.NET

    http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69675http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69677http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69679http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69680http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69682http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69683http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69684http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69686http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69687http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69688http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69689http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69691http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69692http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69693http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69694http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69695http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69697http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69698http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69699http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69700http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69702http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69703http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69704http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69706http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69707http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69708http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69710http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69711http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69713http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69714http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69715http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69715http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69714http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69713http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69711http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69710http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69708http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69707http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69706http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69704http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69703http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69702http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69700http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69699http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69698http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69697http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69695http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69694http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69693http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69692http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69691http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69689http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69688http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69687http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69686http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69684http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69683http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69682http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69680http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69679http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69677http://www.eni-training.com/client_net/mediabook.aspx?idr=69673&ida=69675
  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    3/399

    ASP.NET 4.5 en C# con VisualStudio 2012Diseo y desarrollo de aplicaciones WebEste libro est dirigido a los desarrolladores, arquitectos yadministradores que deseenadoptar un enfoque profesional en la realizacin de aplicaciones Web sacando el mximo provechode ASP.NET. Acompaa al lector en un estudio completo de la tecnologa ASP.NET y de VisualStudio 2012. Cada tema se aborda con ejemplos prcticos y tiles, que se proveen en C#.

    El lector comenzar con Visual Studio y sus herramientas (depuracin, refactoring, pruebasunitarias, pruebas de interfaz grfica,...) y la evolucin del lenguaje C#. El segundo captulodescribe el funcionamiento de lasaplicaciones IIS y explica cmo realizar mdulosespecficos para el servidor Web. La obra estudia con profundidad los Web forms, AJAX,JQuery, los sitios MVC y proporciona componentes personalizados para crear grficos.

    Los siguientes captulos elaboran soluciones que aportan rapidez al desarrollo y mejorrendimiento en el acceso a las bases de datosADO.NET, especialmente con los nuevos

    componentes basados en LINQ y entity framework y los estados Reporting Services. Acontinuacin, se describe la securizacin de los sitios Web y la personalizacin de la navegacin(Web Part y servicios Web WCF, REST). El ltimo captulo describe la puesta en produccincon ASP.NET y la infraestructura de supervisin Health Monitoring.

    Los captulos del libro:Prlogo Visual Studio 2012 y .NET 4.5 Los sitios web ASP.NET 4.5 Los Web Forms Lossitios web MVC El acceso a datos con ADO.NET 4.5 Gestin del estado Personalizacin ysecurizacin Los servicios Web WCF y REST Configuracin, despliegue y administracin

    Brice-Arnaud GURINIngeniero por la ESIEA, Brice-Arnaud GURINes responsable de los desarrollos de software enLexisNexis, principal referencia en la informacin jurdica, econmica y financiera, y en solucionesde gestin para profesionales. Sus competencias en desarrollo y el deseo de compartir su

    conocimiento le llevan, de forma natural, a escribir obras dedicadas a la realizacin de aplicaciones(.NET, PHP, C++) y la gestin de proyectos.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    4/399

    Prlogo

    ASP.NET y Visual Studio han encontrado un hueco natural en el universo Web, la plataforma seha enriquecido con nuevos componentes y el entorno de desarrollo integrado proporciona cadavez ms herramientas, todas ellas muy tiles. Con el paso de los aos, este tndem ha vistocrecer su pblico, yendo ms all de las simples problemticas de la programacin.

    Este libro est dirigido a los desarrolladores, arquitectosy administradoresque deseenadoptar un enfoque profesional en la realizacin de aplicaciones Web sacando el mximoprovecho de ASP.NET 4.5 y de Visual Studio 2012.

    El lector comenzar descubriendo Visual Studio y sus herramientas. Se presentan, por turno,la interfaz del entorno de desarrollo, el cuadro de herramientas, las ventanas de exploracin yel uso del depurador. El lector descubrir, tambin, la gestin del cdigo y, en particular, lafuncin de refactorizacin (refactoring). Este primer captulo detalla el uso de las pruebasunitarias as como las pruebas de la interfaz grfica. Gracias al impulso de LINQ, el lenguaje C#ha sufrido modificaciones que se describen con ayuda de ejemplos.

    El segundo captulo describe el funcionamiento de las aplicaciones ASP.NET funcionando conIIS. Este servidor Web ha evolucionado considerablemente, puesto que se ha convertido en lacolumna vertebral del sistema de informacin de Microsoft. Su conocimiento ayuda, enparticular, a los arquitectos a la hora de superar el funcionamiento estndar de un servidor deaplicaciones ASP.NET.

    La obra estudia con profundidad los Web forms. El lector descubrir los fundamentos de laprogramacin orientada a eventos para la Web: ciclo de vida de una pgina ASPX, controlesWeb, validacin de los datos introducidos por los usuarios, componentes de usuario ypersonalizados. Tambin se describen las buenas prcticas de estructuracin de la aplicacin,tales como las pginas maestras, los temas y los skins. El framework AJAXha alcanzado ciertamadurez en su funcionamiento y su integracin; lo estudiaremos desde distintos ngulos, talescomo los componentes ScriptManager y UpdatePanel, los callbacks, el cdigo JavaScriptorientado a objetos o los componentes personalizados AJAX realizados en combinacin con

    JavaScript y C#. Continuando con la explicacin de AJAX, este captulo estudia jQuery, quetiende a imponerse como el framework estndar para crear interfaces ricas en JavaScript.

    Microsoft ha completado su servidor con un modelo de aplicaciones ligeras y rpidas, los sitiosMVC. El captulo Los sitios web MVC ilustra, a partir de ejemplos concretos, el funcionamiento,la organizacin y el desarrollo de tales aplicaciones y sirve como toma de contacto con el nuevomotor de renderizacin Razor, en Android.

    El siguiente captulo elabora soluciones que aportan rapidez al desarrollo y un mejorrendimientoen el acceso a las bases de datos ADO.NET. Se presentan con detalle los modosconectado y transaccional y, a continuacin, los modos desconectado y proveedor. A estosmtodos les siguen los componentes de datos para pginas ASPX, el universo LINQ, su

    evolucin Entity Frameworky, por ltimo, las herramientas de generacin de estado ReportingServices. En el captulo Gestin del estado se estudian las herramientas que existen a disposicindel desarrollador para mantener el estado y optimizar la aplicacin con ayuda de cachs dedatos.

    El servidor ASP.NET dispone de mecanismos de seguridad completos; el captulo Personalizaciny securizacin explora los modos de autenticacin y de autorizacin. A continuacin, se estudianlos elementos que integran la arquitectura orientada a servicios (SOA); los portales decomponentes personalizables (web.parts) y los servicios Web se estudian mediante un sitio deejemplo que proporciona informacin de cotizacin burstil. El conocimiento de las tcnicassubyacentes, como las API WCF y REST, ayudarn a desarrolladores y arquitectos a crearaplicaciones personalizadas ricas y con un buen rendimiento.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    5/399

    El ltimo captulo describe los elementos indispensables en la puesta en produccin deaplicaciones ASP.NET: la estructura de los archivos de configuracin, las herramientas dedespliegue, la creacin de MSI y de carpetas virtuales en IIS. El administrador de aplicacionesse complementa con frecuencia con tareas de supervisin, por este motivo se incluye en estecaptulo la infraestructura Health Monitoring.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    6/399

    Novedades de Visual Studio 2012

    No sin cierta curiosidad muchos desarrolladores han descubierto la nueva versin de VisualStudio. Qu cambios seran necesarios para crear aplicaciones respetando la filosofa de laplataforma ASP.NET? Tras llegar al mercado justo a tiempo, esta versin revela la nuevaestrategia de Microsoft en trminos de desarrollo de aplicaciones.

    De hecho, la aparicin de ASP.NET 4.5 coincide con la publicacin de una nueva gama deherramientas de desarrollo y de un nuevo framework. Microsoft se dirige a un mercado lo msamplio posible, lo cual reconforta a los programadores en sus elecciones tecnolgicas y lesasegura al mismo tiempo una paleta de herramientas muy variada.

    El framework .NET y la plataforma ASP.NET oficializan los pasos que dieron todos de formaexperimental para aprovechar lo mejor de la versin inicial de la tecnologa. Esta obra tienecomo objetivo proporcionar una sntesis, en forma de escenarios prcticos, a los usuarios de laplataforma, sean nuevos o que ya tengan experiencia con ASP.NET.

    La versin 2012 ampla el proceso de desarrollo de una aplicacin .NET sobrepasando el marcode la productividad individual. Si bien muchas aplicaciones ASP.NET se desarrollan segn unproceso XP(eXtreme Programming), las versiones anteriores de Visual Studio no estaban deltodo adaptadas al trabajo en equipo o a la ejecucin de un proceso de desarrollo organizado ydocumentado.

    Microsoft ha introducido el modelo ALM (Application Lifecycle Management) que rige la creacinde aplicaciones, integrando las tecnologas necesarias para realizar el diseo, el desarrollo, laspruebas y el despliegue. La oferta de Visual Studio 2012 es una plataforma que agrupaherramientas destinadas a todos los protagonistas de un proyecto de software, sean o noinformticos.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    7/399

    Para competir con las ofertas existentes con menores costes, Microsoft ha lanzado Visual StudioExpress y Visual Studio Web Developer Express. Ambos productos son muy econmicos, puestoque soportan el modo wysiwig y aseguran la parte esencial del proceso de desarrollo deaplicaciones .NET y ASP.NET.

    La gama Visual Studio 2012 no incluye ningn cambio importante respecto a la versin anterior.Las ediciones estndar (en un idioma) y profesional pueden asociarse a Team Foundation Server2010 o 2012 para controlar las distintas versiones del cdigo fuente de una aplicacin.

    La edicin Premium de Visual Studio incluye Team Foundation Server y aade la posibilidad decrear planes de pruebas unitarias automticas. Tambin se permite realizar una revisin de lacalidad del cdigo (profiling). Por ltimo, la versin alta de la gama, Ultimate, explota un servidorde integracin continua (compilacin diaria) y favorece el trabajo en equipo segn las reglas deun proceso de desarrollo.

    La gama Visual Studio se ve, por tanto, enriquecida considerablemente; esta obra desarrolla losejemplos creados con Visual Studio edicin Profesional, aunque casi todos ellos puedenreproducirse con la edicin Visual Web Developer Express.

    Desde un punto de vista especfico, la tecnologa ASP.NET consolida los mecanismos propuestos

    por la versin anterior, integrando un soporte de nuevas tecnologas esenciales, como AJAX, eldesarrollo MVC o los servicios web WCF.

    1. Instalacin

    La instalacin de Visual Studio 2012 slo puede realizarse sobre un sistema adaptado. Para lossistemas XP, es preciso instalar previamente el Service Pack 2.

    El framework .NET 4.5 tambin debe instalarse antes de instalar Visual Studio 2012. Si su equipono tiene el framework instalado, la distribucin de Visual Studio incluye el framework 4.5. Paralos equipos que ya estn equipados con una versin anterior del framework, la instalacin seejecuta de principio a fin sin problema alguno. Los ensamblados (ejecutables .NET) pueden

    apuntar a una versin especfica del framework y del motor de ejecucin CLR.

    Para aqul que desarrolle con Visual Web Developer Express, puede resultar til instalar tambinla versin Studio Express para desarrollar bibliotecas de componentes DLL o para disearaplicaciones no ASP.NET.

    El asistente de instalacin de Visual Studio proporciona tambin SQL Server Express,remplazando a MSDE (Microsoft Desktop Engine). Si ya tiene alguna versin anterior de SQLServer (2000 o MSDE), o si piensa migrar a la versin 2008 completa, puede no utilizar esteentorno. Por supuesto, ASP.NET sabe cmo explotar otros formatos de base de datos (Oracle,DB/2, MySQL...), aunque es cierto que la nueva versin saca mucho partido de una integracinhecha con un formato de base de datos de Microsoft.

    La documentacin MSDN (Microsoft Developer Network) se instala al finalizar la instalacin deVisual Studio. Es todava ms voluminosa que lo era antes, y muchos artculos puedenconsultarse va Internet. Para utilizarla sin conexin, es conveniente utilizar el asistente del modopersonalizado para instalar el conjunto de documentos sobre el disco duro.

    2. Interfaz del programa

    Visual Studio forma parte de la familia de entornos de desarrollo integrados (IDE). Soportanumerosas actividades ligadas al desarrollo de aplicaciones, tales como la creacin de interfacesgrficas, la inclusin asistida de cdigo fuente o incluso pruebas unitarias.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    8/399

    Las versiones anteriores de Visual Studio constituan una sntesis de los entornos de desarrolloVisual C++, Visual Basic e Interdev. La versin 2012 persigue cierta lgica de integracinagregando la dimensin de la apertura; la creacin de extensiones para enriquecer los lenguajesy entornos soportados es, desde ahora, una tarea muy sencilla (snippets, macros, plug-ins).Visual Studio 2012 es una plataforma abierta, de forma similar a Eclipse.

    a. La pgina de inicio

    Tras la ejecucin del programa, se muestra la pgina de inicio. Est compuesta por dos zonas.En la primera, el usuario encuentra la lista de los ltimos proyectos abiertos. Crea y abre tambinnuevos proyectos, como lo hara desde el men Archivoo desde la barra de herramientas.

    La segunda zona presenta tres pestaas; la primera facilita la toma de contacto con VisualStudio, la segunda proporciona enlaces a la documentacin en lnea y recursos. La ltimapestaa, llamada ltimas noticias ofrece informacin proveniente de una fuente RSS(sindicacin de datos va XML):

    La ventana de dilogo Opcionesde Visual Studio, que se abre desde el men Herramientas-Opciones, es til para desactivar que se muestre automticamente esta pgina de inicio o parapersonalizar su presentacin; el usuario puede cambiar la direccin de la fuente RSS.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    9/399

    b. Las ventanas de Visual Studio

    Visual Studio distingue tres tipos de ventana: ventanas de construccin/edicin, ventanas deherramientas/navegacin y ventanas de estado.

    Para conocer con detalle la interfaz de usuario de Visual Studio, cree un primer sitio web llamadocapitulo1. Utilice para ello el men Archivo- Nuevo sitio Webo bien hgalo desde la pginade inicio.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    10/399

    Las ventanas de construccin sirven para crear interfaces de usuario web o Windows. Se tratade archivos con extensin .aspx o .cs que se editan en modo Diseo (wysiwyg), enmodo Cdigo(HTML o C#), o en modo dividido. En la versin 2012 de Visual Studio se muestrauna pgina web .aspx en modo Cdigo (HTML).

    Para que se muestre el modo Diseo al inicio, hay que modificar las opciones del programa VisualStudio de la siguiente manera:

    Las ventanas de Visual Studio no se muestran todas a la vez. La primera vez que se ejecuta elprograma, algunas estn ocultas. Es posible mostrarlas con ayuda del men Ver.

    El programador debe organizar de la mejor forma posible su espacio de trabajo, las ventanas seanclan a los distintos bordes de la pantalla. Disponen, tambin, de un sistema que les permiteocultarse automticamente, que es posible anular mediante una chincheta.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    11/399

    A continuacin, presentamos las ventanas ms tiles.

    El Explorador de soluciones

    Una solucin es un grupo de proyectos. Un proyecto es un conjunto de archivos (pginas HTML,cdigo fuente, imgenes...) necesarios para la elaboracin y el funcionamiento de una aplicacino de un sitio web.

    Como todo proyecto se incluye en una solucin, la creacin de un proyecto implica, a menudo,la creacin de una solucin con el mismo nombre. Visual Studio utiliza archivos especficos paragestionar las soluciones (con extensin .sln y .suo para las opciones del usuario) y los proyectos(.csproj).

    Los archivos de solucin y de proyecto se organizan de forma ms sencilla en la carpeta MisDocumentos\Visual Studio 2012\Proyectos. Cada solucin crea una carpeta principal y, acontinuacin, los distintos proyectos asociados a la solucin se ubican en subcarpetas. Laclasificacin parece ser ms sistemtica que en las versiones anteriores y, sobre todo, no existediferencia entre VB.NET y C#. Otra caracterstica, que se estudia en el captulo Los sitios webASP.NET 4.5, es el modelo de compilacin de un sitio web ASP.NET, ya no precisa la creacin deun proyecto .csproj o .vbproj. Por ltimo, el usuario MS Buidque sustituye a nmake(make) leotorga al proyecto Visual Studio una dimensin que supera el simple listado de la carpeta.

    El explorador de soluciones presenta los archivos relativos a los proyectos asociados a la solucinen curso. Lo ms habitual es que el usuario abra sus archivos haciendo doble clic sobre ellos.

    La barra de propiedades

    Aportada por Microsoft con Visual Basic, la barra de propiedades ha evolucionado muy poco, loque prueba que es un elemento apreciado por los desarrolladores. La barra muestra y edita laspropiedades de un objeto seleccionado, se trate de un control grfico o de un archivo delexplorador de soluciones.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    12/399

    Para el desarrollador ASP.NET 4.5, la barra de propiedades puede, en lo sucesivo, editar laspropiedades de un control seleccionado en modo Cdigo:

    El cuadro de herramientas

    El cuadro de herramientas presenta los distintos controles, grficos o no, disponibles para el tipode aplicacin que se est construyendo. El desarrollador encuentra aquellos controles que yaestaban disponibles en la versin anterior de Visual Studio: controles bsicos web, HTML ycomponentes de servidor.

    Se han agregado algunos controles suplementarios, los cuales se presentan en el captulo Lossitios web ASP.NET 4.5. Otros controles se han agrupado en una seccin separada, tales comocontroles de validacin de datos introducidos por los usuarios.

    El Explorador de servidores

    Esta ventana no est disponible con las versiones Express de Visual Studio; se ha reemplazadopor una ventana con posibilidades ms limitadas, el Explorador de datos.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    13/399

    A menudo, el Explorador de servidores se utiliza para acceder a las bases de datos que serequieren para el funcionamiento de una aplicacin. Para los usuarios de SQL Server Express,este explorador sirve tambin para crear bases de datos, su estructura (tablas, vistas yprocedimientos almacenados) y para alimentar los datos. De hecho, la versin 2008 de SQLServer tiene una interfaz que recuerda a la de Visual Studio.

    El Explorador de servidores tambin provee informacin acerca del equipo: estados de CrystalReport, registros (logs), WMI, colas de espera MSMQ, servicios de Windows, indicadores de

    rendimiento... Toda esta informacin es accesible a travs del panel de configuracin.

    El esquema del documento

    Para simplificar la edicin de documentos basados en HTML, la ventana Esquema deldocumentopresenta una vista en rbol del documento que est siendo editado. Esta ventana,ya presente en Visual Studio 2008, se ha completado con una presentacin ms directa de lostags, recordando as al funcionamiento de Dreamweaver.

    c. Las actividades ligadas al desarrollo

    Crear un sitio web o una aplicacin consiste en encadenar cierto nmero de actividades definidaspor el proceso de desarrollo. Tratndose de un IDE, Visual Studio 2012 trabaja como unaplataforma que incluye las herramientas necesarias para la ejecucin de dichas actividades.

    Codificacin

    Se trata de la actividad principal del desarrollador en Visual Studio.

    Depuracin

    Microsoft ha tenido la fabulosa idea de integrar la depuracin en el CLR; todos los ensamblados.NET pueden depurarse. Visual Studio ayuda al desarrollador a situar sus puntos de ruptura,incluso para aplicaciones ASP.NET.

    Como el nuevo modelo de compilacin no prev un uso sistemtico del archivo Web.config, laprimera sesin de depuracin provoca que aparezca un mensaje solicitando al desarrollador si

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    14/399

    quiere modificar un archivo de configuracin Web.config que tenga en cuenta este tipo deexplotacin:

    Visual Studio proporciona distintas funciones de ejecucin: paso a paso principal, paso a pasodetallado, ejecucin hasta el final del procedimiento...

    Algunas ventanas proporcionan informacin sobre el contexto de ejecucin: variables locales,espas, pila de llamadas, consola de salida. La depuracin de Visual Studio es, sin duda, un puntofuerte de la herramienta.

    Durante la depuracin, el explorador de soluciones se enriquece con un apartado Documentosde script. Haciendo doble clic sobre el tem correspondiente a la pgina en curso de ejecucinse abre una ventana trazando el renderizado HTML de la pgina:

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    15/399

    El hecho de incluir la depuracin de JavaScript supone una funcionalidad muy valiosa de VisualStudio. Si Internet Explorer no est configurado adecuadamente, Visual Studio genera una alertacuando se ejecuta la sesin de depuracin:

    Abra la pestaa Opciones avanzadasdel men Herramientas- Opciones de Internetdelnavegador, a continuacin detalle la seccin Examinar y, a continuacin, desmarque laopcinDeshabilitar la depuracin de scripts (Internet Explorer).

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    16/399

    Slo queda definir puntos de ruptura en su cdigo JavaScript, procediendo de forma similar acomo se hizo con el cdigo C#. Los comandos y las ventanas de observacin habituales estn,ahora, disponibles:

    Pruebas unitarias y profiling

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    17/399

    La versin Visual Studio Professional proporciona nuevos servicios de pruebas unitarias y deanlisis de calidad de cdigo (profiling). Las pruebas unitarias son clases que despliegan unasecuencia de llamadas de mtodos para los componentes de una aplicacin. Los resultadosdevueltos por estos mtodos se comparan con sus valores tericos. Se elabora, a continuacin,un informe destinado al programador.

    Para crear una prueba, es posible partir de un componente que se quiere probar (una clase) yutilizar el men Archivo- Nuevo proyectoy, a continuacin, escoger Pruebaen la lista de

    tipos de proyecto:

    Se crear un proyecto, puesto que las pruebas se ejecutan en un proceso distinto al de laaplicacin ASP.NET.

    La clase de prueba consiste en una serie de mtodos que verifican el funcionamiento de cadafuncin definida en la etapa anterior. El programador debe indicar, para cada una de ellas, losvalores de los parmetros, los valores esperados, el tipo de comparacin y el mensaje de error.

    ///

    ///Prueba para cuadrado

    ///

    [TestMethod()]

    [HostType("ASP.NET")]

    [UrlToTest("http://localhost/capitulo1")]

    public void cuadradoPrueba()

    {

    double param = 2;

    double expected = 4;

    double actual = new Calculadora().cuadrado(param);

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    18/399

    // La creacin del descriptor de acceso privado por

    Microsoft.VisualStudio.TestTools.TypesAndSymbols.Assembly

    ha fracasado

    Assert.AreEqual(expected,actual,"cuadrado no ha devuelto

    el valor correcto");

    }

    Una vez informados los mtodos de prueba, el proyecto de prueba se arranca como los dems.Va a instanciar cada componente y le va a aplicar la secuencia de pruebas.

    La ventana Explorador de pruebasmuestra el conjunto de resultados:

    Configuracin

    Visual Studio gestiona su proceso de construccin del ensamblado como un makefile(vasems adelante MS Build). Para facilitar la industrializacin, se crean dos perfiles de compilacinpara cada proyecto de aplicacin: Debug y Release. El programador puede cambiar de perfil ycrear otros a partir del gestor de configuracin. ste est accesible desde el men Compilaro

    desde el men contextual Administrador de configuracin.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    19/399

    Una nueva herramienta, accesible desde el men Sitio Web, Configuracin ASP.NET, facilitala gestin del archivo Web.config. Se estudiar con detalle en el captulo Personalizacin ysecurizacin.

    Despliegue

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    20/399

    Si bien Microsoft prev que sus sitios web se desplieguen mediante un asistente MSI (estudiadoen el captulo Configuracin, despliegue y administracin), muchos sitios se copian simplemente,ms o menos de forma manual, desde la carpeta origen hasta la carpeta destino.

    Esta funcin est accesible desde la opcin de men Sitio Web- Copiar el sitio Web.

    Y, una buena sorpresa, el cliente FTP se ha integrado y mejorado desde Visual Studio 2008. Elcaptulo Configuracin, despliegue y administracin ofrece detalles sobre su uso.

    d. Las pruebas codificadas de interfaz de usuario

    Visual Studio soporta, desde ahora, pruebas automticas de la interfaz de usuario. Mientras las

    pruebas unitarias son tiles para probar los mdulos de cdigo, su limitacin es evidente yconviene, por tanto, simular el encadenamiento de diferentes acciones del usuario.

    Como con las pruebas unitarias, es preciso utilizar el comando Nuevo proyectopara acceder alas pruebas codificadas de interfaz de usuario:

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    21/399

    Una prueba codificada de interfaz de usuario se realiza en dos etapas; en primer lugar seregistran las acciones del usuario - en nuestro caso sobre una pgina ASP.NET - y, acontinuacin, se vuelven a ejecutar de forma automtica dichas acciones desde Visual Studio.Existe una barra de herramientas especial que incluye un botn para iniciar la grabacin:

    Antes de iniciar la grabacin, es preciso ejecutar la aplicacin que se quiere probar, y, si es

    posible, en modo de depuracin, puesto que podra comprometer la generacin de cdigo enfuncin de la secuencia de acciones del usuario. Una vez iniciada la grabacin, el usuario slotiene que manipular su interfaz grfica segn las acciones previstas:

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    22/399

    El botn Pausadeshabilita la grabacin, y otro botn muestra el conjunto de acciones que

    componen la prueba:

    Una vez finalizada la secuencia, conviene materializarla en forma de un archivo de cartografade prueba (uimap) y de un mtodo - C# o VB.NET - que ejecutar la secuencia bajo demanda.

    Para repetir la prueba, hay que reiniciar la aplicacin:

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    23/399

    Y, a continuacin, ejecutar la prueba desde Visual Studio:

    Visual Studio sigue las instrucciones de la prueba y manipula la interfaz de usuario sin accinalguna por su parte, de forma automtica:

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    24/399

    El resultado de la prueba es positivo:

    e. Las extensiones

    Microsoft quiere hacer de Visual Studio una plataforma abierta de desarrollo, de manera similara Eclipse, pero sin proveer el cdigo fuente! Esto no es necesario, y el modelo de extensionespuede funcionar perfectamente, pues muchos fabricantes de software proporcionan unaintegracin de su herramienta de desarrollo en Visual Studio. Citemos, por ejemplo, RSM, RAD yDB/2 de IBM, XML Spy de Altova o incluso PHP Phalanger.

    A este efecto, Visual Studio provee un modelo de proyecto de extensibilidad.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    25/399

    Sobra decir que la puesta a punto de una extensin requiere mucho trabajo y organizacin, y setrata de un proyecto independiente. Para la puesta a punto de una aplicacin ASP.NET, el valoraadido de tal extensin puede parecer dbil. Este tipo de trabajo est, sobre todo, destinado aintegrar nuevos entornos en el IDE.

    3. Gestin del cdigo

    Visual Studio 2012 confirma su predileccin por la construccin de programas y el cdigo fuente.

    a. El modo esquema y las regiones

    El modo esquema (Outlining) es muy til para navegar en cdigo fuente de gran volumen.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    26/399

    Las regiones son delimitaciones manuales de porciones de cdigo fuente. No afectan a la horade la compilacin, lo que explica que estn precedidas por el smbolo # al comienzo de la lnea.A diferencia del modo esquema, las regiones deben respetar ciertas reglas sintcticas; noinfluyen en la programacin, pero el compilador verifica que estn ubicadas por parejas.

    #region Propiedades (estilo C#3)

    public string Titular { get; set; }

    public double Saldo { get; set; }

    #endregion

    Las regiones de cdigo dirigen la presentacin del cdigo fuente en el modo esquema: puedenabrirse y cerrarse.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    27/399

    b. La refactorizacin (refactoring)

    Esta funcionalidad constituye una semi-novedad: los programadores C# o VB.NET ya habannotado que Visual Studio pona a su disposicin servicios de creacin o de modificacin de cdigo,durante la implementacin de una interfaz, por ejemplo, o tras sobrecargar un mtodo.

    Estas tcnicas se han generalizado bajo la forma de un comportamiento de refactorizacin(refactoring). Visual Studio provee diversos escenarios:

    Las

    herramientas de refactorizacin estn accesibles desde el men Refactoringo desde el mencontextual. Para probar una de ellas, declare un campo privado y utilice laherramienta Encapsular campo:

    Tras la refactorizacin, Visual Studio agrega la propiedad NumeroCuenta:

    private int numeroCuenta;

    public int NumeroCuenta

    {

    get { return numeroCuenta; }

    set { numeroCuenta = value; }

    }

    Renombrar El nuevo nombre se propaga al conjunto del cdigo fuente. Esun Buscar/Reemplazar inteligente.

    Extraer mtodo til para crear una interfaz.

    Encapsular un campo Crear la lgica de propiedad (get, set) para un campo.

    Extraer interfaz til para componentes de negocio.

    Convertir una variable local en unparmetro de un mtodo

    Las llamadas al mtodo se modifican para integrar el nuevoparmetro.

    Suprimir/Reordenar parmetros Las llamadas al mtodo se modifican para tener en cuenta los

    cambios.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    28/399

    c. Los fragmentos de cdigo (code snippets)

    Los cdigos snippets estn, principalmente, destinados ms bien a la creacin contextual decdigo fuente que a la propagacin de modificaciones.

    Utilizar un snippet existente

    Existen tres formas de aplicar un fragmento de cdigo. La primera consiste en introducir elnombre de un fragmento y, a continuacin, pulsar dos veces sobre la tecla de tabulacin. Lasegunda utiliza el men contextual Insertar fragmento de cdigo, lo que puede ser muy tilsi no tenemos en mente el nombre exacto del fragmento de cdigo. La tercera se basa en el usodel men contextual Delimitar con.

    Uno de los fragmentos de cdigo tiles se llama #region. Antes de insertarlo, subraye la zonaque quiere convertir en regin.

    Al finalizar la insercin, el cdigo se modifica. Ciertas partes en azul debe completarlas elprogramador. En nuestro caso, se trata del nombre de la regin.

    Descargar snippets

    Visual Studio se distribuye con un conjunto de cdigos snippets, algunos muy simples pero tiles(escribir un constructor, una secuencia try/catch), otros que se utilizan de forma menos

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    29/399

    frecuente. Microsoft difunde en su sitio web bibliotecas de snippets correspondientes a distintostemas: gestin de colecciones, gestin de genricos, desarrollo web o Windows, construccionesde estados Crystal Report...

    Estas bibliotecas pueden descargarse en la siguiente direccin:

    http://msdn.microsoft.com/es-es/library/vstudio/z41h7fat.aspx

    Crear snippets

    Es muy sencillo crear un nuevo fragmento de cdigo. Visual Studio utiliza la carpeta Misdocumentos\Visual Studio 2012\Code snippets\C#\My code snippets para integrar losfragmentos de cdigo del usuario a la coleccin disponible.

    He aqu el cdigo de un fragmento max.snippet que puede ubicar en la carpeta indicadaanteriormente. Este fragmento compara dos variables y devuelve el mayor valor.

    Mayor valor de dos variables

    Brice-Arnaud Guerin

    Compara dos valores y devuelve la de mayor valor

    maxab

    Expansion

    A

    Reemplazar por la primera variable

    a

    B

    Reemplazar por la segunda variable

    b

    http://msdn.microsoft.com/es-es/library/vstudio/z41h7fat.aspxhttp://msdn.microsoft.com/es-es/library/vstudio/z41h7fat.aspxhttp://msdn.microsoft.com/es-es/library/vstudio/z41h7fat.aspx
  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    30/399

    $B$?$A$:$B$)$end$]]>

    Se trata de un archivo XML, pero Visual Studio 2012 es muy eficaz para guiar al usuario en suinclusin. Una vez guardado, el fragmento de cdigo ya est activo, no es necesario reiniciarVisual Studio. Su aplicacin es inmediata:

    Slo queda reemplazar a y b por los nombres de las variables x e y, Visual Studio ajusta elfragmento de forma adecuada.

    4. Documentacin

    El compilador C# permite extraer anotaciones XML situadas en los comentarios que figuran enel cdigo fuente. Dichos comentarios se recopilan en un archivo XML llamado documentacin delproyecto.

    Esta funcin ya estaba presente en las versiones anteriores del compilador y de Visual Studio.Tras aplicar el conmutador /doc, el compilador csc genera un archivo XML en el lugar indicado,generalmente cerca del ensamblado resultante.

    /// /// Calcula el nuevo saldo

    ///

    /// importe a aumentar el crdito.

    /// Nuevo saldo

    ///

    public double aumentarCredito(double importe)

    {

    if (importe < 0)

    throw new System.Exception("Importe negativo");

    saldo += importe;

    return saldo; // no debe ser negativo

    }

    No obstante, esta forma de agregar comentarios al cdigo, mediante etiquetas XML, presentados problemas: en la versin 2003, Microsoft no provee una hoja de estilo estndar XSL paratraducir la documentacin XML en un archivo HTML o en un archivo hlp/chm (archivo de ayuda

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    31/399

    de Windows compilado). Gracias a un producto Open Source, NDOC, es posible resolver esteinconveniente.

    En la versin 2005, el nuevo modelo de compilacin de las pginas y los sitios web utiliza elconmutador /doc o la aplicacin de una herramienta externa tal como NDOC, delicados. En estecaso, es preferible utilizar la reflexin de ensamblados para extraer, al menos, la estructura delprograma. Tratndose de ensamblados dinmicos, la operacin no es sencilla.

    En cualquier caso, estas dificultades invitan al desarrollador a ubicar la mayor parte de su cdigoen DLL referenciadas por el sitio web. El cdigo fuente de estas DLL puede incluirse sin dificultada la hora de crear una documentacin.

    5. La herramienta MS Build

    La compilacin de un archivo de cdigo fuente no es sino una etapa ms en la formacin delejecutable reconocido por el sistema operativo. Los compiladores explotan, en ocasiones, el flujode otra herramienta llamada pre-procesador. Como salida, el compilador fabrica un objetoarchivo (.netmodule en .NET) que estar enlazado con las bibliotecas necesarias para laejecucin del programa final (ensamblado).

    Este proceso se ha automatizado de dos formas: mediante un EDI que gobierna elencadenamiento de las herramientas que intervienen en la elaboracin de un programa concreto,o bien a travs de un script ms o menos general.

    La herramienta MS Build generaliza a la vez el enfoque del EDI Visual Studio y del script generalN Ant. Tras la versin 2005, MS Build se ha convertido en una herramienta que se incluye en ladistribucin de la versin 2.0 del framework .NET.

    Visual Studio 2012 crea archivos de construccin de proyectos .csproj segn las instruccionesMS Build, dichas instrucciones se describen mediante tags XML.

    De hecho, un archivo de script MS Build contiene, al menos, la lista de archivos que hay quecompilar. Visual Studio completa este script agregando los comandos necesarios para la creacindel ensamblado. No obstante, MS Build tambin puede utilizarse por separado. En este caso, elscript contiene no slo los archivos que se quieren procesar sino tambin los comandos que hayque aplicar.

    Creacin de un script MS Build

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    32/399

    MS Build basa su funcionamiento en ANT y makefile. El script define los ensamblados que hayque construir y detalla las operaciones que son necesarias para elaborarlos. Estas operacionesse denominan tareas. Las tareas ms tiles consisten en crear carpetas, invocar al compilador oal editor de enlaces.

    Para crear un script MS Build, basta con crear un archivo XML que tenga la extensin .proj enun proyecto Visual Studio. Cuando Visual Studio reconoce el espacio de nombres (xmlns)asociado a la semntica MS Build, resulta muy sencillo encontrar las distintas construcciones

    posibles.

    Para ejecutar el script, es preciso utilizar la siguiente lnea de comandos:

    msbuild build1.proj

    Si el script se desarrolla con normalidad, se construir una DLL test.dll en la carpeta salidaapartir del archivo de cdigo fuente Class1.cs.

    Inters para los sitios web ASP.NET

    Como ocurre con la documentacin y, especialmente, con el funcionamiento del nuevo modelode compilacin, el uso de MS Build y de Visual Studio presenta poco inters para un sitio webASP.NET. No obstante, un sitio web no se limita a un conjunto de pginas y de clasescomplementarias (Helper). Con frecuencia, los sitios web basan su funcionamiento en objetossoportados por DLL. En tal caso, MS Build puede ser til para crear procedimientos decompilacin diversificados, y ejecutarlos como tareas de fondo. Microsoft explota dicho conceptoen su servidor de trabajo colaborativo Team System Server.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    33/399

    C#4 de un vistazo

    Tras haber descrito las caractersticas del nuevo entorno de desarrollo y, en particular, de VisualStudio, vamos a continuacin a descubrir la evolucin del lenguaje C#. En esta presentacinfiguran aquellos aportes del lenguaje que tienen un impacto directo en el desarrollo ASP.NET4.5. El lector encontrar un estudio ms sistemtico del lenguaje C#4 en el libro C# 4.0, deEdiciones ENI.

    1. Clases parciales

    Se trata de un mecanismo que aligeraba el modelo de compilacin de los sitios web ASP.NET1.X. Recordemos que, en este modelo, Visual Studio generaba mucho cdigo y que el resultadose compilaba antes de la ejecucin. En el nuevo modelo, el cdigo escrito por el programador seenriquece en el servidor de aplicaciones ASP.NET (bajo la forma de inyeccin de cdigointermedio IL o de cdigo C# compilado dinmicamente), y por Visual Studio gracias a las clasesdefinidas en varios archivos de cdigo fuente, las clases parciales.

    Desde el punto de vista del CLR las clases estn definidas completamente. No obstante, elproceso de compilacin admite que la definicin de un tipo se reparta en varios archivos de

    cdigo fuente.

    De este modo, podemos tener en un primer archivo Test1.cs la siguiente definicin:

    public partial class Test

    {

    private string info;

    public string Info

    {

    get { return Test.info; }

    set { Test.info = value; }

    }

    }

    En un segundo archivo, completamos la definicin de la clase con:

    partial class Test

    {

    public override string ToString()

    {

    return "test";

    }

    }

    El programador que utilice una instancia de la clase Test tendr acceso a ambos miembros Infoy ToString. El hecho de que la clase se defina en varios archivos no cambia en nada su uso.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    34/399

    Las clases parciales se introducen para simplificar el desarrollo ASP.NET. A da de hoy, Microsoftno propone ningn otro uso.

    2. Mtodos annimos

    El uso de la programacin orientada a objetos se ha democratizado gracias a la llegada de lasinterfaces grficas. Para disminuir el nmero de lneas de cdigo, los desarrolladores se han

    habituado a crear, para cada elemento grfico - ventana, botn, rea de texto... - una claseasociada. No obstante, los primeros lenguajes orientados a objetos disponibles para implementarestos entornos grficos, tales como C++ o Java, no conocan la nocin de eventos. Laprogramacin era particularmente delicada cuando se trataba de responder a una solicitud delusuario. El lenguaje C++ slo dispona de punteros, y el lenguaje Java 1 de referencias, de modoque los programas grficos deban seguir las reglas de modelizacin del programa.

    A continuacin, Microsoft introduce el concepto de evento en Visual Basic y en sus componentesC++ Active X. Por su lado, Sun propone el concepto de clase annima anidada. Estosmecanismos tenan como objetivo reducir el fuerte acoplamiento que exista entre uncomponente que desencadenaba un evento (un botn, por ejemplo) y otro que responda a dichoevento. Si se atiende al objetivo con el que se han creado, estos constructores generan unasobrecarga de cdigo y un coste de diseo importantes.

    Con C#2, Microsoft introduce los mtodos annimos. Estos mtodos aligeran el rgimen deeventos y de sus delegados, y evitan al programador tener que crear clases o mtodos que sloservirn una nica vez; sta es, en efecto, la primera regla que hay que respetar cuando sedisea un programa. Slo deben ser reutilizables aquellos fragmentos de cdigo susceptibles devolverse a ejecutar!

    a. Eventos internos

    Una clase posee cuatro tipos de miembros: campos, propiedades, mtodos y eventos. Loseventos son similares a delegados multipropsito.

    Desencadenar un evento supone enviar una seal que provoca una llamada a mtodos que lovan a gestionar. Estos mtodos reciben parmetros tiles para su procesamiento. Por lo general,los parmetros incluyen las condiciones que envuelven a dicho evento.

    Tomemos como ejemplo la clase Termostato. Define un evento OnSobrecalentamiento y sudelegado de tipo asociado del_sobrecalentamiento. El delegado tipo representa la firma delevento.

    class Termostato

    {

    public delegate void del_sobrecalentamiento(int temp);

    public event del_sobrecalentamiento OnSobrecalentamiento;

    }

    Agreguemos a la clase Termosato un mtodo regular() encargado de producir el evento si latemperatura excede el umbral de 100.

    public int temperatura;

    public void regular(int temp)

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    35/399

    {

    temperatura = temp;

    if (temp > 100)

    if (OnSobrecalentamiento != null)

    OnSobrecalentamiento (temp); // desencadenar evento

    }

    Una vez definido el componente Termostato, creamos en otra clase la lgica indispensable parareaccionar al evento:

    Termostato tm = new Termostato();

    tm.OnSobrecalentamiento += new Termostato.del_sobrecalentamiento

    (tm_OnSobrecalentamiento);

    A continuacin, se muestra el mtodo de gestin:

    void tm_OnSobrecalentamiento(int temp)

    {

    Console.WriteLine("Temperatura demasiado alta!");

    }

    El mtodo tm_OnSobrecalentamiento representa una gestin externa del evento. Se trata de unprocedimiento autnomo (Console.WriteLine) y no devuelve ningn resultado (void) al objetoinstancia de Termostato.

    A primera vista, puede parecer incongruente definir los eventos privados y gestores de eventos

    que pertenezcan a la misma clase que emite el evento. Si se desea, por tanto, utilizar el patrnde diseo Eventoen el interior de una clase sin utilizar el miembro evento privado que generalizaintilmente el concepto seal/procesamiento, los mtodos annimos son una solucin elegante.

    Para ilustrar esta construccin, acondicionamos la clase Termostato con ayuda de un mtodoinit() que registra un mtodo annimo con ayuda de un delegado. El mtodo regular() seconvierte en regular_anonimo(). En el cdigo que aparece a continuacin, la parte en negrita secorresponde con el mtodo sin nombre. La palabra reservada delegate() soporta nicamente sufirma.

    public delegate void del_sobrecalentamiento_anonimo();

    public del_sobrecalentamiento_anonimo regulador;

    public void init()

    {

    regulador =

    delegate()

    {

    if (temperatura > 100)

    {

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    36/399

    Console.WriteLine("Temperatura demasiado alta!");

    temperatura = 30;

    }

    } ;

    }

    public void regular_anonimo(int temp)

    {

    temperatura = temp;

    if (temp > 100)

    regulador(); // invocacin de la funcin annima

    }

    En esta nueva construccin de la clase Termostato, la seal no se produce al desencadenar unevento sino con la llamada al mtodo annimo. Esto basta para desacoplar la parte de deteccin(regular_anonimo) y la parte de procesamiento (el mtodo annimo) sin generalizar una lgicade evento que no se reutilizar.

    De paso, destacamos que un mtodo annimo puede utilizar los parmetros y variables localesdel mtodo que lo invoca (init, en nuestro ejemplo), pero tambin acceder a los campos de laclase (Termostato). Sin esta posibilidad, su inters sera mucho menor.

    Al final, el mtodo annimo se invoca cuando la temperatura excede los 100 grados. El resultadoes idntico, pero la construccin es distinta a la utilizada en una implementacin basada eneventos. Esta diferencia no es significativa en una nica clase, pero puede facilitar enormementela lectura de un programa completo.

    b. Las funciones auxiliares

    En una clase, todos los mtodos son pblicos y todos los campos son privados. Cuntas veceshabremos ledo esta afirmacin? La realidad conlleva ciertos matices. Algunos campos sonpblicos, mientras que otros se encapsulan en pseudo-mtodos get y set, formando propiedades.Por ltimo, algunos mtodos se marcan con el modificador de acceso private, puesto que no sequiere que nadie utilice su procesamiento.

    Los desarrolladores siguen, tambin, recomendaciones de modelizadores de objetos (UML) paradecidir si tal o cual mtodo deben ser privados o protegidos. De hecho, la programacin orientadaa objetos antepone el aspecto de interfaz de la programacin en detrimento de su aspectoprocedural; con el paso del tiempo, las implementaciones se vuelven simples dado que los

    desarrolladores no tienen la capacidad de anlisis suficiente como para elaborar mtodos que,aun siendo privados, no aparezcan en los diagramas de clases establecidos por los diseadores.

    Adems, los mtodos annimos son muy tiles para crear funciones algortmicas que no sequieren promover a la categora de mtodo. Se trata, por tanto, de las famosas funcionesauxiliares.

    Para ilustrar este aspecto, vamos a estudiar una funcin que invierte una lista de caracteres(cadena). Para evitar definir una lista segn las reglas establecidas (encabezado, elemento,constructor), vamos a utilizar cadenas basadas en la clasestring. Pero slo podremos utilizar

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    37/399

    tres operaciones: leer el primer carcter de la cadena (encabezado), extraer el carcter siguientey comprobar si es igual a una cadena vaca.

    Una primera versin del programa tendra el siguiente aspecto:

    public string reverse(string s)

    {

    StringBuilder res = new StringBuilder();

    reverse_aux(s, res);

    return res.ToString();

    }

    private void reverse_aux(string s, StringBuilder res)

    {

    if (s == null || s == "")

    return;

    reverse_aux(s.Substring(1), res);

    res.Append(s[0]);

    }

    Esta versin funciona perfectamente, pero un diseador puntilloso indicar al desarrollador queel mtodo reverse_aux, til para llevar a cabo nuestro objetivo, no forma parte del diagrama declases. El desarrollador debe, por tanto, modificar su programa para incluir una funcin annima:

    delegate void del_rs(string s, StringBuilder res);del_rs f;

    public string reverse(string ch)

    {

    StringBuilder sb = new StringBuilder();

    f= delegate(string s, StringBuilder res)

    {

    if (s == null || s == "")

    return;

    f(s.Substring(1), res);

    res.Append(s[0]);

    };

    f(ch, sb);

    return sb.ToString();

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    38/399

    }

    La nueva versin del mtodo reverse devuelve exactamente el mismo resultado que la anterior,pero sin recurrir a un mtodo privado reverse_aux.

    c. Simplificar la edicin de cdigo

    Este tercer ejemplo de mtodo annimo confortar a aquellos que piensan que el uso de unaclase abstracta o de una interfaz pesada complica considerablemente un programa. Muchosalgoritmos son genricos, es decir, se pueden aplicar a distintas situaciones, distintos tipos dedatos, distintos contextos funcionales. Para implementar estos algoritmos genricos, laprogramacin orientada a objetos proporciona, entre otros, los mtodos abstractos y lospunteros a funciones.

    Proponemos ir un poco ms lejos pasando como parmetro a un algoritmo no el puntero a unafuncin til para su ejecucin sino la propia funcin.

    Nuestro ejemplo es una clase, DirectoryFilter, que extrae la lista de archivos de una carpetadeterminada. El mtodo list() admite como parmetro una funcin annima destinada a validar

    la seleccin de un archivo en la lista devuelta. La tcnica de seleccin es arbitraria, lo que explicaque no se haya sistematizado en la clase DirectoryFilter.

    class DirectoryFilter

    {

    private string path;

    public string Path

    {

    get { return path; }

    set { path = value; }

    }

    public DirectoryFilter(string path)

    {

    this.Path = path;

    }

    public delegate bool del_filtro(string file, string path);

    public string[] list(del_filtro filtro)

    {

    DirectoryInfo dir = new DirectoryInfo(path);

    FileInfo[] files=dir.GetFiles();

    ArrayList ar = new ArrayList();

    for (int i = 0; i < files.Length; i++)

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    39/399

    if (filtro(files[i].FullName, path))

    ar.Add(files[i].FullName);

    return ar.ToArray(typeof(string)) as string[];

    }

    }

    El mtodo list() aqu presente invoca, naturalmente, al mtodo del mismo nombre de la clasejava.io.File. La versin Java admite una interfaz (java.io.FilenameFilter) a menudo implementadacon ayuda de una clase annima anidada.

    En el caso de C#, nos contentaremos con una funcin annima (anidada), pero la construccines similar:

    DirectoryFilter f = new DirectoryFilter(@"c:\temp");

    string[] archivos = f.list(delegate(string file,string path)

    {

    return file.EndsWith(".htm");

    });

    for (int i = 0; i < archivos.Length; i++)

    Console.WriteLine(archivos[i]);

    Qu aporta la funcin annima a este ejemplo? El algoritmo que selecciona los archivos queposeen la extensin .htm es muy especfico. No servir, desde luego, en otras partes delprograma, ni en otras aplicaciones. En este caso no resulta adecuado crear un mtodo, que debe

    incluirse, obligatoriamente, en una clase. La escritura del cdigo se ve, as, simplificada.

    3. La inferencia de tipo

    Se trata de un mecanismo que requiere que el compilador deduzca, l mismo, el tipo de unaexpresin y asigne una variable que represente a este tipo. La inferencia de tipo es til en LINQ,donde la naturaleza de los resultados vara de una consulta a otra.

    C#

    int a = 1;

    var suma = a + 2; // El compilador deduce que se trata de un entero

    Console.WriteLine(suma.GetType().FullName);

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    40/399

    Para el programador C#, el cambio es ms brutal que el que supone en VB.NET. En efecto,

    este ltimo lenguaje es de la familia de lenguajes dbilmente tipados, donde el compilador cede,a menudo, al entorno de ejecucin la tarea de determinar el tipo y, eventualmente, de realizarla conversin necesaria.

    Cul es el inters de la inferencia de tipo? Si nos limitamos a nuestro ejemplo, no supone unagran ventaja. Pero cuando abordemos las consultas LINQ, que encadenan varias series deexpresiones, su uso se vuelve crucial para conservar una buena legibilidad del cdigo.

    a. Las expresiones lambda

    Las expresiones lambda generalizan los mtodos annimos, ofreciendo un soporte a VB.NET. Seapoyan, naturalmente, en delegados, que obran por debajo.

    Las expresiones lambda se denominan as debido al lenguaje LISP (List Processing), inventadopara generalizar el clculo-.

    El ejemplo que se muestra a continuacin complementa al anterior. Comparte la definicin deldelegado dsuma. Observe, en esta sintaxis, la desaparicin de la palabra clave return, implcita.En C#, el operador => puede leerse da como resultado.

    C#

    // expression lambda

    dsuma d3 = (int a, int b) => a + b;

    // llamada a la expresin lambda

    int s3 = d3(1, 2);

    Console.WriteLine("s3=" + s3);

    4. Clases dinmicas y tipos annimos

    La sintaxis de las consultas de seleccin SQL permite al programador escoger las columnas quequiere incluir en el flujo del resultado. Estas columnas pueden, a continuacin, agregarse,filtrarse... Todos los registros de la tabla SQL se componen de las mismas columnas, pero elrendimiento se ve evidentemente afectado por el nmero que figure en la consulta SELECT.

    En programacin no SQL, la definicin estricta del tipo es la base de un lenguaje fuertementetipado: todas las instancias de una clase reservan el mismo espacio de memoria para representarel conjunto de campos (atributos), tengan o no valor. sta es, por otro lado, una diferenciaimportante entre SQL y estos lenguajes: estos ltimos manipulan datos en memoria, mientras

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    41/399

    que SQL aprovecha la durabilidad de los datos almacenando sus valores en archivos indexados.Slo una parte de ellos se carga en memoria, segn las consultas.

    Para aligerar la carga del CLR y evitar al programador tener que definir clases con todas lascombinaciones de atributos posibles, Microsoft ha incorporado los tipos annimos en C#3 yVB.NET 9. El siguiente ejemplo indica cmo trabajar con ellos. Las propiedades de los tiposannimos en las ocurrencias nombree idpson de slo lectura.

    C#

    // construye un tipo annimo que tiene dos propiedades nombre e idp

    var p = new { nombre = "Alberto", idp = 1 };

    // muestra el nombre del tipo generado por el compilador

    Console.WriteLine(p.GetType().FullName);

    5. Extensin de clases sin herencia

    Cmo agregar un mtodo a una clase, sin derivarla? Utilizando los ltimos aportes de loslenguajes C# y VB.NET. En LINQ, esta sintaxis se utiliza junto a los tipos annimos paraencadenar operaciones tales como SELECT, WHERE, ORDER BY.

    Esta disposicin recuerda a las funciones afines en C++, que se introdujeron para soportar lasobrecarga del operador de inyeccin

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    42/399

    }

    }

    class Program

    {

    static void Main(string[] args){

    string s = "19/5/2007";

    // el compilador verifica que isDate es conocido

    Console.WriteLine(s.isDate());

    }

    }

    6. Tipos nullables

    Para resolver ciertas dificultades de los tipos valor (estructura, int, double...), Microsoft haincluido en C# los tipos nullables.

    Los tipos nullables se encapsulan, no mediante boxing (con ayuda de object), sino mediante unaestructura genrica Nullable. La estructura Nullable contiene dospropiedadesHasValue y Valueque guan al programador para determinar si una variablecontiene valor.

    Nullable v = null;

    Console.WriteLine("v tiene valor? " + v.HasValue); // falso

    Console.WriteLine("v es nulo? " + (v != null)); // falso

    v = 30; // provee un valor

    Console.WriteLine("v tiene valor? " + v.HasValue); // verdadero

    Console.WriteLine("v es nulo? " + (v != null)); // verdadero

    Como la escritura Nullable es algo pesada, el lenguaje C# define un alias automtico: el tipoT se sigue de un signo ?. Los resultados son idnticos:

    int? a = null; // idntico a Nullable a;

    Console.WriteLine(a == null); // verdadero

    Console.WriteLine(a.HasValue); // falso

    a = 2;

    Console.WriteLine(a == null); // falso

    Console.WriteLine(a.HasValue); // verdadero

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    43/399

    Console.WriteLine(a.Value+" "+a); // 2 2

    Los tipos nullables se utilizarn para acceder a los datos relacionales. En efecto, los SGBDrealizan la distincin entre NULL y una inicializacin del valor. Como los tipos SQL estnrelacionados con los tipos C#, ADO.NET utiliza la constante DBNull, lo que supone encapsular elvalor en una estructura. La puesta en marcha se ha visto, por tanto, generalizada.

    7. Iterador

    Los iteradores son construcciones lgicas que sirven para enumerar los elementos de un conjuntode tipo tabla, una coleccin... Se utilizan con el bucle foreach.

    Para estudiar la forma de los iteradores asociados a C#1 y C#3, consideremos la clase Melodia:

    enum Nota { do,re,mi,mi_bemol,fa,sol,la,si }

    class Melodia : ColeccionBase

    {

    public Melodia() : base(){

    }

    public void add(Nota nota)

    {

    this.List.Add(nota);

    }

    public Nota this[int indice]

    {

    get { return (Nota) List[indice]; }

    set { List[indice] = value; }

    }

    }

    a. Iterador en C#1

    Para ejecutar un bucle foreach sobre una coleccin con C#1, es preciso implementar la interfazIEnumerable, que expone el mtodo GetEnumerator(). Este mtodo se invoca desde lainstruccin foreach, y devuelve una instancia que implementa IEnumerator.

    Para respetar las reglas de visibilidad y de reentrada, la clase que implementa IEnumeratorpuede ser interna a la clase coleccin:

    class Melodia : ColeccionBase, IEnumerable

    {

    #region IEnumerable Members

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    44/399

    IEnumerator IEnumerable.GetEnumerator()

    {

    return new MelodiaIterator(this);

    }

    #endregion

    // clase encargada de proveer las notas que componen la meloda

    private class MelodiaIterator : IEnumerator

    {

    private IList lista;

    private int contador;

    public MelodiaIterator(Melodia melodia)

    {

    lista = melodia.List;

    contador = 0;

    }

    #region IEnumerator Members

    object IEnumerator.Current

    {

    get { return lista[contador]; }

    }

    bool IEnumerator.MoveNext()

    {

    contador++;

    return contador < lista.Count;

    }

    void IEnumerator.Reset()

    {

    contador = 0;

    }

    #endregion

    }

    }

    El programa de prueba puede crear una meloda y reproducirla con ayuda del bucle foreach:

    Melodia melodia = new Melodia() ;

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    45/399

    melodia.add(Nota.sol);

    melodia.add(Nota.sol);

    melodia.add(Nota.sol);

    melodia.add(Nota.mi_bemol);

    foreach (Nota n in melodia)

    Console.WriteLine(n); // po-po-po-pooo!

    b. Iterador a partir de C#3

    El lenguaje C#3 proporciona una sintaxis ms ligera para construir los iteradores. Lapalabrareservada yield returnconstruye una clase idntica a la clase MelodiaIterator :

    public IEnumerable Notas

    {

    get

    {

    for (int i = 0; i < List.Count; i++)

    yield return List[i];

    }

    }

    Con este ejemplo, la clase Melodia no necesita implementar IEnumerator - aunque sigue siendo,no obstante, una posibilidad. Cabe destacar que la variable interna i se memoriza de una llamadaa la siguiente. La palabra reservada yield returndescompone cada llamada al iterador.Podramos utilizar tambin varios yield return a continuacin para construir un bucle.Observe tambin la existencia de una instruccin yield breakpara interrumpir la secuenciaantes de que termine.

    El bucle foreach es similar al anterior. Devuelve, evidentemente, el mismo resultado:

    foreach (Nota n in melodia.Notas)

    Console.WriteLine(n); // Siempre la quinta!

    8. Genericidad

    La genericidad es una herramienta de programacin que evita al programador tener que practicarsecuencias copiar-pegar difciles de mantener. Hasta el da de hoy, esto era posible utilizando eltipoobject(alias C# del tipo CTS System.Object) que serva de base a todas las clases. Esteenfoque dbilmente tipado muestra rpidamente sus limitaciones en trminos de complejidad ode seguridad en el funcionamiento.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    46/399

    El lenguaje C++ proporciona, desde hace tiempo, un mecanismo de clases plantilla (template).El nombre de la clase introduce uno o varios tipos parmetro, a menudo designados por letrasmaysculas, que retoman los campos, parmetros y mtodos de la clase. Para el lector queconozca el lenguaje C, las plantillas presentan un uso mucho ms seguro que las macros delpre-procesador; el compilador considera, en efecto, cada instancia del modelo utilizado por elprograma con todo el rigor y control necesarios.

    El lenguaje C#2 retoma en gran parte el enfoque de las plantillas de C++, afortunadamente

    simplificando su sintaxis y fijando reglas ms estrictas para su aplicacin.

    a. Definir un tipo genrico

    La sintaxis utilizada para declarar una clase genrica utiliza la notacin . El tipoparmetro (generalmente designado por una letra mayscula T, U, V) se retoma, a continuacin,en el interior de la clase para designar al tipo de ciertos campos, variables y parmetros. Elsiguiente ejemplo implementa una lista de elementos de tipo T. Este tipo se precisar en elmomento de instanciacin de la clase y la lista podr contener valores de tipo string, int, char...

    class Lista

    {#region Propiedad elemento

    private T elemento;

    public T Elemento

    {

    get { return elemento; }

    set { elemento = value; }

    }

    #endregion

    #region Propiedad siguiente

    private Lista siguiente;

    internal Lista Siguiente

    {

    get { return siguiente; }

    set { siguiente = value; }

    }

    #endregion

    // una constante genrica

    public const Lista LISTA_VACIA = null;

    #region Constructores

    public Lista()

    {

    siguiente = LISTA_VACIA;

    }

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    47/399

    public Lista(T elemento, Lista siguiente)

    {

    this.elemento = elemento;

    this. siguiente = siguiente;

    }#endregion

    }

    La sintaxis del constructor presenta una originalidad: el tipo parmetro no aparece en sudefinicin. El nombre que sirve para distinguir el constructor difiere, por tanto, del nombre de laclase.

    He aqu, ahora, la definicin de otros mtodos de la clase Lista, estticos o no.

    // un mtodo esttico con un parmetro genrico

    public static bool esta_vacia(Lista l)

    {

    return l == LISTA_VACIA;

    }

    public int longitud()

    {

    // llamada al mtodo esttico

    return Lista.longitud(this);}

    public static int longitud(Lista l)

    {

    if (Lista.esta_vacia(l))

    return 0;

    else

    return 1 + longitud(l.siguiente);

    }

    public void visualizar()

    {

    visualizar(this);

    }

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    48/399

    public static void visualizar(Lista l)

    {

    if (Lista.esta_vacia(l))

    return;

    Console.Write(l.element.ToString() + ",");

    visualizar(l.siguiente);}

    b. Especializacin parcial

    La especializacin parcial consiste en proveer una implementacin especfica para ciertos valoresdel parmetro T:

    // especializacin parcial del mtodo visualizar:

    // una versin especfica para cadenas

    public static void visualizar(Lista l)

    {

    if (Lista.esta_vacia (l))

    return;

    Console.Write(l.element + ",");

    visualizar(l.siguiente);

    }

    Este enfoque es til para aprovechar el conocimiento del tipo . El programador puede,

    entonces, crear una implementacin optimizada para el tipo en cuestin.

    c. Uso de un tipo genrico

    La variable L no podra declararse como Lista. Es necesario precisar el parmetro utilizadopara instanciarla, en la ocurrencia un string. De este modo, el tipo de la variable L esLista:

    Lista l=

    new Lista("hola",

    new Lista("a",

    new Lista("todos",

    Lista.LISTA_VACIA)));

    l.visualizar();

    Console.WriteLine("\nLongitud: {0}", l.longitud());

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    49/399

    d. El espacio de nombres System.Collections.Generic

    La sintaxis de los tipos genricos C#2 es muy rica, autorizando a enumerar propiedades de lainterfaz grfica aplicables a parmetros , pero evita tambin el uso de plantillas del lenguajeC++.

    Las clases genricas se utilizan, a menudo, como estructuras de datos dinmicas: pilas, listas,colas de espera, tablas, tablas hash Microsoft ha reescrito las clases del espacio denombresSystem.Collectionsvolvindolas genricas. Las nuevas clases se ubican en elespacio de nombres System.Collections.Generic.

    La

    genericidad no influye en el rendimiento de un programa. Pero la seguridad en el funcionamientoy la robustez se ver mejoradas evitando tipados errneos desde la clase objeto.

    Comparer Clase bsica para implementar algoritmos de ordenacin genricos.Dictionary Tabla de hash genrica.

    LinkedList Lista genrica doblemente encadenada.

    List Lista genrica.

    Queue Cola de espera genrica (tambin llamada pila FIFO).

    SortedList Lista genrica cuyos elementos pueden ordenarse.

    Stack Pila genrica (tambin llamada pila LIFO).

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    50/399

    El modelo de compilacin

    1. Del CGI al modelo ASP.NET 1.X

    Para comprender el modelo de compilacin de ASP.NET, vamos a trazar la evolucin de lasaplicaciones web.

    El protocolo HTTP ha ido evolucionando de la mano de las pginas HTML. Se ha impuesto conrapidez la idea de que el contenido de las pginas deba generarse bajo demanda, en especialpara presentar datos provenientes de una base de datos SQL.

    a. La interfaz CGI

    La primera tcnica disponible fue el CGI (Common Gateway Interface). Adems de pginas HTMLestticas - archivos cuyo nombre incluye una extensin .html - el servidor web albergaprogramas ejecutables. Una configuracin particular indica al servidor que dichos programas sedeben ejecutar cuando se solicitan ciertas URL concretas. El programa ejecutable invocado porel servidor decodifica la peticin HTTP realizando una lectura sobre el flujo de entrada estndar(stdin en lenguaje C) y analizando las variables de entorno. La respuesta HTTP se escribe, acontinuacin, sobre el flujo de salida estndar (stdout); el servidor inserta, en ocasiones,

    encabezados HTTP y se enva todo al navegador. Si bien fueron indispensables durante lacreacin de las aplicaciones web, las CGI presentan numerosas limitaciones; el lenguaje deprogramacin empleado, C o, a menudo, PERL, no est realmente adaptado a la situacin.Adems, la interfaz CGI genera demasiadas implementaciones especficas, que hacen menosrobusta la solucin. Por ltimo, las CGI no presentan un buen rendimiento.

    Con el objetivo de ilustrar la complejidad del desarrollo de una CGI se muestra, a continuacin,en lenguaje C, el cdigo de un programa que devuelve la hora al usuario cuyo nombre se pasaen la cadena de peticin (query string).

    #include "stdafx.h"

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    51/399

    #include

    #include

    #include

    #include

    #include

    #include

    int main(int argc, char* argv[])

    {

    // calcular la hora

    char hora[128];

    _strtime_s( hora, 128 );

    // recuperar el nombre del usuario

    char*q=getenv("QUERY_STRING");

    char*nombre="";

    if(q!=NULL)

    {

    nombre=(char*)malloc(strlen(q));

    char*pn=strstr(q,"nombre=");

    if(pn>0)

    strcpy(nom,pn+strlen("nombre="));

    char*fin;

    if((fin=strstr(nombre,"&"))!=NULL)

    *fin=0;

    }

    // preparar la respuesta HTTP

    printf("Content-Type: text/html\n");

    printf("\n");

    // respuesta HTML

    printf("");

    printf("");

    printf("Hola %s
    ",nombre);

    printf("Son las %s",hora);

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    52/399

    printf("");

    printf("");

    return 0;

    }

    El programa hora.exe debe ejecutarse en una carpeta configurada de manera especial para queel servidor web lo reconozca como mdulo CGI. En IIS, cree una carpeta cgi en lacarpetac:\inetpub\wwwroot. Los modos de ejecucin se definen en la ventana de propiedadesde la carpeta virtual correspondiente, desde la consola de administracin de IIS:

    Slo nos queda probar el programa utilizando la direccin que hace referencia al mdulohora.exe:

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    53/399

    b. Las pginas dinmicas ASP

    Los fabricantes de software servidor reaccionaron a las limitaciones de las CGI proponiendointerfaces web (ISAPI de Microsoft, NSAPI de Netscape), e introduciendo pginas dinmicas PHP,JSP y ASP. La implementacin de las tres tecnologas es muy similar (a excepcin de las JSP,que utilizan un modelo ligeramente diferente). Estas tecnologas se basan en el uso de unlenguaje especfico (PHP, Java, VB Script), de una API dedicada a las bases de datos y a ladecodificacin de consultas HTTP, y de un handler que indica al servidor web que se trata depginas que deben ejecutarse y no descargarse. Dicho de otro modo, los servidores webreconocen una nueva extensin (asp en el caso de Microsoft) para desencadenar la ejecucin delas pginas correspondientes.

    A ttulo comparativo, he aqu la versin ASP del cdigo CGI hora.exe. El cdigo es mucho msdirecto y su aplicacin no requiere ninguna configuracin, puesto que IIS ha sido concebido parala ejecucin de estas pginas dinmicas:

    Hola

    Son las

    Tras la aparicin de las pginas dinmicas, los escenarios divergen; Microsoft se mostrar el msinnovador con el modelo ASP.NET. Se trata, principalmente, de producir secuencias HTML. Unapgina .aspx resuelve la dificultad que supone encontrar el compromiso entre HTML yprogramacin, proponiendo un modelo de objetos adaptado. Todas las secuencias HTML estn

    descritas en las pginas .aspx mediante tags especficos (tcnica tambin disponible en JSP yPHP, pero sin un uso generalizado), mientras que el cdigo de los eventos se compila utilizandouna librera DLL.NET (ensamblado).

    Si bien la base de ASP.NET se ha saneado e industrializado, todava queda mucho camino porrecorrer.

    En primer lugar, los sitios web ASP.NET 1.X se basan en un ciclo de creacin algo limitado; dadoque cada cdigo de pgina est compilado en una nica DLL, la modificacin de tan solo unapgina requiere que se detenga la aplicacin completa para actualizar dicha DLL. Adems, Visual

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    54/399

    Studio 2002 y 2003 generan mucho cdigo C#. La cantidad y la calidad del cdigo generadopueden entorpecer el mantenimiento de las aplicaciones.

    A diferencia de Sun, con su modelo Servlet/JSP/Java Bean, Microsoft no propone unaarquitectura de tipo aplicacin web. Si bien estn dotados de interfaces grficas muy reactivas,los sitios web ASP.NET 1.X carecen de flexibilidad o, dicho de otro modo, es difcil integrar losdistintos servicios del sistema de informacin en una aplicacin web ASP.NET 1.X.

    Por ltimo, el objetivo de una pgina dinmica es producir una secuencia HTML que pueda serconsumida por un navegador. Si bien exista cierta expectacin, muchas posibilidades no hanpodido explotarse con el modelo 1.X: produccin dinmica de imgenes, de documentos PDF,servicios web distintos a SOAP Ni el framework, ni Visual Studio, ni ASP.NET 1.X estnrealmente adaptados para soportar dichas tareas.

    Microsoft no se ha contentado, pues, con adaptar ASP.NET al estado del arte. Ha aportadomodificaciones que mejoran los puntos problemticos. Estas modificaciones se describen en lassiguientes secciones, y constituyen un nuevo modelo de compilacin.

    2. Clases parciales para las pginasa. Estructura de una pgina ASPX 4.5

    El desarrollador que pase de la versin 1.X a la versin 4.5 constatar que Visual Studio genera,de forma neta, mucho menos cdigo C#. Las pginas ASPX funcionan, todava, basadas en dosarchivos complementarios, pero las reglas de encapsulacin han evolucionado.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    55/399

    Una pgina ASP.NET incluye dos clases: la primera se obtiene compilando el archivo .aspx quecontiene segmentos de cdigo C# pero tambin, sobre todo, etiquetas . De hecho, todaslas etiquetas que poseen un atributo runat="server"constituyen un campo de esta clase.La segunda clase est escrita completamente en C#. En el modelo 1.X, es Visual Studio elencargado de generar el cdigo en esta ltima clase y, en particular, de declarar campos con losmismos nombres que los controles que tienen un atributo runat="server". Estos campos sedeclaran con nivel de acceso protected, y se aplica la sobrecarga. El code-behind se basa encampos C# que son, de hecho, controles .

    Tras el modelo 2.0, Visual Studio no genera cdigo; es el framework el que realiza esta tarea.Como dicha generacin es dinmica, los ingenieros de Microsoft han tenido que declarar la clasecomo parcial para soportar una inyeccin de cdigo.

    Consideremos la siguiente pgina Default.aspx:

    Esta pgina constituye una clase que hereda de la clase indicada mediante la directiva :

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

    {

    /*

    * el framework declara aqu los campos protected

    * para cada control de la pgina.

    * en este ejemplo,

    * protected TextBox TextBox1;

    */

    protected void Page_Load(object sender, EventArgs e)

    {

    this.TextBox1.Text = "Mensaje";

    }

    }

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    56/399

    Para el desarrollador, esta modificacin del modelo es transparente, puesto que el modelo deprogramacin no sufre cambios. En efecto, el framework declara los campos de la misma formaque Visual Studio. La evolucin del modelo de compilacin simplifica, en particular, laimplementacin de controles de usuario .ascx. Como Visual Studio no los declara, el programadordebe realizar esta tarea l mismo. Ahora, es el framework el que utiliza la reflexin, y no olvidaciertos tipos de control.

    b. Modificaciones de una pgina ASPX 4.5

    Podemos, ahora, preguntarnos acerca del sentido de esta evolucin del modelo. Visual Studio,sin ser perfecto, lleva a cabo con xito su tarea de generacin de cdigo. Recordemos que en laprimera versin de ASP.NET todo el cdigo que figura en un archivo .cs se compilaba bajo laforma de una DLL. La modificacin de una sola pgina .aspx poda suponer cambios en el code-behind; era preciso volver a compilar el conjunto del proyecto y, a continuacin, volver acompilar la clase HTML.

    Con el nuevo modelo, el servidor de aplicaciones ASP.NET revisa las pginas del sitio. Si semodifica una pgina, el servidor decide si es necesario volver a compilarla y, en este caso, utilizatcnicas de compilacin incremental para no bloquear el ensamblado completo del sitio.

    3. El cdigo compartido en App_Code

    Una aplicacin web no est compuesta solamente por pginas ASPX. Existen clases auxiliares(helper clases) que son necesarias para compartir comportamiento entre distintas clases. Es,as, posible factorizar controles de cach, crear objetos de negocio simples (al estilo de los JavaBean) que no tienen por qu tener la vocacin de ser clases en una biblioteca de clasesreferenciada por el objeto.

    Dado el nuevo modelo de compilacin, sera una pena, incluso problemtico, dejar de lado estasclases del usuario mientras que las pginas se recompilan automticamente. sta es la razn deser de la carpeta especial App_Code.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    57/399

    El servidor de aplicaciones ASP.NET escruta as el contenido de dicha carpeta, que contiene elcdigo fuente C#. Cuando se modifica un archivo, se recompila, y se integra en la DLL de salida.

    Cuando Visual Studio crea un nuevo proyecto de sitio web, la carpeta especial App_Code todavano existe. El programador puede agregarla l mismo, desde el men contextual que aparece enel explorador de soluciones. En caso contrario, Visual Studio sugerir ubicar las clases recincreadas en App_Code.

    Cuando se crea o modifica una clase en esta carpeta, se vuelve disponible para utilizarse enotras clases o pginas. Si el programador guarda el archivo de cdigo fuente y ste contieneerrores, Visual Studio alimenta la lista de tareas para presentar las observaciones del compilador.Como el servidor de aplicaciones, el compilador y Visual Studio funcionan como tarea de fondo,la aparicin de dichos mensajes puede tardar un poco en ocurrir, sobre todo con configuracionesde hardware algo justas. El programador puede, en tal caso, anticiparse y ejecutar la compilacindel proyecto mediante el men habitual Compilar solucin.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    58/399

    Este servicio de compilacin automtica implica una contrapartida: el programador debe publicarsu cdigo en el servidor de destino.

    Preste atencin, los entornos web tales como ASP.NET, PHP, J2EE, tienen en cuenta que lacompilacin de un cdigo fuente es un mecanismo fiable para proteger dicho cdigo fuente.Existen, a da de hoy, muchas herramientas de compilacin. Para hacer ilegible un archivocompilado, es necesario utilizar una herramienta llamada ofuscador.

    4. Los ensamblados referenciados

    Hasta la fecha, ningn archivo .csproj se tiene en cuenta para compilar el proyecto. De hecho,el nuevo modelo de compilacin de ASP.NET 4.5 ha reducido considerablemente el uso de dichoarchivo. El proyecto se describe, ahora, en el archivo de solucin. El archivo .csproj permanecetan slo para la recompilacin de la DLL que soporta el conjunto de clases del sitio web, si lorealiza el servidor de aplicaciones, y no Visual Studio, en cuyo caso necesita conocer las

    referencias a los ensamblados externos.

    a. Referencias dinmicas

    El desarrollador puede agregar referencias a DLL siguiendo el procedimiento habitual, es decir,utilizando el men contextual Agregar referenciaque aparece en el explorador de soluciones.En el caso de una referencia privada, la DLL se copia en la carpeta bin de la aplicacin web. Elservidor de aplicaciones reconoce en esta carpeta especial la presencia de una DLLcomplementaria y la agrega a la lista de referencias que se pasan al compilador C#.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    59/399

    Para poner de manifiesto este mecanismo, es posible crear una DLL y copiarla, a continuacin,manualmente en la carpeta bin. El men contextual Pginas de propiedadesdel exploradorde soluciones enumera dichas referencias dinmicas:

    La referencia est, de este modo, disponible para el conjunto del cdigo de la aplicacin.

    b. Referencias explcitas en el Web.config

    A diferencia de las referencias privadas, las referencias compartidas se inscriben en la GlobalAssembly Cache (GAC) y no tiene inters copiarlas en la carpeta local de la aplicacin. Antes de

    confiar al archivo .csproj la responsabilidad de pasar la lista de referencias compartidas alservidor de aplicaciones, es el archivo de configuracin Web.config el que incluye esta lista.

    El archivo Web.config ya no lo crea automticamente Visual Studio, es preciso, por lo general,esperar a la primera depuracin para que se cree una configuracin particular y ver aparecerdicho archivo en la lista de archivos de la aplicacin.

    Visual Studio incluye en el archivo de configuracin Web.config las referencias compartidas dela aplicacin ASP.NET. Esta tcnica tambin puede emplearse parar las referencias privadas,pero es intil dada la supervisin de la carpeta bin que realiza el servidor de aplicaciones.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    60/399

    5. La cach de construccin

    El servidor de aplicaciones utiliza una carpeta de trabajo llamada cach de construccin. En estacarpeta se almacenan las distintas versiones de las clases parciales y de las DLL que representan

    el producto ejecutable de los sitios web ASP.NET 4.5.

    La cach se sita en lacarpetaC:\Windows\Microsoft.Net\Framework\v4.0\Temporary ASP.NETFiles.

    Cada aplicacin ASP.NET se ordena en una subcarpeta cuya organizacin recuerda a la carpetawork del servidor de aplicaciones J2EE Tomcat. De hecho, las pginas ASP.NET y las pginas JSPtienen un funcionamiento muy parecido, y presentan un problema similar: la primera ejecucinde una pgina provoca que se cree una clase, se compile, y se actualice un ensamblado completo.Este tiempo de preparacin puede parecer excesivo en tiempo de desarrollo puesto que elproceso se repite cada vez que se guarda el archivo de cdigo fuente.

    La herramienta aspnet_compiler, que se estudia en el captulo que trata el desarrollo deaplicaciones ASP.NET, permite compilar de antemano el conjunto de elementos de un sitio. Estofacilita la instalacin de la aplicacin, el cdigo fuente ya no tiene por qu distribuirse y se acelerala primera ejecucin de un sitio que puede contener muchos elementos de programacin.

    6. Las aplicaciones web de Visual Studio

    Visual Studio proporciona, del mismo modo, otro modelo de construccin de aplicaciones querecuerda a las primera versiones de ASP.NET y a las aplicaciones Winforms; se trata deaplicaciones web. Este modelo de aplicacin no est enlazado con IIS durante el desarrollo sinocon el servidor auxiliar que descubriremos un poco ms adelante.

    Para acceder a este tipo de aplicaciones, hay que utilizar el comando de Visual Studio Archivo-Nuevo proyectoy no Archivo- Nuevo sitio Web.

  • 5/25/2018 ASP.net 4.5 en C# Con Visual Studio 2012

    61/399

    En este modo, Visual Studio juega el rol de servidor de aplicaciones y mantiene en un archivoseparado (.designer.cs) el cdigo subyacente.

    Este modelo es muy interesante puesto que la compilacin, exigida para acceder a la aplicacin,incluye numerosas verificaciones que, de otro modo, se haran nicamente en tiempo de

    ejecucin. Adems, el acceso inicial a la aplicacin en produccin es mucho ms rpido puestoque sta ya se encuentra compilada. Otra ventaja es que el cdigo fuente se elimina de lasolucin final.

    Como inconveniente, este tipo de aplicaciones no se enlaza a un IIS e