60
Seriación de objetos Yo localizo, tú localizas,... ¡localicemos todos! Windows Presentation Foundation Primeros pasos con Windows Presentation Foundation dotNetManía nº19 octubre 2005 • 6,00 (España) Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET Framework • Windows Server System Opinión dotNetManía www.dotnetmania.com Dedicada a los profesionales de la plataforma .NET La metáfora del cerdo y la gallina Seriación de objetos ToDotNet Q&A Mecanismos para el mantenimiento del estado en ASP.NET La utilidad de los atributos en tiempo de diseño. Cómo programar para interactuar con el PropertyGrid Cómo instalar un certificado digital SSL en IIS 6.0 Acceso a bases de datos Oracle desde Delphi 2005 Entrevista dnm.inicio Yo localizo, tú localizas,... ¡localicemos todos! Jeff Prosise Autor, speaker y... sabio Wintellect PDC 2005 Guía para el futuro

Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Embed Size (px)

Citation preview

Page 1: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Seriación de objetos

Yo localizo, tú localizas,...¡localicemos todos!

WindowsPresentationFoundation

Primeros pasos con

WindowsPresentationFoundation

dotNetManíanº

19 o

ctub

re 2

005

• 6,

00 €

(Esp

aña)

Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET Framework • Windows Server System

Opinión

dotNetManíawww.dotnetmania.com Dedicada a los profesionales de la plataforma .NET

La metáfora del cerdo y la gallina

Seriación de objetosToDotNet Q&A

Mecanismos para el mantenimientodel estado en ASP.NET • La

utilidad de los atributos entiempo de diseño. Cómoprogramar para interactuar

con el PropertyGrid • Cómoinstalar un certificado digital SSL

en IIS 6.0 • Acceso a bases de datosOracle desde Delphi 2005

Entrevista

dnm.inicioYo localizo, tú localizas,...¡localicemos todos!

Jeff ProsiseAutor, speaker y... sabioWintellect

PDC 2005Guía para el futuro

Page 2: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio
Page 3: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Bienvenido al número 19 de octubre de2005 de dotNetManía.

Momentos como éste en el que acabamosde recibir toda la información del PDC 2005nos recuerdan que nuestros conocimientosactuales están a la baja. Como siempre, vaya.Iván González nos ha enviado una magnífi-ca crónica desde Los Ángeles. Magnífica, sí,pero resulta agotador pensar en todo lo quequeda por aprender, sin haber aprendido toda-vía la tecnología del presente. Intentaremosguiarle sobre la tecnología en la que Microsoftestá trabajando para los próximos dos años(tómese algo relajante antes).

Aún recuerdo cuando dejábamos elentorno tranquilo, estable y controlable queera el sistema operativo DOS, y comenza-mos a desarrollar para Windows y había quehacer ventanas con C++, de esa manera tan“entretenida”, que nos recuerda Jeff Prosiseen la entrevista de este mes, -que por cier-to le recomiendo- que nos enseñó CharlesPetzold. Jeff, era uno de los monstruos deEnsamblador y como bien dice él mismo,esto ya no sirve para casi nada. Es más, inclu-so los conocimientos del API de Windowsrara vez servirán para algo al común de losdesarrolladores. Ahora Charles está prepa-rando un nuevo libro (no nos ha dicho sobrequé; estén atentos) y Jeff es un experto enASP.NET. Ya ve, puede hacerse.

Y luego nos dice David Carmona en suartículo sobre Windows Presentation Foundationque ¡ya no hay controles! y que ¡vayamos pen-sando en tres dimensiones! No sé dónde vamosa ir a parar. Con este artículo comenzamos unaserie de introducción a la programación con

WinFX para ayudarle en este tránsito.Continuaremos con WCF y WinFS, aunqueel mes que viene nos saltaremos la cita debidoa la guía monográfica de novedades de VisualStudio 2005 que estamos preparando. Másnovedades, sí.

Y para qué hablar del proyecto LINQ(vea las notas sobre su origen en dotNetManíanº2, pág. 31), si todavía no hemos desemba-lado Visual Studio 2005. Seguiría y no para-ría. La cuestión es que en pocas profesionespuedes pasar de ser un experto respetado enel mundo entero a ser un ignorante, el mástorpe de los becarios, en cuanto te descuidas.Y cada vez la tecnología es más compleja yexigente. Y mantenerse cuesta ¿verdad?

Nosotros somos eternos aprendices,ignorantes crónicos, más vale que nuestraautoestima sea fuerte, porque esta profesiónlo requiere. Por mucho que hoy aprenda-mos, no impediremos ser cada día más igno-rantes. Y aún así ¡cómo nos gusta!

Quiero dar la bienvenida a un nuevo gru-po de autores: Ismael Torres, José VicenteMartínez y Salvador Fuster que colaborancon su artículo “Mecanismos para el mante-nimiento del estado en ASP.NET”, un reco-rrido por todas las formas antiguas y moder-nas de mantener el estado en aplicaciones Webcubriendo hasta ASP.NET 2.0. Y también aSergio Vázquez, vicepresidente de gusenet.comy experto en seguridad de aplicaciones Web yque colabora con su artículo “Cómo instalarun certificado digital SSL en IIS 6.0”.

Por supuesto esto no es todo. Dentrohay más...

Espero que le guste.do

tNet

Man

ía<<

3

Eternos aprendicesdotNetManía

Dedicada a los profesionales de la plataforma .NET

Vol. II •Número 19 • Octubre 2005Precio: 6€

EditorPaco Marín

([email protected])

AdministraciónPilar Pérez

([email protected])

Asesor TécnicoMarino Posadas

([email protected])

RedactoresAntonio Quirós, Dino Esposito, Guillermo

'guille' Som, Jorge Serrano, José ManuelAlarcón, Luis Miguel Blanco, MiguelKatrib (Grupo Weboo) y Pedro Pozo.

Colaboradores habitualesÁngel Esteban, Braulio Díez, Daniel

Mazzini, Eladio Rincón, Erich Bühler,Fernando Nogueras, Jorge Crespo Cano,José Miguel Torres, Miguel Egea, Octavio

Hernández, Pablo Abbate, Pepe Hevia,Rodrigo Corral y Salvador Ramos.

Además colaboran en este númeroDavid Carmona, Ismael Torres, José Vicente,Mario del Valle, Sergio Vázquez y Salvador

Fuster

Edición y Suscripciones.netalia

c/ Robledal, 13528529 Rivas-Vaciamadrid (Madrid)

Tf. (34) 91 666 74 77Fax (34) 91 499 13 64

PublicidadMediadev

Sophie Mancini ([email protected])Tf. 93 426 22 57 - 670 99 74 64

Fax. 93 423 11 40

ImprimeGráficas Vallehermoso

www.graficasvallehermoso.com

ISSN1698-5451

Depósito LegalM-3.075-2004

<<

dnm.editorial

Page 4: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

19dnm.sumario

dnm

.sum

ario

La metáfora del cerdo y la gallina 10-11Una conocida metáfora del mundo anglosajón nos habla de un apetitoso plato de huevoscon jamón con la finalidad de distinguir el nivel de compromiso que para realizar dichoplato han mantenido la gallina y el cerdo. La gallina se ha involucrado en el proceso, perosu participación ha requerido de ella el mínimo de esfuerzo, ha puesto sus huevos y nadamás. El cerdo en cambio ha estado auténticamente comprometido, tanto que ha dejado lavida en el proceso.

Entrevista a Jeff Prosise 12-14Uno de los grandes promotores de la tecnología Microsoft desde sus mismos inicios,Jeff Prosise, dio una excelente conferencia sobre seguridad en ASP.NET en Tech-Ed2005 en Ámsterdam. Aprovechamos para entrevistarlo poco después y recordarle susprimeros trabajos en español, escribiendo sobre el lenguaje Ensamblador para larevista Microsoft para Programadores, allá en el año 93.

PDC 2005 15-20En esta crónica del PDC 2005 celebrado en Los Ángeles, hacemos un extenso resumende todas las novedades que se presentaron sobre las tecnologías de Microsoft del futuro. Ensólo dos años nos esperan nuevas versiones de cliente y de servidor de Windows, nuevasversiones de toda la familia Office System, la nueva plataforma de desarrollo WinFX, ynuevos miembros como los productos Microsoft Expression (Graphic Designer, InteractiveDesigner y Web Designer)

Mecanismos para el mantenimiento del estado en ASP.NET 21-26Las aplicaciones Web fueron concebidas para mostrar contenidos estáticos, es decir,información no cambiante en función del tiempo, lo que equivale a decir que ante diversaspeticiones del mismo recurso, siempre se obtiene como respuesta el mismo contenido. Poreste motivo, no existía la necesidad de almacenar el estado de las aplicaciones Web, pueslas acciones realizadas y los datos introducidos de forma previa a la petición de un recursoeran irrelevantes.

La utilidad de los atributos en tiempo de diseño.Cómo programar para interactuar con el PropertyGrid 27-31

En trabajos previos de dotNetManía hemos ilustrado las bondades de esa maravillaintroducida por .NET que son los atributos para colocar metainformación dentro de losensamblados. Veremos en este artículo cómo el propio Visual Studio hace un uso intensivode los atributos para que podamos personalizar nuestros propios controles visuales.

Primeros pasos con Windows Presentation Foundation 32-39Tal y como dijo Pablo Motos en el Developer Day del pasado 17 de mayo, Avalon (WPF)parece más un personaje de La Guerra de las Galaxias que otra cosa. En realidad noandaba muy equivocado porque la primera vez que escuché algo de Avalon me parecíaciencia ficción: un nuevo interfaz gráfico para Windows basado en un motor tridimensional,con aceleración gráfica y elementos multimedia integrados. ¿Será verdad todo esto?

Cómo instalar un certificado digital SSL en IIS 6.0 40-43En este artículo se describe paso a paso cómo conseguir e instalar un certificado digitalSSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server(IIS) para conseguir que nuestro sitio Web transmita datos confidenciales de forma segura.

Acceso a bases de datos Oracle desde Delphi 2005 44-48El desarrollador de aplicaciones y servicios .NET tiene a su disposición diferentes alternativaspara acceder a bases de datos Oracle a través de ADO.NET.

dnm.inicio 49-51Yo localizo, tú localizas,... ¡localicemos todos!

dnm.todotnet.qa 52-54Seriación de objetos

dnm.biblioteca.net 57Introducción a la programación Edición 2005 (Francisco Charte)XML: Los mejores trucos (Michael Fitzgerald)

dnm.desvan 58

Page 5: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio
Page 6: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

dotN

etM

anía

<<

6

dnm.noticias<<

Microsoft reorganiza su estructuran

oti

cia

s.n

oti

cia

s.n

oti

cia

s.n

oti

cia

s.n

oti

cia

s.n

oti

cia

s

Steve Ballmer nombra un presidente para cada una de las tres nuevas divisiones:Microsoft Platform Products & Services Division,Microsoft Business Division y MicrosoftEntertainment & Devices Division

Con el obje-tivo de conseguiruna mayor agili-dad para la ejecu-ción de su nuevaestrategia de soft-ware y servicios,M i c r o s o f tCorporation haanunciado unrealineamientode la compañíaen tres nuevas

divisiones, cada una de las cuales ten-drá su propio presidente: MicrosoftPlatform Products & Services Divisionque estará liderada por KevinJohnson (Kevinjo) y Jim Allchincomo co-presidentes. No obstante,Jim Allchin tiene decidido retirar-se, pero permanecerá como co-pre-sidente hasta finales de 2006, cuan-do el desarrollo de Windows Vistaesté finalizado para facilitar la tran-sición. Jim Alchin ha tomado estadecisión por motivos personales. Alparecer un problema de salud yaresuelto le ha llevado a evaluar susprioridades (según un email enviadoa los propios empleados de Microsoftque puede leerse en: http://www.busi-nessweek.com/technology/content/sep2005/tc20050921_7814.htm); Jeff Raikesha sido nombrado presidente deMicrosoft Business Division; y RobbieBach estará al frente de MicrosoftEntertainment & Devices Division.

Microsoft Platform Products & ServicesDivision

Kevin Johnson, pre-sidente y máximo respon-

sable de Microsoft Platform Products &Services Division, se encargará de la ges-tión de las áreas de Windows Client,Servers y MSN. Microsoft también hacomunicado que Eric Rudder,Vicepresidente senior de servidores y herra-mientas, asumirá un nuevo cargo traba-jando directamente con Bill Gates.Rudder centrará su actividad en losesfuerzos clave de la compañía en el áreade desarrollo avanzado así como en laestrategia técnica global. Eric Rudderasumirá su cargo tras el lanzamiento deVisual Studio 2005 y SQL Server 2005a finales de este año.

Microsoft Business Division

Los negocios de Infor-mation Worker y de Micro-

soft Business Solutions (MBS) se combina-rán dando lugar a la Microsoft BusinessDivision, con Jeff Raikes como presi-dente, junto con Doug Burgum, en cali-dad de Vicepresidente senior. Esta divisiónproporcionará tanto software como ser-vicios basados en software que permitana las empresas tener éxito en su escena-rio de trabajo diario, otorgando muchamás importancia a las personas.

Microsoft Entertainment & DevicesDivision

La nueva división deEntertainment & Devices

combinará las áreas hasta ahora cono-cidas como Home & Entertainment conMobile and Embedded Devices, y serápresidida por Robbie Bach. A travésde Entertainment & Devices se centra-lizarán todos los servicios y dispositi-vos para el entretenimiento. ElVicepresidente Senior de la División deEntertainment & Devices será PieterKnook.

Jim Allchin queabandonará Microsoft

a finales de 2006

Kevin Johnson, nuevopresidente de la Microsoft

Platform Products & ServicesDivision

Robbie Bach, nuevopresidente de la Microsoft

Entertainment & Devices

Eric Rudder, que a partir de ahora reportarádirectamente a Bill Gates, en un momento

de su reciente visita a España

Jeff Raikes, nuevo presidentede la Microsoft Business

Division

XtraScheduler Suite le ayudará aconstruir aplicaciones de agenda al esti-lo del interfaz de Microsoft Outlook.Con él no tendrá que gastar tiempo enlas opciones de personalización o en ina-decuados elementos visuales. XtraSche-duler Suite está construido bajo el códi-go compartido común de la XtraEditors

Library, la librería de componentes deDeveloper Express 100% basada en C#y optimizada para los desarrolladores decualquier lenguaje de Visual Studio.NET.

Más información en la Web delfabricante: http://www.devexpress.com/pro-ducts/NET/XtraScheduler

XtraScheduler Suite de Developer Express disponibleDevoloper Express ha anunciado la disponibilidad de XtraScheduler Suite, unacolección de componentes 100% nativa de .NET Framework para desarrolladoresde Visual Studio .NET.

Page 7: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

dnm.noticias

dnm.noticias

dotN

etM

anía

<<

7

ComponentOne ha anunciadola versión de ComponentOneStudio Enterprise 2005 v3, uno de

los conjuntos de herramientas para .NET,ASP.NET, dispositivos móviles y COM másusados del mundo.

Nuevas características de ComponentOneStudio Enterprise 2005 v3

True DBGrid para .NET

• Agrupación avanzada. Extensión de la fun-cionalidad de agrupación para soportar ran-gos de fechas, trozos de fechas (día, mes,año), alfabetización y criterios personali-zados de agrupación. Los desarrolladorespueden también controlar la visibilidad delas columnas que han sido arrastradas den-tro del área de agrupación.

• Modo de datos no enlazados: Los desarrolla-dores pueden escribir código para añadir yeliminar columnas, actualizar valores deceldas y establecer el tipo de dato subya-cente; todo sin una fuente de datos.

• Soporte de gradientes y alpha blending. • Celdas like-valued pueden residir en el mis-

mo ancho de fila que la columna previa. • Se añaden nuevas propiedades para con-

trolar la barra de filtro, los estilos de losbordes y los divisores split.

Chart para .NET

• Nuevo tipo de chart: Se ha añadido el tipode chart “doughnut” (donut).

• Se ha añadido un importante runtime deplotted data.

• Optimizado el rendering de grandes tra-mas XY.

• Mejorada la creación y distribución auto-mática de etiquetas de datos.

• Los ejes soportarán valores superpuestosy etiquetas de valor, que pueden ser inte-ractivas.

• Se han añadido eventos before/after parafacilitar el dibujo personalizado de seriesde datos.

• Zonas de alarma que puede ser represen-tadas como elipses o polígonos.

• Se ha añadido soporte estadístico para elobjeto ChartDataArray.

Studio Enterprise 2005 está preparado paraVisual Studio 2005

Los actuales suscriptores de StudioEnterprise 2005 recibirán las versiones para.NET Framework 2.0 de las herramientas deComponentOne de forma gratuita y comoparte de sus suscripciones anuales. Estas nue-vas versiones estarán disponibles inmediata-

mente después del lanzamiento de MicrosoftVisual Studio 2005.

Para más información: http://www.com-ponentone.com/enterprise.

Control ComponentOne WinFX Schedulepara WPF

ComponentOne ha anunciado igual-mente, la disponibilidad del control Compo-nentOne WinFX Schedule para WPF paracuando WinFX sea liberado. Con él, los usua-rios podrán crear aplicaciones agenda/calen-dario bajo la plataforma Windows Vista.

“Este control al estilo de calendario de MicrosoftOutook es el primer conjunto completo de controlesComponent One para la nueva WPF”, ha dichoGustavo Eydelsteyn, Managing Director deComponentOne. “El objetivo de nuestros contro-les para WPF será permitir a los desarrolladoresadaptarse rápidamente y aprovecharse de las ven-tajas de Windows Vista”.

Este control proporciona una experienciade usuario similar a Microsoft Outlook, quepermite a los usuarios navegar fácilmente den-tro de la aplicación en poco tiempo. Aunquela apariencia de los controles sea como la deMicrosoft Outlook de forma predeterminada,éstos pueden ser combinados fácilmente encomponentes más complejos y diseñados paraaportar una integración completa con las apli-caciones que lo alberguen.

ComponentOne libera Studio Enterprise 2005 v3Realza el desarrollo de la capa de presentación con las nuevas y potentes versiones de su True DBGrid para .NET y las herramientas de charting

Infragistics desvela la fecha de salida de NetAdvantage 2005 para Microsoft Visual Studio 2005El conjunto de herramientas para la capa de presentación proporciona características clave más allá de lo que los desarrolladores recibirán como partede Microsoft Visual Studio 2005

Infragistics ha anunciadoque NetAdvantage 2005 para

Visual Studio 2005 verá la luz 45 días des-pués de la salida al mercado de MicrosoftVisual Studio 2005 (7 de noviembre).

NetAdvantage es un completo conjuntode herramientas para la construcción rápidade la capa de presentación de las aplicacio-nes Windows Forms, ASP.NET y Tablet PC.NetAdvantage 2005 Volume 3 está com-pilado nativamente con .NET Framework2.0 y contiene características adicionalesexclusivamente para Visual Studio 2005 ycaracterísticas clave de .NET Framework 2.0.Se aprovecha de muchas de las nuevas carac-terísticas de facilidades de uso en VisualStudio 2005, permitiendo a los desarrolla-dores crear aplicaciones consistentes, con laapariencia típica de Microsoft, mientras que

se escribirá menos código que usando .NETFramework 1.1.

Después de que Visual Studio 2005aparezca, Ingragistics mantendrá dos ver-siones de NetAdvantage. Una estará cons-truida sobre .NET Framework 1.x. Estaversión permitirá a los clientes continuarel desarrollo y mantenimiento de sus apli-caciones basadas en Visual Studio 2002-2003; la otra permitirá el desarrollo de apli-caciones basadas en NetAdvantage sobre.NET Framework 2.0, usando VisualStudio 2005. Esta versión permitirá a losdesarrolladores aprovechar todas las ven-tajas de las nuevas características de .NETFramework 2.0.

NetAdvantage incluirá una utilidad muyfácil de utilizar para la actualización de lasaplicaciones existentes a Visual Studio 2005.

Actualizando a los ensamblados .NETFramework 2.0

Con el servicio de la suscripción aNetAdvantage puede garantizar que susinvestigaciones en tecnología estarán prote-gidas cuando actualice al desarrollo con VisualStudio 2005 y .NET Framework 2.0.

Una suscripción NetAdvantage tambiénpuede ofrecer un camino limpio a WindowsVista a través de la compatibilidad con eldesarrollo con WPF (Windows PresentationFoundation).

Los actuales clientes de la suscripciónNetAdvantage recibirán NetAdvantage 2005de forma gratuita como parte de sus serviciosde suscripción.

Para más información: http://www.infra-gistics.com/VS2005 y http://www.infragis-tics.com/products/NetAdvantage

Page 8: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

El 10 de octubre se celebrará una sesiónllamada "Visual Studio Tools for Office Tour"donde podremos escuchar las novedades deesta herramienta de la mano de Donald D.Drake, director del equipo de desarrollo deVisual Studio Tools for Office en Microsoft.y Michael J. Hernandez, CommunityProgram Manager de Visual Studio Tools forOffice en Microsoft. Este es un evento gra-tuito y se celebrará en Madrid, en las oficinasde Microsoft Ibérica.

Para información y registro: http://www.microsoft.com/spanish/msdn/Spai

n/eventos/VSTOTour.asp

dotN

etM

anía

<<

8

dnm.noticias<<

dnm.noticias

SQL Server CTP de septiembre disponible

Microsoft ha puesto a disposición la CTPde septiembre de SQL Server 2005, la segun-da que está a disponible públicamente y la queposiblemente sea la última versión de pruebaantes de su salida definitiva. Como novedad,esta versión está disponible ya en 9 idiomas,entre ellos el castellano. Para desarrollo, estaes la versión necesaria para ser instalada conVisual Studio 2005 Release Candidate 1.

Esta CTP puede descargarse librementedesde: http://www.microsoft.com/sql/2005/pro-ductinfo/ctp.mspx y también puede descargardocumentación y más información desde lapágina principal de Microsoft SQL Server2005 en http://www.microsoft.com/sql/2005 odesde el centro de desarrollo del productoen MSDN: http://msdn.microsoft.com/SQL/2005.

El día 7 de noviembre, como estabaprevisto, Steve Ballmer será el encarga-do de anunciar el lanzamiento más impor-tante del año para la compañía: VisualStudio 2005, SQL Server 2005 y BizTalkServer 2006, en un evento de un solo díaque se celebrará en San Francisco, en elMoscone West Convention Center.

Más información en: http://www.micro-soft.com/launchtour2005 y en http://micro-soft.crgevents.com/Launch2005

Ready to Launch Tour 2005Steve Ballmer, CEO de MicrosoftCorporation, presentará Visual Studio 2005,SQL Server 2005 y BizTalk Server 2006 en elprimero de los eventos

Visual Studio Tools for OfficeTour

Eventos

El viernes 23de septiembre secelebró el VEpisodio GUSEen Elche. Laagenda fue:

• Programación para Compact Framework,por Antonio de Rojas.

• Conceptos básicos de distribución de datos:Demostración práctica de replicación porMiguel Egea.

• Seguridad En ASP.NET, por SergioVázquez.

• Preguntas y respuestasMás información en: http://www.gusenet.com

V Episodio GUSE:Desarrollo para CompactFramework y más

Microsoft Visual Studio 2005 Release Candidate disponible

En el PDC 05 celebrado en Los Angelesel pasado mes de septiembre se puso a dispo-sición de los asistentes y suscriptores a MSDNla primera Release Candidate de Visual Studio

2005. Esta versión usa la edición CTP de sep-tiembre de SQL Server 2005.

Vea toda la información sobre noticiasdesde el PDC 05 en la página 15.

Microsoft lanza WinFS Beta1

WinFS, el futuro sistema de ficherosrelacional de Windows Vista, ya está en fasebeta 1.

Desde el 29 de agosto y sorprendiendoa todos, Microsoft puso a disposición de lossuscriptores a MSDN la beta 1 de WinFS yla documentación del SDK. Según lo publi-cado hasta ahora, WinFS no formará partede la primera versión de Windows Vista ysaldrá posteriormente para instalarse por

separado. La beta 1 recién liberada funcio-na para Windows XP y requiere .NETFramework 2.0.

Según Quentin Clark, Director de lagestión del programa para el nuevo siste-ma de archivos, nos esperan múltiples betasde WinFS, si bien no aventuró una posiblefecha de salida.

Más información sobre WinFS en:http://msdn.microsoft.com/data/WinFS.

Un documento XPS es una represen-tación paginada del papel electrónico des-trito en formato XML. El formato de losdocumentos XPS es un formato abierto ymulti-plataforma. Permite a los clientes cre-ar, compartir, imprimir, firmar digitalmen-te y archivar documentos paginados fácil-mente. XPS respetará los Windows RightsManagement Services.

Los documentos XPS usan un contene-dor de ficheros que conforma el OpenPackaging Conventions. Los nuevos formatosde archivo de la próxima generación deMicrosoft Office System (Office 12), tambiénusarán Open Packaging Conventions para orga-nizar los datos dentro de los archivos, dandoa las empresas la posibilidad de gestionardocumentos Office 12 y documentos XPS dela misma forma.

XPS utiliza WinFX y el nuevo subsistemade presentación WPF (Windows PresentationFoundation) para crear una plataforma unifi-cada que simplificará las tareas de manipula-ción de documentos. Construido con un sub-conjunto de las tecnologías usadas en WPF,XPS trabaja en conjunto con el subsistema depresentación de Windows Vista

Más información en: http://www.micro-soft.com/whdc/xps

METRO ya tiene nombre comer-cial:XPS

XPS (XML Paper Specification) es la apuesta deMicrosoft para la definición y distribución dedocumentos paginados. Este formato servirá debase para la optimización de la arquitectura deimpresión que incorporará Windows Vista.

Page 9: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio
Page 10: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

La metáfora del cerdo y la gallina

Una conocida metáfora del mundo anglosajón nos habla de un apetitoso plato de hue-vos con jamón con la finalidad de distinguir el nivel de compromiso que para realizardicho plato han mantenido la gallina y el cerdo. La gallina se ha involucrado en el pro-ceso, pero su participación ha requerido de ella el mínimo de esfuerzo, ha puesto sushuevos y nada más.El cerdo en cambio ha estado auténticamente comprometido, tan-to que ha dejado la vida en el proceso.

probablemente se pavoneará en el corral y,seguramente, será alabada por su capacidad de fabri-car buenos huevos, el pobre cerdito será, como mucho,un grato recuerdo en la cabeza de quienes probaronla calidad de sus carnes. Desafortunadamente, entrelos desarrolladores de software podemos encontrarrastro de esta misma metáfora y ello quiero que noslleve a analizar un valor que considero primordialentre aquellos que se desenvuelven en una profesióncomo la nuestra, se trata del compromiso.

Quizá es que hoy me haya levantado un poco nos-tálgico y añore aquellos años en los que la gente de migeneración arrancaba los miles de proyectos individua-les (profesionales, políticos, económicos, etc.) que handado lugar a la configuración actual de nuestro país.¿Quién no estaba comprometido entonces? Compro-metido hasta los niveles del cerdo de la metáfora, dis-puestos a dejarse la piel en los proyectos hasta conseguirla finalidad que buscábamos, fuera ésta la que fuera, hacerel software más eficaz, fundar una compañía, hacer mejo-rar al país, progresar profesionalmente, etc.

Perdónenme cuantos cerdos haya en nuestro oficio,que seguro que son muchos, pero me temo que última-mente abundan más las gallinas. Vivimos un mundo enel que los intereses estrictamente individuales se super-ponen a los colectivos. Poca gente hay que sea capaz deinvolucrarse en un proyecto, con una empresa, con unasideas, con una profesión, con otras personas. Perseguimosalocadamente nuestros propios intereses y buscamos sóloel reconocimiento que la gallina persigue al poner suspropios huevos, pavonearnos en el corral.

Sin embargo, el logro de lo mejor de nosotros mis-mo sólo lo conseguimos con el compromiso a ultranza,

con el esfuerzo sin límites, con la fidelidad fuera de dudaa las personas, a los proyectos. Muchos están dispuestosa saltarse las normas morales básicas de convivencia pro-fesional sólo por el hecho de lograr el estatus de la galli-na, mientras que otros muchos cerdos pelean por sacarlas cosas adelante hasta dejarse la piel si es necesario.

Recuerdo aquellos tiempos en que uno considerabaque aquello que estaba desarrollando era parte de su cre-atividad personal, una prolongación de su propio yo, laobra de arte del artista. Y el arte no se crea a tiempo tasa-do ni pensando que es algo ajeno a nosotros. De estemodo, las cosas siempre salen mal, no funcionan de modoadecuado, se terminan tarde. La calidad de nuestro tra-bajo es directamente proporcional al compromiso quepongamos en el mismo.

Hacer software requiere compromiso. Aunque todoslos trabajos lo requieren, quizá trabajar en una cadena demontaje o vender hamburguesas en un restaurante de fastfood funcionen con solo estar involucrados con los mis-mos, pero desde luego, en el proceso de desarrollo desoftware, como en tantos otros donde la creatividad per-sonal es básica, transita una parte importante de nuestra

Antonio Quirós

dnm.opinion

<< Nuestra gallina

Antonio Quirós es redactor de dotNetManía.

Co-fundador de las revistasclippeRManía, FOXManía yAlgoritmo.Actualmente es

Director de Operaciones enAlhambra-Eidos

Los buenos desarrolladores, desde luego, son los auténticamente

comprometidos y no los levementeinvolucrados.

Page 11: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

persona. Hemos de volcarnos en ello, soñar con ellopor las noches, poner toda la carne en el asador, yaque el producto que obtenemos es una prolon-

gación de nosotros mismos, una parte trascen-dental de nuestra creatividad. ¿Cómo haceresto sin compromiso? ¿Sería posible hacer-lo involucrándonos sólo de soslayo? Yo creo

que no. Los buenos desarrolladores, desdeluego, son los auténticamente comprometi-dos y no los levemente involucrados. Se tra-ta de apasionarse con aquello que se hace, nohacerlo como una cosa más sino volcar lo másíntimo de nuestra personalidad en ello.

Pero quizá nuestro mundo occidental, rico y satis-fecho de sí mismo, deja ya poco lugar a este tipo de acti-tudes. No vivimos precisamente inmersos en una cul-tura del esfuerzo como fuente de crecimiento y autosa-tisfacción. Necesitamos toneladas de ocio, necesitamosque la sociedad cubra la mayoría de nuestras deficien-cias y nos enfadamos cuando algo tan necesario y ele-mental como el trabajo nos roba esa posición de privi-legio. Y si no, viene el estrés. Muchas veces, cuandoalguien me habla de sus problemas laborales y el estrésque le proporcionan, le contesto que para estrés el quetienen los africanos a las 6 de la tarde cuando no sabenaún si tendrán algo para cenar esa noche; lo nuestro sontonterías pequeño burguesas comparadas con los pro-blemas reales que tienen la mayor parte de los habitan-tes de este planeta. Por eso cada vez nos sacan más ven-taja los especialistas en informática de la India,Latinoamérica, etc. Ellos sí que ponen toda la carne enel asador, ya que les va la vida en ello.

A lo largo de mi historia profesional he conoci-do a muchos desarrolladores con muy distintos per-files. Por ejemplo, están aquellos que hacen softwa-re como podrían hacer churros, sin poner atenciónen ello. Si tiene que terminar el trabajo a la mitad deun proceso supercomplejo porque han quedado parair al cine, no le duelen prendas de hacerlo. Tambiénestán aquellos que dan rienda suelta a su creatividadsin orden ni concierto, es decir los que supeditan cual-

quier requisito que el software deba cumplir aaquello que ellos quieren hacer, normalmen-te enfocado a su lucimiento personal. Una cla-se especial son los funcionarios del software,

y que me perdonen los sufridos empleadospúblicos; me refiero a aquellos que construyensoftware a tiempo tasado y que, como dedican

tan poco esfuerzo al asunto, normalmente se que-dan en un nivel de mediocridad relevante. Y,

por último, se encuentran los autén-ticos profesionales, responsa-

bles, compro-metidos y apa-

sionados porsu traba-jo, inno-

vadores, rigurosos. Afortunadamente, la mayoría delos que trabajan en mi compañía son de este últimotipo y, por eso, la media de nuestros resultados es másque aceptable. El éxito en el ámbito del desarrollo desoftware está, desde luego, vinculado a la buena deter-minación de los procedimientos organizativos, almodelo de colaboración que hayamos establecido connuestros clientes, al rigor en los controles de calidad;pero también, sin duda, al perfil humano de los agen-tes de dicho proceso: los desarrolladores de softwa-re. Una empresa perfectamente organizada, con unamodélica gestión de sus proyectos y con unos recur-sos humanos de bajo nivel de compromiso, segura-mente deberá cerrar en breve.

Para terminar me gustaría hacer una última refle-xión para que no se confundan las cosas. Reivindicaraquí la figura del cerdo y su nivel de compromiso noimplica una llamada a la conformidad. En Animal Farm,la mítica obra de George Orwell, son los cerdos quie-nes lideran la rebelión de los animales en la granja.Evidentemente, estar comprometido con tu trabajo, nosupone la ciega sumisión a quienes dirigen tus designioslaborales. Evidentemente, todo el mundo tiene dere-cho a rebelarse contra la injusticia, en la conciencia decada cual quedará marcada la diferencia entre hasta quépunto la rebelión atenta contra tu capacidad de com-promiso y si está justificada o sólo responde a los tur-bios ideales de la gallina.

dotN

etM

anía

<<

11

dnm.opinion<<

No vivimos precisamente inmersos enuna cultura del esfuerzo como fuente

de crecimiento y autosatisfacción

NOTA FINAL

Que me disculpen las pobres gallinas porel vilipendio fabulístico a que las someto eneste artículo. Sólo he querido seguir la viejacostumbre del griego Esopo para hablar deaspectos éticos de los humanos asociándolesa los animales y su comportamiento. Seguroque la mayoría de las gallinas reales ponenmás compromiso en su trabajo del que dis-ponen la mayoría de las personas de quieneshe hablado usándolas como ejemplo.

][

Page 12: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Entrevista a Jeff ProsiseUno de los grandes promotores de la tecnología Microsoft desde sus mismos inicios,Jeff Prosise, dio una excelente conferencia sobre seguridad en ASP.NET en Tech-Ed2005 en Ámsterdam.Aprovechamos para entrevistarlo poco después y recordarle susprimeros trabajos en español,escribiendo sobre el lenguaje Ensamblador para la revis-ta Microsoft para Programadores, allá en el año 93.

al ver uno de estos artículos tan anti-guos?

Me encanta, ¡imagínate! He estado colaborandocon artículos desde 1986. Puede decirse que soy unade esas “viejas glorias”. En el artículo que me comen-tas ya tenía cierta experiencia. Con decirte que mi pri-mer ordenador fue un Commodore 64…

Me acuerdo de ellos. El mío fue un Apple… enfin. Volviendo al presente, ¿crees que tiene sentidohoy en día llegar a conocer los entresijos de funcio-namiento del software hasta ese nivel?

¿Sabes qué? Siempre tiene sentido conocer las pla-taformas sobre las que estás trabajando. Recuerdo queme gustaba el Ensamblador y los programadores deensamblador porque ellos realmente sabían cómo fun-ciona un ordenador. Sin embargo, ya no es esencialen absoluto conocer ensamblador ni siquiera ningúnotro lenguaje de bajo nivel, como C/C++ para ser unexcelente programador. Podríamos decir que es bue-no conocerlo, por supuesto, pero ¿lo necesitas en elestado de las plataformas hoy? Realmente, no.

¿Existen departamentos ocupados de la progra-mación en ensamblador en Microsoft? Te lo digo por-que leí que Windows Vista lleva millones de líneasescritas así o en muy bajo nivel (de los más de 80 millo-nes de líneas de código fuente total)…

No existe exactamente un grupo de trabajo enEnsamblador que yo sepa, pero sí que existen variosequipos que trabajan específicamente con el Kernelde Windows, y eso supone trabajar a muy bajo nivel.De todas formas, aunque en Vista ciertas rutinas vanefectivamente en ensamblador, son mínimas.Probablemente la información a la que te refieres esque existen muchas líneas a nivel de kernel escritas enC. Ni siquiera en C++. Probablemente, las líneas en

Ensamblador no superen en millón en el total de cer-ca de 100 millones que es lo que finalmente va a lle-var el sistema operativo completo.

¿Crees que es necesario también un cierto cono-cimiento interno del sistema de archivos, ahora queVista nos propone uno totalmente nuevo, con capa-cidad transaccional, y muchas otras cosas?

Creo que es la misma situación que comentába-mos antes. La mayoría de los programadores no lonecesitan ya. Antes, sí, pero ahora, creo que no. Salvoque produzcas software del tipo de defragmentado-res o compresores, no creo que eso sea realmente unanecesidad. Además el API de WinFX suministrarátoda una serie de clases y funciones para el manejo delos entresijos del sistema de archivos y de forma admi-nistrada, con lo que será menos proclive a errores queantes.

Analizando los escritos de los que fuisteis pione-ros en la divulgación de los sistemas y programaciónpara Windows, como Charles Petzold, PaulDiLascia, Jeffrey Richter, y muchos otros, pareceque la tendencia ha sido de pasar de los entresijos delsistema a los entresijos de la plataforma. Al conjuntoBCL (Basic Class Libraries) de .NET Framework.¿Tienes esa misma sensación?

Es absolutamente cierto. Cuando ahora investi-gamos las partes internas de la plataforma, estamosmirando, en realidad, características de funciona-miento del CLR o de las clases base de .NET. Aunquetodavía existe mucha gente escribiendo código noadministrado…especialmente en dos países: la Indiay China.

Un comentario acerca del debate entre lenguajes.Yo mismo prefiero el uso de C# porque me parecemás elegante y más escueto que Visual Basic .NET,

Marino Posadas

dnm.directo.entrevistas

Marino Posadas esasesor técnico y

redactor dedotNetManía, MVP de

C# y formador deAlhambra-Eidos

<< ¿Qué sensación tienes

Page 13: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

pero, tengo que reconocer –y así lo hagoen mis clases– que, ahora, Visual Basic.NET es un cliente de primera catego-ría, al mismo nivel que pueda estar cual-quier otro lenguaje y puedes hacer uncódigo excelente utilizando VB.NETya que cumple con todos los principiosestablecidos por los teóricos de la OOP(no soportaba sobrecarga de operado-res, pero lo va hacer en la versión 2005).¿Cuál es tu opinión?

Absolutamente de acuerdo. Estasigue siendo una pregunta clave, inclu-so hoy en día. En mi empresa, la mayo-ría de las consultorías van relacionadascon código en C#, pero creo que larazón es que la mayoría de los progra-madores que lo hacen, vienen de C++.Creo que la diferencia era realmentegrande antes, sobre todo. Muchas cosasque se podían hacer en C++ no se podí-an hacer en VB 6.0, por ejemplo. Otracuestión es, cómo los lenguajes son per-cibidos por el colectivo general de pro-gramadores. Por ejemplo, en EE.UU.los programadores de C# tienen –demedia– algo más de salario que los pro-gramadores de VB.NET, aunque nocreo que exista una justificación paraello más allá que la percepción que setenga de esos lenguajes.

No obstante, sí tengo que recono-cer que –en la propia Microsoft– C# seconoce como la “lingua franca” de.NET y la gran mayoría del código queves por allí o en los ejemplos iniciales,pruebas, etc., es en C#. Aunque ahorahay incluso sitios Web que hacen unaexcelente labor de traducción de len-guajes. De hecho yo lo escribo en C# yalguna vez he utilizado esos sitios… Alfinal la mejor elección depende de tupropia experiencia personal.

¿Y en qué está hecho Windows Vistaen su mayoría? ¿En C++ no adminis-trado, en C++ administrado o en C#?

Realmente no lo sé con exactitud. Síque puedo decirte que hay mucha par-te del código que es administrada, porlo que entiendo que habrá sido hechaen C# por razones de eficacia.

Y desde el punto de vista de la facili-dad de programación, ¿piensas que Vista(o mejor, el API de WinFX) va a ser másfácil de programar que el API de Win32?

Mi impresión es que va a ser más fácilde programar que las versiones anterio-res de Windows. Aunque no soy parte delequipo de desarrollo de Vista, sí puedogarantizarte, que muchas de las API seránadministradas, como decía antes, y portanto admitirán un abordaje mucho mássimple que las API anteriores. De hecho,cualquiera que haya visto cómo se pro-gramaba una ventana a partir del libro dePetzold “Programming Windows”, sabea lo que me refiero. Por ejemplo, escribir

código para Avalon, será similar a escri-bir código para Windows en la actualidad.

Eso es buena noticia, porque yo mis-mo he jugado algo con el modelo deAvalon y XAML y tengo la percepciónde que mucha gente lo va a encontrardifícil, no ya porque el modelo de pro-gramación no sea claro, o las herra-mientas sencillas, sino porque muy pocagente está acostumbrada a programarentornos 3D.

Eso es cierto. En cuanto al modelo,no veo que vaya a resultar inmediatodesde el principio para la mayoría deprogramadores. Yo solía hacer bastanteprogramación en OpenGL, y tambiénhe hecho cosas con Direct3D. Y eso nova a ser evidente desde el principio, des-de luego. Se necesita un conocimientodel medio que se programa que costaráal principio, desde luego. ¿Lo veremosen el futuro inmediato? Creo que, sinduda alguna, porque es más atractivo,más agradable, más legible y porquetiende a dar un paso más, simulando elmundo real, que es, a fin de cuentas, elobjetivo de la informática.

A propósito de las API enWindows Vista, todavía hay muchagente que usa llamadas a las API des-de .NET para toda una serie de labo-res. ¿Recomiendas que se utilicen? Merefiero a ambos sistemas.

Sólo si no te queda más remedio. Enla nueva versión, el número de funcio-nes de la plataforma se va a incremen-tar, justamente, para hacer casi innece-sarias las llamadas a las API del sistema.

...tengo que reconocer que –en la propia Microsoft–C# se conoce como la “lingua franca” de .NET y la gran mayoría del código que ves por allí o en los

ejemplos iniciales, pruebas, etc., es en C#do

tNet

Man

ía<<

13

dnm.directo.entrevistas<<

Jeff Prosise y Marino Posadas

Page 14: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Pero, todavía habrá situaciones muy espe-ciales donde el uso de las API seguirá sien-do necesario. Y eso es debido a que en elfuturo se podrá decir que todas las APIdel sistema serán administradas, así quellegará un momento en el que no tendrásentido llamar a nada no administrado.No existirá, desde el punto de vista de lainmensa mayoría de los desarrolladores.Es la forma en la que Windows se va aprogramar de ahora en adelante.

¿Incluso para ciertas API de opti-mización de gráficos como BitBlt()?

Incluso en ese caso. En .NET la cla-se existente, Graphics, seguirá potencián-dose en funcionalidad, y no será necesa-rio conocer los entresijos de la memoriagráfica o del GDI+ para programar esascosas. Necesitamos ese tipo de abstrac-ciones para hacer el software menos com-plejo y más comprensible por los demás.El camino hacia el código más seguro del

que tenemos en la actualidad, pasa por esetipo de abstracciones.

El último libro tuyo que he visto eraun grueso volumen titulado “Pro-gramming the .NET Framework”. ¿Esésa tu última obra?

Probablemente sea mi obra última.Lo digo porque no estoy dispuesto a sacri-ficar durante casi 12 meses toda mi vidafamiliar para rehacer algo como eso o paraescribir algo de ese volumen. Además, te

confesaré que hace 15 años solía ir muchoa las librerías a ver las novedades sobreInformática, pero ahora, me deprimo alverlo. Hay tantas obras que no debierande haber sido publicadas, que prefiero bus-car otras fuentes, o fiarme de recomen-daciones. Ahora, sólo me fío de los auto-res que conozco, si me hablas de DonBox, o Jeffrey Richter pues sé que pue-do confiar en lo que dicen, que va a serinteresante, etc.

Es difícil hoy día hacer un libro deentidad. Recuerdo a Peter Norton, consu “Programación en Ensamblador”,que todavía conservo, o a Ray Duncan,o al propio Charles Petzold, quecomentábamos antes…

Conozco a todos ellos y son excelen-tes como personas y como autores.Charles Petzold está escribiendo un nue-vo libro. Muy interesante, muy distintode todo lo que él ha hecho con anteriori-dad. De hecho, tengo un borrador en casaque estoy revisando para él. Y, aunque noquiere que diga nada todavía sobre el tipode contenido, puedo anticipar que va a serfantástico. Así que, puedes recomendar atus lectores que permanezcan atentos…

Y tu actual línea de trabajo, sinembargo, se ha vinculado directamen-te a ASP.NET, por lo que he podido veren estas conferencias.

Así es, y por dos razones. La primera,que la programación Web es uno de losmodelos programáticos más importantesen la actualidad. Hace unos cuantos años,cuando comencé a interesarme por la pro-gramación Web, investigué un poco sobreASP. Y me dije: “Esto no me gusta. Escomo volver en el tiempo 10 años atrás”.Pero, cuando apareció ASP.NET, me inte-resó de inmediato. Por primera vez podí-as utilizar código de verdad, utilizar todaslas buenas prácticas recomendadas, con-tar con depurador auténtico, etc. Lasegunda razón, es porque en la empresadonde trabajo, Wintellect, necesitába-mos a alguien que fuera “el especialista enASP.NET”. Y me presenté voluntariopara esa tarea.

Y eso es todavía mucho más evidenteen la nueva versión 2.0. Hay tantas posi-bilidades, tipos de controles de servidor,un modelo organizativo de la Web tan cla-ro y fiable, que para mí es, con mucho, elmejor sistema para construir sitios Weben la actualidad. De hecho, puedo afirmarque la misma aplicación incluso compa-rada con la versión 1.1 de ASP.NET, va arequerir alrededor de la mitad del códigodel que era necesario en esa versión.

Bueno, Jeff, ha sido un placer.Muchas gracias por tu visión del soft-ware de hoy. Estoy seguro de que a loslectores también les gustará.

El placer es mío. No dejéis demandarme un ejemplar cuando estéimpresa.

dotN

etM

anía

<<

14

dnm.directo.entrevistas<<

...todavía habrá situaciones muy especiales donde el uso de las API seguirá siendo necesario.Y eso es debido a que en el futuro se podrá decir que todas las API del

sistema serán administradas, así que llegará un momentoen el que no tendrá sentido llamar a nada no administrado

Marino Posadas y Jeff Prosise en un momento de la entrevista

Page 15: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

dotN

etM

anía

<<

15

PDC 2005

dnm.directo.eventos<<

en esta vida, uno no deja de sor-prenderse. Y mucho menos todavía si tiene comoprofesión algo relacionado con la informática o lasciencias de la computación. Y esta sensación de sor-presa por un lado, estupefacción por el otro e ilusiónpor todos, es lo que hemos experimentado los asis-tentes al PDC·05 celebrado del 13 al 16 del pasadomes de septiembre en Los Ángeles.

Marino Posadas nos hablaba en el número ante-rior acerca del Tech·Ed 05 y lo calificaba como de madu-rez, un Tech·Ed en el que pese a que las versiones fina-les de Visual Studio 2005 y SQL Server 2005 todavíano estaban disponibles, las CTP y Betas existentes yapermitían evaluar estos productos con conocimiento decausa. Así, dejábamos atrás el Tech·Ed 05 que él deno-minaba de forma muy adecuada como de transición.Pero este PDC nos devuelve a un punto de partida; unpunto de partida en un camino hacia finales de 2006,principios de 2007 que culminará con las nuevas ver-siones de cliente y de servidor de Windows, nuevas ver-siones de toda la familia Office System, una nueva pla-taforma de desarrollo denominada WinFX –que empe-zamos a desgranar en este número y seguiremos enmeses sucesivos– del que se que incluye elementos comoWindows Presentation Foundation (Avalon) , WindowsCommunications Foundation (Indigo), Windows WorkflowFoundation, etc. a la cuál se unirá posteriormente WinFS.A todas estas novedades tenemos que añadir tambiénnuevos miembros en la familia como los tres nuevosproductos Microsoft Expression (Graphic Designer,Interactive Designer y Web Designer) y las nuevas versio-nes de servidor de viejos miembros de la familia comoExcel o Infopath.

Las cifras del PDC·05: todas las entradas vendi-das y alrededor de unos ocho mil desarrolladores ávi-dos de novedades en el Convention Center de LosÁngeles. Las impresiones: una organización a la altu-ra de otros de los grandes eventos de Microsoft comoel Tech·Ed o el IT-Forum.

Pero la mayor impresión una vez transcurrido elevento es la de cambio, de novedades, de mejoras.Durante la keynote, Bill Gates ya introdujo parte deestas novedades y sobre todo explicó cómo él consi-dera estos cambios y novedades como a una de lasrevoluciones más grande dentro del mundo del soft-ware. Posteriormente Jim Alchin dio una de las cam-panadas del evento al anunciar en una de sus demos-

traciones la posibilidad de comprar un dispositivomóvil con Windows Mobile 2005 por un precio de149$ para parte de los asistentes al PDC. El dispo-sitivo en cuestión estaba valorado en más de 1000$y no hace falta señalar el gran revuelo provocado porel anuncio. Lástima que sólo uno de los integrantesde la representación española se pudiera hacer conel dispositivo.

Como las novedades son muchas y muy variadas,dedicaremos el valioso recurso que son estas páginasa desgranar algunas de estas novedades.

<< La verdad es que en

Iván González

Bill Gates y Eric Rudder durante la keynote inicial

Iván Gonzálezes MVP en Windows Server–IIS.

Es webmaster deweblogs.golemproject.com e imparte

conferencias y cursos paraTechNet,CampusMVP y laUniversidad de A Coruña

Page 16: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Microsoft Windows VistaA pesar de tener ya en nuestras

manos una Beta 1 antes de llegar a LosÁngeles y de haber leído ya páginas ypáginas sobre Windows Vista, aún nosquedaban novedades por descubrir.Microsoft proporcionó a los asistentesuna nueva CTP, a medio camino entreBeta 1 y Beta 2, con novedades intere-santes como una funcionalidad llama-da Superfetch que Jim Alchin presentódurante la primera keynote. Para intro-ducir su presentación de Superfetch,bromeó preguntando a los asistentes sihabían notado que sus sistemas conWindows alguna vez se les habían idoralentizando con el uso y el paso deltiempo. Superfetch está pensada paraoptimizar el funcionamiento del siste-ma para mejorar su rendimiento con elpaso del tiempo. Para ello monitorizael uso de datos y aplicaciones que elusuario a realizado en los últimos mesespara precargar esos elementos en unacaché en memoria.

Jim incluso fue más allá demos-trando cómo se podía utilizar un lápizUSB como memoria para Superfetch,aumentando la memoria virtual del sis-tema y su rendimiento. Luego retiródicho lápiz demostrando que el siste-ma es capaz de seguir funcionando deforma estable. Respecto a la seguridad,recalcó que las páginas de memoriaalmacenada en el lápiz se almacenan deforma encriptada.

Más novedades sobre WindowsVista:• User Mode Driver Framework nos

permite ejecutar drivers en modousuario, evitando introducir códigoque se ejecute en modo kernel, ais-lándolos del resto de los drivers y

por lo tanto disminuyen el riesgo delos temidos pantallazos azules.

• Respecto a la seguridad, los driversque se ejecuten en modo Kerneldeberán estar firmados digitalmen-te y estarán de algún modo aislados.La funcionalidad UAP (User AccountProtection) pretende evitar la situa-ción actual en la que los desarro-lladores se ven obligados a traba-jar con cuentas de Administrador.En Windows Vista, las cuentas pordefecto tendrán permisos deUsuario simplemente, pudiéndoseelevar estos permisos para realizartareas particulares sin necesidad deiniciar sesión como otro usuariocon mayores privilegios o trabajarsiempre como Administrador paraevitar problemas.

• Muchas novedades en cuanto a ser-vicios como el visor de sucesos, queahora almacena los eventos en for-mato XML, un nuevo modelo decontadores de rendimiento, unanueva versión de la MMC (3.0) queposibilita escribir complementos deforma más sencilla con .NET y unlargo etc.

Microsoft Expression

Esta nueva gama de productos pre-tende mejorar el proceso de desarrollodel software facilitando la integración dediseñadores gráficos y expertos en inte-racción con el usuario dentro de los equi-pos de desarrollo. La introducción deExpression encaja con la importanciaque Microsoft está dando una vez más alos interfaces de usuarios, la interaccióncon el usuario y todo el trabajo que estárealizando para con ello en WPF(Windows Presentation Foundation).Microsoft Expression se podría denomi-nar una suite de herramientas que se com-pone de varios productos:• Microsoft Expression Graphic Designer

(Acrylic) es un editor de imágenes quepor primera vez fusiona el mundo delas imágenes vectoriales y el de las imá-genes basadas en píxeles. Para aque-llos que conozcan Adobe Photoshopy Adobe Illustrator, Acrylic fusionaestos dos mundos dentro del diseñoen una sola herramienta.

• Microsoft Expression InteractiveDesigner (Sparkle) nos permite cre-ar interfaces para Avalon en los quepodemos integrar objetos 3D, movi-miento de objetos, su comporta-miento, etc. Sparkle producirá archi-vos XAML que posteriormentepodremos incluir dentro de nuestrosproyectos en Visual Studio.

• Microsoft Expression Web Designer(Quartz) es un editor que se utilizarápara el diseño de aplicaciones Web.Nos permitirá diseñar nuestras pági-nas, desde el aspecto gráfico a la gene-ración del código HTML paramaquetar la página. Quartz hace unuso intenso de los estándares CSS para

dotN

etM

anía

<<

16

dnm.directo.eventos<<

Un momento de la keynote a la que asistieron alrededor de ocho mil personas

El Convention Center de Los Ángeles acogió a los asistentes al PDC·05

Page 17: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

dar formato a las páginas e incorporaun editor de estas hojas de estilo.

Por el momento sólo tenemos dis-ponible para descargar y evaluar Acrylicen http://www.microsoft.com/expression.

Windows WorkflowFoundation

La posibilidad de implementar flujosde trabajo (Workflows) dentro de nuestrasaplicaciones va a ser posible sin necesi-dad de usar BizTalk. WWF forma partede WinFX y nos proporciona la posibi-lidad de implementar workflows huma-nos y de procesos internos de aplicacio-nes. Está plenamente integrado en VisualStudio (es un nuevo tipo de ficheros) yde forma gráfica, exactamente igual queBizTalk, podemos definir workflows queuna vez compilados se ejecutarán dentrode nuestras aplicación. Pueden exten-derse mediante actividades, depurarsedentro del entorno y compilarse enensamblados que se apoyarán en las libre-rías del workflow para su ejecución.Quede claro que no es un servicio, es lapropia aplicación la que invoca su eje-cución apoyándose en las librerías deWinFX para workflow. Más informaciónen http://msdn.microsoft.com/windowsvis-ta/building/workflow/default.aspx.

AtlasAtlas es el nombre del Framework

que Microsoft está preparando paradesarrollar aplicaciones estilo Ajax(Asynchronous Javascript + XML). El con-cepto de aplicaciones Ajax podemosconsiderar que fue introducido porMicrosoft en Exchange Outlook WebAccess. Posteriormente, el modelo se hapopularizado a través de algunos de lossitios de Google como GMail o GoogleMaps y también de Microsoft comoMSN Virtual Hearth o Hotmail. Hoyen día, el desarrollo de aplicaciones Ajaxes relativamente complejo y en princi-pio ni ASP.NET, ni Visual Studio 2005aportan nada al desarrollador de apli-caciones Ajax. Atlas viene a cubrir estehueco y nos permite crear aplicacionesWeb con interfaces de usuarios con unmejor aspecto y mayor usabilidad. Másinformación en http://atlas.asp.net

WinFS

Su nombre sonó como uno de lospilares de Windows Vista junto conAvalon e Indigo hasta que Microsofthizo que se “cayese” de los planes. Haceunas semanas, cuando ya mucha gentelo daba por perdido, Microsoft sor-prendió a todo el mundo liberando laprimera Beta. Ahora los planes oficialesson liberar WinFS como un compo-nente añadido un tiempo después deWindows Vista. También se baraja laposibilidad de que aparezca una versiónpara Windows XP como en el caso deAvalon e Indigo.

Al instalar WinFS veremos un ele-mento Store como si fuese una nuevaunidad al acceder al explorador de archi-vos. Navegando podemos observar losdiferentes elementos (archivos) de dife-rentes tipos (imágenes, contactos, etc.)según el esquema de WinFS.

El objetivo de WinFS es mejorar lagestión de la información almacenadadentro de nuestros discos duros. Es un sis-tema de almacenamiento unificado cons-truido sobre NTFS. De hecho, los pila-res de WinFS son una base de datos rela-cional, NTFS y el propio CLR de .NET.Sobre estos pilares se encuentran los items(elementos almacenados, lo que serían los“archivos” de WinFS) junto con sus aso-ciaciones y extensiones. Podríamos hacerun símil entre los items y las asociacionescon los archivos y las carpetas.

Sobre estos elementos básicos deWinFS dispondremos de una serie deesquemas XML proporcionados porMicrosoft que podrá ser extendido porterceros. Así tendremos esquemas paradefinir tipos de items o elementoscomo correos, tareas, documentos,

etc. Acompañando estos esquemasestarán los servicios de WinFS, agru-pados en tres grandes categorías: sin-cronización, operaciones (backup,antivirus, etc.) y servicios de ficheros(gestor de metadatos, seguridad, etc.).De nuevo resaltar que el modelo es

extensible, pudiendo desa-rrollar nuestros propios ser-vicios de WinFS.

Obviamente, dispondre-mos de acceso a WinFS desdelas antiguas API. Resaltamosde nuevo que los archivos per-manecerán en NTFS y seránlos elementos o items (infor-mación como documentos,correos, etc., que disponen deun esquema que los define) losque pasarán a formar parte delalmacén de WinFS.

dotN

etM

anía

<<

17

dnm.directo.eventos<<

Figura 1. Los stores de WinFS se integrandentro del shell de Windows

Figura 2.Arquitectura deWinFS

Visual Studio 2005 alcanza el estado de Release Candidate y camina

hacia la versión final mientras Windows Vista lo hace hacia Beta 2;

ambos con su meta puesta en noviembre

Page 18: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Microsoft Office System 12

La familia de productos de Microsoft Office Systempresenta un gran número de novedades para su nuevaversión. Steven Sinofsky presentó en la segunda keyno-te algunas de estas novedades. Una de las conclusionesque pudimos sacar de su presentación fue el papel tanrelevante que ha tomado SharePoint dentro del con-junto Office System. SharePoint sigue siendo parte fun-damental para escenarios de trabajo en equipo, y se aña-den funcionalidades de Business Intelligence, ContentManagement y la posibilidad de enlazar Workflows dise-ñados con Windows Workflow Foundations a tipos dedocumentos de SharePoint, con lo cual los Workflowsdocumentales humanos están servidos en bandeja encombinación con InfoPath.

Precisamente en InfoPath aparece una de lasnovedades más importantes: Forms Server que per-mite exponer formularios de Infopath a través de laWeb de forma automática. Esto responde a una dela quejas más importante formulada por los usuariossobre Infopath, y es la necesidad en la versión actualde disponer de una versión completa de Infopathsimplemente para cubrir los formularios. Ahorapodremos publicarlos como un formulario Web apro-vechando de forma automática un gran subconjun-to de las funcionalidades de InfoPath como la vali-dación automática, etc.

Word, que algunos creíamos que ya no podíadar mucho más de sí, resultó ser también una de lasgrandes sorpresas, con muchas novedades. En cuan-to al soporte nativo de XML, una de estas noveda-des es la posibilidad de utilizar XML definido porel usuario sin necesidad de especificar un esquema,es decir, sólo mapeando “controles” del documen-to con un documento XML. Estos controles sontambién un concepto nuevo, y permiten definirentradas de información en el documento (al igualque en la versión actual de Office) que luego sonmapeados con un esquema XML o directamentecon un documento XML. La novedad es que ya no

afectan al formato del documento, es decir, no apa-recen al imprimirse, etc.

Otra novedad es que pueden crearse grupos decontroles para bloquearlos como una unidad única,por ejemplo, un trozo del documento que represen-te los datos de una persona (nombre, apellidos, etc)podrían constituir un bloque indivisible que no pue-de editarse de forma aislada. Además, podemos salvarlos grupos como bloques para reutilizarlos en otrosdocumentos. Básicamente estamos reutilizando tro-zos de un documento XML.

Otro concepto nuevo y bastante importante esel Office XML Data Store. Si abrimos el ficheroOffice 12 como ZIP (recordemos que está en for-mato OPC), encontraremos una carpeta llamadaDataStore que contiene un fichero XML con losdatos del documento. Se ha separado completa-mente la representación visual y los datos que con-tiene el documento. Esto ofrece numerosas posibi-lidades, desde generar informes en servidor paraOffice simplemente editando este fichero XML has-ta extraer información de un documento de formasencilla. Todo esto, obviamente utilizando losnamespaces para trabajar con documentos Office 12que vienen dentro de WinFX.

La separación entre la vista (los controles paraser más exactos) y el Data Store se realiza a travésde mapeos XML. Esto nos permite tener diferen-tes documentos Office 12 asociados a la mismainformación, es decir, podremos recoger o visuali-zar la misma información desde Word, Excel,SharePoint, Infopath, etc, etc. De nuevo, dejemoscorrer nuestra imaginación para ver la cantidad deposibilidades que ofrece.

La recomendación para la programación de lógi-ca cliente era, y sigue siendo, atacar a los datos direc-tamente, lo cual nos abstrae de la visualización y sim-plifica el trabajo. Es el concepto de DataIsland quetenemos en el VSTO actual para Excel, pero mejo-rado y extendido al resto de programas de la suite deOffice 12.

En cuanto a la lógica de servidor podremos utili-zar WinFX para acceder al documento. La genera-ción de documentos Office en servidor, por ejemploen una aplicación Web, se hace ahora de forma extre-madamente sencilla utilizando solo un par de clasesde WinFX para el manejo de paquetes.

dotN

etM

anía

<<

18

dnm.directo.eventos<<

El proyecto LINQ modificará el modelo de la capa de acceso a datos tal como lo

conocemos hoy en día.

Clemens Vaster,Anders Hejlsberg y Thomas Murphy en unamesa redonda sobre LINQ

Page 19: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Visual Studio Tools for Office v3

Cuando VSTO 2005 (v2.0) aún no ha visto la luz,Andrew Whitechapel presentó una versión muy preli-minar de lo que nos depara VSTO v3.0, versión queestará alineada con Office 12. Durante su presentación,se ha dado un repaso a todas las opciones de extensibili-dad que existirán en Office 12: Managed Add-Ins, CustomTask Panes, Ribbon Extensibility (la nueva barra superiorde Office 12) y el formato Office Open XML.

Un cambio muy importante es que el soporte deAdd-Ins se amplía no sólo a Outlook, Word, Excel,PowerPoint, Access e InfoPath, sino que Visio,Project, Publisher y FrontPage también incorpora-rán esta posibilidad.

En VSTO v3.0 podremos desarrollar nuevos CustomTasks Panes. Los Custom Taks Panes son similares a lospaneles de tareas pero a nivel de aplicación. Esto quieredecir que además de los paneles de acciones (Action Panels)que ya teníamos y estaban asociados a documentos, aho-ra tenemos la posibilidad de desarrollar paneles asocia-dos y cargados junto a la aplicación (desde Word hastaInfoPath). Esto abre cantidad de puertas para la exten-sibilidad de Office. Por ejemplo, al abrir Excel, nos pue-de aparecer una barra de herramientas que nos permitaconectarnos a nuestra aplicación y bajarnos informacióna Excel. Ojo, esto también lo podremos hacer ahora conVSTO 2005, pero el Add-In iba asociado al documento,es decir, aparecía al abrir el documento concreto, noExcel.

Los ribbons forman parte de la nueva barra superiorde Office 12 contienen tabs, chunks (barras de controles)y controles. VSTO v3.0 nos permitirá crear nuevos rib-bons a través de Ribbon Extensibility (RibbonX), un asis-tente que nos crea el código por defecto, implementan-do los interfaces necesarios, y un archivo de configura-ción XML que contiene la descripción del Tab, chunks ycontroles que queremos añadir.

Visual Studio Tools for ApplicationsVSTA es la nueva versión de VBA (Visual Basic for

Applications) pero ahora en .NET. Nos permitirá inte-grar el entorno de desarrollo de Visual Studio dentro denuestras propias aplicaciones, de igual forma que lo haceOffice 12. Sólo tenemos que exponer nuestro modelo deobjetos a VSTA y esto permitirá a los clientes finales per-

sonalizar y extender nuestras aplicaciones. Durante lasconferencias, pudimos observar una demostración decómo Autodesk ya está integrando VSTA como sustitu-to de VBA en las próximas versiones de Autocad.

LINQ (The .NET Language IntegratedQuery Project)

Anders Hejlsberg formuló durante la keynote unapregunta que lejos de ser absurda, desvela un problemaque padecen todos los desarrolladores: “¿Cuántos de voso-tros desarrolláis aplicaciones que acceden a fuentes de datos,como bases de datos o documentos XML?”. La respuesta estáclara: entre muchos y muchísimos más. Anders se refi-rió entonces al esfuerzo y a la cantidad de código que losdesarrolladores emplean hoy en día creando sus capas deacceso a datos. Código que normalmente actúa como unadaptador entre el mundo relacional de las bases de datosy el mundo objetual de la POO.

Acto seguido hizo presentación de lo que podría seruna de las novedades más importantes y mejor guarda-das de este PDC. LINQ es el nombre de un proyectodirigido por el propio Anders Hejlsberg y Don Box(ambos autores de sus especificaciones) que pretende eli-minar la barrera existente entre estos dos mundos, el rela-cional y el objetual. LINQ implica una serie de noveda-des en los lenguajes (C#, VB, etc.) que permitirán eli-minar los famosos comandos y sus consultas almacena-das como strings sin fuerte tipado por un modelo máslimpio, en el cual las tablas de una base de datos o undocumento XML puede ser visto como colecciones sobrelas que podemos escribir expresiones de consulta direc-tamente en el lenguaje (C#, VB, etc.)

LINQ se descompone a su vez en tres grandes blo-ques: uno que nos permite realizar operaciones deconsulta sobre colecciones de objetos en memoria;otro sobre tablas en una base de datos (DLINQ); yun tercero sobre documentos XML (XLINQ).

dotN

etM

anía

<<

19

dnm.directo.eventos<<

Figura 3. Ejemplo de los Ribbons en lainterfaz de Word

Figura 4.Arquitectura conceptual de LINQ

Page 20: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

LINQ implica también una serie deinnovaciones en los lenguajes, como lasexpresiones Lambda, la inferencia de tipos,los inicializadotes de objetos, etc.

Veamos un pequeño ejemplo,DLINQ aparece entre la aplicación ySQL Server y básicamente se encar-ga de transformar las consultasDLINQ a consultas SQL y las trans-formaciones entre objetos y resulta-dos de la base de datos.

En una demo hemos visto comomediante atributos (TableAttribute yColumnAttribute) asociamos tablas ycolumnas de la base de datos a clases ypropiedades del código:

Otra clase de tipo DataContext queencapsula a la base de datos nos permi-te definir la tabla como una propiedadde la misma de tipo colección:

Para no tener que generar todas estasclases de forma manual, DLINQ nos ofre-ce una forma automática de generar lasclases que representa a la base de datos enel mundo objetual.

Una vez tenemos esto, podemos lan-zar una consulta de forma muy sencilla:

Otra sintaxis también válida y qui-zás más legible es la siguiente:

DLINQ nos permite no sólo hacerconsultas, sino todas aquellas operacio-nes CRUD sobre la base de datos¿Cómo añadimos una fila a la tabla?:

¿Qué soporta la sintaxis de LINQ?Pues desde lo que hemos visto hasta orderby, group by, having (de forma compues-ta anidando cláusulas where), etc. En elcaso de group by, el resultado devueltoestá anidado en un árbol, así que tenemosjerarquía de objetos, no una tabla planacomo tendríamos en SQL. Esto da unapotencia tremenda a LINQ, que permi-te expresar resultados que antes no podrí-amos tener con SQL.

Otra cosa curiosa es lo que se llamaDeferred Loading. Cada vez que accede-mos al objeto query, sólo trae los camposy la información necesaria. En caso deacceder más adelante a campos de la con-sulta que no se habían cargado, se volve-rá a lanzar la consulta para traer el restode los campos. Esto presenta numerosasventajas de rendimiento, pero en algunoscasos es algo ineficiente. Including per-mite hacer la carga inmediata.

Esto permite que si estamos pidien-do la tabla Clientes y sus Pedidos, pode-mos traer a todos los clientes y sus pedi-dos a medida que vayan siendo accedi-dos o traer todos los clientes y sus pedi-dos en una única vez.

Veamos ahora el caso de las actualiza-ciones. Sólo tenemos que modificar losvalores de la instancia de una clase querepresente a la fila devuelta en un consu-la, y con db.SubmitChanges() volcamos loscambios de vuelta a la base de datos:

En el caso de acceso a objetos oXML, tanto en LINQ como XLINQ,el funcionamiento es el mismo.

Después de esta presentación del pro-yecto LINQ, se puede entender cómoMicrosoft decidió paralizar el proyectoObjectSpaces1 que básicamente intro-ducía una nueva librería de clases en for-ma de maleador Objeto/Relacional poresta nueva aproximación completamenteintegrada dentro del propio lenguaje deprogramación. Más información en:http://msdn.microsoft.com/netframework/future/linq.

Asistentes a la galaSobre la alfombra roja del Convention

Center de Los Ángeles pudimos ver des-filar a muchas de las grandes estrellas. BillGates, actuando como maestro de cere-monias abrió el espectáculo dando luegopaso al elenco de conferenciantes, quecontaba en esta edición con nombres dela talla de Anders Hejlsberg, Don Box,Scott Guthrie, etc.

La pequeña representación españolaestaba compuesta por David Carmona yAurelio Porras (evangelistas en MicrosoftIbérica), José Murillo, Pablo Peláez(Microsoft Regional Director en España),Unai Zorrilla, Juan Lastra (Investrónica),Mónica García (Ketchum, la agencia deprensa de Microsoft) y un servidor pordotNetManía.

That Wasn't All,Folks!Mucho y muy nuevo ha sido lo que

hemos podido ver en este PDC·2005. Ymuchas son las novedades sobre las queindagar y profundizar. Ahora queda unlargo camino por recorrer, en el queMicrosoft irá desarrollando y perfilandoestas novedades y nosotros, los desarro-lladores, tendremos que ir poniéndonosal día. Esperamos que dotNetManía seade ayuda para vosotros en esta tarea.¡Ahh!, por cierto, se me olvidaba…http://www.microsoft.com/max.

Desde Los Ángeles, el reportero másdicharachero.

dotN

etM

anía

<<

20

dnm.directo.eventos<<

[Table(Name="Customers")]Class Customers {[Column(ID=true)]Public string Name;

[Column]Public string City;

}

Class Northwind : DataConext{

Public Table<Customer> Customers;Public Northwind(string s) : base(s) {}

}

Northwind db = new Northwind("@c:\Northwind.mdf");

var query = db.Customers.where(c => c.City == "London").select (c => new {c.Name, c.City});

Foreach (var c in query)Console.Write(c.Name);

var query = from c in db.Customerswhere c.City = "London"select new {c.Name, c.City};

db.Customers.Add(newCustomer("Name", "City");

db.SubmitChanges();

var query = (from c in db.Customerswhere c.City = "London"select c).Including(c => c.Orders)

Customer cust1 = db.Customers.First();cust1.City = "Paris";db.SubmitChanges();

1 Vea la entrevista a Andrew Conrad, Software Engineer de Microsoft Corporation, publicada en el número 8 de octubre de 2004 de dotNetManía (gratis en la Web)

Page 21: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

dotN

etM

anía

<<

21

el protocolo HTTP, que es el protocolosobre el que se basa la comunicación de contenidosWeb, se diseñó sin estado. Esta carencia no deberíatildarse de defecto, pues el hecho de no tener quereservar recursos para almacenar el estado propor-ciona una elevada escalabilidad para compartir infor-mación, ya que los requisitos de memoria necesariosson mucho más reducidos. De hecho, esta elevadaescalabilidad ha permitido, entre otras cosas, la rápi-da extensión de contenidos Web.

Por otra parte, dado que los contenidos de lasaplicaciones Web han ido cambiando con el paso deltiempo, ya sea incluyendo información dinámicadependiente del usuario conectado o incluyendo con-tenidos multimedia, aparece la necesidad de alma-cenar acciones realizadas o datos introducidos pre-viamente, es decir, se requiere almacenar el estadode la aplicación.

Ante esta necesidad, el primer objetivo que seplantea es la elección de un mecanismo apropiadopara el almacenamiento del estado. De hecho, exis-te una propuesta (RFC2109), comúnmente conocidacomo cookies, que pretende dotar de un mecanismoestándar para manejar el estado. No obstante, a pesarde que la mayoría de los navegadores permiten el usode cookies, no se ha convertido en el único mecanis-mo utilizado para almacenar el estado, sino que coe-xiste con otros, como pueden ser los campos ocul-tos, el ViewState o las variables de sesión.

Gracias a que existen diferentes alternativas a lahora de almacenar la información de estado, es nece-sario identificar los factores más relevantes que deter-

minarán la elección del mecanismo apropiado parala gestión del estado, que son, entre otros:

• Tamaño y tipo de la información a almacenar.• Duración temporal de la información.• Velocidad de almacenado y recuperación.• Factores de seguridad.

El objetivo del presente artículo será la descrip-ción de los diversos mecanismos que presentaASP.NET para el almacenamiento del estado y ladeterminación de los casos en los que es convenien-te el uso de cada uno de ellos.

Una de las decisiones más importantes en el dise-ño de aplicaciones Web es definir cómo se va a alma-cenar el estado. Existe un gran abanico de mecanis-mos para almacenar el estado y en este punto se vana describir los más habituales.

CookiesUna cookie no es más que un pequeño fragmen-

to de texto que se almacena localmente en un fiche-

Mecanismos para el mantenimientodel estado en ASP.NET

Ismael Torres

dnm.asp.net

<< En este sentido,

Ismael TorresIngeniero informático.

Desarrollador senior entecnologías Web en CARE

Technologies, empresa punteraen la implementación de MDA

(Model Driven Architecture)

José Vicente MartínezIngeniero informático.

Desarrollador senior enASP.NET.Tiene la certificación de

MCP en ASP.NET.

Salvador FusterIngeniero en telecomunicaciones.

Desarrollador senior enASP.NET.Tiene la certificación de

MCP en ASP.NET.

Las aplicaciones Web fueron concebidas para mostrar contenidos estáticos, es decir,información no cambiante en función del tiempo, lo que equivale a decir que ante diver-sas peticiones del mismo recurso, siempre se obtiene como respuesta el mismo conte-nido.Por este motivo,no existía la necesidad de almacenar el estado de las aplicacionesWeb,pues las acciones realizadas y los datos introducidos de forma previa a la peticiónde un recurso eran irrelevantes.

José VicenteMartínez

El protocolo HTTP, que es el protocolo sobre el que se basa la comunicación

de contenidos Web, se diseñó sin estado

Salvador Fuster

Page 22: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

ro en la parte del cliente. Normalmente almacenainformación relacionada con el usuario. Cuando unservidor Web envía la respuesta al cliente puede man-dar este fragmento de texto. De manera que cuandoel cliente vuelva a realizar una nueva petición a la mis-ma página, el propio navegador buscará si existe algu-na cookie asociada a esa URL. Si consigue encontrar-la, se enviará junto con la petición al servidor Web.De manera que el servidor Web pueda recuperar lainformación almacenada en la cookie.

Las cookies se asocian a un sitio Web, de maneraque accesos a diferentes páginas dentro del mismositio Web producirán que la misma información de lacookie sea enviada al servidor Web.

Para pedir que se añada una cookie en la parte delcliente, es necesario crearse una instancia deHttpCookie que se añadirá dentro de la colección decookies que tiene la clase Response. Si se quiere acce-der a las cookies que el cliente manda cada vez que rea-liza una petición, se puede acceder a la colección decookies Cookies del objeto Request. En el códigosiguiente se muestra un ejemplo de cómo se puedecrear y recuperar información usando cookies.

Campos ocultos

Los formularios Web pueden contener cam-pos que no son visibles al usuario. Estos camposse denominan ocultos (hidden). Este mecanismo seutiliza para mantener información que se quierepropagar a través de sucesivas llamadas al servi-dor Web. Cuando la página es enviada al servidor,la información que mantiene este campo se envíadentro de la petición en la colección Form deHTTP.

ASP.NET dispone de un control, HtmlInputHidden,que proporciona la funcionalidad para los camposocultos. Para recuperar el valor de un campo ocultoexisten varias alternativas, o bien se puede accederdirectamente al campo oculto, o bien a través de lacolección Form del objecto Request, como se puedeapreciar en el ejemplo:

dotN

etM

anía

<<

22

dnm.asp.net<<

CookiesVentajas Inconvenientes

Independiente del servidor. Limitación de tamaño.

La información se puede almacenardurante un largo período de tiempo.

Existen navegadores que no lo per-miten o lo limitan.

Gran escalabilidad porque la informa-ción se almacena en la parte cliente.

Diferentes navegadores almacenanlas cookies de manera distinta.

Sólo almacena información que sepueda serializar a texto.

// Ejemplo de código para crear CookiesHttpCookie NuevaCookie = new HttpCookie("Visitas");NuevaCookie.Value = visitas;Response.Cookies.Add(NuevaCookie);

// Ejemplo de código para usar Cookiesvisitas = Request.Cookies["Visitas"].Value;

// Definición de un control ocultoprotected System.Web.UI.HtmlControls.HtmlInputHidden

MensajeError;

// Asignación de información al campo ocultoMensajeError.Value = "Error en la conexion";

// Recuperación del valor del campo ocultostring str = MensajeError.Value;

// Recuperación del valor del campo oculto // mediante HTTPstring str2 = Request.Form["MensajeError"];

Campos OcultosVentajas Inconvenientes

La información se guar-da en la parte del cliente.

Baja seguridad, se puede obte-ner la información del campooculto simplemente teniendoacceso al código fuente de lapágina.

La mayoría de navega-dores permiten camposocultos.

No se admiten grandes canti-dades de información.

Fácil implementación. Si el tamaño del campo ocul-to es demasiado grande pue-de afectar al rendimiento de laaplicación.

Una cookie no es más que un pequeño fragmento de texto que se almacena localmente

en un fichero en la parte del cliente

Los formularios Web pueden contenercampos que no son visibles al usuario

Page 23: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

QueryString

Otra posibilidad para mantener información deestado, es hacer uso de la dirección URL utilizandolas cadenas de consulta (QueryString) para mantenerinformación que nos sea interesante. La cadena deconsulta es información en forma de clave/valor quese anexa a la URL de una página Web.

La utilización de la cadena de consulta se puedever en el siguiente ejemplo. Cuando la página “cesta”es procesada se puede recuperar la información de lasvariables a través de la colección Params del objetoRequest.

ViewStateEl ViewState es un nuevo mecanismo que no exis-

tía en ASP tradicional. Este mecanismo permite man-tener la información entre diferentes peticiones a lamisma página. Antes de la aparición de este mecanis-mo, los valores de los campos se solían almacenarmediante campos ocultos, lo que requería de un esfuer-zo de implementación suplementario. El ViewStatealmacena por defecto el estado de todos los controles

de usuario de la página. Además se puede usar elViewState de manera explícita para añadir informaciónadicional. El ViewState se implementa mediante elobjeto System.Web.UI.StateBag, la información es guar-dada codificada en la página como un campo oculto.Lo bueno de esta aproximación es que el estado seguarda en la página y no en el servidor. Si el conteni-do de la información a guardar en el ViewState es gran-de puede repercutir en el rendimiento a la hora dedescargar las páginas.

En el siguiente ejemplo se puede ver el uso delViewState para almacenar el orden en que se quierenordenar los datos en una tabla, que puede ser ascen-dente “ASC” o descendente “DES”.

Session State

La mayoría de los datos a almacenar sirven única-mente para un usuario en concreto y sólo para unasesión. Por ejemplo en una aplicación de comercioelectrónico, es necesario mantener el contenido delcarrito de la compra de cada cliente o incluso alma-cenar las preferencias de los diferentes usuarios. ElSession State es usado a menudo para almacenar infor-mación que se ajuste a esta característica.

dotN

etM

anía

<<

23

dnm.asp.net<<

QueryStringVentajas Inconvenientes

Fácil de usar. El tamaño de información que se pue-de mandar es limitada.

Funciona en todoslos navegadores.

Nula seguridad, todo el mundo pue-de ver el valor de la información sim-plemente teniendo acceso a la direc-ción Web.

// Uso de Query string para transmitir informaciónResponse.Redirect(

"http://www.mitiendavirtual.com/cesta.aspx?categoriaid="+CategoriaID+"&productoid=" + ProductoID);

// Recuperación de la informaciónstring categoriaid;string procuctoid;

categoriaid = Request.Params["categoriaid"];procuctoid = Request.Params["productoid"];

ViewStateVentajas Inconvenientes

Todos los controles de ASP.NETutilizan automáticamente estavariable.

Si el tamaño del ViewState es dema-siado grande puede afectar al rendi-miento de la aplicación.

La información se guarda en la par-te del cliente.

Alcance a nivel de página.

La información se codifica. Sólo puede almacenar informaciónque se pueda serializar.

Gran escalabilidad.

Funciona en granjas de servidoresWeb.

// Guardar el orden usando ViewState ViewState["TipoOrdenacion"] = "ASC";

// Recuperar la variable desde ViewState string TipoOrdenacion = (string)ViewState["TipoOrdenacion"];

La cadena de consulta es informaciónen forma de clave/valor que se anexa

a la URL de una página Web

El ViewState almacena por defecto el estado detodos los controles de usuario de la página

Page 24: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Para asociar una sesión a un usuario, es necesarioidentificar a los usuarios. Dicho identificador, en ASPtradicional, es transmitido entre el servidor y el clien-te vía HTTP usando cookies. ASP.NET sigue sopor-tando esta técnica y además permite una segunda téc-nica, que consiste en propagar la clave codificada enla URL. Esta técnica funciona incluso con clientesque tienen las cookies deshabilitadas.

En ASP tradicional el session state era mantenidoen el mismo proceso que la aplicación Web. En cam-bio ASP.NET, a parte de proporcionar esta opción,introduce la posibilidad de guardar el Session State enun proceso independiente o en una base de datos.

Tanto la manera de propagar la clave como elmodo de mantener la información de la sesión se pue-de configurar mediante el fichero web.config.

El Session State es mantenido en una instancia dela clase HttpSessionState y es accesible a través de lapropiedad Session de la página. En el siguiente ejem-plo se puede apreciar como guardar el nombre delusuario conectado.

Application State

Mediante este mecanismo de mantener el estadose puede almacenar información común a todos losusuarios de la aplicación. El Application State es unmecanismo que debe usarse con precaución, y enmuchos casos debe evitarse. Aunque es una buenaelección para almacenar los datos globales en las apli-caciones Web, su uso puede limitar la escalabilidadde la aplicación, especialmente si es usado para alma-cenar información compartida. Además no es un sitioidóneo para almacenar información ya que se pierdela información si la aplicación se reinicia.

Como en una aplicación puede haber múltiplesusuarios, existe el peligro que aparezca el problemade concurrencia a la hora de acceder a la aplicación.En ASP tradicional, el programador debía lidiar coneste problema y debía encargarse de gestionar la con-currencia para asegurar que todo fuera bien. Ahoraen ASP.NET, este problema se gestiona de maneraimplícita, haciendo más fácil su uso.

La mayoría de los escenarios en los que se usaba elApplication State en las aplicaciones ASP tradicionales,se sustituyen por el uso de la caché en ASP.NET. Lanecesidad común de usar Application State es para alma-cenar información global de sólo lectura. Para la infor-mación que se puede modificar durante la ejecución deuna aplicación es mejor usar la caché. La información“cacheada” no es específica de un usuario individual,página o sesión; sino que los datos cacheados pertene-cen a la aplicación. Dispone de métodos que permitendeterminar exactamente cuando y por cuanto tiempose ha de mantener la información en la caché, para espe-cificar la prioridad de los datos y para especificar duran-te cuanto tiempo la información es válida.Probablemente la mayor ventaja de usar la caché es unamejor gestión de la memoria.

dotN

etM

anía

<<

24

dnm.asp.net<<

// Almacenamiento de los datos en el objeto SessionSession["User"] = User.Value;

// Recuperación de los datos del objeto Sessionstring User = (string)Session["User"];

Application StateVentajas InconvenientesAlmacena informacióncompartida por todoslos usuarios de la apli-cación.

Cuando la aplicación se reinicia,se pierde toda la información.

No es una buena opción si la apli-cación se ejecuta en una graja deservidores, ya que la informaciónes local a cada servidor.

Session StateVentajas Inconvenientes

Permite almacenar todo tipode información si se ejecuta enel mismo proceso.

La información se mantiene en el ser-vidor, lo cual implica que puede satu-rarlo.

La información se mantienecodificada.

Si el modo de ejecución por defecto (enel mismo proceso) tiene el inconvenien-te que no sirve para ejecutar la aplicaciónen una granja de servidores Web.

Se puede configurar su funcio-namiento, siendo un mecanis-mo muy válido para un amplioabanico de situaciones.

El modo “proceso independiente” y “basede datos” tiene el inconveniente que todala información que se guarde ha de serserializable.

Mecanismo útil si la aplicaciónse ejecuta en una granja de ser-vidores Web.

Si la clave se mantiene mediante cookies(opción por defecto), éstas tienen todoslos problemas asociados a las cookies queya se han comentado anteriormente.

La mayoría de los datos a almacenar sirven únicamente para un usuario en concreto

y sólo para una sesión

Mediante Application State de mantener elestado se puede almacenar información

común a todos los usuarios de la aplicación

Page 25: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Se accede al Application State a través de la pro-piedad Application de la clase HttpApplication. En elsiguiente ejemplo se puede ver como usar el objetoApplication para almacenar la cadena de conexión ala base de datos:

Base de datos

Es un método que permite mantener la informa-ción de manera permanente, es decir, la informaciónalmacenada no se pierde de una sesión a otra. Un ejem-plo de información almacenada en base de datos es lainformación que mantienen los bancos on line de todaslas cuentas de sus usuarios. Si se quiere usar con gran-jas de servidores Web, la base de datos ha de estar dis-ponible para todos los servidores.

Ficheros

Es otro mecanismo para mantener información per-sistente. Permite almacenar todo tipo de información.Lo más usual a día de hoy es usar ficheros con formatoXML para mantener la información necesaria. Si se usanficheros se debe implementar algún mecanismo parapoder borrar los ficheros que no están en uso.

Variables estáticasSuponen un mecanismo que permite almacenar

valores del mismo modo que el objeto Application.No obstante posee una diferencia notable con el obje-to Application, siendo más eficiente que éste en dife-rentes casos, ya que la carga del objeto Applicationnormalmente requiere más recursos de memoria.

Las variables estáticas son apropiadas para datosque se utilizan con frecuencia en la aplicación y queson comunes para todos los usuarios.

Usando el atributo Classname de la directivaApplication en el fichero global.asax, se puede acce-der desde cualquier parte de la aplicación a las varia-bles, propiedades y métodos públicos del fichero glo-bal.asax sin más que utilizar el valor asignado aClassname para instanciarlo. De este modo, las varia-bles globales estáticas definidas en el fichero glo-bal.asax son accesibles desde la aplicación.

Nuevos mecanismos proporcionados porASP.NET 2.0:Profiles

La nueva versión de ASP.NET 2.0 introduce unanueva clase para almacenar información relacionadacon el usuario. Esta clase se llama Profile (Perfiles).Los perfiles son similares a las variables de sesión perocon una pequeña diferencia, que la información delusuario se puede configurar para que mantenga lainformación más allá de lo que dura la sesión.

dotN

etM

anía

<<

25

dnm.asp.net<<

// Se guarda la información en el objeto ApplicationApplication["Conexion"] =

"Data Source=TiendaServer;Initial Catalog=TiendaBD;Integrated Security=SSP1";

// Se recuperan los datos del Objeto Applicacionstring conexion = (string)Application["Conexion"];

Base de datos

Ventajas Inconvenientes

Ideal cuando se quierealmacenar mucha informa-ción.

Es un poco más costoso yaque se tiene que diseñar labase de datos e implementarla manera de interactuar conésta.

Permite almacenar infor-mación de diversa índole.

Si se quiere almacenar infor-mación dependiente de lasesión se tiene que imple-mentar un mecanismo de eli-minación de la informaciónde sesiones no válidas.

No se pierde la informaciónsi se reinicia la aplicación.

Sólo puede almacenar infor-mación que se pueda seria-lizar.Funciona con granjas de

servidores.

Ideal para información quese quiere conservar másallá del alcance de la sesión.

FicherosVentajas Inconvenientes

Las mismas que la base de datos. Los mismos que las bases de datos.

No se requiere tener instalada nin-guna base de datos.

Se debe implementar un mecanismopara solucionar colisiones al mismofichero.

Se deben proporcionar permisos paramodificar ficheros siempre y cuandose requiera actualizar la información.

Variables Estáticas

Ventajas InconvenientesAlmacenan información para todousuario de la aplicación.

El reinicio de la aplicación puedecausar la pérdida de los valoresalmacenados.Más eficiente que el objeto Application.

Base de datos

Ventajas Inconvenientes

Información persistente. Sólo guarda información rela-cionada con el usuario.Larga duración.

Información tipada.Recupera la información por demanda.

Soporta usuarios autenticados y anónimos.

Page 26: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Para definir los perfiles es necesa-rio añadirlos en el fichero de confi-guración de la aplicación web.config.En el código de ejemplo que se pro-porciona a continuación se crea unperfil para mantener la informacióndel número de compras y la fecha dela última compra que un determina-do usuario haya hecho en un carritode la compra.

Comparativa entre los diver-sos mecanismos

A continuación, se proporciona unatabla comparativa que presenta losdiversos mecanismos de almacena-miento del estado comentados ante-riormente en función de diferentes fac-tores relacionados con la información aalmacenar.

Conclusiones

Para concluir se puede decir que sepueden combinar los diferentes méto-dos para obtener un mejor resultado.Por ejemplo, combinar bases de datos yficheros XML/XSLT es una técnicamuy potente y flexible que aporta lacapacidad de proporcionar datos perso-nalizados . Y si además se combinan con

la capacidad del objeto Cache para alma-cenar los resultados y actualizarlos cuan-do es necesario, se pueden obtener apli-caciones con gran rendimiento.

La gestión del estado influye en casicualquier aspecto del diseño de una apli-cación Web, y es importante entendertodas las opciones disponibles para alma-cenar el estado así como sus implicacio-nes para la usabilidad, rendimiento y esca-labilidad. Cada mecanismo puede ser la

mejor opción en diferentes partes de laaplicación. El estado, que es global parauna aplicación, puede ser almacenadocomo estado de aplicación, aunque sue-le ser preferible usar la nueva caché dedatos en vez del estado de aplicación. Elestado específico de un cliente puede seralmacenado como una sesión de estado,en el lado de cliente usando cookies o pormedio del Viewstate en el caso de mante-nerse en la misma página. La sesión deestado es más comúnmente usada paraalmacenar datos que no se suelen enviary recibir en cada petición, o bien porquela información es muy grande o porquela información no debe ser visible.Mantener el estado mediante cookies esútil para pequeñas cantidades de infor-mación tales como las preferencias delusuario o claves de autenticación o clavesde sesión. El Viewstate es una alternativaútil a Session para información que debeser mantenida para diferentes peticionesa la misma página. Finalmente ASP.NETproporciona la capacidad de mantenterel estado de manera remota para aquellasaplicaciones que se van a ejecutar en gran-jas de servidores.

A modo de resumen cabe destacarque cada mecanismo para almacenar elestado es apropiado para un tipo deinformación particular. Por este moti-vo, no se puede seleccionar uno de elloscomo el mecanismo óptimo de alma-cenamiento del estado, sino que sedeben identificar los requisitos princi-pales de la información a almacenar(tamaño, duración, seguridad,…) y ele-gir el mejor mecanismo de almacena-miento en consecuencia.

dotN

etM

anía

<<

26

dnm.asp.net<<

<configuration><system.web><profile><properties><add name="NumeroDeCompras" type="System.Int32" defaultValue="0"/><add name="UltimaCompra" type="System.DateTime"/></properties></profile></system.web></configuration>

// Incrementa el número de compras del usuario Profile.NumeroDeCompras = Profile.NumeroDeCompras + 1;

// Actualiza la fecha de la ultima compraProfile.UltimaCompra = DateTime.Now;

Duración de la información Tamaño de la información Rendimiento Escalabilidad Seguridad Soporta granjas de servidores

Cookies Corta y Larga duración Pequeño Medio Alta Baja No

Campos Ocultos Nueva Petición Pequeño Alto Alta Baja Sí

QueryString Nueva Petición Pequeño Alto Alta Baja Sí

ViewState Refrescos de la misma página Medio Alto Alta Alta Sí

Session State Sesión Medio Alto Media Alta Depende de la configuración

Application State Aplicación Medio Alto Media Alta NoBase de Datos

Persistente Grande Medio Baja Depende de laimplementación Sí

FicherosPersistente Grande Medio Baja Depende de la

implementación Sí

Variables estáticas Aplicación Medio Alto Media Alta No

Profiles Configurable Medio Alto Media Alta Sí

Page 27: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

disfrutan de las excelentes como-didades que les ofrece Visual Studio usando la rejillade propiedades (Property Grid) para personalizar loscontroles que el propio Visual Studio ofrece. Sinembargo, no todos conocen cómo usar las herra-mientas de tiempo de diseño de Visual Studio parapoder actuar sobre los controles que ellos mismosdesarrollan. En este artículo vamos a mostrar cómointeractuar con el Property Grid para sintonizarlo connuestros controles.

Acoplar el Property Grid con un nuevocontrol

El uso del Property Grid en tiempo de diseño seenmarca en el escenario del desarrollo de un nuevocontrol .NET. Consideremos como ejemplo un con-trol que permita la introducción de números enteros

en diferentes bases: decimal, binario, octal o hexa-decimal, como el que se usa en la calculadora deWindows (ver figura 1).

El código del fuente 1 nos muestra una imple-mentación de un tal control NumericEditor. Note quesi la propiedad NumericBase del NumericEditor tuvie-se como valor el enumerativo NumericBases.Hexadecimal el control permitirá que interactivamente seescriba “7D5” que es la representación en base 16del número 2005 (figura 2).

dotN

etM

anía

<<

27

La utilidad de los atributos en tiempo dediseño.Cómo programar para interactuar

con el PropertyGrid

En trabajos previos de dotNetManía [1] hemos ilustrado las bondades de esamaravilla introducida por .NET que son los atributos para colocar metainforma-ción dentro de los ensamblados.Veremos en este artículo cómo el propio VisualStudio hace un uso intensivo de los atributos para que podamos personalizar nues-tros propios controles visuales.

<<

Mario del Valle

dnm.plataforma.net

Muchos programadores

Mario del ValleEs desarrollador del grupoWEBOO e instructor del

Departamento de Ciencia de laComputación de la Universidad

de la Habana

Miguel KatribEs Dr. y Catedrático del Depar-

tamento de Ciencia de laComputación de la Universidad

de La Habana y jefe del grupoWEBOO.Es un especialista en

lenguajes de programación yentusiasta de la tecnología .NET y

el lenguaje C#.

Miguel Katrib

Figura 1. Calculadora de Windows (en rojo lasbases numéricas)

Figura 2. ControlNumericEditor en ejecución

Page 28: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Organizando las propiedadesen el Property Grid

Cuando un control de este tipo se aña-de a un Form, Visual Studio crea una cel-da en el Property Grid para cada propie-dad del control. En la figura 3 se mues-tran las propiedades NumericBase y Valueen el Property Grid. Note que en este casoVisual Studio ha puesto las propiedadesNumericBase y Value en la categoría Misc(Miscelánea) y que no se muestra ningu-na descripción de estas propiedades en lazona inferior del Property Grid, lugar enel que usualmente se muestra una brevedescripción de la propiedad que esté selec-cionada.

Por medio de atributos podemos indi-carle a Visual Studio que haga desapare-cer una propiedad del Property Grid. Porejemplo, si se asocia, con parámetro enfalse, el atributo BrowsableAttribute a unapropiedad, entonces Visual Studio nomostrará una fila para el mismo dentrodel Property Grid.

[Browsable(false)]

public NumericBases NumericBase {...}

La figura 4 muetra cómo se visualiza-ría el Property Grid sin esta propiedad.

Mediante el atributo CategoryAttri-bute se puede indicar en qué categoríadebe aparecer la propiedad atributada enla zona en la que se agrupan las de su mis-ma categoría. Por ejemplo, asociando elatributo como sigue, se ubica a la propie-dad en la categoría Data (figura 4).

[Category("Data")]

public int Value {...}

El atributo DescriptionAttributepermite asociar un texto como descrip-ción de la propiedad a la que se le aso-cia. Ese es el texto que Visual Studiodespliega en la zona inferior del PropertyGrid cuando sea esa la propiedad (figu-ra 4). Para esto basta con hacer:

[Description("Current numeric value")]

public int Value {...}

El .NET Framework tiene otrosatributos que permiten personalizar laforma en que se muestran las propie-

dades en el Property Grid. Por ejem-plo, el atributo DefaultValueAttributese emplea para asignar el valor pordefecto con que se visualiza la propie-dad cuando el control se crea al arras-trarlo desde el ToolBox. BuscandoDesign-time attributes en la ayuda deVisual Studio el lector podrá encon-trar los atributos más utilizados parael tiempo de diseño.

A continuación haremos énfasis endos de los atributos más interesantespara personalizar nuestro ejemplo delcontrol numérico editado en diferen-tes bases.

Conversores de tipos y edito-res de propiedades

Para nuestro control numérico seríaentonces deseable que en tiempo dediseño se pueda cambiar la propiedadValue según las diferentes bases.Quisiéramos que para ello el PropertyGrid se desplegase como se muestra enla figura 51.

Sin embargo, de manera predeter-minada, usando el Property Grid, losvalores enteros sólo pueden editarseen base 10 (decimal). Felizmente,Visual Studio y el Framework pro-porcionan un conjunto de clases quepermiten cambiar la forma de editarlas propiedades en tiempo de diseñopara personalizarla según nuestro inte-rés (por ejemplo en la forma en quese muestra en la figura 5). Esto se veráen las secciones siguientes.

Conversores de tiposLos conversores de tipos son clases

derivadas de la clase TypeConverter; estosse asocian a las propiedades a través del

dotN

etM

anía

<<

28

dnm.plataforma.net<<

public class NumericEditor : TextBox {NumericBases numericBase;

public NumericBases NumericBase {get { return NumericBase; }set { NumericBase = value; }

}

public int Value {get { return Convert.ToInt32(base.Text, (int) numericBase); }set { base.Text = Convert.ToString(value, (int) numericBase); }

}...

}public enum NumericBases { Binary = 2, Octal = 8, Decimal = 10, Hexadecimal = 16 }

Fuente 1. Control NumericEditor para edición de números en diferentes bases.

Figura 3. Propiedades nuevas

Figura 4. Propiedades nuevas

1 Los ejemplos que aquí se muestran fueron hechos en Visual Studio 2005 Beta 2, pero son también aplicables a Visual Studio 2003 (.NET Framework 1.1)

Figura 5 Editor personalizado en el PropertyGrid

Page 29: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

atributo TypeConverterAttribute. Estosconversores permiten obtener el valorde la propiedad convertido al tipo quese le indica2. En el caso que nos ocupa,Visual Studio usa estos conversores paramostrar del texto que aparece en la cel-da del Property Grid correspondiente ala propiedad a la que se le ha asociadoel atributo. Para el ejemplo que estamosestudiando, habría que asociarle a la pro-piedad Value del NumericEditor un talconversor de tipo haciendo:

[TypeConverter(typeof(NumericTypeConverter))]

public int Value { get {...} set {...} }

Donde NumericTypeConverter es laclase que habría que implementar (fuen-te 2) para convertir el texto que se escri-ba en la celda del Property Grid en elvalor numérico correspondiente y vice-versa para obtener el texto correspon-diente del valor de la propiedad.

Predeterminadamente Visual Studioconvierte el valor de todas las propie-dades de un tipo conocido (ej. int, bool,string, Color, DateTime, etc.), haciastring. Para convertir los valores deotros tipos debe implementarse una cla-se derivada de TypeConverter porque eneste caso el conversor predeterminadono satisface los requerimientos de lo quese quiere lograr en tiempo de diseño(siempre lo convertiría considerandoque la base es decimal). Sin embargo,en este caso se quiere que la conversiónnumérica desde y hacia string se hagasegún la base que sea seleccionada porel usuario en tiempo de diseño.

Note que en el fuente 2 se redefi-nen los métodos CanConvertFrom,ConvertFrom y ConvertTo que se here-dan de TypeConverter. De la clase basese hereda también un CanConvertTopero este siempre devuelve true cuan-do el tipo de destino es string que eslo que nos conviene en este caso; portanto este método no hay que redefi-nirlo. El método CanConvertFrom esllamado toda vez que se necesita con-vertir un valor desde un tipo deter-minado. En nuestro ejemplo afirma-mos que podemos efectivamente obte-ner un entero a partir de un valorstring. ConvertFrom. El métodoConvertFrom es el que hace efectiva laconversión. Este ha sido implementa-

do basándonos en el método ToInt32de la clase Convert. Finalmente, semuestra también una implementaciónde ConvertTo que obtiene un stringacorde con la base numérica indicadaen el editor. Si no se redefiniese se usa-ría la conversión a string predeter-minada que usa el método base, quees en este caso aplicar el métodoToString del valor, que nos devolveríael string correspondiente a la repre-sentación decimal del número, que noes lo que queremos aquí.

Hasta aquí hemos logrado que sepuedan escribir en el Property Gridvalores binarios, hexadecimales, etc.(figura 6). Pero aún no logramos quedentro del propio Property Grid poda-mos cambiar la base, ni que se mues-tre algo visual que indique la base quese está usando. Ver por ejemplo el com-

bo box con las bases y el cuadradito azulcon la base seleccionada que se mues-tran en la figura 2.

Afortunadamente, como se verá en lasección a continuación, también existe unaforma de definir cuál es el editor gráficoa usar para indicar la forma en que se quie-re que se editen los valores de una deter-minada propiedad.

Editores de propiedadesSeguramente el lector se habrá

encontrado con algunos de los editoresde propiedades que el propio VisualStudio utiliza predeterminadamentepara algunos tipos. La figura 7 nosmuestra el editor utilizado para editaruna propiedad cuyo tipo sea Color.

dotN

etM

anía

<<

29

dnm.plataforma.net<<

public class NumericTypeConverter : TypeConverter {

public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType){if (sourceType == typeof(string)) return true;

return base.CanConvertFrom (context, sourceType);}public override object ConvertFrom( ITypeDescriptorContext context,

System.Globalization.CultureInfo culture,object value){

if (value is string) {string strValue = (string) value;NumericEditor editor = (NumericEditor) context.Instance;return Convert.ToInt32(strValue, (int) editor.NumericBase);

}return base.ConvertFrom (context, culture, value);

}public override object ConvertTo( ITypeDescriptorContext context,

System.Globalization.CultureInfo culture,object value, Type destinationType) {

if (destinationType == typeof(string)) {NumericEditor editor = context.Instance as NumericEditor;return Convert.ToString((int) value, (int) editor.NumberBase);

}return base.ConvertTo (context, culture, value, destinationType);

}}

Fuente 2. NumericTypeConverter

Figura 6. TypeConverter de Value

Figura 7. ColorUIEditor

2 El método ToString es un ejemplo de conversión al tipo string.

Page 30: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Visual Studio define dos grandesgrupos de editores visuales, los que semuestran en modo Drop Down, comoColorUIEditor de la figura 7, o los quese muestran en forma de diálogo, comoel clásico diálogo de edición de la pro-piedad Font. Estos tipos de editores deri-van de la clase UITypeEditor, clase basede todos los editores de propiedades delProperty Grid.

Como se muestra en la figura 2, que-remos que en nuestro ejemplo se des-pliegue una ventana Drop Down listan-do las cuatro bases posibles a escoger enuna edición numérica. El fuente 3 mues-tra la implementación de nuestro edi-tor visual NumericUIEditor.

Una vez más se hace uso de los atri-butos. En este caso EditorAttributeindica qué editor visual deberá usarVisual Studio cuando dentro delProperty Grid se vaya a editar una pro-piedad (Value en este ejemplo) a la quese le ha asociado dicho atributo. Coneste atributo, además del TypeConverter,la propiedad Value de nuestro controlNumericEditor quedaría entonces:

[TypeConverter(typeof(NumericTypeConverter))]

[Editor( typeof(NumericUIEditor),

typeof(UITypeEditor)) ]

public int Value { get {...} set {...}}

Al definir un tipo editor de propie-dades heredando de UITypeEditor sedeben redefinir básicamente dos méto-dos: el método GetEditStyle, que indi-cará de qué forma se mostrará el editor(si Drop down o si diálogo); y el métodoEditValue cuya ejecución crea el controlque hará de interfaz visual para indicarcómo se quiere hacer la edición de lapropiedad.

Para el caso de nuestro ejemplo elmétodo GetEditStyle debe devolver elvalor enumerativo UITypeEditorEditStyle.DropDown ya que se quiere indicarque el modo de edición es Drop Down (sedespliega hacia debajo de la fila corres-pondiente en el Property Grid), mientrasque en el método EditValue se crea uncontrol ListBox como control de ediciónque se pondrá en la ventana desplegableque aparecerá dentro del Property Gridcuando se quiera indicar la base con la quese quiere editar la propiedad.

dotN

etM

anía

<<

30

dnm.plataforma.net<<

3 Entrar en detalle sobre el tema de los servicios y proveedores de servicios (IServiceProvider) del tiempo de diseño de Visual Studio se sale del alcance de esteartículo y será tratado en próximos artículos.

using System.ComponentModelpublic class NumericUIEditor : UITypeEditor {private NumericBases result = NumericBases.Decimal;private IWindowsFormsEditorService editorService;

public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) {if (context != null)return UITypeEditorEditStyle.DropDown;

return base.GetEditStyle (context);}

public override object EditValue( ITypeDescriptorContext context,IServiceProvider provider, object value) {

if (context != null) {editorService = (IWindowsFormsEditorService)

provider.GetService(typeof(IWindowsFormsEditorService));

if ((context.Instance == null) || !(context.Instance is NumericEditor))return base.EditValue(context, provider, value);

NumericEditor editor = context.Instance as NumericEditor;ListBox boolListBox = new ListBox();boolListBox.Size = new Size(80, 70);boolListBox.BorderStyle = BorderStyle.None;boolListBox.Items.AddRange(new object[] {"Binary","Decimal","Octal","Hexadecimal" });switch (intro.NumberBase) {case NumericBases.Binary: boolListBox.SelectedIndex = 0; break;case NumericBases.Octal: boolListBox.SelectedIndex = 2; break;case NumericBases.Hexadecimal: boolListBox.SelectedIndex = 3; break;default: boolListBox.SelectedIndex = 1; break;

}boolListBox.SelectedIndexChanged += new EventHandler(SelectedIndexChanged);result = intro.NumericBase;editorService.DropDownControl(boolListBox);editor.NumericBase = result;return editor.Value;

}return base.EditValue(context, provider, value);

}

private void SelectedIndexChanged(object sender, EventArgs e) {ListBox lb = sender as ListBox;switch (lb.SelectedIndex) {case 0: result = NumericBases.Binary; break;case 2: result = NumericBases.Octal; break;case 3: result = NumericBases.Hexadecimal; break;default: result = NumericBases.Decimal; break;

}editorService.CloseDropDown();

}}

Fuente 3. NumericUIEditor

Disponemos de la elegancia de poder programar nuestrospropios controles con la lógica clara esperada para su

funcionamiento en ejecución y a la vez, sólo asociándole los atributos adecuados, los podemos hacer fáciles de

usar desde el propio Visual Studio en tiempo de diseño.

Page 31: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Nótese que en el fuente 3 se obtiene en la variableeditorservice un objeto conforme a la interfazIWindowsFormsEditorService3 . Los objetos de este tiposon los que se emplean para provocar el despliegue(DropDownControl) y cierre (CloseDropDown) de la venta-na Drop Down.

Los editores de propiedades tienen además dosmétodos GetPaintValueSupported y PaintValue quehemos redefinido para dibujar, en un área reducidaa la izquierda de la celda del Property Grid que corres-ponde al valor de la propiedad, el cuadradito azul quemuestra la base numérica en la que se edita (figura2). En el fuente 4 se muestra la redefinición de estosdos métodos.

Note que al llamar a ambos métodos, GetEditStyley EditValue, Visual Studio les pasa un parámetro con-text de tipo ITypeDescriptorContext. Este parámetroprovee los datos esenciales referentes a la propiedad yal propio control. Este objeto context contiene una pro-piedad PropertyDescriptor que permite conocer quépropiedad se está editando con este editor. Tambiéncontiene una propiedad Instance que nos da el propiocontrol cuya propiedad se está editando4.

Este objeto context es creado por el diseñador deVisual Studio cuando éste va a crear el editor, esto es,cuando el usuario hace clic sobre la celda de la propie-dad que quiere editar (Value en nuestro ejemplo).

De nuevo Microsoft ha predicado con el ejemplohaciendo uso extensivo de los nuevos recursos queintroduce, como hace en este caso con los atributospara integrar a sus propios controles al tiempo dediseño de Visual Studio.

Disponemos de la elegancia de poder programarnuestros propios controles con la lógica clara espe-rada para su funcionamiento en ejecución y a la vez,sólo asociándole los atributos adecuados, los pode-mos hacer fáciles de usar desde el propio Visual Studioen tiempo de diseño.

Un problema por resolverEl lector habrá notado que esta forma de editar

la propiedad Value del control NumericEditor pudie-ra ser deseable de aplicar a otras propiedades numé-ricas de otros controles.

Durante el tiempo de diseño los objetos converso-res de tipos y editores de propiedades se crean cada vezque se accede a la propiedad. Esto significa, en nuestrocaso de ejemplo, que no hay forma de usarlos para“memorizar” la base con que se editó la propiedad. Estoimplica que si volvemos a la propiedad, como los con-troles de edición se vuelven a crear, el control no pue-de saber en qué base se editó la vez anterior para visua-lizar de nuevo el valor en consecuencia.

La propiedad NumericBase del controlNumericEditor de nuestro ejemplo es la encargadade “memorizar” la base con que se edita. Resultaengorroso que cada vez que se quiera aplicar un edi-tor como el anterior sea imprescindible que por cadapropiedad numérica se añadiera otra propiedad quealmacenara la base con que ésta se edita en tiempode diseño. Esto lo hemos aliviado, en este caso, alindicar a dicha propiedad como browseable en falsepara que Visual Studio no la visualice al usuario enel Property Grid. No obstante, no es elegante, ni esuna buena práctica de programación, que parte delcódigo de los editores de visualización quede den-tro del control porque realmente a este último nole incumbe esto5.

Visual Studio 2005 tendrá varios mecanismos paraalmacenar en tiempo de diseño información asociada aun control, lo que facilitará resolver situaciones comola anterior. Cuando a una propiedad se le asocia esteatributo, su valor se almacena en los recursos (*.RESX)del Form que se esté diseñando. Esto podrá ser tratadoen un futuro trabajo, mientras tanto el lector interesa-do puede ir explorando esta capacidad.

dotN

etM

anía

<<

31

dnm.plataforma.net<<

4 El tipo ITypeDescriptorContext tiene otros miembros pero que no son de interés para este ejemplo por lo que por razones de espacio no se han presentado en este trabajo.5 Precisamente esto sería una mezcla de incumbencias; algo que la programación orientada a aspectos promueve evitar.

using System.Drawing;using System.Drawing.Drawing2D;public class NumericUIEditor : UITypeEditor {...public override bool GetPaintValueSupported(ITypeDescriptorContext context)

{return true;

}

public override void PaintValue(PaintValueEventArgs e) {NumericEditor editor = e.Context.Instance as NumericEditor;e.Graphics.SmoothingMode = SmoothingMode.HighQuality;e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds);string str = (editor.NumericBase + "").Substring(0, 3);Font font = new Font("Tahoma", 7, FontStyle.Bold);e.Graphics.DrawString(str, font, SystemBrushes.HighlightText,.5F, 2F);base.PaintValue (e);

}}

Fuente 4. NumericUIEditor (GetPaintValueSupported y PaintValue)

Visual Studio 2005 tendrá varios mecanismos para almacenar en tiempo de diseño información asociada a un control

Referencias

[1]Yamil Hernández, Miguel Katrib, Aspectose Intercepción de Métodos en .NET,dotNetManía No 10, Diciembre 2004

Page 32: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

(WPF en adelante)fue presentado en público hace ya casi dos años, en elProfessional Developer Conference del año 2003.Todavía con su nombre en clave original, Avalon se con-virtió en uno de los subsistemas claves del próximo sis-tema operativo de Microsoft, Windows Vista. Un añodespués, durante el verano pasado, Microsoft anuncióque WPF no sólo estaría disponible en Vista sino quese podría instalar en Windows XP y 2003 junto al res-to de la API manejada WinFX. Este cambio es muchomás importante de lo que parece, ya que aumenta elalcance de la tecnología a un público muchísimo másamplio y anima a muchas empresas a comenzar el desa-rrollo de aplicaciones con WPF.

En la actualidad WPF se encuentra todavía en unafase temprana de desarrollo. A pesar de esto y graciasal programa CTP (Community Technical Preview) ya esposible descargarse una versión preliminar. Aunque noes una versión estable ni apta para comenzar a desarro-llar sobre ella, sí nos puede servir para echar un primervistazo a las capacidades que incorporará. En este artí-culo utilizaremos los bits de la última versión disponi-ble (Beta 1 Release Candidate) que puede descargarsegratuitamente del área de descarga de MSDN. Tengaen cuenta que las versiones publicadas están en conti-nua evolución, por lo que los ejemplos que veamos nofuncionarán en las versiones anteriores ni casi con todaseguridad en las futuras.

La primera sorpresa:XAMLSin duda lo que más llama la atención en WPF son

las nuevas capacidades gráficas. Si no se deja impresio-

nar por esto e intenta profundizar un poco observaráque el modelo de programación de WPF es realmentelo más innovador. En la mente de los arquitectos deWPF siempre ha estado la misma máxima: conseguirun modelo híbrido entre el desarrollo de aplicacionesWeb y Windows, aprovechando las ventajas decada uno. Esto se nota en todos los aspec-tos de la nueva tecnología pero quizás elmás claro es el de la propia definicióndel interfaz, que se realiza de forma decla-rativa muy al estilo de las páginas HTMLpero con un renovado lenguaje de marcado: XAML(eXtensible Application Markup Language).

XAML es un esquema XML que nos permite defi-nir todos los elementos de nuestro interfaz gráfico. Sibien XAML no está restringido a WPF y puede repre-sentar cualquier conjunto de clases de otra librería, suuso principal será éste y con frecuencia nos referimos aambos como una sola cosa.

Primeros pasos con Windows Presentation Foundation

Tal y como dijo Pablo Motos en el Developer Day del pasado 17 de mayo,Avalonparece más un personaje de La Guerra de las Galaxias que otra cosa. En realidadno andaba muy equivocado porque la primera vez que escuché algo de Avalon meparecía ciencia ficción:un nuevo interfaz gráfico para Windows basado en un motortridimensional, con aceleración gráfica y elementos multimedia integrados. ¿Seráverdad todo esto?

<<

David Carmona

dnm.plataforma.net

Windows Presentation Foundation

David CarmonaEs Development Advisor en laDivisión de Desarrolladores y

Plataforma (DPE) de MicrosoftIbérica, ayudando a los

desarrolladores y empresasespañolas en la adopción de laplataforma de desarrollo .NET

En la mente de los arquitectos de WPF siempre ha estado la misma

máxima: conseguir un modelohíbrido entre el desarrollo

de aplicaciones Web y Windows

Page 33: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Veamos un ejemplo de archivo XAML:

El espacio de nombres http://schemas.microsoft.com/winfx/xaml/2005 es el que define los elementos básicosde XAML y permite añadir extensiones que mapean ele-mentos XML con clases de .NET. Aunque podemos aña-dir nuestras propias extensiones para modelar declarati-vamente cualquier conjunto de objetos, XAML ya tienedefinidas las extensiones de WPF en el espacio de nom-bres http://schemas.microsoft.com/winfx/avalon/2005. Aquíes donde encontramos los elementos Window, Button,Label o GeometryModel3D, piezas básicas de WPF. Porúltimo el atributo Class indica al compilador la clase code-behind asociada a este XAML. Esto nos recuerda aASP.NET, donde podemos tener un archivo declarati-

vo con los elementos del interfaz grá-fico y otro con la clase parcial queimplementa el código de la lógica depresentación. Ahí es donde coloca-remos los manejadores de eventos,inicializadores y cualquier lógica quequeramos añadir a nuestro interfaz.En el ejemplo podemos crear unaclase que muestre un mensaje al pul-sar el botón:

Una vez que tengamos el fichero XAML, ¿quépodemos hacer con él? La opción más común consis-te en generar un ensamblado ejecutable a partir detodos los archivos XAML y las clases parciales corres-pondientes. El resultado es una aplicación Windowsque utiliza WPF como interfaz. Las tripas de este pro-ceso son un poco complejas, porque realmente se pro-duce en dos pasos. Primero tenemos que compilar elfichero XAML en un formato llamado BAML que esuna representación binaria y optimizada de XAML.Después tenemos que crear una clase parcial que com-plemente a la clase con el code-behind y que se encar-

gue de cargar dinámicamente este BAML que estáalmacenado como recurso incrustado en el ejecuta-ble. El resultado es un tamaño de ejecutable muypequeño porque no se genera todo el código de ini-cialización como en Windows Forms, pero con untiempo de inicialización muy bajo porque no se tieneque procesar el fichero XML.

Afortunadamente todo este proceso se realizaautomáticamente por Visual Studio 2005 (una vezinstalamos las utilidades de WinFX) o directamen-te por MSBuild, que incluye las reglas necesariaspara la correcta generación de aplicaciones WPF.La figura 1 muestra el resultado de compilar elXAML anterior.

La otra opción para mostrar un fichero XAMLconsiste en cargarlo directamente desde una aplica-ción. WPF permite procesar en tiempo de ejecucióneste XAML y crear los objetos correspondientes diná-micamente, lo que nos permite algo muy novedoso:cargar y generar nuevas pantallas en nuestra aplica-ción dinámicamente, lo que de nuevo nos recuerda ala programación Web.

Para darle todavía más potencia hay que añadir tam-bién las distintas posibilidades de despliegue que sopor-ta WPF. Por una parte, al estar hablando de ensam-blados ejecutables, tenemos a nuestra disposición todaslas técnicas actuales de despliegue como Copy & Paste,Windows Installer, No Touch Deployment o Click Once.Estas técnicas permiten ejecutar de forma más o menosintrusiva la aplicación generada en la máquina de des-tino. El resultado en todas ellas es una aplicación lan-zada en una ventana independiente y que, dependien-

dotN

etM

anía

<<

33

dnm.plataforma.net<<

<Window x:Class=”Window1”xmlns=”http://schemas.microsoft.com/winfx/avalon/2005”xmlns:x=”http://schemas.microsoft.com/winfx/xaml/2005”Text=”AVALONApplication1”><Button Name=”Button1”>Púlsame</Button>

</Window>

Fuente 1

Fuente 2

Figura 1. Aplicación WPF

La primera gran lección de WPF puede dejarle confuso:los controles no existen

Partial Public Class Window1Inherits Window

Private Sub ButtonClick(ByVal sender As Object, _ByVal e As RoutedEventArgs) Handles Button1.Click

MessageBox.Show(“Soy feliz”)End Sub

End Class

Page 34: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

do de las opciones de configuración, se ejecuta con lospermisos del usuario.

Hasta aquí nada nuevo en el despliegue, pero yahemos dicho que WPF tiene mucho de la Web. Unavez más podemos verlo reflejado en una nueva for-ma de despliegue denominada Aplicación Express. Lasaplicaciones Express son un híbrido entre una apli-cación Windows y una Web. Cuando desplegamosuna aplicación Express el usuario navega a una URLcon su navegador donde se encuentra publicada laaplicación. En lugar de lanzar la aplicación en unaventana independiente la experiencia del usuario serála misma que la de una aplicación web. Las pantallasXAML se mostrarán dentro del navegador y podránavegar hacia delante o hacia atrás en su historial depáginas XAML. Todo esto con una gran diferencia:la potencia gráfica y la facilidad de desarrollo de WPF.La aplicación anterior desplegada de forma Expressse muestra en la figura 2. Sí, ya sé que este formula-rio no es espectacular, pero espere al resto del artí-culo.

Posicionamiento de controlesSin duda una de las ventajas del desarrollo de

aplicaciones Web es su facilidad para establecerdistintos layouts en el diseño. Aunque en un prin-cipio HTML estaba enfocado a documentos y suposicionamiento se hacía de forma flotante, pocoa poco se empezaron a utilizar posicionamientosmás complejos como las tablas o el absoluto que

proporcionaba los estilos CSS. Si bien WindowsForms 2.0 ya incorpora algunos de estos posicio-namientos, WPF proporciona controles muchomás potentes para un manejo complejo del posi-cionamiento.

El más común es el Canvas, que nos permiteespecificar el posicionamiento en coordenadasabsolutas:

El contenedor TextFlow nos recuerda a nuestroviejo amigo HTML porque permite posicionar loselementos de forma flotante, uno detrás de otro yteniendo en cuenta el ancho de ventana:

El contenedor TextFlow también puede albergartexto, incluso con formato. Esto nos permite gene-

dotN

etM

anía

<<

34

dnm.plataforma.net<<

Figura 2. Aplicaciones Express

<Canvas><Button Canvas.Top=”20” Canvas.Left=”20”

Name=”Button1”>Púlsame</Button>

</Canvas>

Fuente 3

Figura 3. Posicionamiento absoluto

<TextFlow><Button>Púlsame</Button><Ellipse Width=”80” Height=”40” Fill=”PaleGreen”/><ListBox>

<ListBoxItem>Elemento 1</ListBoxItem><ListBoxItem>Elemento 2</ListBoxItem>

</ListBox></TextFlow>

Fuente 4

Figura 4. Posicionamiento flotante

Cualquier control en WPF es a su vez un contenedor

Page 35: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

rar interfaces de usuario en forma documento, muy alestilo de las páginas Web:

Otros posicionamientos son el Grid, que permitealinear controles en filas y columnas; el StackPanel,que posiciona los controles uno debajo de otro; o elDockPanel, que se acopla a los bordes de la ventana.

ControlesLa primera gran lección de WPF puede dejar-

le confuso: los controles no existen. Si recordamosWin32, todo el interfaz gráfico se componía a par-tir de controles básicos como cajas de texto, listasdesplegables o etiquetas. Sin embargo, WPF estáconstruido desde cero, apoyándose en DirectX ycon nada en común con Win32. Nunca más ten-dremos estos controles y lo más importante es quetampoco tenemos esas piezas básicas equivalentes.Los controles primitivos de WPF son mucho másbásicos que los de Win32 y sólo permiten dibujarobjetos simples como líneas, polígonos, elipses, tex-to o imágenes.

Si los controles no existen, ¿qué era lo que mos-trábamos en el formulario de ejemplo anterior?Desde luego parecían cajas de texto, listas o textoscon formato, pero no eran controles primitivos sinosimplemente anidaciones de controles ya existen-tes. Cuando incluimos un botón o una caja de tex-to en WPF realmente estamos añadiendo un con-tenedor con infinidad de controles primitivos den-tro. En el caso de una caja de texto cada línea es uncontrol distinto para el borde, la sombra, la caretadel texto, etc. Todos estos controles forman partede la propiedad Template y como veremos más ade-lante puede sobrescribirse.

De hecho esto implica que cualquier control enWPF es a su vez un contenedor. Por ejemplo elsiguiente archivo XAML muestra un botón que a suvez incluye una imagen, una elipse y una caja de tex-to completamente funcional (resultado en figura 6):

WPF ya incluye numerosos controles realizadoscon esta técnica que permiten una personalizacióncompleta. Entre ellos encontrará listas, cajas de tex-to, menús, barras de herramientas, tooltips y otros queirán viendo la luz en posteriores versiones prelimina-res de WPF.

EstilosOtra lección aprendida en WPF del interfaz Web

son los estilos. Un estilo permite modificar la apa-riencia de los controles según su tipo o familia. Estoes algo a lo que estábamos acostumbrados con las hojasde estilo en cascada (CSS) y tiene en WPF un fun-cionamiento básico similar:

dotN

etM

anía

<<

35

dnm.plataforma.net<<

<TextFlow><Button>Púlsame</Button>Algo de texto <Bold>con formato</Bold><Ellipse Width=”80” Height=”40” Fill=”PaleGreen”/><ListBox>

<ListBoxItem>Elemento 1</ListBoxItem><ListBoxItem>Elemento 2</ListBoxItem>

</ListBox></TextFlow>

Fuente 5

Figura 5. Texto y controles

<Button><StackPanel><Ellipse Width=”80” Height=”40” Fill=”PaleGreen”/><Image Width=”80” Height=”80” Source=”follow.jpg”/><TextBox>Púlsame</TextBox>

</StackPanel></Button>

Fuente 6

Figura 6. Controles anidados

Los estilos de WPF van mucho más allá que los de CSS y permiten

por ejemplo definir un comportamiento dinámico

Page 36: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

El resultado puede verse en la figura 7. En estecaso hemos establecido el estilo de todos los contro-les de tipo Elipse, aunque al igual que en CSS pode-mos restringir el estilo a una subfamilia de controlesnombrados.

Pero esto es sólo el principio. Los estilos de WPFvan mucho más allá que los de CSS y permiten, por ejem-plo, definir un comportamiento dinámico. El siguientecódigo muestra las elipses de color verde pero cambia arojo cuando pasamos el ratón sobre ella:

Si el control al que estamos aplicando un estilo estáformado a su vez por otros podemos incluso sobrescri-bir el árbol de controles para mostrar otra cosa. Esto nospermite cambiar por completo la apariencia de los con-troles básicos y uniéndolo a los estilos dinámicos, con-seguir efectos muy espectaculares. De hecho todos loscontroles de WPF están desarrollados con esta técnicay modifican su apariencia de forma dinámica (por ejem-plo añadiendo una sombra al botón cuando pasamos elratón sobre él). En este código sobrescribimos la apa-riencia de un botón:

Transformaciones

Si todo el interfaz gráfico generado por los con-troles de WPF está formado finalmente por líneas ypolígonos resulta trivial aplicarle una transformaciónespacial. Estas transformaciones se realizan en el pro-pio pipeline de la tarjeta gráfica, con lo que no supo-ne prácticamente ningún coste en rendimiento.

Para aplicar una transformación utilizamos los ele-mentos LayoutTransform y RenderTransform. En el pri-mero la transformación aplica también al posiciona-miento de los elementos de layout, mientras que lasegunda sólo afecta al renderizado de los controles.En el siguiente ejemplo rotamos y escalamos todo eltexto de la ventana:

dotN

etM

anía

<<

36

dnm.plataforma.net<<

<Window.Resources><Style TargetType=”{x:Type Ellipse}”>

<Setter Property=”Fill” Value=”PaleGreen”/><Setter Property=”Stroke” Value=”Green”/><Style.Triggers>

<Trigger Property=”IsMouseOver” Value=”True”><Setter Property=”Fill” Value=”Red”/><Setter Property=”Stroke” Value=”DarkRed”/>

</Trigger></Style.Triggers>

</Style></Window.Resources>

Fuente 8

<Window.Resources><Style TargetType=”{x:Type Button}”><Setter Property=”Template”><Setter.Value>

<ControlTemplate TargetType=”{x:Type Button}”><Grid><Rectangle RadiusX=”5” RadiusY=”5”

Fill=”HorizontalGradient PaleGreen White”Stroke=”green”/>

<ContentPresenter Margin=”15 5 5 5”/></Grid></ControlTemplate>

</Setter.Value></Setter></Style>

</Window.Resources>

Fuente 9

Figura 8. Botón con estilo modificado

<TextFlow><TextFlow.LayoutTransform>

<TransformGroup><ScaleTransform ScaleX=”2” ScaleY=”2”/><RotateTransform Angle=”30”/>

</TransformGroup></TextFlow.LayoutTransform><Button>Púlsame</Button>Algo de texto <Bold>con formato</Bold><Ellipse Width=”80” Height=”40” Fill=”PaleGreen”/><ListBox>

<ListBoxItem>Elemento 1</ListBoxItem><ListBoxItem>Elemento 2</ListBoxItem>

</ListBox></TextFlow>

Fuente 10

<Window.Resources><Style TargetType=”{x:Type Ellipse}”>

<Setter Property=”Fill” Value=”PaleGreen”/><Setter Property=”Stroke” Value=”Green”/>

</Style></Window.Resources>

<StackPanel><Button>Púlsame</Button><Ellipse Width=”80” Height=”40”/>

</StackPanel>

Fuente 7

Figura 7. Estilos

Page 37: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Animaciones y video

En Win32 estamos acostumbrados a definir inter-faces gráficos que se pintan directamente sobre el áreade la pantalla. Esto produce que al modificar la apa-riencia de nuestro interfaz en tiempo real nos encon-tremos con un efecto visual no deseado llamado flic-kering. El flickering se produce al modificar un ele-mento de forma suave en mitad de un barrido verti-cal de nuestro monitor y en Win32 sólo podía ser evi-tado utilizando la técnica de doble búfer, que compli-caba el desarrollo y consumía unos recursos precio-sos que impedían realizar animaciones suaves (o lo quees lo mismo con un número suficiente de fotogramaspor segundo).

En WPF la historia cambia radicalmente. Loscontroles no se pintan directamente sobre la pan-talla, sino que se definen como líneas y polígonosen la tarjeta gráfica. Cuando llega la hora de pintarel contenido sobre la pantalla, WPF utiliza auto-máticamente un doble búfer en la propia tarjeta grá-fica. Esto hace que el intercambio de búfer sea prác-ticamente instantáneo y que no se requiera ni siquie-ra el acceso a la memoria física del sistema. Estatécnica es la que se utiliza en los videojuegos y elresultado es espectacular, consiguiendo un altísimonúmero de fotogramas por segundo.

La definición de una animación en WPF se rea-liza con un nuevo elemento XAML denominadoStoryboard. Podemos decir que el Storyboard defi-ne los cambios que se producen en el interfaz res-pecto al tiempo y permite crear complejas anima-ciones. El principal potencial de estos Storyboardses la capacidad de modificar en tiempo real cual-quier propiedad definida en un elemento XAML.Esto hace que podamos animar desde el color deun control hasta una transformación espacial o unestilo.

El siguiente ejemplo modifica el ancho de un botóndinámicamente:

Precisamente el que el interfaz se dibuje directamenteen la tarjeta gráfica nos permite realizar cosas hasta aho-ra impensables en Win32. WPF es capaz de utilizar fuen-tes de vídeo que se generan también en la memoria dela tarjeta gráfica como superficies DirectX. Esto haceque podamos mostrar cualquier vídeo dentro de nues-tro interfaz de forma completamente integrada. El ele-mento XAML para conseguirlo se llama MediaElement yes un control primitivo de primer orden en WPF quepuede ser utilizado como cualquier otro. Esto implicaque cualquiera de sus propiedades puede ser animada,que se puede utilizar para componer otros controles, esti-lizar o incluso aplicar transparencias o transformacionescomplejas. En este ejemplo hemos insertado un controlde video que rota en la pantalla y que tiene una transpa-rencia para ver el resto de controles a través de él:

dotN

etM

anía

<<

37

dnm.plataforma.net<<

Figura 9. Transformaciones

<TextFlow><Button Name=”Button1”>Púlsame</Button>

</TextFlow>

<Window.Storyboards><ParallelTimeline>

<SetterTimeline TargetName=”Button1” Path=”(Button.Width)”><DoubleAnimation From =”150” To=”200”

Duration=”0:0:2” RepeatBehavior=”Forever”AutoReverse=”True”/>

</SetterTimeline></ParallelTimeline>

</Window.Storyboards>

Fuente 11

<Canvas>

<TextFlow><Button>Púlsame</Button>Algo de texto <Bold>con formato</Bold><Ellipse Width=”80” Height=”40” Fill=”PaleGreen”/><ListBox>

<ListBoxItem>Elemento 1</ListBoxItem><ListBoxItem>Elemento 2</ListBoxItem>

</ListBox></TextFlow>

<MediaElement Opacity=”.5” Name=”MiVideo”Source=”YoRobot.wmv” Width=”600”Height=”300” Stretch=”Fill”>

<MediaElement.RenderTransform><RotateTransform Center=”300 150” Angle=”20”/>

</MediaElement.RenderTransform></MediaElement>

</Canvas>

Fuente 12

Page 38: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Objetos tridimensionales

A estas alturas se estará preguntando dónde está elfamoso interfaz tridimensional del que tanto se habla-ba en Avalon. Seguramente no me creerá pero todo loque hemos estado viendo hasta ahora es tridimensio-nal, la única diferencia es que lo está viendo justo defrente. Todo el interfaz de WPF se renderiza utilizan-do Direct3D que por definición sólo permite objetosen tres dimensiones. Lo que ha ocurrido hasta ahoraes que por defecto todos los controles de WPF estáncolocados sobre un plano bidimensional y el observa-dor está siempre colocado delante de este plano. Porsupuesto esto se puede cambiar y añadir a su escena unobjeto realmente tridimensional. Para ello podemosutilizar el elemento XAML GeometryModel3D. Las posi-bilidades de esto son infinitas y permitirá desarrollaraplicaciones hasta ahora impensables. Los modelos tri-dimensionales pueden ser utilizados dentro de un inter-faz como un control cualquiera, con lo que puede pen-sar en realizar animaciones, composiciones o transpa-rencias sobre ellos. La superficie de cualquier objetotridimensional puede ser cualquier brocha de WPF yesto incluye colores continuos, gradientes, transpa-rencias, patrones, imágenes, vídeos o (agárrese) otrosinterfaces XAML. ¿Se imagina un formulario proyec-tado sobre un cubo tridimensional?

Documentos

Antes hemos pasado muy por encima por elcontrol TextFlow. Hemos comentado que este con-tenedor permite posicionar sus elementos en for-ma flotante, al estilo de un documento. Tambiénpermite insertar elementos de texto y aplicarle elformato que queramos. Como ve, esto se parecemucho a un documento y de hecho sólo le separala capacidad para definir el contenido en un fiche-ro independiente y mayores opciones de posicio-namiento y estilizado.

El control DocumentViewer permite precisamenteestas dos cosas. Por un lado podemos cargar diná-micamente en su interior un fichero XAML que defi-na el contenido a mostrar y por otra parte tiene mayo-res capacidades como la posibilidad de crear listas,párrafos o columnas. El resultado es un potente visorde XAML que tiene una apariencia similar a un docu-mento pero que nos permite utilizar todas las carac-terísticas de WPF:

dotN

etM

anía

<<

38

dnm.plataforma.net<<

Figura 11. Objeto tridimensional

<DocumentViewer><FlowDocument>

<Paragraph FontSize=”15”>Éste es un ejemplo de<Bold>documento</Bold></Paragraph><List>

<ListItem><Paragraph>Elemento 1</Paragraph>

</ListItem><ListItem>

<Paragraph>Elemento 2</Paragraph></ListItem>

</List></FlowDocument>

</DocumentViewer>

Fuente 13

Figura 10

Precisamente el que el interfaz se dibuje directamente en la tarjeta gráfica nos permite realizar cosas hasta ahora impensables en Win32

Page 39: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

El resultado, como puede verse en la figura 12, esuna vista preliminar del contenido XAML en formade documento.

¿Hasta dónde podemos llegar con XAML paradefinir estos documentos? Con el documento flo-tante podemos conseguir documentos que se ajus-tan automáticamente al contenedor y en los quepodemos crear párrafos, secciones, columnas ydemás elementos típicos necesarios para un docu-mento. Si lo que buscamos es un documento fide-digno a un formato, en el que se definen al milí-metro las posiciones de los elementos y el tamañode cada página podemos recurrir a los documentosfijos. Estos documentos también se pueden mostraren un control DocumentViewer y tienen un papel muyrelevante en la estrategia de Microsoft en cuanto ala distribución de documentos.

Para crear un documento fijo sólo tenemos queusar el contenedor XAML FixedDocument y posicio-nar en coordenadas absolutas sus elementos. El resul-tado de un documento creado con esta técnica se mues-tra en la figura 13.

Estos documentos XAML pueden también serempaquetados en unidades comprimidas donde seincluyen las fuentes utilizadas, las imágenes y cualquierrecurso adicional que se necesite. Este formato com-primido se denomina XPS (nombre en clave Metro)y será la apuesta de Microsoft en lo que se refiere adefinición y distribución de documentos. También ser-virá como formato para la impresión de documentosy será la base del nuevo modelo de impresión que incor-porará Windows Vista. Para hacernos una idea de lapotencia de XPS, sólo decir que el documento mos-trado en la figura 13 se ha realizado a partir de un docu-mento Word, impreso con el nuevo driver de impre-sión de Vista. El resultado es un archivo XAML conla misma apariencia visual que el documento originalde Word, pero con toda la potencia de WPF. Y comomuestra, un botón: en la figura 14 hemos insertado enmitad del documento un elemento MediaElement quemuestra un vídeo mezclado con el contenido. Todo loque hemos visto en este artículo se aplica a los docu-mentos, con lo que prepárese para ver documentosdinámicos con animaciones, objetos tridimensionales,vídeos, transparencias y controles de entrada de datosque se mezclan con el contenido del documento.¿Estamos ante el inicio de la biblioteca de documen-tos virtual de Minority Reports o Acoso?

dotN

etM

anía

<<

39

dnm.plataforma.net<<

Figura 12. Vista documento

Figura 13. Vista de un documento fijo

Figura 14. Añadiendo un video a un documento

Cuando llega la hora de pintar el contenido sobre la pantalla,WPF

utiliza automáticamente un doble búferen la propia tarjeta gráfica

Page 40: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Cómo instalar un certificado digital SSL en IIS 6.0

En este artículo se describe paso a paso cómo conseguir e instalar un certifi-cado digital SSL en un equipo con la versión 5.0 o 6.0 de Microsoft InternetInformation Server (IIS) para conseguir que nuestro sitio Web transmita datosconfidenciales de forma segura.Es una de las preguntas mas frecuentes de losforos de IIS en microsoft.public .es.iis.

<<

Los certificados SSL son ideales para la seguridad desitios Web, intranets y extranets que requieran la trans-misión de datos confidenciales (nombres de usuario, cla-ves, datos personales, etc.) a través de un canal insegurocomo Internet. Con ellos vamos a conseguir dos cosas:

1) Autenticación de la identidad del sitio Web remo-to por medio de la entidad certificadora (CA) inter-mediaria que nos va a garantizar que el sitio Webes de quien dice ser y no de un falso atacante quequiere recoger nuestros datos.

2) Confidencialidad de los datos que se transmitenentre el servidor y el receptor, pues al ir los datoscifrados a través de un canal seguro, aunque lointercepte un tercero no va a poder leerlos por-que no están en texto plano sino codificados conun algoritmo de encriptación cuya fuerza depen-de del número de bits del certificado elegido.

3) Integridad de los datos que nos garantiza que losdatos enviados no han sido interceptados y modi-ficados por un atacante.

Las fases que tienen lugar durante una sesión segu-ra con SSL son las siguientes:

1. El navegador del usuario contacta con el servi-dor usando una URL segura que empieza porhttps://.

2. El servidor Web IIS envía al navegador su cla-ve pública y el certificado del servidor.

3. El cliente y el servidor negocian el nivel deencriptación que se va a usar en la comunica-ción segura.

4. El navegador del cliente encripta la clave de lasesión con la clave pública del servidor y envíalos datos encriptados de vuelta al servidor.

5. El servidor web IIS desencripta el mensajeenviado por el cliente usando su clave privaday la sesión se establece.

6. Tanto el cliente como el servidor usan la clavede sesión para encriptar y desencriptar los datostransmitidos.

Los pasos para conseguir un certificado digital ennuestro servidor IIS son los siguientes:

Paso 1 Cree una solicitud de certificadoEl servidor Web primero debe realizar una soli-

citud de certificado. Para ello, siga estos pasos: 1 Inicie el Administrador de servicios Internet (ISM) que

carga el complemento de Internet Information Serverdel Microsoft Management Console (MMC). Para ello,haga clic en “Inicio”, seleccione “Programas”, selec-cione “Herramientas” administrativas y a continua-ción, haga clic en “Administrador de serviciosInternet”.

2 Haga doble clic en el nombre de servidor para vertodos los sitios Web.

3 Haga clic en el sitio Web en el que desea instalarel certificado y haga clic en “Propiedades”.

Sergio Vázquez

dnm.servidores.iis

¿Para qué me sirve un certificado digital SSL enmi sitio web?

Sergio VázquezEs vicepresidente de gusenet.comTrabaja de consultor e-Business

en pangeaes.com, empresaMicrosoft Certified Partner. Es

Ingeniero Superior enInformática,MCP y mantiene elsitio Web www.mutisdotnet.com

sobre tecnologías .NET.

Page 41: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

4 Haga clic en la ficha “Seguridad dedirectorios” y a continuación, hagaclic en “Certificado de servidor” en“Comunicaciones seguras” para ini-ciar el asistente para certificados deservidor Web.

5 Se iniciará un asistente de certifica-do de servidor Web, y haga clic en“Siguiente”.

6 En el primer paso del asistente selec-cionamos el método para asignar uncertificado Web en el sitio Web.Seleccione “Crear un certificado nue-vo” y haga clic en “Siguiente” comose aprecia en la figura 1.

7 En el segundo paso haga clic en“Siguiente” para preparar una peti-ción de un certificado para enviár-sela a la entidad emisora de certifi-cados como se ve en la figura 2.

8 En el tercer paso asigne un nombre asu certificado. Quizás desea coincidircon el nombre del sitio Web con ello.Seleccione ahora una longitud en bits, en nuestro caso vamos a seleccionarun certificado de 1024 bits como sepuede ver en la figura 3.

9 Escriba su nombre de organizacióny la unidad organizativa: “nombrede la empresa” e "Informática", porejemplo, como se ve en la figura 4.Haga clic en “Siguiente”.

10 Escriba el nombre de dominio com-pleto (FQDN) o el nombre de servi-dor como el nombre común. Si estácreando un certificado que se utiliza-rá en el Internet, es preferible utilizarun FQDN (por ejemplo, www.misi-tioweb.com como se ve en la figura 5)pero si lo vamos a usar solamente den-tro de una intranet debemos poner sunombre NETBIOS, por ejemplo,SERVIDORINTRANET. Haga clicen “Siguiente”.

11 Escriba su información geográficacon el país, provincia y ciudad y acontinuación como se ve en la figu-ra 6, haga clic en “Siguiente”.

12 Escriba el nombre de ruta de accesoy archivo para guardar la informaciónde certificado y hacer clic en“Siguiente” como se ve en la figura 7.

13 Compruebe la información que haescrito en la figura 8 y a continua-ción, haga clic en “Siguiente” paraterminar el proceso y crear la soli-citud de certificado.

dotN

etM

anía

<<

41

dnm.servidores.iis<<

Figura 1

Figura 2

Figura 3

Figura 4

Figura 5

Figura 6

Figura 7

Figura 8

Page 42: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Paso 2 Envíe la solicitud decertificado

La solicitud de certificado que acaba-mos de crear debe enviarse a una entidademisora de certificados (CA). Esto puedeser su propio servidor de certificados enquien confía con Certificate Server insta-lado o una entidad emisora de certifica-dos independiente como VeriSign oThawte en línea.

El documento de solicitud de cer-tificado c:\certreq.txt se puede abrircon el bloc de notas y debería pare-cerse a este:

Puede solicitarlo en las siguientesdirecciones: http://www.thawte.com yhttp://www.verisign.es

Recuerde que hay que solicitar uncertificado Web SSL de 128 bits y ellosse encargarán de comprobar el domi-nio. Su coste aproximado anual en thaw-te.com es de 149$ y se puede renovarperiódicamente como los dominios deInternet. También es posible solicitarun certificado de prueba durante untiempo limitado.

Debemos darle a la entidad emisora la siguiente información aparte de los datos de pago y de fac-turación como se ve en esta URL:https://www.thawte.com/process/retail/new_ssl123?language=en&productInfo.productType=fssl2.

• El fichero certreq.txt con la peti-ción del certificado que hemosgenerado en el paso 1.

• El servidor Web en el que insta-laremos el certificado: IIS 5.x osuperior.

• Los mismos datos geográficos ynombre de la organización.

• El mismo dominio que hemospuesto para que funcione correc-tamente.

• Datos del contacto técnico yadministrativo del sitio Web.

El fichero de instalación de certificadoque nos da la entidad emisora debe ser enformato de archivo de exportación X.509codificado en Base 64 con extensión .CERpara poder instalarlo en nuestro InternetInformation Server.El fichero .CER con elcertificado se puede abrir con el bloc denotas y tendrá el siguiente formato:

Paso 3 Instale el certificado yconfigure un sitio Web de SSL

Para instalar el certificado que nosha emitido la autoridad de certificaciónen el paso anterior, siga estos pasos:1 Abra el Administrador de servicios

Internet y expanda el nombre de ser-vidor para poder ver los sitios Web.

2 Haga clic en el sitio Web para elque creó la solicitud de certificadoy para el que hace clic en“Propiedades”.

3 Haga clic en la ficha “Seguridad dedirectorios”. En “Comunicacionesseguras”, haga clic en “Certificado deservidor”. Esto inicia el asistente parala instalación de certificado. Haga clicen “Siguiente” para continuar.

4 Seleccione “Procesar” la peticiónpendiente e instalar el certificadocomo se ve en la figura 9 y haga clicen “Siguiente”.

5 Escriba la ubicación del certificadoque descargó (figura 10) y haga clic en“Siguiente”. El asistente muestra elresumen del certificado. Compruebeque la información es correcta y

entonces haga clic en “Siguiente” paracontinuar.

6 Haga clic en “Finalizar” para com-pletar el proceso.El cifrado SSL de 128 bits es literal-

mente trillones de veces más potente queel cifrado SSL de 40 bits y nunca ha podi-do descifrarse. Por otro lado, se sabe que

dotN

etM

anía

<<

42

dnm.servidores.iis<<

-----BEGIN CERTIFICATE----- MIIDYTCCAsqgAwIBAgIDIVm2MA0GCSqGSIb3DQEBBAUAMIHEMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xHTAbBgNVBAoTFFRoYXd0ZSBDb25zdWx0aW5nIGNjMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMRkwFwYDVQQDExBUaGF3dGUgU2VydmVyIENBMSYwJAYJKoZIhvcNAQkBFhdzZXJ2ZXItY2VydHNAdGhhd3RlLmNvbTAeFw0wNTA2MTQwOTAwNDBaFw0wNjA2MTQwOTAwNDBaMIHAMSAwHgYDVQQKExdleHRyYW5ldC5zbWFydG1hcmtldC5lczEZMBcGA1UECxMQRG9tYWluIFZhbGlkYXRlZDE7MDkGA1UECxMyR28gdG8gaHR0cHM6Ly93d3cudGhhd3RlLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwxIjAgBgNVBAsTGVRoYXd0ZSB-TU0wxMjMgY2VydGlmaWNhdGUxIDAeBgNVBAMTF2V4dHJhbmV0LnNtYXJ0bWFya2V0LmVzMIGfMA0GCSqGSIb3DQE-BAQUAA4GNADCBiQKBgQDuVk77xPokuTM5Wx09xE9GJX5Jj2xLI4dhIbcMTCZFoMi6ty2iZ/ORP73Z5J/mOx+EjW+nD5wNVanY7gzgvZERel0zmrQqW6c3hYFy+J/PW3V7lRMgdwimcxdc3nZCjGG7vhQzhO/2T/XbbmWRAKQ/2dpOZ+MK3jC/1EObCgLArwIDAQABo2MwYTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzABhhZodHRwOi8vb2NzcC50aGF3dGUuY29tMAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQEEBQADgYEAgAwTAlPCo03oj5YoRt+o4sPwB0ZiG6uCJYesr8+19BVrbzDQozUfqeyRmVnXVTCimfXl++tPyOatbtk59dy/0Bnwly9Fa6PGdBdSvEIPg1mpPIDO8S/ZBS6JxsmBrW2eJVg5xJS+DC/n/XA+xCAJQS8xqUzz6Ss1E7Po2Bu5M2o=-----END CERTIFICATE-----

-----BEGIN NEW CERTIFICATE REQUEST----- MIICcjCCAhwCAQAwYjETMBEGA1UEAxMKcm9ic3NlcnZlcjELMAkGA1UECxMCTVMxCzAJBgNVBAoTAk1TMREwDwYDVQQHEwhCZWxsZXZ1ZTERMA8GA1UECBMIV2FzaGl0b24xCzAJBgNVBAYTAlVTMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALYK4sYDNQ7hLmSfL0qpIvUfY7Ddw7fNCvDp3rM7z4QqoLhA2c8TkyamqWTBsV0WRHIidf/J6mU4wN4wrUzJTLUCAwEAAaCCAVMwGgYKKwYBBAGCNw0CAzEMFgo1LjAuMjE5NS4yMDUGCisGAQQBgjcCAQ4xJzAlMA4GA1UdDwEB/wQEAwIE8DATBgNVHSUEDDAKBggrBgEFBQcDATCB/QYKKwYBBAGCNw0CAjGB7jCB6wIBAR5aAE0AaQBjAHIAbwBzAG8AZgB0ACAAUgBTAEEAIABTAEMAaABhAG4AbgBlAGwAIABDAHIAeQBwAHQAbwBnAHIAYQBwAGgAaQBjACAAUAByAG8AdgBpAGQAZQByA4GJAGKa0jzBn8fkxScrWsdnU2eUJOMUK5Ms87Q+fjP1/pWN3PJnH7x8MBc5isFCjww6YnIjD8c3OfYfjkmWc048ZuGoH7ZoD6YNfv/SfAvQmr90eGmKOFFiTD+hl1hM08gu2oxFU7mCvfTQ/2IbXP7KYFGEqaJ6wn0Z5yLOByPqblQZAAAAAAAAAAAwDQYJKoZIhvcNAQEFBQADQQCgRCWkaXlY2nVatbn6p5miPwWfrbViYo0B62wkuH0f7J0nSGcxMnn/6Q/iLEIsgHqFhox5PWCzIV0J tXKPWrBL-----END NEW CERTIFICATE REQUEST-------

Figura 10

Figura 9

Page 43: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

el cifrado de 40 bits es vulnerable inclusoa los ataques realizados con recursos infor-máticos muy rudimentarios.

Paso 4 Pruebe el certificadoPara configurar y probar el certifica-

do, suponiendo que queremos que seaobligatorio su uso en nuestro sitio Web,siga estos pasos: 1 En la ficha “Seguridad de directo-

rios” en “Comunicaciones seguras”,anote que hay ahora tres opcionesdisponibles. Para establecer el sitioWeb para requerir conexiones segu-ras, haga clic en “Modificar”. El cua-dro “Comunicaciones seguras” dediálogo aparece como se ve en lafigura 11.

2 Seleccione “Requerir Canal Seguro(SSL)” y haga clic en “Aceptar”.

3 Haga clic a continuación en “Aceptar”para cerrar la hoja de propiedades.

4 Vaya al sitio Web y compruebe que funciona poniendo la direcciónhttps://www.misitioweb.com. Debeaparecer un candado en la barra deestado del navegador. Al hacer dobleclic sobre el mismo debe apareceruna nueva ventana como la de lafigura 12 donde se puede ver lainformación del certificado, los deta-lles y su estado para comprobar quees auténtico y comprobar que es uncertificado válido.

Entre los detalles más importantesque podemos ver están los siguientes:

• Emisor del certificado.• Validez del certificado.

Si no se ve el sitio Web con HTTPSpuede ser porque no ha abierto el puer-to 443 de comunicaciones SSL en el ser-

vidor o en el router que da acceso al mis-mo desde Internet o en el firewall. Esel puerto por defecto que usa, aunquese puede cambiar desde las propiedadesdel sitio Web.

En la figura 13 podemos ver detallesde un certificado digital HTTPS de 128bits como el que hemos creado.

No olvidéis verificar que el certifica-do no esté caducado y sea válido, cosa quepodéis ver en la Ruta de certificación.También hay que ser conscientes de queel certificado no nos protege de conoci-dos ataques de aplicaciones web talescomo sql injection, cross site scripting osecuestro de cookies por poner un ejem-plo. Esto lo tendremos que hacer enASP.NET a nivel de aplicación.

ConclusionEn aplicaciones Web que usen auten-

ticación basada en formularios Web oautenticación básica y transmitan datosconfidenciales es necesario emplear cer-tificados digitales SSL para protegernosde los atacantes indeseados si no quere-mos llevarnos sorpresas.

dotN

etM

anía

<<

43

dnm.servidores.iis<<

NOTA

La “potencia” de una sesión SSL se basa en la longitud de laclave que se intercambia entre el cliente y el servidor cuando senegocia por primera vez una sesión SSL. El cifrado más potenteque existe en los navegadores actuales es de 256 bits, lo que signi-fica que la clave de la sesión es de una longitud de 256 bits. ][

Figura 11

Figura 12

Figura 13

Microsoft® IIS 6.0 Administrator's Pocket Consultant William R. StanekEditorial: MicrosoftPáginas: 480ISBN: 0735615608Publicado en abril de 2003Idioma: Inglés

http://www.microsoft.com/MSPress/books/5804.asp

bibliografía

Page 44: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Acceso a bases de datos Oracle desde Delphi 2005

El desarrollador de aplicaciones y servicios .NET tiene a su disposición diferentesalternativas para acceder a bases de datos Oracle a través de ADO.NET.

anterior [1] presentamos las diferentesalternativas para el acceso a bases de datos que ofre-ce Delphi 2005 al desarrollador de aplicaciones yservicios .NET. Concretamente, presentamos bre-vemente las opciones que ofrece la VCL.NET, lalibrería de compatibilidad con Delphi Win32, paraluego centrarnos en las alternativas basadas enADO.NET y particularmente en el Proveedor deDatos de Borland (BDP - Borland Data Provider), unaimplementación de la arquitectura de ADO.NETpara facilitar el tratamiento genérico de diferentesbases de datos, haciendo posible a la vez un accesode alto rendimiento a las mismas.

Este artículo presenta, indicando sus ventajas y posi-bles inconvenientes, las principales alternativas disponi-bles para acceder directamente desde aplicaciones basa-das en ADO.NET y creadas con Delphi 2005 a bases dedatos Oracle, una de las más populares del mercado.Inicialmente se presentan las alternativas “nativas” basa-das en los componentes que ofrece de manera predefi-nida la plataforma .NET; a continuación, se describe elacceso a bases de datos Oracle utilizando la arquitectu-ra BDP incorporada en Delphi 2005, y por último semuestra cómo integrar en el entorno y utilizar los com-ponentes ODP.NET (Oracle Data Provider for .NET)desarrollados por el propio fabricante de la base de datos.

Independientemente de que utilicemos Delphi2005 como entorno de desarrollo y Delphi como len-guaje de programación, la práctica totalidad del con-tenido del artículo y las conclusiones del mismo seránde igual utilidad para los desarrolladores que utilicenVisual Studio .NET y programen en C#, Visual Basic.NET u otro lenguaje para .NET Framework.

Requisitos previos

Para probar la aplicación de ejemplo que acom-paña a este artículo, Delphi 2005 edición Enterprise o

superior, así como el software de cliente de Oracle,deberán estar instalados en el ordenador cliente, y unaconexión a un servidor deberá estar correctamenteconfigurada. Adicionalmente, se deberá instalar en lamáquina cliente el paquete Oracle Data Provider for.NET (including ODAC) que incluye el proveedorODP.NET versión 10, además del controladorODBC, el proveedor OLEDB y otras interfaces deacceso que ofrece el fabricante de la base de datos.Este software puede descargarse del sitio Web técni-co de Oracle, http://otn.oracle.com.

Esquema general de las alternativasLa figura 1 resume la arquitectura de cinco posibles

alternativas para el acceso a bases de datos Oracle des-de aplicaciones Delphi 2005 a través de ADO.NET, elmecanismo estándar provisto por la plataforma .NETpara el acceso a datos. Para obtener más información

Octavio Hernández

dnm.lenguajes.delphi

<< En un artículo

Octavio Hernándezes colaborador habitual

de dotNetManía,Ingeniero en Informática

de Sistemas y MVP deC#.Actualmente es

Director Técnico deDanysoft

Figura 1.Arquitectura de las alternativas de accesoADO.NET a Oracle desde Delphi 2005

Page 45: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

sobre la arquitectura y funcionalidadesque ofrece ADO.NET, el lector puedeconsultar cualquiera de los muchos librosdisponibles sobre el tema.

Estas cinco alternativas son:• La versión 1.0 de .NET Framework

incluía únicamente soporte para elacceso nativo a Microsoft SQLServer y para el acceso a cualquierotra base de datos a través del pro-veedor OLEDB correspondiente.Pero con la aparición de la versión1.1 de .NET se añadieron dos nue-vos proveedores, para permitir elacceso universal a bases de datos através de ODBC y también el acce-so nativo a Oracle, una de las basesde datos de mayor “tirón” en el mer-cado. O sea, que actualmente .NETnos ofrece tres vías diferentes para“atacar” a Oracle desde .NET.

• Con la aparición de Delphi 8 para.NET y C# Builder, y posteriormen-te de Delphi 2005, Borland presentóuna nueva alternativa para el acceso abases de datos a través de ADO.NET,el Borland Data Provider (BDP), cuyaarquitectura hemos descrito en nues-tro artículo anterior.

• Por último, el propio fabricante dela base de datos ofrece desde hacealgún tiempo su propio proveedorADO.NET para el acceso a bases dedatos Oracle. Más adelante se des-criben sus principales característicasy ventajas.

Las alternativas “nativas” de.NET

De acuerdo con lo indicado ante-riormente, utilizando únicamente loscomponentes ofrecidos por la libreríade clases de .NET Framework tenemostres vías diferentes para acceder a basesde datos Oracle (bajo el supuesto de quedispongamos de todos los componen-tes de software necesarios que ofrece elfabricante de la base de datos):• Utilizando las clases que “hablan”

directamente con el cliente Oracle,que Microsoft ha colocado en elespacio de nombres System.Data.OracleClient.

• Utilizando las clases para el accesogenérico a bases de datos a través deOLEDB (en System.Data.OleDb) y

el proveedor OLEDB de Oracle, oen su defecto el alternativo que ofre-ce Microsoft.

• Utilizando las clases para el accesogenérico a bases de datos a través deODBC (en System.Data.Odbc) y elcontrolador ODBC de Oracle, o ensu defecto el alternativo que ofreceMicrosoft.

Es lógico suponer que la utilizaciónde las clases que interactúan directa-mente con el cliente de la base de datosofrezca un rendimiento superior conrelación a las clases que lo hacen a tra-vés de alguna de las dos pasarelas gené-ricas, ODBC u OLEDB. A la vez quesu mayor ventaja, la utilización de estasclases específicas puede convertirse enun inconveniente en el caso de que sehaga necesario modificar la aplicaciónpara que trabaje contra una base dedatos diferente, puesto que habría quemodificar todo el código fuente parahacer uso de clases diferentes, mien-tras que de haber utilizado OLEDB uODBC los cambios podrían circuns-cribirse a cambiar la cadena de cone-xión y hacer pequeños retoques en elcódigo SQL.

En nuestro artículo anterior mos-tramos cómo integrar en la paleta decomponentes de Delphi 2005 estos tresproveedores de datos (figura 2).

La aplicación básica utilizando el pro-veedor para Oracle

En nuestra entrega anterior ofreci-mos un pequeño tutorial que nos llevóa lo largo del proceso de creación de unaaplicación de acceso a datos trivial quemostraba el acceso a una base de datosOracle utilizando el proveedor de datospara Oracle de .NET Framework 1.1.La apariencia final de esa aplicación semuestra en la figura 3.

La aplicación básica utilizando ODBCu OLEDB

No describiremos en detalle la cre-ación de aplicaciones para el acceso aOracle a través de ODBC u OLEDB,puesto que los pasos necesarios sonlos mismos de siempre, con la únicadiferencia de que en lugar de utilizarlas clases OracleConnection yOracleDataAdapter se deben utilizarOdbcConnection y OdbcDataAdapter uOledbConnection y OledbDataAdapter,respectivamente. En el caso deODBC, es conveniente crear previa-mente un Nombre de Origen de Datos(DSN - Data Source Name) a través delconocido diálogo del panel de control(figura 4).

Una vez que se ha definido el ori-gen de datos, se puede utilizar en Delphi2005 una cadena de conexión como lasiguiente:

DSN=ORCL_TEST;Uid=MiUsr;Pwd=MiPwd

(El controlador ODBC de Oracle nopermite asignar la contraseña en el diálo-go de configuración de origen de datos).

En el caso de OLEDB, la cadena deconexión debe generarse igualmente a

dotN

etM

anía

<<

45

dnm.lenguajes.delphi<<

Figura 2. La página deComponentes de Datos ampliada

Figura 3.Aplicación básica, utilizando elproveedor de datos para

Oracle de .NET

Page 46: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

través del cuadro de diálogo del sistema correspon-diente. En la primera pestaña del diálogo debe selec-cionarse el proveedor “Oracle Provider for OLE DB”(figura 5).

La cadena de conexión a utilizar en tiempo dediseño sería del tipo:

Provider=OraOLEDB.Oracle;Data Source=ORCL;

User ID=MiUsr;Password=MiPwd

Si se utilizara el proveedor OLEDB para Oraclede Microsoft, la cadena sería:

Provider=MSDAORA;Data Source=ORCL;

User ID=MiUsr;Password=MiPwd

El proveedor BDP

En nuestro artículo anterior introdujimos elProveedor de Datos de Borland y destacamos cómosu arquitectura favorece el acceso genérico a basesde datos. Utilizando una cadena de conexión espe-cífica del BDP, construida mediante un asistentedel explorador de datos de Delphi 2005, el pro-gramador indica el tipo de base de datos a la quese desea conectar, además de otras característicascomunes como el nombre de usuario, el tipo deautentificación o si debe o no aparecer un cuadrode diálogo para solicitar la contraseña antes de laconexión, entre otras.

La cadena de conexión BDP para acceder a la basede datos de ejemplo sería similar a la siguiente:

La aplicación básica utilizando BDP

Para generar objetos BdpConnection yBdpDataAdapter correctamente configurados, bas-ta con arrastrar y soltar la tabla deseada desde elexplorador de datos a un formulario del proyecto.Sólo restaría entonces generar mediante el asis-tente del adaptador el objeto DataSet y configurarlos controles visuales necesarios. Asignando eseconjunto de datos a la propiedad DataSet, y el valortrue a la propiedad Active del adaptador, podre-mos visualizar los datos directamente en tiempode diseño (figura 6).

dotN

etM

anía

<<

46

dnm.lenguajes.delphi<<

Figura 5. Configuración de proveedorOLEDB

Assembly=Borland.Data.Oracle,Version=2.0.0.0,Culture=neutral,

PublicKeyToken=91d62ebb5b0d1b1b;vendorclient=oci.dll;

database=ORCL;provider=Oracle;

username=MiUsr;password=MiPwd

Figura 6. Datos "vivos" en tiempo de diseño

Figura 4. Configuración de DSN de ODBC

Page 47: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Si se asigna true a la propiedadActive, se hace innecesario además pro-gramar explícitamente una llamada almétodo Fill() del adaptador durante lacarga del formulario; ello se produciráautomáticamente. De esta manera, noes necesario escribir ni una sola línea decódigo para obtener nuestra aplicaciónbásica.

El proveedor ODP.NETEl propio fabricante del motor de

bases de datos ofrece desde hace ya bas-tante tiempo su propia librería de cla-ses para el acceso a bases de datos Oraclemediante ADO.NET. La versión de lalibrería que hemos utilizado en los ejem-plos es la 10.1.0.200; en el momento enque se publique este artículo, probable-mente ya esté disponible alguna actua-lización.

Entre las posibilidades adicionalesque ofrecen estos componentes conrelación a los que ofrece Microsoft comoparte de .NET Framework podemosmencionar las siguientes:• Rendimiento superior, gracias al

aprovechamiento de posibilidadescomo el pooling de conexiones o lapreselección de filas.

• Soporte completo para todos lostipos nativos de Oracle, que en oca-siones ofrecen una precisión o ran-go de representación superior a lade los tipos .NET, así como denumerosas funcionalidades avanza-das para almacenar y recuperar dela base de datos estructuras espe-cializadas, tales como documentosXML o datos binarios de distintanaturaleza.

• Soporte para características avanza-das de PL/SQL, como la posibili-dad de que un procedimiento alma-cenado devuelva múltiples conjun-tos de datos.

La desventaja potencial de utilizarestos elementos avanzados deODP.NET es que atan casi irremisi-blemente nuestra aplicación al uso deOracle como motor de bases de datosy de dicho proveedor, en la medida enque utilicemos las prestaciones espe-cializadas que ofrece.

Integración en Delphi 2005

Para integrar los componentes ODPde Oracle en la paleta de componentesde Delphi 2005, basta con lanzar el cua-dro de diálogo “Installed .NETComponents…” y marcar las casillascorrespondientes a las clases de Oracle(que pueden diferenciarse de sus homó-nimas de Microsoft por el espacio denombres al que pertenecen).

Delphi 2005 permite configurar lapaleta de herramientas, de modo quepodemos colocar esos componentesen su propia categoría. Para ello sedebe hacer clic con el botón derechosobre la paleta, seleccionar la opción“Add New Category…” y luego arras-trar los componentes a su destino final(figura 8).

La aplicación básica utilizando ODP

Hay que decir que las posibilidadesactuales para el desarrollo visual utilizan-do los componentes ODP.NET enDelphi 2005 son más bien limitadas; adiferencia de Visual Studio .NET, entor-no para el que Oracle ha desarrollado unaintegración bastante potente (OracleDeveloper Tools for VS.NET), en Delphi2005 la mayor parte de las tareas de tra-

bajo con datos para las que normalmentese dispone de asistentes deberán ser desa-rrolladas mediante código al utilizarODP.NET. Por ejemplo, el componenteOracleDataAdapter carece de un asistentepara generar el conjunto de datos asocia-do, lo que dificulta en buena medida eluso de conjuntos de datos tipados y obli-ga a enlazar los controles visuales a datosmediante código.

Para generar la aplicación básica queya hemos creado utilizando otras tec-nologías, colocamos sobre un formula-rio en blanco un objeto Oracle

Connection. La cadena de conexión debetener la siguiente sintaxis básica:

A continuación, se debe agregar al for-mulario un objeto OracleCommand, para

dotN

etM

anía

<<

47

dnm.lenguajes.delphi<<

Figura 7. Instalación del Proveedor ODP.NET en laPaleta de Componentes de Delphi 2005

Figura 8.La Paleta deComponentes después de la

instalación del ProveedorODP.NET

La desventaja potencial de utilizar estos elementos avanzados de ODP.NET es que atan casi irremisiblementenuestra aplicación al uso de Oracle y de ese proveedor

Data Source=ORCL;User Id=MiUsr;Password=MiPwd

Page 48: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

especificar la sentencia SELECT mediante la que se trae-rán los datos. Las propiedades a configurar sonConnection y CommandText. Y luego utilizar un objetoOracleDataAdapter, a cuya propiedad SelectCommand asig-naríamos el comando que acabamos de crear.

En ausencia del asistente, colocamos manualmentesobre el formulario un objeto DataSet (página “DataComponents” de la paleta). Por último, agregamos unobjeto DataGrid y asignamos a su propiedad DataSourceuna referencia a nuestro conjunto de datos, que es todocuanto podemos hacer en tiempo de diseño.

Para el evento Load del formulario necesitaremosel siguiente gestor de eventos:

Pequeña comparativa de rendimiento

Hacer un análisis exhaustivo del rendimiento com-parativo de las diferentes alternativas de acceso a datosva más allá de los objetivos de este artículo. Además, talescomparaciones, por lo general, dependen de múltiplesfactores, y los resultados obtenidos para unas bases dedatos y condiciones concretas pueden no ser extrapola-bles a bases de datos y condiciones diferentes.

No obstante, para corroborar en alguna medida loque nos indicaba la intuición, hemos ejecutado en nues-tro equipo de trabajo una sencilla prueba, consistente en50.000 búsquedas de registros por un valor de la claveprimaria seleccionado aleatoriamente, sobre una tablade 100.000 registros. La búsqueda se implementa a tra-vés de una sentencia SQL parametrizada, representadamediante un objeto Command del tipo correspondiente.Los tests para diferentes métodos de acceso se repitie-ron varias veces y en diferentes órdenes, siendo los resul-tados muy homogéneos para cada método.

Los resultados promedio obtenidos fueron los desiguiente tabla:

Los mejores resultados los produjo el proveedor BDP.Aquí es posible que se reflejen los años de experiencia

de Borland en el desarrollo de clientes de acceso nativoa múltiples bases de datos, entre ellos Oracle. Los dosproveedores ADO.NET de “acceso directo” produje-ron los siguientes mejores tiempo s (con ventajapara el fabricante de la base de datos), mientras que lasalternativas basadas en pasarelas universales quedan,como era de esperar, algo rezagadas en la cola.

Pero aún hay más…Este artículo no quedaría completo si no mencioná-

ramos la existencia de otros proveedores ADO.NETpara el acceso a bases de datos Oracle. La arquitecturaabierta de ADO.NET favorece (y estimula) el desarro-llo de tales herramientas. En particular, hace unos pocosmeses CoreLab, conocido desarrollador de componen-tes de acceso a datos para Delphi, sacó al mercadoOraDirect.NET. Una característica muy interesante deeste proveedor es que permite (opcionalmente) comu-nicarse con el servidor utilizando directamente el pro-tocolo de red, sin necesidad por tanto de que el softwa-re cliente de Oracle esté instalado en el equipo que eje-cuta la aplicación.

ConclusionesEn este artículo hemos presentado de una manera

práctica diferentes alternativas disponibles en la actua-lidad para el acceso a través de ADO.NET a bases dedatos Oracle desde aplicaciones .NET (tomando Delphi2005 como entorno de referencia). Asimismo, hemosmencionado las posibles ventajas e inconvenientes de lautilización de cada una de esas tecnologías y realizadoun pequeño experimento que puede dar una idea apro-ximada del rendimiento comparativo de cada una de ellas.

Todo el código fuente asociado a este artículo pue-de ser descargado del sitio Web de la revista. En parti-cular, podría ser útil como referencia a la hora de deter-minar el formato de cadena de conexión, la manera deespecificar parámetros de comandos, etc. que se debeutilizar con cada uno de los métodos de acceso presen-tados aquí.

dotN

etM

anía

<<

48

dnm.lenguajes.delphi<<

procedure fmOracle5.fmOracle5_Loadsender: Object; e: EventArgs);beginOracleDataAdapter1.Fill(DataSet1);DataGrid1.DataSource := DataSet1.Tables[0];

end;

Tiempo promedio consumido (min)System.Data.OracleClient 02:11System.Data.Odbc 02:38System.Data.OleDb * 02:28Borland.Data.Provider 01:14Oracle.DataAccess.Client 01:36

* Utilizando el proveedor OLE-DB de OracleReferencias

[1] Octavio Hernández, Acceso a datos en Delphi2005, dotNetManía No 12, Febrero 2005

Los mejores resultados los produjo el proveedor BDP, seguido por los

dos proveedores ADO.NET de“acceso directo”.

Page 49: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

dotN

etM

anía

<<

49

Si buscamos en la ayuda de Visual Studio .NETsobre cómo hacer que nuestra aplicación sea una apli-cación internacional, es decir, que esté preparadapara ser usada por usuarios de diferentes países y cul-turas, nos encontraremos con los tres conceptos quehemos usado como título de esta sección. Por tantocreemos que es necesario aclarar qué significa cadauna de esas palabras y, lo más importante, qué papeljuegan a la hora de que nuestras aplicaciones sean“internacionales”.

En esa misma fuente de información, define laglobalización como:

La globalización es el proceso de diseño y desarrollo deuna aplicación que permite el uso de interfaces de usuariolocalizadas y datos regionales para usuarios de varias refe-rencias culturales.

Por lo que podemos deducir que la globalizaciónes precisamente lo que estamos buscando: la carac-terística que debemos tener en cuenta a la hora decrear aplicaciones internacionales.

Pero para que esa globalización de nuestras apli-caciones sea una realidad debemos tener en menteprecisamente esa intención de que sea global. Paraconseguirlo debemos tener en cuenta la “localizabi-lidad”, es decir, si nuestra aplicación, o mejor dicho,el código de nuestra aplicación, realmente está pre-parado para que sea una aplicación “global”. Es fácilpretender que nuestra aplicación sea internacionaly, como tendremos ocasión de comprobar, lo másfácil será mostrar al usuario una interfaz que se adap-te a su idioma (la localización), pero si todo el códi-go que utilicemos no está en consonancia con dichainterfaz, de poco nos servirá.

Referencias culturales neutras y específi-cas

Cuando creamos una aplicación que pueda serusada por usuarios de diferentes países, no sólo esimportante, porque lo es, que los textos mostradosen la interfaz estén en su idioma, sino que el restode lo que la aplicación haga también esté en conso-nancia con ese idioma o cultura. Por ejemplo, si nues-tra aplicación debe mostrar cifras o fechas, éstas notendrán el mismo formato para un estadounidenseque para un inglés del Reino Unido, aunque ambosutilicen el mismo idioma.

En estos casos hay que diferenciar el idioma oreferencia cultural neutra, en nuestro ejemplo el idio-ma inglés, de la referencia cultural específica en laque debemos indicar el país o región que queremosutilizar o referenciar.

Para indicar esas referencias culturales, se utili-za el formato siguiente: Idioma-Región/País. Por ejem-plo, es-ES indica que estamos usando el idioma espa-ñol y el país España, si usamos es-AR también seríael idioma español, pero de Argentina, lo cual nos sir-ve para diferenciar los distintos formatos que estasdos referencias culturales puedan tener.

¿Qué aporta .NET en la creación de apli-caciones internacionales?

.NET Framework utiliza ciertas clases y propieda-des para que podamos crear de una forma, más o menosfácil, nuestras aplicaciones internacionales. Aunque bási-camente trabajaremos con una clase: CultureInfo, quenos servirá para saber la cultura o región en la que seestá utilizando la aplicación en el momento de poner-la en funcionamiento. Utilizando esa clase podremos

Yo localizo, tú localizas,... ¡localicemos todos!

Es un hecho que en estos tiempos que corren, las aplicaciones que hagamos puedenser utilizadas por un número o tipo de gente que puede ser de lo más variopinto, todoello debido a que si dichas aplicaciones las distribuimos en Internet no debemos dejarlas puertas cerradas a otras culturas o idiomas. Por ese motivo vamos a ver qué posi-bilidades nos ofrece .NET para internacionalizar nuestras aplicaciones.

<< Globalización, localizabilidad y localización deaplicaciones

dnm.inicio.fundamentos

Guillermo “Guille” Som

dnm.incio.fundamentos

Guillermo “Guille” Somes Microsoft MVP de Visual Basic

desde 1997. Es redactor dedotNetManía,miembro de Ineta

Speakers Bureau Latin America,mentor de Solid Quality LearningIberoamérica y autor del libroManual Imprescindible de Visual

Basic .NET.http://www.elguille.info

Page 50: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

dotN

etM

anía

<<

50

dnm.inicio.fundamentos<<

averiguar si es un inglés o un español el que la está uti-lizando, e incluso si ese inglés es de los Estados Unidoso es de Australia. Por tanto es importante conocerla paraque sepamos aplicarla en nuestro código.

La clase CultureInfoPor medio de esta clase, que se incluye en el espa-

cio de nombres System.Globalization, podemos ave-riguar las características particulares relacionadas conel idioma, país y otras particularidades del usuarioactual. CultureInfo será la clase con la que, entre otrascosas, daremos formato a fechas, números o la formade ordenar las cadenas de texto.

Todos estos formatos e información que nos pro-porciona la clase CultureInfo la obtendremos por mediode propiedades, las cuales a su vez pueden devolver obje-tos con información extra como pueden ser las propie-dades DateTimeFormat o NumberFormat.

Averiguar la configuración cultural actualLa clase CultureInfo la podemos usar principalmente

de dos formas, una de ellas es utilizando el valor devuel-to por la propiedad CurrentCulture del hilo (o subpro-ceso) actual, en cuyo caso lo que obtenemos es un obje-to con la configuración cultural del usuario actual.

En el fuente 1 tenemos un ejemplo de cómo uti-lizar la propiedad CurrentCulture para obtener el nom-bre de la cultura actual, el formato corto de fecha y elsigno usado como separador decimal.

Si utilizamos este código con la configuración deespañol de España y la fecha es el 17 de septiembre,la salida sería la siguiente:

Utilizar una configuración culturalespecífica

La clase CultureInfo admite constructores pormedio de los cuales podemos crear un nuevo obje-to con la información cultural que nosotros deter-minemos, en este caso, no se tendrá en cuenta laconfiguración que tenga nuestro sistema, sino queutilizaremos el objeto creado para acceder a la infor-mación cultural que hemos indicado en el cons-tructor.

En el fuente 2 podemos ver cómo crear un obje-to con la información cultural de inglés de los EstadosUnidos (USA).

La salida que obtendremos con este código serála siguiente:

Cuando usamos el constructor de la clase CultureInfoen el que indicamos una cadena con el nombre de la refe-rencia cultural de la que queremos crear la nueva ins-tancia, siempre debemos indicar el idioma además delpaís o región, por ejemplo, si modificamos la instancia-ción de la clase CultureInfo que tenemos en el fuente 2,sería erróneo hacerlo de esta forma:

CultureInfo cui = new CultureInfo("en");

Debido a que no se puede usar una referencia cul-tural neutra para obtener información de los forma-

NOTA

El código utilizado en los fuentes de este artí-culo es de C#, pero en el ZIP con el código com-pleto se incluye tanto el de C# como el de VisualBasic .NET.

Fuente 1. Ejemplo de la clase CultureInfo usando la referencia cultural actual

using System;using System.Globalization;

class Class1{

static void Main(){

CultureInfo cui;cui = System.Threading.Thread.CurrentThread.CurrentCulture;

string fmtFecha = cui.DateTimeFormat.ShortDatePattern;string signoDecimal = cui.NumberFormat.CurrencyDecimalSeparator;string fecha = DateTime.Now.ToString(fmtFecha);

Console.WriteLine("Cultura actual: {0}", cui.DisplayName);Console.WriteLine("Formato de fecha corta: {0}", fecha);Console.WriteLine("Separador de decimales: {0}", signoDecimal);

}}

Cultura actual: Español (España)Formato de fecha corta: 17/09/2005Separador de decimales: ,

Fuente 2. Ejemplo de la clase CultureInfo indicando una referencia cultural específica

private static void culturaUSA(){

CultureInfo cui = new CultureInfo("en-US");

string fmtFecha = cui.DateTimeFormat.ShortDatePattern;string signoDecimal = cui.NumberFormat.CurrencyDecimalSeparator;string fecha = DateTime.Now.ToString(fmtFecha);

Console.WriteLine("Nombre cultura: {0}", cui.DisplayName);Console.WriteLine("Formato de fecha corta: {0}", fecha);Console.WriteLine("Separador de decimales: {0}", signoDecimal);

}

Nombre cultura: Inglés (Estados Unidos)Formato de fecha corta: 9/17/2005Separador de decimales: .

Page 51: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

tos y demás información proporcionada por la claseCultureInfo.

La propiedad CurrentUICulture

Esta propiedad será la que utilizaremos para traba-jar con la interfaz gráfica del usuario con una configura-ción en particular. Esta propiedad es del tipo CultureInfo;para obtener el valor que actualmente tenemos lo pode-mos hacer utilizando tanto la propiedad del mismo nom-bre de la propiedad CurrentThread del hilo actual, o pormedio de la propiedad estática CurrentUICulture de laclase CultureInfo.

En el fuente 3 vemos cómo obtener el valor usandolos dos procedimientos indicados.

Indicar el idioma del interfaz de usuario

De la misma forma que podemos asignar el valorque tendrá el objeto CultureInfo del hilo actual, tam-

bién podemos asignar o indicar qué idioma o regióncultural será la que se utilizará para que podamos adap-tar la interfaz gráfica de nuestra aplicación, (si es queasí lo hemos previsto: ¿recuerda la localizabilidad?),al idioma que el usuario esté usando actualmente obien, porque, mediante código, lo hayamos indicadonosotros.

Como tendremos ocasión de comprobar en elpróximo artículo de dnm.inicio.taller, .NETFramework nos proporciona un sistema relativa-mente sencillo de crear las interfaces gráficas queutilizaremos para cada uno de los idiomas en losque queramos traducir la interfaz gráfica de nues-tra aplicación, en esa ocasión también veremos losdetalles que tendremos que tener en cuenta paraque incluso esa “transformación” la podamos haceren tiempo de ejecución, es decir, cambiar de idio-ma mientras estamos utilizando la aplicación, ade-más de guardar la configuración del idioma selec-cionado con idea de utilizarlo la próxima vez queiniciemos la aplicación.

La clase ResourceManagerEsta es la clase con la que podemos acceder a los

recursos localizados de la aplicación, como puede serel texto a mostrar en los distintos controles, e inclu-so el estado de dichos controles, de forma que tengan,o puedan tener asignados valores diferentes en las pro-piedades que así lo creamos conveniente; por ejem-plo, podemos tener ciertos controles habilitados enun idioma y deshabilitados en otros.

Tal como trabaja .NET Framework a la hora de per-mitirnos indicar diferentes configuraciones para la inter-faz gráfica de cada idioma, siempre existirá una interfazpredeterminada, que será la usada cuando no existe unaconfiguración particular de algún idioma, y si indicamosotros idiomas, éstos siempre tendrán que usar los con-troles existentes en dicha configuración genérica, perolo que no se nos permitirá será añadir nuevos elementosque sólo estén en algunas configuraciones regionales, yaque esos elementos “localizables” siempre deberán exis-tir en la interfaz gráfica predeterminada. De estos deta-lles nos ocuparemos próximamente en la parte prácticade esta sección.

Como hemos podido comprobar, la globalizaciónde aplicaciones en .NET es algo que, al menos teóri-camente, es fácil de implementar; y como veremos enel próximo taller de dnm.inicio, podremos conseguirque nuestra aplicación utilice varias referencias cul-turales, algunas de ellas para un mismo idioma, peropara un país o región diferentes.

Pero de todo esto nos encargaremos en otro artícu-lo, en el que abordaremos de forma más detallada todoslos aspectos que debemos tener en cuenta para crear dife-rentes versiones de nuestra aplicación para los idiomasy países que así lo estimemos oportuno.

dotN

etM

anía

<<

51

dnm.inicio.fundamentos<<

NOTAPara utilizar de forma normal nuestras aplicaciones, no tenemos

que modificar ni instanciar la clase CultureInfo, o el valor que estáusando actualmente el sistema, pero en caso de querer hacerlo, conidea de que nuestra aplicación utilice una referencia cultural en par-ticular, debemos asignarlo a la propiedad CurrentCulture del hiloactual. En el siguiente ejemplo, cultura será una cadena en el for-mato indicado anteriormente: idioma-país, por ejemplo en-US:Thread.CurrentThread.CurrentCulture = new

CultureInfo(cultura);

Fuente 3.Dos formas de acceder al valor de CurrentUICulture

CultureInfo cui;

// Utilizando la propiedad CurrentUICulture del hilo actualcui = System.Threading.Thread.CurrentThread.CurrentUICulture;// Utilizando la propiedad CurrentUICulture de la clase CultureInfocui = CultureInfo.CurrentUICulture;

NOTAEn caso de que seamos nosotros, por medio de código, los que

queramos cambiar el idioma a usar por la aplicación, debemos ase-gurarnos de que tenemos permisos suficientes para hacerlo, parti-cularmente debemos utilizar la clase SecurityPermission indicandoel permiso ControlThread, ya que este indicador es el que nos per-mite realizar algunas operaciones avanzadas con los subprocesos.Este valor lo indicaremos en el fichero AssemblyInfo como un atri-buto a aplicar a todo el ensamblado.

using System.Security.Permissions;[assembly: SecurityPermission(SecurityAction.RequestMinimum, ControlThread=true)]

Page 52: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

la seriación tiene lugar cuando un objetoguarda su estado en un almacén de datos; la de-seria-ción, cuando un objeto nuevo recibe su estado de datospreviamente almacenados de esta forma.

En .NET Framework, la seriación se ofrece a tra-vés de clases pertenecientes al espacio de nombresSystem.Runtime.Serialization. Estas clases, sumi-nistran fidelidad de tipos y soportan la de-seriación.Mediante esta técnica, en .NET Framework pode-mos almacenar campos públicos, protegidos y pri-vados y manejar automáticamente las referencias cir-culares. Una referencia circular ocurre cuando unobjeto hijo hace referencia a un objeto padre, y –asu vez– el padre contiene una referencia al objetohijo. La seriación puede generar datos de salida enmúltiples formas, utilizando módulos distintoshechos a medida para formatos concretos. Los dosformateadores provistos por el sistema, sonSoapFormatter y BinaryFormatter, capaces de alma-cenar el estado del objeto en formatos SOAP y bina-rio respectivamente.

Las clases pueden habilitarse a sí mismas paraseriación en dos formas: incluyendo el atributo

[Serializable] o implementando la interfazISerializable. En el primer caso, el autor de la cla-se no tiene nada más que hacer, ya que la seriaciónes controlada por las clases que realizan las llama-das, y los datos se obtienen mediante reflection. Lainterfaz ISerializable, por otro lado, permite alusuario establecer un control más fino de la formaen que los bits del objeto son almacenados.

Un formatter es un objeto del Framework queobtiene los datos seriados a partir de un objeto dado.Los datos se solicitan, bien llamando al métodoGetObjectData, de la interfaz ISerializable o a tra-vés de los servicios de la clase estática FormatterServices.

Hasta aquí este sencillo sumario introductorio ala seriación. Sin embargo algunas cuestiones perma-necen oscuras para varios lectores.

Mi aplicación mueve datos entre la capa de pre-sentación de Windows y una capa de negocio quese encuentra en otra máquina. A partir de ahí, losdatos son enviados a otra capa donde se encuentrauna instancia en ejecución de SQL Server, que losmaneja. Una capa de acceso a datos es la responsa-ble de servir esos datos a SQL Server. Al final, estoymoviendo datos entre capas de mi aplicación.Utilizo para esa tarea un objeto DataSet. He hechotodo lo posible para seleccionar las mejores opcio-nes y cumplir con las buenas prácticas. Pero en rea-lidad, lo que sucede es que no estoy satisfecho conel rendimiento que obtengo. Así que he investiga-do con un herramienta de monitorización y, parami sorpresa, he descubierto que estoy enviando yrecibiendo muchos más datos de los que yo espe-raba. ¿Alguna idea?

Creo que tengo una clara idea de lo que sucede.Dice usted que utiliza un DataSet para mover los datosentre capas, presumiblemente, vía .NET Remoting.

Seriación de objetos

Dino Esposito

dnm.todotnet.qa

<< Más exactamente,

Dino Esposito es redactor de dotNetManía.

Formador, consultor y escritorafincado en Roma.Miembro

del equipo de Wintellect,Dino está especializado en

ASP.NET y ADO.NET. Puedeenviarle sus consultas a

[email protected]

Mediante esta técnica, en .NETFramework podemos almacenar

campos públicos, protegidos y privadosy manejar automáticamente las

referencias circulares

La seriación se refiere a la capacidad de un objeto para almacenar y recuperar suestado mediante un mecanismo de almacenamiento.

Page 53: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

En este caso, el DataSet es seriado y enviado entredos máquinas, o más genéricamente, entre distin-tos dominios de aplicación. La clase DataSet admi-te seriación e implementa la interfaz ISerializable.Por lo tanto, y de acuerdo con lo indicado en laintroducción, el DataSet tiene el control absolutodel proceso.

Mediante una herramienta de-compiladora,como la excelente .NET Reflector de Lutz Roeder(http://www.aisto.com/roeder/dotnet), resulta fácil verlo que sucede. Cualquier formatter llama al méto-do GetObjectData del DataSet, para obtener los datosa seriar. El pseudo-código siguiente, ilustra éstasituación:

En el código precedente, info, representa el búferde tipo SerializationInfo donde se acumulan losdatos. La variable schema indica el esquema del DataSety diffgram es el objeto que contiene el estado actualdel DataSet.

Esta es la situación: ¿Qué es un DiffGram? Es larepresentación XML del estado de un DataSet, inclu-yendo filas actuales, cambios realizados, y errores pen-dientes en filas de la tabla. Este objeto es bastante gran-de, y su seriación incluye, además, un XML Schemabastante prolijo. No hay forma de optimización quealivie la carga de devolver un DiffGram. Por ejemplo,

el stream final seriado incluye caracteres en blanco yretornos de carro, también.

La idea final es que los objetos DataSet no debie-ran ser utilizados para mover datos entre capas,debido a estas características estructurales. Sinembargo, las estadísticas demuestran, más allá detoda duda razonable, que el uso de un DiffGram noes tan malo desde el punto de vista del rendimien-to. Realizando algunos tests, es relativamente fácilcomprobar que con una cantidad de alrededor de1.000 filas enviadas, el rendimiento no es nada malo.Pero, si se van a mover cantidades superiores a las10.000 filas, entonces estamos en otra historia, y,de hecho, las estadísticas muestran que tiene razón,el rendimiento es malo.

¿Qué debería de hacer? Bueno, si está moviendograndes cantidades de datos, la primera pregunta quenos viene a la mente es, ¿realmente lo necesita? Mover10.000 filas entre capas no es necesariamente unamedida adecuada, y ciertamente, hace saltar la alarmasobre un diseño incorrecto. Si el diseño es apropiadoy, realmente, no puede hacerse de otra forma, la mejorsolución es utilizar una clase derivada de DataSet enla que hagamos una implementación propia de la inter-faz ISerializable. De esa forma, se puede usar unalgoritmo distinto, y ahorrar hasta el 60% del espa-cio. El algoritmo más sencillo que se me ocurre, envía3 arrays: nombres de columnas, tipos de columna, yfilas. Si estamos usando un DataSet tipado, tenemosla mitad del camino andado, ya que simplemente, setrata de una clase que hereda de DataSet. En este caso,no hay necesidad de cambiar nada en el código. Seextiende la definición de dicha clase, y listo.

dotN

etM

anía

<<

53

dnm.todotnet.qa<<

Mi aplicación mueve datos entrela capa de presentación y la capade negocio que se encuentra en

otra máquina. Los datos sonenviados a otra capa donde se

encuentra una instancia de SQLServer.Utilizo para esa tarea un

objeto DataSet.He he descubier-to que estoy enviando y recibien-do muchos más datos de los que

yo esperaba. ¿Alguna idea?

¿?

Figura 1. Comparación entre la seriación binaria y XML de un DataSet.

To

do

tNet.

qa@

do

tnetm

an

ia.c

om

To

do

tNet.

qa@

do

tnetm

an

ia.c

om

¿Qué es un DiffGram? Es la representación XML del estado de un

DataSet, incluyendo filas actuales,cambios realizados, y errores pendientes en filas de la tabla.

info.AddValue("XmlSchema", schema);info.AddValue("XmlDiffGram", diffgram);

Page 54: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

En ADO.NET 2.0, la clase DataSet incluye unapropiedad nueva –SerializationFormat–, por mediode la cual se puede seleccionar mediante código si elDataSet tiene que ser seriado como DiffGram (comoel Framework 1.x) o en formato binario real. La figu-ra 1 compara el rendimiento en ambos casos.

Los distintos tipos de seriación disponibles en.NET Framework, me resultan un tanto confusos.¿Puede arrojar algo de luz sobre el tema? En particu-lar, ¿cuál es la diferencia entre BinaryFormatter yXMLSerializer?

Comparado con la seriación de objetos ordinariade .NET Framework, XMLSerializer es tan distinto,que no debería, realmente, ser considerado como otrotipo de objeto Formatter. La clase XmlSerializer nosólo es la encargada del proceso de seriación, sino quenos permite controlar cómo los objetos se codificandentro de los elementos de un XML Schema. Ademásde las diferencias en propósito y detalles de imple-mentación, la diferencia más grande entre seriaciónen tiempo de ejecución y seriación XML es el tipo defidelidad que suministran.

La seriación en tiempo de ejecución garantizauna fidelidad completa del tipo seriado. Por estarazón, tanto la seriación binaria como la seriaciónSOAP funcionan particularmente bien a la hora depreservar el estado de un objeto a través de múlti-ples llamadas de una aplicación. De hecho, .NETFramework Remoting la utiliza para transferir obje-tos por valor entre distintos dominios de aplica-ción. Mientras que este tipo de seriación está pen-sado específicamente para instancias de objetos, laseriación XML es un mecanismo suministrado porel sistema (y no por el objeto) para seriar datos alma-cenados en una instancia dentro de un XMLSchema bien formado.

La meta principal de la seriación XML es conse-guir que otra aplicación, posiblemente ejecutándose

en una plataforma distinta, pueda consumir cualquierdato almacenado. Las diferencias claves entre seria-ción en tiempo de ejecución y seriación XML pue-den delimitarse como las siguientes:

• La seriación en tiempo de ejecución tiene encuenta cualquier propiedad, independiente-mente del ámbito que esa propiedad tenga enel contexto de la clase. Por su parte, la seria-ción XML evita propiedades privadas, prote-gidas o de sólo lectura; no maneja referenciascirculares, y funciona sólo con clases públi-cas. La seriación XML nunca incluye infor-mación de tipos.

• La seriación en tiempo de ejecución mantie-ne la información acerca de la clase original,espacio de nombres, y ensamblado. Toda estainformación –la identidad del objeto– se pier-de con la seriación XML.

• La seriación en tiempo de ejecución nos per-mite indicar los datos a seriar mediante la adi-ción de valores a una colección. No obstante,no se puede controlar la forma en la que esosvalores son escritos. El schema del objeto per-sistido es fijo y esta embebido en el formatter.En este sentido, el objeto XMLSerializer esmucho más flexible. XMLSerializer nos per-mite especificar espacios de nombres, el nom-bre del elemento XML que deberá conteneruna propiedad particular e incluso, si una pro-piedad dada debería ser interpretada comoatributo, texto o como un elemento.

La clase XMLSerializer se utiliza fundamental-mente en la implementación de servicios WebASP.NET donde se utiliza para seriar tipos .NETen tipos XML y viceversa, para valores de retorno.

dotN

etM

anía

<<

54

dnm.todotnet.qa<<

To

do

tNet.

qa@

do

tnetm

an

ia.c

om

To

do

tNet.

qa@

do

tnetm

an

ia.c

om

Traducción por Marino Posadas

Nota del editor: Hasta ahora hemos venido traduciendo Serialize por Serializar, que es lo acostumbrado en la mayoría de los textos técnicos.Apartir de este trabajo de traducción emplearemos el término Seriar y Seriación en lugar de Serializar y Serialización en todos los textos de

dotNetManía, puesto que son palabras que no existen en nuestro idioma.

Los distintos tipos de seria-ción disponibles en .NET

Framework,me resultan untanto confusos. ¿Puede arrojaralgo de luz sobre el tema? Enparticular, ¿cuál es la diferencia

entre BinaryFormatter yXMLSerializer?

¿?

Además de las diferencias en propósitoy detalles de implementación, la

diferencia más grande entre seriación en tiempo de ejecución y

seriación XML es el tipo de fidelidad que suministran.

Page 55: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio
Page 56: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

❑ Deseo suscribirme a dotNetManía por un año (11 números) por un precio de 60,00€ IVA incluido y recibir el CDVolumen 1 con los 11 primeros ejemplares en formato PDF de alta calidad de forma gratuita. Si su dirección está fuera de Españael precio es de 60,00€ transporte incluido (más información sobre envíos internacionales en www.dotnetmania.com)

❑ Deseo que me envíen los números atrasados marcados por un precio de 6,00€ cada uno.

FORMA DE PAGO❑ Talón nominativo a nombre NETALIA, S.L.❑ Transferencia bancaria a nombre de NETALIA, S.L. a:

La Caixa - Número de cuenta 2100 4315 48 2200014696 (Indique su nombre en la transferencia)

❑ Domiciliación Bancaria (con renovación automática, previo aviso)Indique su número de cuenta:

❑ Tarjeta de crédito❑ VISA ❑ MASTERCARDNúmero de su tarjeta: Fecha de caducidad: / (imprescindible)

Firma y/o sello

a de de 20

DATOS DE ENVÍO

CIF/NIF. . . . . . . . . . . . . . . . . . . . Empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nombre y apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Dirección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Población . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Código Postal . . . . . . . . . . . . . . . . . . . Provincia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Teléfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . email . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

DATOS DE FACTURACIÓN (sólo si son distintos a los datos de envío)

CIF/NIF. . . . . . . . . . . . . . . . . . . . Empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nombre y apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Dirección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Población . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Código Postal . . . . . . . . . . . . . . . . . . . Provincia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Teléfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . email . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Usted autoriza a la mecanizaciónde estos datos. El responsable ydestinatario de éstos es Netalia,S.L. Usted tiene derecho a acce-der a sus datos, modificarlos ycancelarlos cuando lo desee. Susdatos no serán cedidos en ningu-na de las formas posibles a terce-ras partes y no se utilizarán másque para el buen funcionamien-to de su suscripción a la revistadotNetManía y para informar-le de las actividades comercialesque realice la editorial Netalia,S.L. Si no desea recibir informa-ción comercial de dotNetManíamarque la casilla siguiente ❑Puede enviar sus datos por Fax al 91 499 13 64, o por teléfono al 91 666 74 77,

o por email a la dirección [email protected], o también puedeenviarlos por correo postal a la siguiente dirección:

Netalia, S.L.C/ Robledal, 13528529- Rivas Vaciamadrid (Madrid)

❑ Nº5 ❑ Nº6 ❑ Nº 7 ❑ Nº9 ❑ Nº11

❑ Nº12 ❑ Nº13 ❑ Nº14

❑ Nº10

Suscríbase y llévese el CD Volumen 1 GRATIS

Oferta válida hasta el 31 de octubre de 2005 o hasta agotar existencias

Aún está a tiempo

❑ Nº8

❑ Nº15 Nº16 Nº17

AGOTADO

AGOTADO

❑ Nº18

Page 57: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

dotN

etM

anía

<<

57

<<

Introducción a la programación Edición 2005Francisco Charte Ojeda

Editorial: Anaya MultimediaISBN: 8441518041Páginas: 640Publicado: Febrero, 2005Idioma: Castellano

De nuevo cae en nuestras manos un título de uno de los autores más prolíficos de nuestro paísen el mundo del desarrollo: Francisco Charte. Pero en esta ocasión, se trata de una rareza. Noes una introducción a plataformas, lenguajes o API. Es todo junto, en una única obra que reco-rre el estado actual de la programación hoy, comparando la evolución sufrida por la informáticay la forma de crear aplicaciones en los últimos 20 años.

El propio autor define su proyecto mejor que nadie en el apartado de Agradecimientos: “Elobjetivo era preparar una material lo suficientemente básico como para que cualquier per-sona con unos conocimientos mínimos de informática pudiera comenzar a programar”. Y,a fe que lo ha conseguido. Para todo el que quiera empezar a programar, es una obra másque recomendable. Y para el especialista que quiera visitar otras tecnologías desconocidas,un excelente punto de partida.

XML:Los mejores trucosMichael Fitzgerald

Editorial: Anaya Multimedia-O'Reilly ISBN: 8441518130Páginas: 526Publicado: 2005Idioma: Castellano

El autor es un reconocido analista tecnológico en EE. UU., y esta es su cuarta obra sobreel tema (antes había tratado XSL, XSLT y aplicaciones B2B), por lo que le avala la expe-riencia necesaria como para poner en manos de sus lectores una de esas obras que nos encan-tan cuando ya conocemos una tecnología: los trucos. Un total de 100 propuestas distintassobre cómo manipular, transformar, crear, transmitir y almacenar XML en diferentes con-textos, herramientas y plataformas.

Una pequeña joya que adornará nuestras bibliotecas, pero que, seguramente, consultaremosmás de una vez cuando tengamos que recordar la sintaxis y semántica de ciertos vocabula-rios XML, revisar los fundamentos del estándar XML-FO, “pegarnos” con RSS, construirmanualmente un mensaje SOAP o procesar XML desde C#. Especialmente recomendadopara webmasters.

dnm.biblioteca.net<<

dnm.biblioteca.net

Page 58: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio

Foxie. Curiosa utilidad gratuita quese integra dentro del navegadorExplorer, para permitir nuevascapacidades de búsqueda (incluidala de ficheros y documentos en eldisco local, bloqueos de pop-ups,navegación por tabs (solapas), fire-wall, herramienta anti-spyware, yvarias otras capacidades, todas ellasconfigurables. Disponible enhttp://www.getfoxie.com

Bill Gates reafirma en el PDC de Los Ángeles su visión de unmundo digital e interconectado

Lo que se nos anticipaba en el pasadoTech-Ed de Ámsterdam, ha sido claramentepuesto de manifiesto por la plana mayor deMicrosoft en la keynote de presentación de esteevento que la compañía realiza cada dos añosy que vendió todo el aforo disponible. Laexpectación despertada por los anticipos denuevas versiones de Windows Vista, Office

12, SharePoint 3.0, Visual Studio 2005 y SQL Server 2005 (e inclu-so de una nueva beta de WinFS), se presentaba mediante demosespectaculares con una nueva build de Windows Vista (5219), y elanuncio oficial de los nombres definitivos de Avalon (WindowsPresentation Foundation) e Indigo (Windows Communication Foundation),y –en una de las demos– se cuidaba de que quedase bien claro que,aunque la versión final de WinFS no estará disponible para cuandosalga el producto, una buena de parte de su funcionalidad ha sido yaintegrada en el sistema (búsquedas avanzadas de información en elequipo local, con conexiones dinámicas entre contenido de docu-mentos con un rendimiento notable, interconexión de informaciónentre formatos distintos: Word, emails, PDF, el nuevo concepto decarpetas virtuales, que permite aglutinar en una sola carpeta infor-mación situada en ubicaciones distintas pero relacionada concep-tualmente, etc, etc.

Pero el apartado de novedades no se quedaba ahí: Jim Alchindemostraba las nuevas capacidades del sistema para soportar la degra-dación (tiempo de respuesta) de las aplicaciones con el tiempo –inclu-so aprovechando como memoria virtual una tarjeta común de memo-

ria USB insertada entiempo de ejecución–,y daba paso a los gurúsdel desarrollo: AndersHejlsberg, Don Box,Chris Anderson yScott Guthrie, quedemostraban lo avan-zadas que se encuentra ya las nuevas versionjes del lenguaje queincorporará Orcas (la siguiente versión de Visual Studio), respectoa las nuevas capacidades de acceso y manipulación de informaciónde cualquier tipo de forma directa, ya fuera ésta información del sis-tema, o contenida en bases de datos. Y todo esto, con resultadosvisuales espectaculares aportados por las librerías de WindowsPresentation Foundation.

Además, puedieron verse algunas de las nuevas capacidades deInternet Explorer 7, entre las que cabe destacar la navegación median-te solapas, con la capacidad de almacenar todas las páginas abiertasen bloque, o de mandar imprimir una página y que Windows Vistaformatee el contenido para adaptarse al tamaño establecido en impre-sión por el sistema. En el apartado de Office 12, también pudo ver-se una nueva y mucho más sencilla interfaz de usuario, con capaci-dades de búsqueda integrada entre todas las herramientas de Office,mayor soporte vinculado a SharePoint, un nuevo acceso dinámicoa los contenidos de servicios Web, y las capacidades de visualizacióninteligente de datos, con características de formato y presentaciónespectaculares.

En fin, un brillante comienzo para este evento, del que damospuntual detalle en este mismo número, y en el que mostraremosmuchas de las novedades expuestas en esta nueva edición del PDC.

dotN

etM

anía

<<

58

dnm.desvan<<

Marino Posadas

Interesantes vídeos de Windows Vista y C# 3.0 en Channel 9: Accesibles en ladirección http://channel9.msdn.com/showforum.aspx?foru-mid=14, presentan el último estado de las tecnologíasMicrosoft, presentadas –generalmente– por sus propios

autores, como algunos de los integrantes del Shell Team deWindows Vista, o el autor principal del lenguaje C#. Algunas delas demos son las que presentó el propio Gates en la keynote delPDC que anunciamos en la noticia de portada.

Aparte de la mencionada sobre Windows Vista, cabe destacar –de cara al desarrollador– latitulada “Anders Hejlsberg - LINQ”, (http://channel9.msdn.com/Showpost.aspx?postid=114680)donde el autor de C# muestra algunas de las capacidades de acceso a datos integradas en la nue-va generación de lenguajes .NET, utilizando C-Omega (C# 3.0) como lenguaje de demostra-ción. Y para los que gusten de la programación con Visual Studio Tools for Office (VSTO) les reco-miendo (a la derecha de la página anterior), uno de nuestra vieja amiga Catherine Heller, bri-llantísima, como siempre.

Documentos y código en la Red Utilidad del mes

no

tici

as.

no

tici

as.

no

tici

as.

no

tici

as

Page 59: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio
Page 60: Delphi - Tecnología, Tips de Programación y Datos … · SSL en un equipo con la versión 5.0 o 6.0 de Microsoft Internet Information Server (IIS) para conseguir que nuestro sitio