dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de...

60
OCR.NET Motor para el reconocimiento óptico de caracteres en .NET nº 41 octubre 2007 6,50 Visual Basic • C# • ASP.NET • ADO.NET • SQL Server • Windows System Páginas asíncronas en ASP.NET 2.0 Seguridad de acceso a código Migración de SharePoint 2003 a 2007 Microsoft Solutions Framework (II) Configuración (Settings). El configurador que lo configure... www.dotnetmania.com dedicada a los profesionales de la plataforma .NET dotNetManía www.dotnetmania.com dotNetManía

Transcript of dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de...

Page 1: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

OCR.NETMotor para el reconocimiento óptico de caracteres en .NET

nº 41 octubre 2007 6,50 € Visual Basic • C# • ASP.NET • ADO.NET • SQL Server • Windows System

Páginas asíncronas en ASP.NET 2.0 Seguridad de acceso a códigoMigración de SharePoint 2003 a 2007Microsoft Solutions Framework (II)Configuración (Settings). El configurador que lo configure...

www.

dotne

tman

ia.co

m

dedicada a los profesionales de la plataforma .NET

dotNetManíawww.

dotne

tman

ia.co

m

dotNetManía

Page 2: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions
Page 3: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

Bienvenido al número 41, de octubre de2007, de dotNetManía.

Este mes pasado se ha producido ellanzamiento de Silverlight 1.0 y la confir-mación del trabajo con Novell para ofre-cer Moonlight (luz de luna, más románti-ca, pero menos brillante, ¿como la plata-forma donde corre?), la versión de Silver-light 1.1 para Linux. Realmente, la noti-cia que nos interesa está por llegar, y esprecisamente la salida de la versión 1.1 deSilverlight (aún en versión alfa) en la quepodremos empezar a hacer desarrollospara la Web de aplicaciones multimedia ymultiplataforma. Hasta ahora, Flash es unestándar de facto; sin embargo, Silverlightamenaza con entrar con fuerza y quiénsabe si arrebatar pronto parte de esa exclu-sividad. ¿Cuántos programadores deActionScript hay en el mundo? ¿Cuántosde lenguajes .NET? ¿Qué luz brillará másentre los programadores de .NET? Yocreo que está bien claro, nos quedaremoscon la luz plateada.

Presentamos este mes la libreríaOCR.NET del Grupo Weboo de laUniversidad de La Habana, cuyo códi-go fuente está a disposición como opensource desde la Web de la revista enwww.dotnetmania.com. Su carácter gené-rico está orientado a la reusabilidad, demodo que los lectores puedan comple-tarla y extenderla según sus intereses,incluso en aplicaciones que hagan reco-nocimiento de otras simbologías y nosolo de caracteres.

José Manuel Alarcón nos ayuda a rea-lizar aplicaciones ASP.NET 2.0 más esca-

lables con su “Páginas asíncronas enASP.NET 2.0”, en el que aprenderemoscómo usar la ejecución asíncrona de pági-nas para evitar los cuellos de botella pro-ducidos por algunos procesos.

Alberto Población, nuestro invitadode este mes, al que doy la bienvenida, pre-senta “Seguridad de acceso a código”, unartículo en el que se explica cómo .NETasigna los permisos a los ejecutables ycómo se puede modificar esos permisospara resolver problemas como que un pro-grama que funcionaba perfectamente enfase de desarrollo no lo haga cuando secopia a una carpeta en producción.

Gustavo Vélez, autor del libro “Pro-gramación con SharePoint 2007”, edita-do por Netalia, nos explica de forma prác-tica algunas consideraciones a tener encuenta en una migración de SharePoint2003 a SharePoint 2007.

También publicamos este mes lasegunda parte de tres sobre MicrosoftSolutions Framework, de Joan Llopart,dando continuación a la publicada el mespasado acerca de esta metodología deMicrosoft.

Para los usuarios menos avanzados,Guillermo “Guille” Som propone el artí-culo “Configuración (Settings). El confi-gurador que lo configure...” que muestracómo gestionar los datos de configuraciónde una aplicación usando Visual Studio2005.

Todo lo antes mencionado, junto connuestras secciones habituales, conformaneste primer número de otoño, que esperoque sea de su agrado.

dotN

etM

anía

<<

3

Cuestión de luces

editorialDedicada a los profesionales de la plataforma .NET

Vol. III •Número 41 • Octubre 2007Precio: 6,50 €

EditorPaco Marín ([email protected])

Redactor jefeMarino Posadas([email protected])

Editor técnicoOctavio Hernández([email protected])

RedacciónDino Esposito, Guillermo 'Guille' Som, JoséManuel Alarcón, Luis Miguel Blanco y MiguelKatrib (Grupo Weboo)

Empresas Colaboradoras

Alhambra-Eidos

Krasis

Plain Concepts

Raona

Solid Quality Learning

Además colaboran en este númeroAlberto Población, Gustavo Vélez, Joan Llopart,Leonardo Paneque y Ludwig Leonard.

Corresponsal para América LatinaPablo Tilotta

IlustracionesMascota (Clico): Yamil HernándezPortada: Javier Roldán

FotografíaRoberto Mariscal

Atención al suscriptorPilar Pérez ([email protected])

Edición, suscripciones y publicidad.netalia

c/ Robledal, 13528529 Rivas-Vaciamadrid (Madrid)

www.dotnetmania.com

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

ImprimeGráficas MARTE

ISSN1698-5451

Depósito LegalM-3.075-2004

dotNetManíadotNetManía

Paco Marín

Page 4: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

sumario 41Páginas asíncronas en ASP.NET 2.0 10-14

En ocasiones, nuestras aplicaciones deben realizar tareas largas, que bloquean el hilo deejecución principal a la espera de que otros procesos terminen. Este tipo de situaciones se debeevitar si queremos desarrollar sistemas escalables, capaces de atender a miles de usuarios. Comoveremos, estas situaciones son más comunes de lo que cabría esperar, y la ejecución asíncrona depáginas es nuestro mejor aliado.

Seguridad de acceso a código 16-21Una consulta frecuente entre los desarrolladores de aplicaciones .NET se refiere al hecho de queun programa que funcionaba perfectamente mientras se encontraba en desarrollo deja defuncionar cuando se pasa a producción por el método de copiarlo a una carpeta en un servidor yejecutarlo desde ella. En este artículo examinamos la forma en que .NET determina lospermisos de los ejecutables y cómo éstos se pueden modificar para resolver casos como el indicado.En un futuro artículo detallaremos cómo podemos aprovechar estos mecanismos de seguridaddesde nuestro código.

Motor para el reconocimiento óptico de caracteres en .NET. OCR.NET 23-30En este trabajo se presentan las características generales de una biblioteca “open source” en.NET que ofrece funcionalidades para el reconocimiento óptico de caracteres. Estasfuncionalidades se sustentan en más de un centenar de tipos que han sido implementadosbasados en muchos de los algoritmos disponibles en la red y en otros desarrollados por los propiosautores.

Migración de SharePoint 2003 a 2007. Puede ser fácil... pero no siempre 32-36En este artículo se describen de una manera práctica algunas consideraciones técnicas yoperacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemosrazones para hacerlo?

Microsoft Solutions Framework (II)Aplicar la metodología en el trabajo diario según Microsoft 37-40

Este mes damos continuación al primer artículo de esta serie, publicado el mes pasado, en el quese realizó un primer acercamiento a la metodología que Microsoft pone a disposición de losingenieros y administradores para realizar de forma más eficiente y organizada su trabajo.

Configuración (Settings) El configurador que lo configure... 42-47

Cualquier aplicación que se precie debe tener en cuenta las preferencias de los usuarios, peroincluso si la aplicación no es “amigable” con el usuario que la utiliza, usará con total seguridaddatos de configuración. En este artículo veremos cómo podemos gestionar esos datos deconfiguración utilizando las facilidades que nos proporciona Visual Studio 2005.

dnm.todotnet.qa 48-50Web rica... pero Web...

dnm.comunidad.net 51VB-Mundo TV. Un programa de TV online para desarrolladores

dnm.laboratorio.net 52-55IdeaBlade DevForce

dnm.biblioteca.net 57Professional Software Testing with Visual Studio 2005 Team System:

Tools for Software Developers and Test Engineers Visual Studio Team System: Better Software Development for Agile Teams

dnm.desvan 58

Page 5: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions
Page 6: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

Microsoft ha lanzado Sil-verlight 1.0, la evolucióndel nuevo plug-in que

soporta múltiples plataformas y explo-radores, para Windows y para Mac.Para Linux, Microsoft ha confirmadoque seguirá trabajando estrechamentecon Novell para ofrecer Silverlight den-tro de esta plataforma, en el proyectoconocido como Moonlight (http://www.mono-project.com/Moonlight), basado enMono, la conocida alternativa de soft-ware libre de .NET, como ya adelantóMiguel de Icaza, vicepresidente de desa-rrollo de Novell, en el REMIX 2007 quetuvo lugar en París.

Microsoft ha desvelado nuevas posi-bilidades para el usuario, como se pue-de apreciar en la preview del videojue-go Halo 3 (http://www.microsoft.com/silverlight/halo3.aspx) y en el proyectode buscador Tafiti.com.

La compañía también ha anuncia-do Silverlight Partner Initiative, unprograma diseñado para albergar las dis-tintas colaboraciones entre proveedo-res, redes de contenido, vendedores deherramientas y estudios de diseño.Según esta iniciativa, más de 35 com-pañías de distinto tipo han decididoadoptar la tecnología Silverlight.

Además de la presentación de Sil-verlight 1.0, Microsoft ha lanzadoExpression Encoder 1.0 (antesconocido como Expression MediaEncoder), una herramienta que faci-lita a los profesionales codificar, per-feccionar y publicar contenido inno-vador en Silverlight. Permite a losusuarios codificar una gran cantidadde formatos de contenido multime-dia, basados en archivos dentro de laexperiencia Silverlight. ExpressionEncoder también facilita la produc-ción de eventos en directo con la

opción de cambio de fuente y la publi-cación de contenido dentro de servi-cios como Silverlight Streaming byWindows Live.

Antonio Gómez, jefe de produc-to de Silverlight en Microsoft Ibéri-ca, ha señalado que “con el lanzamien-to de Silverlight 1.0 estamoshaciendo posible que losdesarrolladores y diseñadorescreen el tipo de experienciasen alta definición que todoslos usuarios demandan,mediante la integración dedatos y servicios con un for-mato único. Silverlight ace-lerará el crecimiento de lasaplicaciones interactivas, alofrecer a desarrolladores ydiseñadores nuevas opcionespara crear experiencias inno-vadoras para la Web, PC,teléfono móvil y otros dispositivos”.

Según Scott Guthrie (http://weblogs.asp.net/scottgu), “ahora que Silverlight1.0 está en la calle, mi equipo está tra-bajando duro en la siguiente versión,Silverlight 1.1”.

Silverlight 1.1 incluirá una versiónmulti-plataforma de .NET Frame-work que permitirá una experienciarica de desarrollo .NET en el explo-rador. Incorporará el modelo de pro-gramación de WPF para la interfazde usuario, incluyendo el soporte paraun modelo de controles extensible, lagestión de la colocación, enlace adatos, skinning y un amplio conjuntode controles incorporados de serie.También incluirá un subconjunto dela librería de clases base de .NET Fra-mework que usamos hoy, ofreciendosoporte para colecciones, genéricos,IO, múltiples hilos, globalización,comunicaciones (incluyendo sockets,

servicios Web y soporte REST),HTML, DOM, XML, almacena-miento local y LINQ. Además, seráposible utilizar cualquier lenguaje.NET para desarrollar aplicacionesSilverlight, incluyendo lenguajes diná-micos como Javascript, Python o

Ruby, lo que realmente nos abrirámuchas nuevas oportunidades.

Para más información, visite la Webde Silverlight en www.silverlight.net. Siquiere ver algunos vídeos cortos (eninglés) sobre cómo desarrollar con él,puede hacerlo desde http://silverlight.net/learn/learnvideos.aspx o en http://channel9.msdn.com/ShowPost.aspx?PostID=339594, donde encontrará unvídeo del propio Scott Guthrie. Si uti-liza Visual Studio 2008 o la edición gra-tuita Web Developer Express 2008,puede descargar una librería desdehttp://weblogs.asp.net/scottgu/archi-ve/2007/08/01/vs-2008-javascript-intellisense-for-silverlight.aspx para obte-ner ayuda Intellisense para Silverlight1.0. Y si tiene pensado desarrollar apli-caciones .NET usando Silverlight 1.1Alpha, esta versión está disponible parasu descarga en http://silverlight.net/GetStarted.

dotN

etM

anía

<<

6

noticiasnoticias

noticias

noticias

noticias

Microsoft lanza Silverlight 1.0 y extiende susoporte a la plataforma LinuxMicrosoft presenta además Expression Encoder 1.0, sistema que permite importar,comprimir y publicar online de forma rápida vídeo digital a partir de una ampliavariedad de formatos.

Page 7: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

7

dnm.directo.noticias<<

Microsoft .NET Micro FrameworkSDK 2.0 combina la fiabilidad y efi-ciencia del código manejado con las faci-lidades que ofrece Visual Studio parahacer posible un aumento sustancial dela productividad en el desarrollo de apli-caciones embebidas para pequeños dis-positivos. La descarga consiste en elSDK completo, que permite desarrollardesde Visual Studio 2005 código para.NET Micro Framework utilizando ellenguaje C# y un subconjunto de laslibrerías .NET, ejecutarlas sobre unemulador universal y luego desplegar-las sobre hardware real utilizando unode los kits de despliegue concretos quese suministran.

.NET Micro Framework SDK 2.0con el Service Pack 1 ofrece las siguien-tes características:

Integración con Visual Studio

El SDK de .NET Micro Frameworkse integra en el entorno de Visual Stu-

dio, permitiendo hacer uso, para el desa-rrollo en C#, de características de pro-ductividad como la depuración sobre eldispositivo, navegación de objetos, ayu-da IntelliSense y compilación y des-pliegue integrados.

Librerías y drivers de código manejado

Una implementación para disposi-tivos de un subconjunto del CLRde.NET Framework, que lleva las ven-tajas del código manejado al desarrolloen para pequeños dispositivos. Es posi-ble desarrollar controladores de dispo-sitivos y rutinas de interrupción en C#para hardware conectado a través deinterfaces estándar, como SPI, I2C,GPIO y USART.

Emulador extensible

Es posible extender el emuladorbásico incluido en el SDK para reflejarlas posibilidades de un hardware con-creto; por ejemplo, se puede añadirperiféricos simulados como sensores,pantallas, botones, etc. Una vez hechoesto, podrá desplegar ese emulador per-

sonalizado y probar su código sobre elhardware virtual.

Protección de memoria flash

Para evitar la carga de código noautorizado, el Service Pack 1 añade laposibilidad de almacenar claves y firmasde aplicaciones en su dispositivo.

Herramienta de gestión de la memoria flash

MFDeploy, incluida como parte delSDK, ahora permite la gestión de cla-ves y firmas de aplicaciones en los dis-positivos.

Herramienta de generación de fuentes

TFConvert permite convertir fuen-tes .TTF para que funcionen en su dis-positivo.

Más información y descargas enhttp://www.microsoft.com/downloads/details.aspx?familyid=32f5df20-6c95-4fe8-a76c-0ed56a839ad2&displaylang=en.

Liberado el Service Pack 1 de Microsoft .NETMicro Framework SDK 2.0

A l h a m b r a -Eidos, empresaespecializada enfacilitar solucio-

nes a las necesidades empresariales en elámbito de las TIC, inicia el próximo 19 deoctubre de 2007 el tercer Máster en Desa-rrollo de Software en formato blended, elXIV de la historia de la compañía.

Tendrá como foco de atención las últi-mas versiones de los productos de Micro-soft: Visual Studio 2005, SQL Server 2005,Microsoft Office Sharepoint Portal Server2007 y Biztalk Server 2006. Además, suscontenidos facilitarán la certificación de

más alto nivel de la carrera oficial para desa-rrolladores de Microsoft: el MCPD Enter-prise Applications Developer.

El máster blended dará comienzo el 19de octubre y finalizará el 11 de mayo. Estamodalidad combina las clases presenciales(en un 40%) con horas de autoestudio,tutorización y orientación (un 60%). Enconcreto, este año los alumnos recibirán176 horas lectivas presenciales y 255 horasde autoestudio. Las clases presenciales delmáster se impartirán los viernes por la tar-de y los sábados por la mañana.

Más información en http://www.alham-bra-eidos.es.

El pasado 17 de septiembre Microsoft liberó el Service Pack 1 de Microsoft .NET MicroFramework SDK 2.0.

Microsoft PerformancePointServer 2007Poco más de un año después de la adqui-sición de Proclarity, Microsoft ha anun-ciado Microsoft® Office Performan-cePoint™ Server 2007, una aplicaciónque permite a las compañías gestionarel rendimiento a través de la monitori-zación, análisis y planificación de susnegocios usando una solución integra-da. Microsoft Business Intelligence per-mite a la mayoría de las personas de cual-quier nivel de una organización tomarmejores decisiones y convierte en reali-dad la visión de que todos añadan valora cada decisión.

Alhambra-Eidos convoca su 3er Máster en desarrollo de software

Page 8: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

El pasado día 20 de septiembre, Microsoft celebró enBarcelona tres eventos paralelos orientados a clientes,partners y desarrolladores bajo el nombre de WindowsMobile Briefing.

Desde dotNetManía asistimos al bloque de desarro-llo, en el que tuvimos la oportunidad de conocer de pri-mera mano los aspectos más destacados en Windows Mobi-le 6.0 y la próxima aparición de Visual Studio 2008 y conello .NET Compact Framework 3.5. Todo esto de la manode dos habituales en eventos de desarrollo móvil en Euro-pa, John Wyer y David Goon.

En la primera parte, John mostró las posibilidades dedesarrollo que hoy por hoy ofrece la última versión de Win-dows Mobile, qué papel juega en ella la plataforma .NETy cuál es la hoja de ruta tanto del sistema operativo comode .NET Compact Framework. Antes de dar el relevo aDavid, y ya durante la comida que tuvo lugar en el mismorecinto, pudimos compartir mesa con John y David y noshablaron de la enorme expectación que se está generandoen torno a las nuevas características disponibles con la pró-xima aparición de Visual Studio 2008 las cuales serán, sinduda, uno de los temas estelares en el próximo Tech-Edque tendrá lugar en Barcelona en el próximo mes denoviembre y en el que ambos estarán presentes.

En la segunda parte, David nos brindó una magistraldemostración práctica de Windows Mobile 6.0 con .NETCF 3.5. Intercepción de SMS, integración con el teléfo-no —así como con las tareas y correo de Pocket Outlo-ok— y buenas prácticas en el uso de notificaciones de sis-tema, hasta la utilización del Cellular Emulator y FakeGPS. No podía dejarnos sin mostrar un ejemplo —aun-que fuera sencillo— de Compact WCF. Por primera veztuvimos la oportunidad de ver CfSvcutil.exe, el genera-dor cliente de servicios WCF para la versión Compact,y cómo de una forma rápida y sin demasiadas complica-ciones podemos consumir servicios WCF.

Ya en la recta final, mostraron los aspectos más desta-cados de Mobile Client Software Factory (MCSF), desta-cando algunos application blocks, y cómo MCSF se está con-virtiendo en un referente dentro del desarrollo de aplica-ciones móviles, pasando a ser incluso el pilar para plata-formas de aplicaciones como la de Microsoft DynamicsCRM 3.0 Mobile.

En definitiva, un evento sobresaliente, tanto por la orga-nización como por el contenido y los ponentes, deseandoque Microsoft vuelva de nuevo en futuras ediciones.

José Miguel Torres

Windows Mobile Briefing 2007

eventoseve

ntos

El pasado 17 al 21 de septiembre se celebró la edición deotoño de BASTA, en Mainz, Frankfurt. Con más de 600asistentes, BASTA y SQL Con se han convertido en laconferencia por excelencia de Alemania en lo que se refie-re a .NET y SQL Server. Hubo más de 70 ponentes, entrelos cuales se encuentran algunos de mucho prestigio talescomo Dominick Baier, Christian Weyer, AndreasKosch o nuestro compañero Dino Esposito. Tal comocomentaba el propio Massoud Kamali, director de Soft-ware & Support Verlag, organizadores del evento, la con-ferencia pretende ser un evento de la comunidad dondehay un alto grado de participación de muchos integran-

tes de ésta. Como muestra, desde hace un par de años, seobsequia a proyectos innovadores con hasta 20.000 euros,premio que se anuncia el último día de la conferencia yque esta ocasión fue a parar a dynaTrace (www.dynatra-ce.com). Sin embargo, para los organizadores todavía noha terminado el trabajo. La semana del 24 al 28, ya coneste número en imprenta, tendrá lugar EKON/EuroDevCon en su undécima edición, conferencia que seenfoca a desarrolladores Win32 y .NET. Este año pro-mete ser interesante, ya que CodeGear (anteriormenteBorland) recientemente ha lanzado al mercado High-lander, la última versión de su entorno RAD para .NET3.0. Además como novedad, han sacado 3rdRail, su nue-vo entorno de desarrollo bajo Ruby on Rails, que prome-te ser todo un éxito.

Hadi Hariri

Edición de otoño de Basta!

dotN

etM

anía

<<

8

Page 9: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions
Page 10: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

La programación asíncrona, como todo buen cono-cedor de los fundamentos de la plataforma .NETsabe, permite que un proceso disponga de múlti-ples subprocesos o hilos de ejecución que nos pro-porcionan la posibilidad de llevar a cabo más de unaacción al mismo tiempo o ejecutar acciones ensegundo plano.

En el caso de las aplicaciones Web ASP.NET,la programación asíncrona se utiliza para mejorarenormemente la eficiencia de las páginas Web quetardan mucho en ejecutarse debido a operacionesde entrada/salida que pueden llegar a ser largas.Esta mejora viene del modo en que Internet Infor-mation Server procesa las peticiones de páginas quese realizan por parte de los distintos usuarios.

Un barniz de cómo procesa las peticiones IISIIS solo es capaz de atender un número con-creto de peticiones de páginas de manerasimultánea, ya que a cada petición le asigna unhilo de ejecución propio. Estos hilos de ejecu-ción los obtiene de un pool o repositorio quecontiene una cantidad determinada de ellos. Pordefecto se dispone de 100 hilos de ejecución porprocesador, aunque esta cantidad es configura-ble, tal y como se indica en http://www.micro-soft.com/technet/prodtechnol/WindowsSer-

ver2003/Library/IIS/6b46c077-49c2-40d5-a6bc-

56cdfa79d457.mspx?mfr=true.Cuando se alcanza ese límite y todos los hilos

están ocupados, IIS encola las nuevas peticionesque lleguen para atenderlas en cuanto le sea posi-ble. Mientras tanto, estas peticiones estarán pen-dientes y sin ofrecer respuesta a los usuarios. Encasos extremos, los usuarios comenzarán a recibircódigos de estado 503 de “servicio no disponible”y no se procesarán las páginas.

Cuando una petición termina de ser atendida, suhilo correspondiente se libera y se devuelve al pool yqueda disponible para procesar otra petición. En con-diciones normales, el tiempo que uno de estos hilosestá ocupado es muy pequeño y se pueden atendermuchas peticiones prácticamente simultáneas sinproblema. Las dificultades comienzan cuando unade nuestras páginas realiza alguna operación que tar-da mucho tiempo en ejecutarse. Mientras se ejecu-ta esta operación larga, el hilo estará bloqueado, y amedida que se realicen peticiones a ésta u otras pági-nas de ejecución larga quedarán bloqueados más hilos,disminuyendo notablemente la escalabilidad de laaplicación, puesto que no habrá subprocesos dispo-nibles para atender más peticiones. Debemos inten-tar evitar esta situación en la medida de lo posible.

Generalmente, estas operaciones largas se corres-ponden con operaciones de E/S, como esperar a quese procese una consulta larga en el servidor de datoso acceder a un servicio Web remoto que puede tener

Páginas asíncronasen ASP.NET 2.0

asp.net

José Manuel AlarcónAguín es redactor de ddot-

NetManía. Es ingenieroindustrial y especialista en

consultoría de empresa.Ha escrito varios libros, y

ha publicado más de tres-cientos artículos sobreinformática e ingeniería

en revistas especializadas.Es MVP de ASP.NET,

MCTS, MCPD, MCT ytutor de campusMVP.

Visite su blog enwww.jasoft.org

En ocasiones, nuestras aplicaciones deben realizar tareas largas, que blo-quean el hilo de ejecución principal a la espera de que otros procesosterminen. Este tipo de situaciones se debe evitar si queremos desarro-llar sistemas escalables, capaces de atender a miles de usuarios. Comoveremos, estas situaciones son más comunes de lo que cabría esperar, yla ejecución asíncrona de páginas es nuestro mejor aliado.

José Manuel Alarcón

Page 11: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

problemas de tráfico. Todas estas tareastienen asociados métodos nativos parahacer llamadas asíncronas que podemosutilizar en nuestras páginas con la infra-estructura de asincronía de ASP.NET queahora veremos. Al ejecutar de forma asín-crona las llamadas a esos procesos largos,conseguimos que el subproceso principalque atiende la petición quede liberado yse devuelva al pool para poder atender nue-vas peticiones de otros usuarios. Al ter-minar la ejecución asíncrona, se recupe-ra un hilo del repositorio para devolverlos resultados al cliente.

En general, nos beneficiaremos másde la ejecución asíncrona en situacio-nes en las que el proceso largo se eje-cute en otro servidor, como en los ejem-plos citados. El motivo es que si lo úni-co que hace nuestro código es esperara que termine alguna tarea remota enel servidor de datos o en otro servidorWeb, mientras se espera en segundoplano el impacto sobre la capacidad deproceso es prácticamente nulo, por loque devolver el proceso a IIS aseguraque se gestionen nuevas peticiones depáginas sin mermar el rendimiento. Sinembargo, si el proceso largo implicarealizar una tarea intensiva en nuestropropio servidor (procesar un archivomuy grande o acceder a la base de datoslocal), liberamos el subproceso paraatender nuevas llamadas, pero hay unprocedimiento ejecutándose en segun-do plano que compite con IIS por losrecursos de la máquina. En este caso,tendremos una mayor capacidad de res-puesta a peticiones (escalabilidad), peroprobablemente el aumento de rendi-miento no sea apreciable. Es impor-tante tener claro este concepto.

Implementación de páginasasíncronasDado que la plataforma .NET ofreceun gran soporte para operaciones mul-ti-subproceso asíncronas, siemprepodemos hacer uso de ellas en nuestrasaplicaciones para conseguir la ejecuciónen segundo plano de tareas. De hecho,en las versiones 1.x de ASP.NET noquedaba más remedio que hacerlo de

esta forma, lo que implicaba bajar denivel en el código y añadía bastantecomplejidad a este tipo de operaciones.Por fortuna, ASP.NET 2.0 nos pone lascosas mucho más fáciles. Aunque ten-dremos que hacer algo de trabajo extra,éste es muy llevadero.

ASP.NET 2.0 introduce un nuevoatributo para las páginas llamado Async.Basta con colocarlo en la directiva de lapágina actual con el valor establecidoen verdadero para que se cree de modotransparente para nosotros la infraes-tructura necesaria para ejecutar tareasde manera asíncrona. La figura 1 mues-tra el aspecto de este atributo aplicadoa una página.

A continuación, se deben definir dosmétodos que nos servirán para iniciary terminar la acción “larga” que quere-mos implementar en segundo plano. Sudefinición es la siguiente (se puedevariar el nombre sin problemas, comoveremos en breve):

Estos dos miembros son muy pare-cidos a los de la interfaz IHttpAsyn-cHandler de ASP.NET, pero cambianlos dos primeros parámetros del méto-do de inicio de la llamada.

Finalmente, solo resta indicar enla página que se tiene que llamar aestos dos métodos de manera asíncro-na, para lo cual tenemos dos formas deconseguirlo:1) Llamar al método AddOnPreRender-

CompleteAsync de la página, pasándo-le referencias a estos dos métodos.

2) Llamar al método RegisterAsyncTask,indicándole la definición de una tareaasíncrona a llevar a cabo. Éste se sue-le utilizar cuando hay varias tareasasíncronas en la misma página, comoenseguida estudiaremos.

De acuerdo. Hasta aquí la teoría,que puede parecer más complicada delo que realmente es. Ahora veámoslocon un ejemplo práctico y se entenderámucho mejor.

Llamada asíncrona a un método largoEn general, el patrón de llamadas asín-cronas de .NET está implementado entodas las clases que implican entrada ysalida y que en ocasiones pueden darproblemas de ejecución larga. Porejemplo, las clases proxy que genera.NET para utilizar servicios Web expo-nen métodos específicos para realizarla llamada de manera asíncrona, a saber,BeginXXX y EndXXX, donde XXX repre-senta el nombre común del métodousado para la llamada síncrona, máshabitual. Lo mismo ocurre en el caso

de la E/S de archivos, las llamadas paraejecutar procedimientos de bases dedatos, etc.

Este patrón de asincronía deberíaser de sobra conocido para un pro-gramador de la plataforma .NET. Poreste motivo, voy a hacer un ejemplomás sencillo en sus resultados, peroque al mismo tiempo es más comple-jo y completo porque ilustra cómodotar de capacidad asincrónica a unmétodo cualquiera que no tengaimplementado “de serie” un patrón

dotN

etM

anía

<<

11

dnm.asp.net<<

Figura 1

Public Function BeginProcessRequest(ByVal sender As Object, _ByVal e As System.EventArgs, ByVal cb As System.AsyncCallback, _ByVal extraData As Object) As System.IAsyncResult

End Function

Public Sub EndProcessRequest(ByVal result As System.IAsyncResult)

End Sub

Page 12: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

12

dnm.asp.net<<

asíncrono mediante BeginXXX y EndXXX,así que seguramente será más intere-sante para la mayoría de los lectores.

El ejemplo (que se puede descargardel sitio Web de dotNetManía) mues-tra una página con dos etiquetas. En laprimera de ellas se apunta la hora exac-ta de comienzo de la ejecución. A con-tinuación, se llama a un método que tar-da cinco segundos en ejecutarse y quedetiene la ejecución de la página, y final-mente se muestra la hora tras haberloejecutado (por lógica, cinco segundosdespués). En el código de ejemplo se haimplementado este esquema de formanormal (síncrona), y usando lo vistohasta ahora con asincronía. Si ejecuta-mos uno y luego el otro desde InternetInformation Server y usamos una herra-mienta de prueba de carga de aplica-ciones que simule decenas o cientos deusuarios, encontraremos una gran dife-rencia en los tiempos de respuesta delas páginas y en la escalabilidad de laaplicación, siendo la página asincróni-ca capaz de gestionar muchos más usua-rios simultáneos que la página normalpor los motivos expuestos anterior-mente.

Vamos a analizar el código:

1.- Marcar la página como asíncronaLo primero es, como ya sabemos,

marcar la página con el atributo de asin-cronía correspondiente, como se pue-de ver en la figura 1.

2.- Definir el método que tarda enejecutarseEn este caso, simplemente metemos

artificialmente un retardo de cincosegundos, poniendo el subproceso deejecución actual en suspenso:

3.- Definir el comienzo de la opera-ción asíncronaDebemos implementar la función

BeginProcessRequest, que toma ciertos

parámetros que ya hemos presentado ydevuelve un manejador de resultadosasíncronos (IAsyncResult). Para devol-ver un manejador de este tipo, debemosgenerar una ejecución asíncrona denuestro método. La forma de hacerloes a través de un delegado que lo repre-sente (un delegado en .NET, como yasabrá el lector, es asimilable a un pun-tero seguro a un método). Para ello, loprimero que hacemos es definir dentrode la clase un nuevo tipo de delegadoque represente al método que queremosejecutar, en este caso uno que no tieneparámetros y no devuelve nada, así:

Delegate Sub TareaSinParametros()

Así de fácil. Si tuviese parámetrosy/o devolviera algún valor haríamos unadeclaración análoga del delgado parareflejarlos.

Creamos también una variablemiembro privada en la página paraguardar una referencia a la función aejecutar, lo que será tan sencillo comoesto:

Private tarea As TareaSinParametros

Ahora ya tenemos un delegado conel que representar nuestra tarea asín-crona, así que la definición del métodoBeginProcessRequest (o como le haya-mos llamado) será:

Es decir, obtenemos una referen-cia/delegado al método que queremosejecutar asíncronamente con AddressOf(en C# se pondría simplemente el nom-bre del método sin paréntesis) y comen-zamos la ejecución asíncrona de la mis-ma usando el método BeginInvoke queposeen todos los delegados. Éste

devuelve un objeto de control de tipoIAsyncResult, que devolvemos inme-diatamente como resultado de la fun-ción. Con esto hemos conseguido queal llamar a este método se empiece laejecución asíncrona del método hazAl-goLargo.

4.- Definir el final del proceso asín-cronoAhora debemos definir qué quere-

mos hacer cuando nuestro método asín-crono se haya terminado de ejecutar.Nos falta, por tanto, implementar elmétodo EndProcessRequest (o como lehayamos llamado). En nuestro caso,sería simplemente:

Es decir, con el controlador asín-crono que nos entrega el método y eldelegado de la función llamamos aEndInvoke para dar por terminada la eje-cución asíncrona. Finalmente, apunta-mos en la etiqueta la hora de finaliza-ción de la llamada asíncrona.

5.- Especificar los métodos asíncro-nos que se van a utilizarEn el evento Load de la página

debemos indicar qué métodos de lamisma se van a utilizar para lanzar yterminar la ejecución asíncrona.Generalmente utilizaremos para elloel método AddOnPreRenderComplete-

Private Sub hazAlgoLargo()System.Threading.Thread.Sleep(5000)End Sub

Public Sub EndProcessRequest(_ByVal result As _

System.IAsyncResult)tarea.EndInvoke(result)HoraFin.Text = _String.Format( “Fin: {0}”, _DateTime.Now.ToLongTimeString())

End Sub

Public Function BeginProcessRequest(ByVal sender As Object, ___ByVal e As System.EventArgs, ByVal cb As System.AsyncCallback, __ByVal extraData As Object) As System.IAsyncResult

tarea = New TareaSinParametros(AddressOf hazAlgoLargo)Dim res As IAsyncResult = tarea.BeginInvoke(cb, extraData)Return res

End Function

Page 13: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

13

dnm.asp.net<<

Async, por lo que nuestro evento Loadquedaría así:

¡Listo! Ahora, al ejecutar la página,el evento Load indica a la infraestructu-ra de ASP.NET que se debe ejecutar elmétodo BeginProcessRequest para lan-zar una tarea asíncrona y el método End-ProcessRequest cuando ésta termine, ytodo funcionará de maravilla. Si prue-ba bien el código adjunto, comprenderámejor su funcionamiento, que no es tancomplicado como parece. Además, con-viene tener en cuenta que en este casohemos realizado un ejemplo complejoque consiste en llamar a un método queno ofrece soporte “de serie” para reci-bir llamadas asíncronas. Si lo que qui-siésemos es llamar a una consulta largacontra una base de datos u otro méto-do con soporte nativo incorporado, elcódigo sería mucho más fácil todavía.

Modificación del ciclo de vidade la página

Con la ejecución asíncrona de tare-as, lo que estamos consiguiendo pordebajo es modificar el ciclo de vida dela página. La figura 2 ilustra perfecta-mente lo que quiero decir. En dichafigura, el diagrama de la izquierda nosmuestra el ciclo de vida normal de unapágina (simplificado), ilustrando los dis-tintos pasos/eventos que se van produ-ciendo.

Cuando ejecutamos una tarea deforma asíncrona el flujo de eventos semodifica, tal y como se puede observaren el diagrama de la derecha de la figu-ra 2. Tras haber ejecutado el evento Pre-Render de la página, se detiene el hilode ejecución de la misma y se lanza unnuevo hilo asíncrono con la tarea espe-

cificada. Este hilo principal de la pági-na, como ya he comentado, se devuel-

ve al pool de IIS para atender otras peti-ciones. Al terminar la ejecución asín-crona, se retoma la ejecución de la pági-

na, pero ya en otro hilo diferente quese toma también del pool de IIS.

Ejecución de varias tareasasíncronas con ventaja

El último paso explicado antes uti-liza el método AddonPreRenderComplete-Async para registrar la tarea asíncrona.Existe una opción adicional, que con-siste en envolver la información de latarea mediante una clase específicadenominada PageAsyncTask. El cons-tructor de la misma acepta como argu-mentos los métodos para inicio y fin de

Protected Sub Page_Load(ByVal sender As Object, _ByVal e As System.EventArgs) Handles Me.LoadHoraInicio.Text = String.Format(“Inicio: {0}”, _DateTime.Now.ToLongTimeString())

Me.AddOnPreRenderCompleteAsync(AddressOf BeginProcessRequest, _AddressOf EndProcessRequest)

End Sub

Figura 2

Page 14: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

14

dnm.asp.net<<

la tarea asíncrona, por lo que el siguiente código seríaequivalente al del paso 5 anterior:

La diferencia es que usamos el método Registe-rAsyncTask propio de la página actual y le pasamosuna nueva instancia de la clase PageAsyncTask que des-cribe la tarea a ejecutar.

Este método parece una forma más clara de lan-zar tareas asíncronas que el —sin embargo — máshabitual método anterior. A mí personalmente megusta más. Además de esta claridad en el código, quepuede ser una ventaja bastante subjetiva, ofrece algu-nas ventajas adicionales de índole técnica:

1.- La clase PageAsyncTask nos permite indicar tam-bién qué método queremos que se ejecute en casode que se supere un determinado tiempo de eje-cución. Para ello, en su tercer parámetro pode-mos pasar un delegado a un método del tipo WebEn-dEventHandler, que es idéntico en su definición almétodo de finalización de la tarea. En el ejemplohemos prescindido de su uso, pasándole un valornulo (Nothing en VB). Este tiempo máximo deespera se puede controlar con un atributo de ladirectiva de página llamado AsyncTimeOut. Éste estambién el nombre de una propiedad de la pági-na, así que podemos establecerlo mediante códi-go. Por ejemplo si escribimos AsyncTimeOut=3 enla directiva de la página estamos indicando que alcabo de tres segundos se debe llamar a este méto-do de gestión de tiempo excedido, lo cual puedeser muy útil para cortar la ejecución y mostrar unmensaje de error, por ejemplo.

2.- El cuarto parámetro del constructor nos permiteidentificar de manera única a una tarea asíncronade la página, en caso de utilizar varias. Normal-mente le pasaremos una cadena identificativa, peropodemos pasar cualquier otro objeto que nos pro-porcione, por ejemplo, una forma de compartirinformación entre las tareas, ya que se pasará almétodo de inicio en su último parámetro de infor-mación adicional.

3.- Este método nos permite ejecutar diversas tareasasíncronas en la página. Para ello, simplementetenemos que definir sus manejadores de comienzo

y final, como hemos visto hasta ahora, y podemosregistrar tantas tareas como deseemos mediante elmétodo RegisterAsyncTask. Es más, existe otroconstructor de PageAsyncTask que ofrece un pará-metro adicional, de tipo booleano, que nos permi-te decidir si la tarea se ejecutará en paralelo con lasdemás asíncronas que hubiese o si, por el contra-rio, se ejecutará de manera exclusiva haciendo espe-rar a la siguiente que hayamos registrado. Esto pue-de ser de gran interés en muchas aplicaciones.

4.- Una ventaja fundamental de usar este método enlugar del anterior es que RegisterAsyncTask con-serva dentro del método de finalización de la tareaasíncrona el estado de suplantación de usuarios,los ajustes de cultura y lenguaje actuales, y el con-texto de la llamada actual (HttpContext.Current).Esto no ocurre con el método anterior.

5.- Aunque la ejecución de la tarea asíncrona se lan-za de manera automática en el evento PreRenderde la página, con este método tenemos mayor con-trol sobre el instante en que queremos quecomience la ejecución de la misma gracias a quepodemos utilizar el método ExecuteRegistere-dAsyncTasks de la página. Éste lanza de inmediatola ejecución de las tareas asíncronas que tengamosregistradas. No es necesario llamarlo, pero nosofrece un control adicional que puede sernos deutilidad en algún momento.

En definitiva, podemos usar cualquiera de los dosmétodos de lanzar tareas asíncronas (o incluso ambosa la vez), pero el uso de la clase PageAsyncTask nos ofre-ce ciertas ventajas objetivas interesantes y es reco-mendable si queremos lanzar varias tareas asíncronasal mismo tiempo o en secuencia. No obstante en lamayoría de los ejemplos y documentos que se encuen-tran en la red se usa el primer método.

En resumenLo que marca la diferencia entre una aplicación“del montón” y una aplicación profesional de carác-ter empresarial son precisamente los detalles quesurgen cuando las exigencias sobre la mismacomienzan a ser grandes: muchos usuarios, res-tricciones de memoria, tareas largas y complejas,etc. La escalabilidad es una cuestión que deberíaestar entre los primeros puestos de la lista de pre-ocupaciones de una aplicación empresarial, juntoa la seguridad, la facilidad de despliegue y mante-nimiento o la usabilidad. Una de las técnicas avan-zadas que permite crear aplicaciones escalables encircunstancias adversas es la creación de páginas conprocesamiento asíncrono. En este artículo hemospresentado los fundamentos necesarios para podersacar partido a esta práctica tan útil.

Protected Sub Page_Load( ByVal sender As Object, _ByVal e As System.EventArgs) _Handles Me.Load

HoraInicio.Text = String.Format(“Inicio: {0}”, _DateTime.Now.ToLongTimeString())

Me.RegisterAsyncTask(New PageAsyncTask(_AddressOf BeginProcessRequest, _AddressOf EndProcessRequest, _Nothing, Nothing))

End Sub

Page 15: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions
Page 16: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

Qué es la seguridad de acceso a código en .NET

La seguridad de acceso a código –conocida en losmanuales en inglés como CAS (Code Access Secu-rity)– permite que los desarrolladores de aplica-ciones y los administradores de sistemas restrin-jan los recursos a los que puede acceder un pro-grama ejecutable desarrollado con .NET.

Los archivos .exe desarrollados con las herra-mientas tradicionales anteriores a .NET no tie-nen ninguna limitación en cuanto a los recursosdel sistema que pueden utilizar, aparte de las quese determinen por los permisos que el sistema con-ceda al usuario que ejecuta la aplicación. Por elcontrario, los desarrollados con .NET, además delas restricciones impuestas por los permisos delsistema operativo, están sujetos a limitaciones adi-cionales establecidas por el entorno común de eje-cución de .NET.

.NET Framework dispone de herramientas yclases para examinar y modificar los permisos quese conceden a cada ejecutable. En este artículo exa-minaremos el funcionamiento y configuración dela seguridad de acceso a código desde un punto de

vista externo al programa, y en una próxima entre-ga nos detendremos en las clases y atributos quepodemos utilizar dentro de nuestros programaspara controlar su comportamiento.

PruebasEl primer paso para determinar los permisos querecibe un ejecutable consiste en reunir lo que sedenomina “Pruebas” (Evidence en inglés), que con-sisten en un conjunto de características referentesa la identidad y el origen del ensamblado. La con-cesión de permisos se realiza en base a estas Prue-bas.

Las Pruebas que se examinan son el directoriode la aplicación, la inclusión del ensamblado en elGAC, el resumen criptográfico (Hash), el editor(Publisher) del software, el sitio de descarga, el nom-bre seguro (Strong Name) y la URL.

Cuando se carga en memoria un ensamblado,el motor de ejecución de .NET determina las dis-tintas Pruebas que le son aplicables, y en base a ellasdecide a qué grupo o grupos de código perteneceel ensamblado, tal como veremos más adelante.

Seguridad de acceso a código

plataforma.net

Alberto Población lleva27 años desarrollando

software. Cuenta entreotras con las certificacio-

nes MCSE, MCDBA,MCITP, MCSD, MCPD y

MCT, además de serMVP de C#. En la actua-lidad trabaja como con-

sultor independiente,dedicándose principal-mente a la formación,

asesoramiento y desarro-llo de aplicaciones.

Una consulta frecuente entre los desarrolladores de aplicaciones .NETse refiere al hecho de que un programa que funcionaba perfectamentemientras se encontraba en desarrollo deja de funcionar cuando se pasaa producción por el método de copiarlo a una carpeta en un servidor yejecutarlo desde ella. En este artículo examinamos la forma en que .NETdetermina los permisos de los ejecutables y cómo éstos se pueden modi-ficar para resolver casos como el indicado. En un futuro artículo deta-llaremos cómo podemos aprovechar estos mecanismos de seguridaddesde nuestro código.

Alberto Población

Page 17: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

Conjuntos de permisos

Las políticas de seguridad de acceso acódigo permiten que un administradoro un usuario final controlen los permi-sos concedidos a un ensamblado en fun-ción de las Pruebas de éste.

Con .NET Framework vienen yapredefinidos múltiples permisos que sepueden asignar al código, por ejemploUIPermission (permiso para utilizar lainterfaz de usuario), FileIOPermission(para trabajar con archivos), Registry-Permission (para el acceso al registro),etc. Adicionalmente, se pueden definirpermisos por programación heredan-do de la clase CodeAccessPermission.

Estos permisos individuales puedena su vez agruparse en conjuntos de per-misos. La herramienta de configuraciónde .NET Framework, de la que habla-remos más adelante, nos permite defi-nir y examinar los conjuntos de permi-sos. La figura 1 muestra un fragmentode la pantalla de esta herramienta, en laque se ven los conjuntos predefinidos.Haciendo clic sobre cualquiera de ellospodemos ver los permisos que contie-ne el conjunto, como nos muestra lafigura 2. Algunos de los permisos admi-ten a su vez configuración adicional,similar al ejemplo de la figura 3.

Grupos de código

Para decidir qué permisos deben con-cederse a un determinado ensamblado,primero hay que decidir a qué grupo ogrupos de código pertenece. Estos gru-pos se pueden configurar por medio dela herramienta de configuración de.NET Framework. La configuraciónpredeterminada se muestra en la figu-ra 4, en la que podemos apreciar un gru-po denominado All_Code (“todo el códi-go”) del que cuelgan varios grupos quecoinciden con las Zonas configuradasen Internet Explorer.

Cada uno de estos grupos tiene asig-nada una condición de pertenencia, quees la que determina qué ensamblados per-tenecen a este grupo. En la figura 5 pode-mos observar que el grupo My_Compu-ter_Zone tiene como condición de per-tenencia la Zona “Mi PC”. De esta for-ma, un ensamblado que se carga desdela máquina local cumple la condición depertenencia al grupo My_Computer_Zone,y en consecuencia recibe los permisos

asignados a este grupo. Estos permisosse configuran a través de la lengüeta“Conjunto de permisos” de la ventanade propiedades del grupo de código.

En la figura 6 vemos que el grupoque estamos tomando como ejemplorecibe los permisos del conjunto “FullTrust”. En consecuencia, los ejecuta-bles lanzados desde el disco local denuestro ordenador (zona “Mi PC”) reci-ben permisos ilimitados (“Full Trust”),salvo que se modifique la configuraciónde permisos predeterminada.

Los grupos de código se puedenconfigurar de forma jerárquica, talcomo vemos en el árbol de la figura 4,en la que las diversas zonas cuelgan dela rama “All_Code”. A la hora de deter-minar la pertenencia de un ensambla-do a un grupo de código, se examinacada rama del árbol y si el ensambladocumple la condición de pertenencia aesa rama se continúan examinando lasramas que cuelguen de ella. En casocontrario, se descarta esa rama sinentrar en las inferiores.

Un ensamblado puede pertenecer amúltiples grupos de código. Por ejem-plo, podríamos haber definido un gru-po cuya condición de pertenencia sea“todos los ensamblados descargadosdesde el servidor X”, y otro grupo para“todos los ensamblados firmados con

dotN

etM

anía

<<

17

dnm.plataforma.net<<

Figura 2

Figura 3

Figura 4

Figura 1

Page 18: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

18

dnm.plataforma.net<<

el certificado Y”. Un ejecutable firma-do con el certificado “Y” descargadodel servidor “X” pertenecería a ambosgrupos. Cuando un ensamblado perte-nece a varios grupos, recibe la uniónde todos los conjuntos de permisos detodos los grupos a los que pertenece.

Niveles de políticas de seguridadSi nos fijamos una vez más en la figura4, veremos que el árbol de las directi-vas de seguridad tiene tres ramas desig-nadas como “Empresa”, “Equipo” y“Usuario”. De forma predeterminada,la única rama que viene configurada esla de Equipo. Cada una de estas ramasrepresenta un Nivel de política de segu-ridad. Existe un cuarto nivel denomi-nado “Dominio de Aplicación” que nodispone de herramientas administrati-vas, sino que corresponde con los per-misos aplicados desde programa cuan-do se crea mediante código un Domi-nio de Aplicación.

Al cargar un ensamblado, cada unode los niveles se evalúa por separado,determinando los permisos que elensamblado debe recibir conforme conlos grupos de código a los que pertene-ce dentro de ese nivel. Finalmente, seasigna al ensamblado la intersección

de todos los conjuntos de permisos quele otorga cada nivel.

Así pues, cada uno de los niveles sir-ve para aplicar restricciones suplemen-tarias sobre los permisos concedidospor los otros niveles. Por ejemplo, unusuario podría otorgar en su equipo, anivel de Usuario, permisos de escritu-ra en el disco local para los ejecutables.NET descargados desde Internet, perosi no se modifica a nivel de Equipo lapolítica predeterminada, dichos ejecu-tables no podrán grabar sobre el discolocal, puesto que la política a nivel deEquipo no lo permite.

Atributos de los Grupos de códigoExiste un par de de atributos que sepueden asignar a los grupos de códigoy que modifican el comportamientodescrito anteriormente. En la docu-mentación se denominan “Exclusive” y“LevelFinal”, y en la figura 7 podemosobservar las dos casillas de verificaciónque permiten establecer estas carac-terísticas desde la herramienta admi-nistrativa.

Si a un grupo de código se le aplicael atributo Exclusive, lo que se logra esque a los ensamblados que pertenezcana ese grupo se les apliquen única y exclu-sivamente los permisos de ese grupo,aunque el ensamblado pertenezca a másgrupos. No es lícito que un ensambla-do pertenezca a más de un grupo queesté marcado con el atributo Exclusive.Si esto ocurre, se produce un error deltipo PolicyException.

El atributo LevelFinal impide quese apliquen otras políticas establecidasa un nivel menor. El orden en el que seevalúan los niveles es el de Empresa,Equipo y Usuario. Así pues, si a nivelde Empresa se aplica un atributo Level-Final en un grupo de permisos, losensamblados que pertenezcan a ese gru-po no serán evaluados en cuanto a su

Figura 5 Figura 6

Es posible introducir dentro delcódigo fuente de un programadirectivas que le hagan recha-zar parte de los permisos con-cedidos por la política de segu-ridad, logrando que el ejecuta-ble no tenga esos permisospese a que la política los con-ceda.

[ ]NOTA

Page 19: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

19

dnm.plataforma.net<<

pertenencia a grupos definidos a nivelde Equipo o de Usuario.

Es lícito aplicar a un grupo simultá-neamente los dos atributos.

Modificación de las políticasde seguridadComo hemos visto, de forma predeter-minada los ejecutables lanzados desde eldisco local gozan de los permisos defi-nidos como “plena confianza”, lo cual esconsistente con el comportamiento espe-rado por quienes están acostumbrados ainstalar y ejecutar programas desarro-llados con tecnologías anteriores.

Sin embargo, hay ocasiones, sobretodo en entornos empresariales, en losque se decide ubicar los ejecutables de losprogramas en un directorio compartidoen un servidor. Cuando se lanzan estosprogramas desde un puesto de trabajo,mediante una ruta de acceso del tipo\\servidor\ruta\programa.exe, recibenlos permisos del conjunto LocalIntranet,que de forma predeterminada son suma-mente limitados, no permitiendo opera-ciones tales como la escritura en disco oel acceso a bases de datos. Esta situaciónresulta sorprendente para quien esperadel ejecutable el comportamiento “tradi-cional”, sin ser consciente de la interven-ción de las políticas de seguridad de

.NET. En estos casos, deberemos modi-ficar las políticas de seguridad en los pues-tos de trabajo para lograr el comporta-miento esperado.

Continuando con el ejemplo ante-rior del servidor corporativo en el quese instalan los programas que deben estardisponibles para toda la empresa, podría-mos optar por agregar un grupo de códi-go cuya condición de pertenencia sea“todos los programas descargados des-de este servidor”, y asignar a ese grupoel conjunto de permisos adecuado, queprobablemente sería “Full_Trust” si elservidor efectivamente es de confianza.Esta política tendría que ser aplicada entodos los puestos de trabajo desde losque deban operar correctamente estosprogramas. Se dispone para ello de laherramienta de configuración de .NETFramework y la herramienta de línea decomandos CASPOL, de las que habla-remos a continuación.

La herramienta de configuración de .NET Fra-mework

Esta herramienta es accesible desde lasHerramientas Administrativas delPanel de Control. Para disponer de ellaen la versión 2.0 del Framework no es

suficiente con instalar el Frameworkpor sí solo, sino que se necesita insta-lar algún producto adicional que la con-tenga, tal como Visual Studio 2005 o,al menos, el SDK del Framework.

Tras abrir la herramienta, ésta pre-senta un árbol de opciones, del cual nosinteresa la rama denominada “Directi-va de Seguridad en Tiempo de ejecu-ción”. En los epígrafes anteriores hemoshablado ya de su utilización.

El comando CASPOLCASPOL.EXE es una herramienta de líneade comandos incluida con el SDK de.NET Framework (el nombre es unaabreviatura de Code Access SecurityPOLicy). Ejecutándolo con los paráme-tros adecuados, conseguiremos modifi-car los grupos de código y conjuntos depermisos de la misma forma que con laherramienta gráfica de configuración.La ventaja de CASPOL es que se pue-den agrupar varias llamadas a este pro-grama en un archivo de comandos, queluego se puede distribuir y ejecutar enmúltiples equipos para reproducir la con-figuración de seguridad.

CASPOL se invoca escribiendo acontinuación una serie de parámetrosque indican las operaciones a realizar.El primero de los parámetros indica el

Figura 7

En todos los casos en los que hablamos de los permi-sos concedidos por el motor de ejecución de .NET,siempre hay que tener en cuenta que los permisos efec-tivos disponibles para el ejecutable pueden ser meno-res, ya que los programas siguen sujetos a cualesquie-ra limitaciones sean impuestas por el sistema operati-vo y otros elementos de infraestructura al usuario queestá ejecutando el código. Por ejemplo, aunque .NETconceda el permiso “E/S de archivo” sin restricciones,no significa que los programas puedan escribir sin res-tricciones en todo el disco, sino solo en aquellos archi-vos o carpetas en los que las Listas de Control de Acce-so del sistema de archivos lo consientan.

[ ]NOTA

Page 20: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

20

dnm.plataforma.net<<

nivel de política que se aplicará a todos losparámetros que vengan a continuación. Losposibles valores son los siguientes:

-a: Todos los niveles.-en: Nivel Empresa (Enterprise).-m: Nivel Equipo (Machine).-u: Nivel Usuario para el usuario

que esté ejecutando el coman-do en ese momento. Este es elvalor predeterminado paratodos los usuarios que no seanadministradores.

Seguidamente, se añaden al comando losparámetros necesarios para indicar la operación desea-da. Se puede consultar o modificar la configuración delas políticas. Para consultar se usan estos parámetros:

-lg: Listar Grupos-lp: Listar conjuntos de Permisos-l: Listar ambos

Por ejemplo, para listar toda la información al nivelde políticas de usuario se usa este comando:

Caspol –u –l

Para añadir, modificar o borrar grupos de código, seutilizan los parámetros –ag, -cg y –rg, seguidos en cadacaso de los parámetros necesarios para especificar laoperación solicitada.

En la figura 8 vemos un ejemplo en el que se haordenado desde la línea de comandos la creación

de un grupo de código llamado “Grupo prue-ba”, colgando del nodo número 1 del árbol (se pue-den averiguar los números con caspol l), con con-dición de pertenencia basada en URL y correspon-diente con el directorio c:\prueba, asignando lospermisos del grupo LocalIntranet, y aplicando elatributo Exclusive.

Este ejemplo es particularmente interesante por-que nos proporciona una forma sencilla de probar losprogramas que estemos desarrollando y que debanfuncionar con un conjunto de permisos concreto. Sicopiamos el programa al directorio c:\prueba y lo eje-cutamos desde ahí, se ejecutará con los permisos deLocalIntranet, a pesar de estar alojado en nuestro pro-pio disco. La clave está en el atributo Exclusive quele hemos asignado, que hace que no se apliquen lospermisos derivados de otros grupos de código a losque pertenezca el ensamblado. De no haberlo añadi-do, puesto que el ensamblado pertenece además al

Figura 8

Las políticas de seguridad deacceso a código permiten que unadministrador o un usuario finalcontrolen los permisos concedi-dos a un ensamblado en funciónde las pruebas de éste.

Page 21: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

21

dnm.plataforma.net<<

grupo My_Computer_Zone, se le aplicaría la unión de los permi-sos de este grupo (FullTrust) con los del “Grupo prueba”(LocalIntranet), resultando que el programa recibiría Full-Trust.

Si no queremos que aparezca el mensaje de solicitud deconfirmación (ante el que tenemos que contestar “yes”), pode-mos suprimirlo añadiendo el parámetro –q (quiet) al princi-pio de la sentencia.

Escribiendo caspol –rg “Grupo prueba” podemos eliminarel grupo que acabamos de crear. Escribiendo caspol -? obten-dremos una lista de los parámetros disponibles.

Otras opciones de utilidad son –reset para devolver las polí-ticas de seguridad a su estado predeterminado, y –af <nombre

de ensamblado> para conceder “Full Trust” a un ensamblado.

Aplicar una política a todos los equipos de una red

Con frecuencia ocurrirá que necesitemos aplicar un con-junto de políticas de seguridad a todo un conjunto de equi-pos en un entorno empresarial. En estos casos, configurare-mos las políticas en un único equipo en el que dispongamosde la herramienta administrativa de .NET Framework a nivelde Empresa. A continuación seleccionaremos sobre la Direc-tiva de Seguridad la opción “Crear Paquete de implementa-ción”, como se muestra en la figura 9.

Nos preguntará el nivel de políticas para el que queremosgenerar una instalación, y el archivo que queremos generar.El resultado será un archivo .msi para Windows Installer, quepodremos instalar en los equipos en los que deseemos crearla misma configuración de permisos. Si se trata de una insta-lación basada en Directorio Activo, se pueden usar las tec-nologías de IntelliMirror para asignar la “aplicación” (el .msi)a un grupo de usuarios o equipos. De esta forma la políticase aplica a los equipos necesarios dentro de la red.

ConclusiónEn este artículo hemos dado un pequeño repaso a la forma enque el sistema de seguridad de .NET Framework utiliza la segu-ridad de acceso a código para controlar el nivel de acceso a losrecursos externos que se conceden al código ejecutable. Graciasa este control de seguridad podemos limitar el riesgo que supo-ne para un recurso informático la ejecución de un programa queno provenga de una fuente de completa confianza.

Figura 9

ReferenciasLa librería de MSDN contiene amplia informaciónacerca de la administración de directivas de seguridad:http://msdn2.microsoft.com/es-es/library/

c1k0eed6(VS.80).aspx.

El proceso que conduce a determi-nar los permisos que finalmente reci-be un ensamblado tiene dos fases:

1) Calcular los permisos concedidospor la política de seguridad.

Se concede la intersección de lospermisos concedidos en cada unode los niveles de seguridad(Empresa, Equipo y Usuario), loscuales a su vez son la unión de lospermisos de todos los grupos a losque pertenece el código dentro delnivel correspondiente.

2) Restringir los anteriores permisosen base a las declaraciones de per-misos opcionales y/o rechazadosexistentes dentro del ensamblado.

Usualmente se realizan estas decla-raciones en el código fuentemediante la inclusión de atributosdel tipo [assembly:SecurityPer-mission(…)] o [assembly:Permis-sionSet(…)] con los parámetrosadecuados. Estas declaraciones deseguridad no se tratan en el pre-sente artículo.

Concesión de permisos a los ensamblados

Page 22: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

❑ Deseo suscribirme a dotNetManía por un año (11 números) por un precio de 65,00€ IVA incluido.❑ Deseo que me envíen los números atrasados marcados según el precio de portada. Otros:

(Solo para residentes en España)

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 2007

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 qPuede 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 puede enviarlospor correo postal a la siguiente dirección:

Netalia, S.L.C/ Robledal, 13528529- Rivas Vaciamadrid (Madrid)

Oferta válida hasta el 31 de octubre de 2007 o hasta agotar existencias

❑ Nº27 (6,50€) ❑ Nº28 (6,50€) ❑ Nº29 (6,50€) ❑ Nº30 (6,50€) ❑ Nº31 (6,50€) ❑ Nº32 (6,50€) ❑ Nº33 (6,50€)

❑ Nº34 (6,50€) ❑ Nº35 (6,50€) ❑ Nº36 (6,50€) ❑ Nº37 (6,50€) ❑ Nº38 (6,50€) ❑ Nº39 (6,50€) ❑ Nº40 (6,50€)

Page 23: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

Leonardo Paneque,Ludwig Leonard,Miguel Katrib

dotN

etM

anía

<<

23

El reconocimiento de texto dentro de imágenesha sido siempre un tema importante para el soft-ware. El Reconocimiento Óptico de Caracteres (OCR,por sus siglas en inglés) es un proceso que constade varias etapas, que van desde la detección delárea ocupada por el texto dentro de la imagen has-ta su extracción y clasificación en cadenas de tex-to, llegando incluso a la reconstrucción de laestructura original de un documento, si lo que setiene es una imagen de éste.

El presente trabajo desarrolla una bibliotecade código abierto sobre .NET que encapsula unmotor para el reconocimiento óptico de caracte-res. Dicho motor consta de interfaces programá-ticas y módulos para todas las etapas del procesode reconocimiento. En dicha biblioteca se hanincluido algoritmos de más de una veintena deinvestigadores [1-9], y también se han perfeccio-nado y combinado algoritmos ya existentes, inclu-yendo la incorporación de métodos nuevos pro-ducto del trabajo de investigación de los autores.

La intención es que esta biblioteca sea de uti-lidad a los desarrolladores de aplicaciones que quie-ran incorporar alguna capacidad de reconoci-miento de texto como parte de su aplicación.

OCR.NETAunque es común aplicar la denominación de OCRsólo a la acción de clasificar la imagen de un carác-ter aislado, este proceso sólo es uno de los múlti-

ples implicados en la tarea de reconocimiento. Encada etapa es posible aplicar una diversidad de méto-dos en dependencia de los resultados deseados y delcaso particular de información a manejar.

El primer paso del proceso es, claro está, lograrla digitalización en imágenes de la informaciónoriginal, ya sea usando un escáner o una cámaradigital. Es decir, partimos de que la fuente es unacolección de imágenes que corresponden a unapágina de un documento (en el cual pueden haberfotos y figuras y no solo caracteres).

Etapas de OCR

• Pre-procesamiento. Eliminación de ruido en laimagen, alineación, contraste, binarización.

• Análisis estructural. Segmentación de la imagenoriginal en columnas, párrafos, líneas, palabrasy caracteres, así como identificación de imáge-nes correspondientes a fotos y figuras y de tex-to por separado.

• Clasificación. Clasificación de caracteres, for-mación de palabras, líneas y demás componen-tes del documento.

• Post-procesamiento. Reconstrucción de la estruc-tura del documento, rectificación del texto usan-do diccionarios u otros métodos.

En dependencia del problema a tratar, se puedeomitir alguna de las etapas. Durante el proceso declasificación se pueden realizar acciones de rectifi-cación usando diccionarios. También se podrían usar

plataforma.net

Miguel Katrib es doctor y profesorjefe de programación del departa-mento de Ciencia de la Computa-

ción de la Universidad de LaHabana. Miguel es líder del grupoWEBOO, dedicado a la orienta-ción a objetos y la programación

en la Web. Es entusiasta de .NET yredactor de dotNetManía.

Ludwig Leonard es estudiante deCiencia de la Computación de la

Universidad de La Habana ymiembro del grupo WEBOO. Tra-baja como instructor de la cátedra

de Programación. Sus áreas demayor interés son DirectX y gráfi-

cos en general .Leonardo Paneque es graduado

en Ciencia de la Computación dela Universidad de La Habana y

colaborador del grupo WEBOO.Es un programador todoterrenoen la tecnología .NETque gustaprincipalmente de las redes, los

sistemas distribuidos y temas de Inteligencia Artificial

Motor para el reconocimiento óptico de caracteres en .NET

OCR.NETEn este trabajo se presentan las características generales de una biblioteca “opensource” en .NET que ofrece funcionalidades para el reconocimiento óptico decaracteres. Estas funcionalidades se sustentan en más de un centenar de tiposque han sido implementados basados en muchos de los algoritmos disponiblesen la red y en otros desarrollados por los propios autores.

Page 24: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dnm.plataforma.net<<

dotN

etM

anía

<<

24

mecanismos de clasificación durante elproceso de análisis estructural, como enel trabajo de Thomas E. Bayer [10], queutiliza un clasificador para dividir carac-teres conectados en una palabra.

Modelo de la bibliotecaOCR.NETLa biblioteca OCR.NET está desarro-llada sobre C# 2.0 para lograr un códi-go más reusable y flexible gracias a lagenericidad.

Pre-procesamiento

Los métodos usados para el pre-procesamiento de la imagen a recono-cer consisten en la aplicación de filtros.Dichos filtros son implementadosmediante la interfaz IFilter.

Cada filtro programado recibe comoparámetro de su método Apply una ima-gen (instancia del tipo Bitmap) y retor-na en otra instancia la imagen resultan-te de la aplicación del filtro. Por cues-tiones de optimización durante la imple-mentación, se prepararon filtros paratrabajar con imágenes de color real (24bits) así como con imágenes en blancoy negro. Entre los filtros implementa-dos en la biblioteca se encuentran:

• Threshold• Grayscale• Erosion• Edge Detection• Resize

• Nearest Neighbor, Bilinear yBicubic

• Rotate• Nearest Neighbor, Bilinear y

Bicubic• Invert• Blur

Pero los filtros no solo son utiliza-dos para eliminar defectos incluidos enla imagen, producto del proceso de digi-talización que pasó mediante el escánerel documento del papel a un mapa debits, como se muestra en la figura 1. Lacombinación de algunos de estos filtrospuede ayudar, en la etapa de análisisestructural, a separar mejor los ele-mentos de contenido.

Parte del pre-procesamiento consis-te en detectar la inclinación del texto enla imagen o en el segmento de imagen aprocesar, ya que dentro de una mismaimagen puede haber textos con diferen-tes inclinaciones. Para incluir métodosde cálculo de inclinación se debe imple-mentar la interfaz ISkewMethod.

El método utilizado por la biblio-teca OCR .NET para la detección delángulo de inclinación de la imagen sebasa en la transformada de Hough [11].El método CalculateSkew retorna elángulo de inclinación del texto en laimagen. Usando después el filtro Rota-te, se procede a “enderezar” la imagen.El error común introducido en la incli-nación durante el proceso de escaneoes de 2 a 7 grados. El método utilizadoha demostrado ser preciso (con solo unerror de 0.5 grados) en inclinaciones dehasta 40 grados.

Note que la interfaz ISkewMethod norecibe como parámetro un mapa de bits,

sino un objeto de tipo IImage. La inter-faz IImage, implementada en la claseOCR.Imaging.Image, representa un envol-torio (wrapper) de un mapa de bits, quenos brinda un acceso más rápido y segu-ro a la información de la imagen,además de ofrecer más información alresto de los módulos del motorOCR.NET.

Análisis estructural

Esta es la etapa mediante la cual sedeterminan las regiones que puedentener significado para el clasificador.Asimismo, se guardan de forma estruc-turada para una futura reconstrucción.Se ha diseñado una jerarquía de tipos(figura 2) para contener los diversoselementos de una página, donde sedefine la interfaz IRegion, que sirvecomo interfaz base a todos los ele-mentos que pueden ser representadosen el documento.

Cada una de las interfaces mos-tradas en la figura 2 cuenta con su res-pectiva implementación. Los meca-nismos de análisis estructural sonincorporados en OCR.NET median-te implementaciones de la interfazIRegionAnalizer.

Se decidió también pasar como pará-metro la imagen original, puesto que esposible que algunos algoritmos de deter-

Figura 1. Imágenes antes y después de un filtro de binarización

public interface IFilter{

Bitmap Apply(Bitmap bitmap);}

public interface ISkewMethod{double CalculateSkew(IImage image);

}

public interface IRegionAnalizer{IRegion[] BuildRegions(

IImage image,IImage original_image);

}

Page 25: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dnm.plataforma.net<<

dotN

etM

anía

<<

25

minación de regiones se basen en carac-terísticas del documento que se hayantransformado en el pre-procesamiento(por ejemplo, diversidad de colores). Deigual manera, una vez detectadas lasregiones imágenes, éstas deben extraerla porción correspondiente a la imagenoriginal, y no a la procesada, para unafutura reconstrucción.

Durante el reconocimiento de laimagen los analizadores realizan dostareas principales:

• Clasificar las regiones de texto encaracteres, palabras, líneas y cua-dros de texto.

• Localizar las imágenes y descartaráreas no útiles.

Durante el pre-procesamiento de laimagen, la misma quedará “binarizada”(proceso mediante el cual se transfor-man los píxeles de la imagen en blan-cos y negros de acuerdo al brillo queposean). De esta forma, los píxelescorrespondientes al texto (generalmenteoscuros) podrán ser “diferenciados” delos píxeles que forman el relleno o fon-do del documento.

Detectar los grupos de píxelesnegros conexos (rounding boxes) en laimagen “binarizada”, partiendo de laprimicia de que las letras en documen-tos impresos suelen estar separadas unas

de las otras, es el primer acercamientoa los posibles caracteres de texto.

La principal diferencia entre las regio-nes que corresponden a texto y a imáge-nes consiste en que el texto por lo gene-ral se muestra en agrupaciones alineadascon cierta regularidad en cuanto atamaño, disposición, etc. Por tanto, sepueden considerar algunos criterios comodescartar los rectángulos muy pequeños,o los muy alargados. Otro criterio que sesigue en este paso es determinar los “con-tenedores”, grupos de píxeles que rode-an áreas de posible texto.

Para esta etapa se brindan las clases:

Ambas permiten determinar lascomponentes conexas: el primero por

propagación, el segundo mediante ope-raciones sobre conjuntos disjuntos.

La clase LeeRegionAnalizer se basaen recorrer todos los píxeles y para cadapíxel negro no marcado hacer un BFS,marcando todos los conexos a él ydeterminando así cada uno de los gru-pos conexos. Este algoritmo es simpley tiene un costo menor del doble de lacantidad de píxeles.

Por su parte, DisjointBoxAnalizerusa una implementación de una estruc-tura de datos para el trabajo con con-juntos disjuntos (DisjointSet) que per-mite ejecutar la operación de unión entiempo constante. Este algoritmo, aligual que el anterior, recorre dos vecesel total de píxeles del documento, pero

realiza un menor número de operacio-nes por píxel, lo que lo hace más efi-ciente en la práctica.

Por supuesto que no todos los píxe-les en negro del documento después dela “binarización” corresponden a tex-tos. Algunos corresponden a los píxe-les más oscuros de las imágenes, bor-des o incluso posibles manchas (muycomún en documentos escaneados).

Para esta selección se hizo impres-cindible una estructura que facilitaradeterminar qué regiones se encontra-ban en determinado rectángulo (Has-hedBoxCollection). Esta estructurasuponía acceder directamente a lasregiones utilizando un algoritmo dehash en forma bidimensional. Es decir,una rejilla bidimensional que referen-ciase a las regiones interceptadas concada celda. De este modo, la cantidadde chequeos se hace relativa a la canti-dad de regiones locales a las celdas encuestión. De esta forma, se pueden

Figura 3. Texto con sus respectivos “rounding boxes”

Figura 2. Interfaces utilizadas para representar elementos del documento

class LeeRegionAnalizer :IRegionAnalizer { }

class DisjointBoxAnalizer :IRegionAnalizer { }

Page 26: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dnm.plataforma.net<<

dotN

etM

anía

<<

26

comprobar eficientemente algunos delos parámetros que se fijan como heurís-ticas para la clasificación en regiones-caracteres, regiones-ruido y regiones-contenedores.

Una vez se tienen los rectánguloscorrespondientes a posibles caracteres,se procede a determinar las palabras,líneas y cuadros de texto.

Existen varios métodos para ana-lizar la estructura del documento, cla-sificables en jerárquicos y no jerár-quicos. Los jerárquicos son aquellosque asumen la existencia de una rela-ción jerárquica entre los elementos deuna página; por ejemplo la relaciónpágina/columna/párrafo/línea/pala-bra/carácter. Existen dos formas dereconstruir estas jerarquías: partiendodesde el menor elemento, o sea desdelos rectángulos de los caracteres hastallegar a los párrafos y columnas (bottom-up [2,3]), y a la inversa, o sea dividien-do la imagen progresivamente encolumnas, párrafos, etc. hasta llegar alos caracteres (top-down [4,9]).

Bottom-up

Tomando cada rectángulo yampliándolo cierta razón en direcciónhorizontal, se puede detectar si hayintersección con algún vecino. De estaforma se pueden determinar primeropalabras, luego líneas y por último(ampliando los rectángulos correspon-dientes a las líneas en dirección verti-cal) los cuadros de texto. Esto resulta

ventajoso por ser intuitivo, eficiente ypor el hecho de que el propio análisisconstruye la estructura, pero no con-templa posibles errores como la uniónde caracteres y líneas. Además, resultapoco confiable para documentos “rui-dosos” en los que han quedado secue-las (píxeles y marcas) de un mala digi-talización.

Top-down

Un análisis top-down del problemase basa en un algoritmo para determi-nar rectángulos maximales [12]. Se tra-ta de insertar en el documento rectán-gulos grandes y alargados, de modo quelos cuadros de texto queden separadosentre sí y de las imágenes, y puedan de

este modo ser tratados localmente, apartir de proyecciones. Este método esventajoso en documentos con ruido,pues un análisis del histograma hori-zontal de un párrafo ayudaría a la divi-sión por líneas de texto sin mucho ries-go de error, y un histograma verticalayudaría a dividir palabras y caracteres.Claro está que para que este métodofuncione correctamente el fragmento aanalizar debe encontrarse alineado.

Híbrido

En OCR.NET se desarrolló unhíbrido entre estos dos métodos, apro-vechando las ventajas y evitando lasdesventajas de cada uno de ellos. Deesta forma, se tiene un algoritmo ini-cial para mezclar grupos de cajas cer-canas, reduciendo el número de rectán-gulos, y luego se hace el análisis de arri-ba hacia abajo. Este híbrido se repre-senta mediante la clase:

class HybridRegionAnalizer :IRegionAnalizer { }

La figura 6 muestra una aplicaciónde ejemplo en la que se puede observarla división realizada por el métodohíbrido. La parte superior de la figuramuestra la imagen original escaneada,con líneas sobre ella determinando losdiferentes niveles del análisis, es decir,párrafos, líneas, palabras y caracteres.En la parte inferior se muestra el textoque ha sido reconocido por el motor.

Clasificación

Una vez que han sido completadas lasdos primeras etapas, se cuenta con unaestructura del documento lista para reco-nocimiento. Ésta queda como muestra elárbol de la figura 7, donde el nodo raízsería el documento o página y los nodoshojas los caracteres. Construido con lasinterfaces mostradas en la figura 2, es posi-ble recorrer este árbol que hasta ahora nocontiene líneas ni palabras o caracteres,sino rectángulos que determinan las zonasFigura 5. Imagen dividida por maximales

Figura 4. Elementos de un análisis estructural

Page 27: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dnm.plataforma.net<<

dotN

etM

anía

<<

27

donde se encuentran enmarcados cadauno de estos elementos, como se mues-tra en la parte superior de la figura 6. Elproceso de clasificación consiste en deter-minar, dada la imagen de un carácter, la“clase” a la que pertenece. Esta clase noes más que el valor del carácter como

cadena; es decir, si se tiene la imagen dela letra “A”, su clasificación debe retor-nar la cadena cuyo valor ASCII es 65, osea el carácter o letra “A”. Muchos clasi-ficadores definen las clases usando el tipochar, pero en nuestro caso, anticipandoel reconocimiento de caracteres unidos,

se ha utilizado el tipo string para identi-ficar la clase.

Evidentemente, la clasificación dela imagen resulta engorrosa a menosque se intenten extraer ciertas “carac-terísticas” de dicha imagen y luego tra-bajar en estas características.

Existen dos etapas en este proceso:primero, la extracción de característi-cas o creación del vector de caracterís-ticas, y segundo, la clasificación del vec-tor en una de las clases posibles. En elproceso de OCR, el conjunto de clasesposibles está formado por los posiblessímbolos a identificar; en el presentecaso, símbolos alfanuméricos, signos depuntuación y demás. La forma en quese crean inicialmente estas clases se lla-ma “entrenamiento” y será discutidaposteriormente, dado que este procesoes muy dependiente del mecanismo declasificación que se utilice.

Extracción de características

Los vectores de características seconforman aritméticamente por un vec-tor numérico:

V = (c1, c2, .., cn)

Donde n es el orden del vector ycada elemento ci es el valor asociado auna característica del carácter o ele-mento a clasificar, como puede ser laaltura de la letra, la densidad de píxelesnegros dentro de la imagen o la canti-dad de espacios en blancos, entre otras.Estos vectores son definidos mediantela interfaz IFeatureVector.

La creación de estos vectores decaracterísticas está a cargo de las clasesque implementen la interfaz ICharac-terFeatureExtractor.

public interface IFeatureVector{

double[] Components { get;}FeatureVectorType Type { get;}

}

Figura 6. Aplicación de ejemplo que usa la biblioteca OCR.NET

Figura 7. Estructura del árbol luego del análisis estructural

Page 28: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dnm.plataforma.net<<

dotN

etM

anía

<<

28

El método GetFeatures recibe comoparámetros un objeto IImage y la regiónque contiene al carácter dentro de esaimagen. Retorna entonces un vector decaracterísticas extraídas del carácter con-tenido en dicha región. En caso de quela región especificada sea null, se asu-me que toda la imagen representa uncarácter y será procesada como tal.

Para la extracción de característicases necesario que las muestras a proce-sar tengan el mismo tamaño, así comoque la imagen esté centrada y acotadacon los bordes. A este proceso se le lla-ma normalización, y es posible dentrode la biblioteca mediante clases queimplementen la interfaz INormalizer. Laimplementación que se ofrece de estemétodo usa filtros de rotación y ajustede tamaño.

Diversos métodos son utilizados parala extracción de características en imá-genes: desde métodos simples, comoconsiderar la matriz de puntos de la ima-gen como un vector, evaluación de per-files horizontales y verticales (figura 8),hasta complejas evaluaciones como losmomentos de Zernike o Lagrange.

OCR.NET ofrece implementacio-nes de varias de estas funciones, comoson:

• Perfil de matriz.• Perfil de pro-

yecciones verti-cales y horizon-tales.

• Perfil de matrizcon “grayscalezoning” .

• Momentos deLagrange.

Cada una deestas formas deextraer caracterís-ticas posee venta-jas y limitaciones.Los perfiles deproyección soncalculados eficien-temente, pero nogeneran la variabi-lidad necesariapara obtener unaalta precisión amenos que seaumente el ta -maño del vector yla cantidad de ele-

mentos de muestra; mientras que losmomentos de Lagrange ofrecen unaincreíble variabilidad, pero son costo-

sos de calcular. Por lo tanto, el uso dealguno de estos métodos o incluso sucombinación en un vector híbrido seráopción del cliente de la biblioteca quepretenda utilizar el motor para tareasmás específicas.

Clasificadores

Los clasificadores son una parte fun-damental dentro del proceso de OCR.Los mecanismos de clasificación másconocidos son las redes neuronales, per-ceptrones multicapa, fuerza bruta, veci-no más cercano y árboles de decisión.La combinación de varios de ellos pue-de ayudar a incrementar la precisión dela clasificación.

La presente biblioteca incluyecomo clasificador un árbol de bús-queda, que como variante para resol-ver el problema del vecino más cer-cano en RN utiliza un ordenamientopor distancias relativas basado en el

public interface ICharacterFeatureExtractor{

IFeatureVector GetFeatures(IImage image, IRegion region);}

Figura 8. Perfiles V y H Figura 9. Perfil de matriz de 4x4

Page 29: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dnm.plataforma.net<<

dotN

etM

anía

<<

29

presentado por Tomas E. Portegys de AT&T [1].Se ha modificado dicho algoritmo para facilitar labúsqueda de los N vecinos más cercanos con la uti-lización de colas con prioridad.

Con idea de implementar dicho algoritmo, se hacenecesario escribir soporte para el cálculo de distanciaentre vectores; dicho soporte es incorporado a travésde la interfaz IDistanceFunction.

Varias funciones de distancia han sido implemen-tadas. La más utilizada por la bibiloteca, y por las apli-caciones que se han creado hasta ahora, ha sido la dis-tancia Manhattan [1]. Teniendo esta distancia comobase se implementó el árbol de clasificación. Un cla-sificador es representado en código por la interfaz:

El método Classify recibe como parámetros unvector de características a clasificar y un entero querepresenta el mayor número de aciertos que serándevueltos. El clasificador es una interfaz genérica, porlo que es posible utilizar los clasificadores para otroselementos y no sólo para caracteres. Los resultadosdel proceso de clasificación son representados por ins-tancias que implementan la interfaz IClassMatch. Elvalor de la propiedad Confidence representa el nivel desimilitud con el vector, es decir, la distancia entre elvector que se le pasó al método Classify y el vectorasociado al elemento almacenado en el árbol y cuyaclase es retornada en la propiedad ClassValue.

La clase siguiente es la que implementa el árbolque se utiliza para clasificar caracteres:

Note que el árbol no solo es un clasificador gené-rico, sino que es además un motor capaz de ser entre-nado o de aprender. Esto se realiza a través de la inter-faz ITrainableEngine, que facilita el entrenamiento ypersistencia del clasificador.

En el caso del árbol que se ha utilizado, el proce-so de entrenamiento consiste en la inserción de losrespectivos pares de vectores y clases dentro del mis-mo. Las clases en éste son representadas por el pará-metro genérico T. En la biblioteca en cuestión se ins-tancia el árbol usando como parámetro genérico a lainterfaz ICharInfo.

La interfaz ICharInfo contiene no sólo el valoren cadena del carácter reconocido (aunque podríaser una cadena de más de un carácter), sino que tam-bién contempla otros aspectos, como el tipo de letray estilo. Una herramienta de entrenamiento (figura10) provista junto con el código de OCR.NET ofre-ce la posibilidad de entrenar la biblioteca utilizandodiversos tipos de letras de los instalados en el siste-ma. Permite además estudiar el comportamiento delos métodos de clasificación y de las funciones deextracción de características para diversos tamañosy tipos de letra. Es posible crear con esta aplicación

public interface IDistanceFunction{double Eval(IFeatureVector a, IFeatureVector b);}

public interface IClassifier <T>{

IList<IClassMatch<T>>Classify(IFeatureVector vector, int max);

}

public interface IClassMatch <T> : IComparable<IClassMatch<T>>

{double Confidence { get;}T ClassValue { get;}

}

public class SearchTreeClassifier<T> : IClassifier<T>,ITrainableEngine<T> { }

public interface ITrainableEngine<T>{

void Train(Dictionary<IFeatureVector,T>collection);

void Save(Stream output);void Load(Stream input);

}

public interface ICharInfo{

string FontFamily { get; }string Value { get; }bool IsBold { get; }bool IsItalic { get; }

Page 30: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dnm.plataforma.net<<

dotN

etM

anía

<<

30

un juego de caracteres con diversostipos de letras y luego crear un árbol yhacerlo persistente.

Esta pequeña aplicación sirve comopaso inicial, pero una vez que se tieneentrenada la biblioteca es posible intro-ducir nuevos elementos al árbol en cual-quier momento. Por lo que la mismainterfaz de reconocimiento de OCR.NET

permite continuar “enseñando” a la biblio-teca nuevos caracteres mientras se utilizala aplicación.

Conclusiones

Sobre el motor implementado para elreconocimiento óptico de caracteres sehan realizado pruebas con más de 100documentos, con resultados satisfactorios,

para un árbol entrenado con alrededor de7000 patrones. Actualmente se trabajapara aumentar el rendimiento de la biblio-teca e incorporar un mejor mecanismopara la separación de caracteres unidos.

Como consecuencia de su diseñogenérico y estructurado, muchos de losmétodos implementados pueden ser uti-lizados como base para otros mecanismosde reconocimiento que no sean caracte-res, como por ejemplo códigos de barras.

La biblioteca desarrollada consta demás de un centenar de clases e interfa-ces, diseñadas para soportar no solo elreconocimiento de caracteres sino tam-bién el análisis estructural de docu-mentos. Esta biblioteca incluye la imple-mentación de varios algoritmos paracada uno de los procesos involucradosen la acción de reconocer caracteres.

Aunque se han implementado granparte de los métodos, quedan aúnmuchos por incorporar. El código com-pleto está disponible en el sitio Web dedotNetManía y se distribuye bajo licen-cia LGPL. Exhortamos a todos los entu-siastas programadores de .NET a revi-sar el código, aportar ideas y completaralgunas implementaciones.

Figura 10. Interfaz de entrenamiento de OCR.NET

ReferenciasThomas E. Portegys. A Search Technique for Pattern Recognition Using Relative Distances. IEEE TRANSACTIONS ON PATTERNANALYSIS AND MACHINE INTELLIGENCE, VOL. 17, NO. 9, september 1995.

D. Drivas y A. Amin. A Page Segmentation and Classification Utilizing Bottom-Up Approach, Proc. Third Int'l Conf. Document Analy-sis and Recognition, pp. 610-614, 1995.

A. Simon, J. Pret y A. Johnson. A Fast Algorithm for Bottom-Up Document Layout Analysis, IEEE Trans. Pattern Analysis and Machi-ne Intelligence, vol. 19, pp. 273-276, 1997.

J. Ha, R. Haralick y I. Phillips. A Recursive X-Y Cut Using Bounding Boxes of Connected Components. Document Analysis and Recog-nition, pp. 952-955, 1995.

J. Ha, R. Haralick y I. Phillips. A Document Page Decomposition by the Bounding-Box Projection Technique. Document Analysis andRecognition, pp. 1119-1122, 1995.

A. Jain y Y. Zhong. A Page Segmentation Using Texture. Analysis, Pattern Recognition, vol. 29, pp. 743-770, 1996.

A. Jain y S. Bhattacharjee. A Text Segmentation Using Gabor Filters for Automatic Document Processing, Machine Vision and Appli-cations, vol. 5, pp. 169-184, 1992.

H. Cheng y C. Bouman. A Trainable Context Model for Multiscale Segmentation. Image Processing, vol. 1, pp. 610-614, 1998.

R. G. Casey y G. Nagy. Recursive segmentation and classification of composite character patterns. In Proc. 6th Int. Conf. Pattern Recog-nition, pages 1023-1026, Munich, 1982.

Thomas E. Bayer y H. Ulrich. Cut Classification for Segmentation

S. C. Hinds, J. L. Fisher y D. P. D’Amato. “A Document Skew Detection Method using run-length encoding and the Hough Trans-form”, Conf of Pattern Recognition, 1990, pp 464-468.

M. Breuel, Thomas. “Two geometric algorithms for Layout Analysis”, pp. 2-5.

[1]

[2]

[3]

[4]

[5]

[6][7]

[8][9]

[10][ 11]

[ 12]

Page 31: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions
Page 32: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

Introducción

Con la nueva ola de productos de Office 2007,Microsoft liberó también las nuevas versiones deMicrosoft SharePoint Services (WSS) y MicrosoftOffice SharePoint Server (MOSS), los reemplazosde WSS y SPS 2003. SharePoint es una herramien-ta de colaboración que permite a los usuarios traba-jar y compartir información de una forma eficientey segura. La nueva versión incluye utilidades y pro-cedimientos para migrar SharePoint 2003 a su equi-valente de 2007.

¿Es necesario migrar?WSS y MOSS 2007 introducen una serie de mejo-ras en comparación con las versiones 2003. Fuera deperfeccionamientos en las prestaciones por la utili-zación de los progresos en rendimiento que se pue-de realizar con SQL Server 2005, las mejoras eninfraestructura y la mejor arquitectura resultan enun uso más eficiente de los recursos en las bases dedatos: los portales ahora son colecciones de sitios,con solamente una base de datos para cada uno. Almismo tiempo, el filtro ISAPI no es necesario porla utilización más efectiva de los fundamentos de IIS,lo que mejora considerablemente la reutilización delos servidores para ejecutar aplicaciones en parale-lo y la estabilidad operacional del sistema.

La integridad de la información ha sido garan-tizada en la nueva versión por medio de la utiliza-

ción de la papelera de reciclaje, que hace posiblerecuperar información eliminada por el usuario, yen casos extremos, por los administradores del sis-tema, y por mejoras en los sistemas de respaldo.Además, la máquina de búsqueda ha sido completa-mente rediseñada y, gracias a que WSS ya no nece-sita la opción de búsqueda de texto (full-text search),es posible utilizar versiones de 64 bits de SQL Ser-ver; además, las diferencias entre WSS y MOSS encuanto a la forma de utilizar la máquina de búsque-da han desaparecido.

Para los usuarios los cambios son radicales: blogs,wikis, RSS, flujos de trabajo, integración de datos denegocios con el Catálogo de Datos Profesionales,los servicios integrados de Excel, formularios de Info-Path, son algunas de las mejoras y novedades. Paralos desarrolladores también se abren nuevas posibi-lidades con la utilización de .NET 2.0 (con lo quese hace posible utilizar páginas maestras), las carac-terísticas y proyectos de SharePoint, y la ampliacióny mejora de la API de programación, que permitenutilizar SharePoint más como una plataforma dedesarrollo que como una simple aplicación.

Cómo migrarMicrosoft ha diseñado tres estrategias de migración:“En sitio”, “Gradual” y “Migración de bases dedatos”.

Una migración “En sitio” se utiliza para actua-lizar todos los sitios y el portal de una sola vez y

Migración de SharePoint 2003 a 2007Puede ser fácil... pero no siempre

sharepoint

Gustavo Véélez esingeniero mecánico yelectrónico, especiali-

zado en el diseño,desarrollo e imple-

mentación de softwa-re (MCSD) basado entecnologías de Micro-

soft, especialmenteSharePoint. Es creador

y webmaster dehttp://www.gavd.net/servers, y trabaja como

senior developer enWinvision

(http://www.winvision.nl)

En este artículo se describen de una manera práctica algunas conside-raciones técnicas y operacionales para una migración exitosa de Share-Point 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo?

Gustavo Vélez

Page 33: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

automáticamente. Es la mejor estrategia para instala-ciones contenidas en un solo servidor o para granjasde pequeñas dimensiones. En este modo de migra-ción, la versión antigua de la base de datos es sobres-crita con la versión nueva, y los archivos físicos de laaplicación son cambiados a la nueva estructura; al final,la estructura y archivos antiguos son eliminados. Elproceso ocurre sobre el mismo hardware utilizado porla versión 2003, y no es posible volver a la situaciónoriginal (a menos que se reinstale todo el sistema denuevo con copias de reserva). Durante la migración,ningún sitio del portal podrá ser utilizado, y las direc-ciones de todas las páginas serán conservadas.

La migración “Gradual” o “Lado a lado” permiteun mayor control sobre el proceso, pues se puede espe-cificar qué sitios se deben migrar, en qué orden, y cuan-do hacerlo. En este escenario, el contenido de los sitioses copiado primero en una base de datos temporal yluego en la versión definitiva de 2007, conservandolos datos originales en la base de datos de 2003. Loscambios se pueden revertir fácilmente, y la operaciónocurre sobre el hardware original. Durante la migra-ción, solamente los sitios que se están migrando encada momento no estarán disponibles, y el procesocrea URL alternativas para los sitios originales.

Por último, una “Migración de Bases de Datos” esde hecho una migración “En sitio” que se realiza concopias de las bases de datos en servidores diferentes alos utilizados por SharePoint 2003. Las bases de datosde contenido se ponen fuera de conexión en el siste-ma con 2003, se copian en los nuevos servidores y seponen de nuevo en conexión; luego, utilizando la

Administración Central de SharePoint, se indica en labase de datos de configuración que hay que utilizar lasBBDD de contenido recién copiadas y se inicia un pro-ceso de migración “En sitio”. El sistema original de2003 debe ser detenido para evitar pérdidas de infor-mación durante el proceso de sincronización.

Preparación antes de migrar, la mitad del trabajoComo en cualquier otro tipo de migración de siste-mas, es muy importante hacer una buena preparaciónantes de realizar la operación para evitar la pérdidade información. Es indispensable crear copias de res-paldo de todo el sistema, tanto de las bases de datoscomo de SharePoint mismo (las herramientas de quedisponen SQL Server y SharePoint para esto son másque suficientes). Realice además copias de respaldodespués de cada paso si está usando una migración“Gradual” o de “Bases de Datos”.

Una buena estrategia de preparación es realizarprimero una o más migraciones en equipos paralelosde prueba antes de realizarla en los servidores de pro-ducción (la virtualización es una manera ideal paraefectuarlo). La comunicación con los usuarios, admi-nistradores, diseñadores y desarrolladores es muyimportante para evitar malentendidos, sobre todo sila migración tomará bastante tiempo (migración “Ensitio”) o será realizada en una forma gradual.

En cuanto al hardware, hay que tomar las medi-das necesarias para que los servidores tengan el sufi-

dotN

etM

anía

<<

33

dnm.sharepoint<<

Tipo de migración Ventajas Desventajas

En sitio - Fácil de realizar - El sistema no se puede utilizar durante la migración- Usa el hardware original - Imposible regresar a la situación original

Gradual - Fácil de regresar a la situación - Necesita mantener WSS o SPS 2003 instaladooriginal - Necesita mucho más espacio físico (disco duro)

- Migración de cada colección - Redirección de los sitios durante el procesode sitios a la vez (gradual) - Migración mucho más lenta

- Usa el hardware original- Mejor que “En sitio” si se han hecho

muchas personalizaciones

Base de Datos - Conexión/desconexión de bases - Solamente se pueden migrar bases de datos fácil de realizar de datos completas

- Migración mucho más rápida - Imposible regresar a la situación original- Una base de datos a la vez - El sistema no se puede utilizar durante la migración- Oportunidad para mejorar el - Búsqueda y personalizaciones no son migradas

hardware, si es necesario - Imposible migrar por colección de sitios

Tabla 1: Resumen de escenarios de migración

Page 34: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

34

dnm.sharepoint<<

ciente espacio de disco duro, capacidad decálculo y memoria. El proceso de migra-ción requiere bastante tiempo, en el quela CPU de los servidores estará funcio-nando prácticamente al 100% constante-mente (una migración puede durar variosdías), y requerirá toda la memoria RAMdisponible; si hay otras aplicaciones eje-cutándose en el mismo hardware, proba-blemente los tiempos de reacción de éstasse deteriorarán considerablemente. Ten-ga en mente cosas básicas de infraestruc-tura, como por ejemplo que no se pro-duzca un corte de electricidad durante elproceso, sobre todo en una migración “Ensitio”.

En lo relativo al software, instale pri-mero el service pack 2 de WSS y SPS 2003y todos los service packs de SQL y Win-dows antes de empezar la migración, yasegúrese de que todos los sitios siguenfuncionando sin problemas después de lainstalación.

Se puede migrar con poco trabajo…Probablemente, la forma más fácil de migrar es “Ensitio”. Simplemente inicie la rutina de instalación deSharePoint 2007 en el (o los) servidor(es) de Share-Point 2003, y la rutina misma detectará automática-mente que existe una versión anterior, y prepararátodo el terreno para la migración.

Durante la instalación, la herramienta de aná-lisis prescan.exe es colocada automáticamente enel directorio C:\Archivos de programa\Archivoscomunes\Microsoft Shared\web server exten-

sions\12\BIN (se puede encontrar también en los discosde instalación, en el archivo comprimido C:\Archivos deprograma\MSECache\oserver12\Global\Wss\sts.cab). Esmuy importante ejecutar la herramienta antes de com-pletar la migración para asegurarse que no hay proble-mas insolubles en SharePoint 2003 (sitios bloqueados,cuotas que se han sobrepasado, sitios huérfanos). Laherramienta genera dos archivos de registro: un archi-vo .txt con un análisis extensivo, y otro .xml con unresumen de los resultados.

La rutina de instalación de SharePoint sigue el mis-mo procedimiento al seguido por una instalación nor-mal, y solamente al final, bajo la Administración Cen-tral se pueden ver las diferencias. Una migración “Ensitio” inicia de inmediato y automáticamente el proce-so de actualización, creando toda la infraestructuranecesaria para los sitios y aplicaciones. En una migra-ción “Gradual” se deben crear primero los servicioscompartidos necesarios, configurar los servicios de losservidores e iniciar manualmente la actualización des-de la sección “Operaciones” | “Actualización” y migra-ción de la Administración Central; luego hay que indi-car qué colección de sitios se desea migrar. Evite cre-ar nuevas aplicaciones Web antes de iniciar la actuali-zación para soslayar conflictos con los sitios a migrar.

En cualquiera de los casos (para una migraciónde bases de datos el proceso es similar luego de

Figura 1: Rutina de instalación que ha detectado una posible migración desde SharePoint 2003

Figura 2: Resultado de la herramienta de análisis

Page 35: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

35

dnm.sharepoint<<

conectar las bases de datos respecti-vas), la Administración Central ofre-ce una página para seguir el procesode actualización, con informaciónsobre el estado, modo de migración,acciones, etc.

Si ocurre un error, o la rutina llega aun punto en el que no puede realizar algu-

na de sus acciones, el proceso se detieneindicando el problema, y dando la posi-bilidad de solucionarlo y continuar conla migración; en este caso, el archivo deregistro indicado al principio del artícu-lo contendrá información completa sobrelas complicaciones encontradas. Al final,cuando la actualización se ha terminadocon éxito, la página muestra un mensajeindicándolo.

En general, una instalación de Sha-rePoint 2003 (WSS o SPS) sin perso-nalizaciones será migrada sin mayoresproblemas. Áreas, autorización y auten-ticación, sitios, WebParts (inclusiveWebParts programadas para Share-Point 2003) y todos los documentos einformación serán convertidos al nue-vo sistema. Al finalizar la actualización,es necesario revisar extensivamente elportal para detectar posibles fallas. Lafigura 4 muestra un portal 2003 están-dar que ha sido migrado a MOSS 2007:la navegación cambia consecuente-mente, pero toda la funcionalidad estápresente.

Aunque migrar puede signifi-car también mucho trabajo…Las WebParts creadas para SharePoint2003 y compiladas con .NET 1.1 pue-den ser utilizadas sin problemas conSharePoint 2007. Si se ha protegido elensamblado con algún ofuscador, laWebPart no será reconocida en el nue-vo sistema, y será necesario recompi-larla. Si los ensamblados se encuentranoriginalmente en el directorio bin deIIS, es necesario instalarlos de nuevo enla estructura creada por SharePoint2007 (si han sido instalados en la GAC

Figura 3: Estado de la migración

Figura 4: Comparación de un Portal de SharePoint antes y después de la migración

La preparación de lamigración es tan

importante como lamigración misma y debe

ser planificada con el mismo cuidado

Page 36: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

36

dnm.sharepoint<<

no existe este problema), lo mismo que los archivosde recursos y los archivos .dwp con la definición de laWebPart. Si las WebParts utilizan clases o métodosobsoletos en .NET 2.0, es mejor cambiarlos por losutilizados en la nueva versión y recompilar.

Los cambios en el tema de sitios WSS deberán seraplicados manualmente de nuevo, pues no seránmigrados. Las páginas que hayan sido modificadas conFrontPage (páginas “ghost”) pueden ser devueltas asu estado original, o migradas tal como están, aunqueen este último caso los resultados pueden ser sorpre-sivos. Si es indispensable aplicar las modificaciones denuevo, desde FrontPage se pueden exportar los cam-bios, y luego re-aplicarlos en el nuevo sistema.

Puede ocurrir que modificaciones más complejasrealizadas en SharePoint 2003 sean difíciles o inclu-so imposibles de migrar automáticamente. En gene-ral, los controles Web (utilizados principalmente paramenús) creados especialmente y aplicados en el sis-tema original no son reconocidos ni migrados, y esnecesario generarlos de nuevo con .NET 2.0 y apli-carlos manualmente en las páginas maestras del nue-vo sistema. Lo mismo ocurre con páginas personali-zadas localizadas en el directorio layouts y todas lasmodificaciones realizadas en las plantillas por defec-to de SharePoint 2003. Cualquier modificación rea-lizada en los archivos de configuración onet.xml yschema.xml no serán reconocidas ni migradas, y tie-nen que volverse a realizar en el sistema actualizado(SharePoint 2007 contintúa utilizando CAML en losarchivos de configuración, pero la estructura del códi-go ha sido cambiada para adaptarlo al sistema de pági-nas maestras). Los servicios Web creados especial-mente tampoco son reconocidos ni actualizados alnuevo sistema, aunque probablemente continuaránfuncionando sin problemas.

Los cambios realizados en “Mi Sitio” que vanmás allá de la instalación de WebParts no son migra-

dos y deben ser realizados de nuevo manualmente.Los manejadores de eventos para las Librerías deDocumentos sí son actualizados, pero debido a laposibilidad de utilizar los nuevos y mucho más pode-rosos Flujos de Trabajo, es su función relativamen-te obsoleta.

Dependiendo del tamaño y cantidad de docu-mentos en el sistema, una migración puede durar entrealgunas horas y algunos días. La migración “De Basesde Datos” es la forma más rápida, seguida por “Ensitio”, con “Gradual” como la forma más lenta debi-do a la cantidad de datos que es necesario copiar. Unaestimación muy general es que se pueden migrar entre15 y 20 Gb por hora, aunque esto depende comple-tamente del tipo de hardware utilizado y la comple-jidad de los sitios. Sitios con estructura muy compli-cada o con grandes cantidades de documentos pue-den ser migrados a una velocidad aproximada de 10Gb por hora. La mejor forma de obtener una buenaestimación es hacer una migración en un servidorparalelo de una parte de los datos, y revisar el archi-vo de registro (donde se registra el tiempo de cadaoperación). Hay que tener en cuenta que el procesode preparación puede tomar mucho más tiempo quela migración física de los servidores, y se debe agre-gar en la planificación del proyecto. Igualmente, si elportal tiene gran cantidad de personalizaciones, hayque añadir el tiempo necesario para resolver todas lasdificultades que se van a encontrar por el camino.

ConclusionesDefinitivamente, Microsoft ha realizado esta vez

un mejor trabajo para crear estrategias de migraciónde SharePoint de 2003 a 2007, que el que hizo hacealgunos años cuando era necesario migrar de Share-Point 2001 a 2003. Se pueden utilizar diferentesmodos de actualización, dependiendo del tipo de ins-talación y las necesidades particulares, y la migraciónocurre de una manera simple y segura (aunque lenta)siempre y cuando no se le hayan hecho modificacio-nes profundas al sistema de 2003.

Cuando el sistema ha sido personalizado de unaforma extensiva, es más que seguro que se encontraránproblemas en la migración; con realizar algún traba-jo de re-compilación y re-instalación de las persona-lizaciones se puede llegar bastante lejos, aunque nohay ninguna garantía de que todo pueda ser migrado;sobre todo si se han realizado modificaciones en losarchivos por defecto de SharePoint 2003, se puedenesperar problemas técnicamente difíciles de solucio-nar, si bien siempre será posible migrar la informa-ción (documentos) al nuevo sistema, aunque las per-sonalizaciones se pierdan, o haya que programarlasde nuevo.

No es de esperar que ocurran problemas en la migración de sistemas

sin personalizaciones

Page 37: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

37

En el caso concreto de MSF, no está de más recor-dar que se trata de un conjunto de modelos y herra-mientas que describen pasos y perfiles necesarios enel desarrollo de proyectos, tanto para el desarrollode software como para la implantación de sistemasinformáticos.

Una vez se ha descrito el Modelo de Equipo(Team Model), que detalla los roles necesarios paracontar con todos los puntos de vista necesarios paraun proyecto, y se han descrito las tres disciplinasauxiliares que sirven como elementos de apoyo a losdos modelos principales, queda por adentrarse enla parte más compleja e interesante de MSF: elModelo de Procesos (Process Model). Sin duda, setrata del elemento clave de la metodología, dadoque describe las fases de que consta un proyecto yen qué forma deben ser gestionadas.

Dada la amplitud de esta metodología, estos dosartículos buscan proporcionar una visión global quepermita introducirse en sus principios y aplicarla ala realidad cotidiana.

Visión inicial del Modelo de ProcesosLa gente con experiencia en la gestión de proyectossuele tener una visión más o menos similar de lasfases que lo componen y qué tareas deben realizar-se para llevarlo a cabo correctamente. A primera vis-ta, el Modelo de Procesos es bastante similar a otrasmetodologías ampliamente aceptadas, tanto por lacantidad como por la definición que realiza de las

distintas fases. Pero lo que diferencia a MSF de otrasmetodologías tradicionales no es tanto su esquemabásico como la forma en que se aplica.

Algunas metodologías se sustentan en el Mode-lo de Cascada (Waterfall Model), consistente en defi-nir unos hitos (milestones) que indican la finalizaciónde las tareas del proyecto y que se ejecutan secuen-cialmente durante el tiempo de desarrollo. Así, unafase precede a la siguiente y debe ser terminada com-pletamente para pasar a realizar la tarea posterior.Este enfoque suele ser demasiado encorsetado paraalgunos proyectos, por lo que han aparecido meto-dologías con un modelo en espiral, donde las dis-

Microsoft Solutions Framework (II)Aplicar la metodología en el trabajo diario según Microsoft

metodologías

Joan Llopart es ProjectManager y arquitecto de

Raona. Joan es MCSE,MCDBA, MCT, ITPro y

MSF Certified.

Este mes damos continuación al primer artículo de esta serie, publicado elmes pasado, en el que se realizó un primer acercamiento a la metodologíaque Microsoft pone a disposición de los ingenieros y administradores pararealizar de forma más eficiente y organizada su trabajo.

Joan Llopart

Principios básicos de MSF

Aplicar MSF implica conocer sus modelos, perosobre todo tener en mente en todo momento losprincipios básicos que guían su utilización. Estosson los 8 principios fundacionales que describenla filosofía de MSF.

• Seguimiento claro, responsabilidad compartida• Delegar en los miembros del equipo• Centrarse en aportar valor• Visión compartida del proyecto• Mantenerse ágil y adaptarse al cambio• Fomentar las comunicaciones abiertas• Aprender de todas las experiencias• Invertir en calidad

Page 38: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

38

dnm.metodologías<<

tintas funcionalidades se desarrollan almismo tiempo y evolucionan cíclica-mente. Este sistema es ágil y dinámico,ideal para desarrollos pequeños, peroes muy complejo de aplicar en proyec-tos grandes y con múltiples requeri-mientos.

Para intentar solventar estas limita-ciones, MSF recoge lo mejor de ambosmodelos y los fusiona, para dar un méto-do generalista aplicable a todo tipo deproyectos. El control y seguimiento delproyecto se basa en el uso de hitos defi-nidos que permiten conocer si el proyec-to avanza dentro lo previsto, pero la eje-cución de las tareas no se restringe a sucumplimiento. MSF recomienda iniciarcualquier tarea lo antes posible y cerrar-la tan tarde como sea necesario, para asíafrontar flexiblemente los cambios queafectan a todo proyecto y que suelendesembocar en retrasos. Uno de los prin-cipios de MSF es muy claro en este sen-tido: “stay agile, expect change”, y esedinamismo es una de las principales carac-terísticas de esta metodología.

Aplicación del modelo de procesosTodo proyecto se divide en fases, y MSFno es una excepción. En este sentido,MSF no presenta excesivas diferenciasen cuanto a su definición y separaciónrespecto a metodologías tradicionales.Opta por definir cinco fases sucesivasque corresponden a los nombres de envi-sioning, planning, developing, stabilizing ydeploying, identificadas por la imagenadjunta en la figura 1. Respecto a estaclasificación, cabe destacar la inclusiónde una fase de despliegue en el entornode producción como parte integrante delproyecto, dado que muchas veces no secontempla su realización y suele serfuente de numerosos problemas de defi-nición del alcance.

Estas fases son un guión adaptablea las necesidades del proyecto, dado queson más indicativas que restrictivas.Cada una de ellas finaliza con un majormilestone, un hito general claro y eva-luable que permite determinar clara-mente que la fase se ha completado conéxito. Adicionalmente, cada fase tiene

un conjunto de interim milestones defi-nidos que identifican a grandes rasgoslas tareas a realizar y cómo debe afron-tarse su ejecución. En todo caso, MSFidentifica sólo etapas generales quedeben ser adaptadas a cada proyecto yasociar cómo serán llevadas a cabo.

Para entender correctamente estemodelo de fases, es imprescindible teneren mente el concepto de versioned relea-se: todo elemento del proyecto pasa portodas las fases del mismo y va evolucio-nando paralelamente hasta que se cierraen el momento de validar el hito corres-pondiente. Mientras, ese elemento pasapor varias versiones que evolucionan ycrecen hasta completar todos los reque-rimientos asociados. De esta forma, sepuede acotar más fácilmente el estado decada entregable y prever las posibles des-viaciones que pueda sufrir.

La aplicación de MSF requiere laimplicación de todo el equipo y espe-cialmente, del promotor del proyectoen la definición del alcance de cada unode sus elementos. Así, MSF es total-mente adaptable a la realidad del pro-yecto y su ejecución variará completa-mente para cada entorno, por lo quetodo equipo debe ser capaz de acordarlos límites que deben permitir evaluarla ejecución del proyecto.

Detalle de las fases del proyectoLas cinco fases de MSF presentan unaguía general que debe adaptarse al pro-yecto, pero indican un conjunto de

pasos necesarios que deben realizarsepara garantizar el cumplimiento y lacalidad del resultado final. Cada faseconsta de una serie de pasos interme-dios y un cierre de la misma; estas fasesse describen a continuación.

Envisioning: se orienta a especificar losrequerimientos de la solución propues-ta, contando con la intervención detodos los implicados, tanto por parte delequipo del proyecto como del cliente.En esta fase se establece la visión globalde la solución a implementar, pasandoa acotar un alcance definido para el pro-yecto que permita establecer los recur-sos necesarios para satisfacer las expec-tativas. MSF ya contempla que estealcance varíe durante la vida del pro-yecto y especifica la forma de afrontarágilmente estos cambios.

Planning: esta fase incluye el diseño y laplanificación completa de la realizacióndel proyecto. Por un lado, se realizanlas labores habituales de diseño con-ceptual, lógico y físico del sistema, don-de MSF no entra en detalle, permitien-do el uso de métodos ampliamente acep-tados como es el caso de UML. Además,se contempla el diseño de elementos queintegran la solución, como las infraes-tructuras, las comunicaciones, la segu-ridad, la puesta en operación o la for-mación. Esta fase finaliza con la apro-

Figura 1Esquema básico del Process Model

Page 39: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

39

dnm.metodologías<<

bación del elemento clave: el Plan deProyecto, que contempla las tareas a rea-lizar durante las siguientes fases, la res-ponsabilidad asociada a cada una y elmomento de ejecución previsto.

Developing: en la fase de desarrollo delproyecto es donde MSF utiliza un enfo-que más innovador sobre la forma deafrontar la implementación de los ele-mentos de la solución. MSF utiliza elconcepto de release para guiar esta fasey la siguiente a la consecución de losobjetivos determinados en el proyecto.Esta orientación implica iniciar lo antesposible todas las tareas necesarias eintentar cerrarlas lo más tarde posible,de forma que todos los entregables avan-cen en paralelo y que la modificación deuno de ellos no implique cambiar algoque a priori ya está cerrado. De esta for-ma, se establece un método de trabajobasado en la elaboración de versionesparciales de los elementos del proyectoque pueden ser validados conjuntamen-te, formando lo que conoce como inter-nal release. Estas versiones incluyen elcódigo, las infraestructuras, la docu-mentación y los materiales auxiliares.Cada una de estas versiones pasa inter-namente por el desarrollo de funciona-lidades, su revisión de errores y las prue-

bas de integración hasta cerrar el cum-plimiento de esta versión, como se pue-de observar en la figura 2.

Desde la primera versión, conocidacomo prueba de concepto (proof of con-cept), que sirve para validar la viabilidaddel diseño realizado, se avanza en ver-siones que implican el desarrollo denuevas funcionalidades, su validación yla integración entre sí para completarun nuevo hito del proyecto, que per-mite controlar su avance según lo esta-blecido y el correcto funcionamientode la solución. Esta fase finaliza con laimplementación completa de las fun-cionalidades definidas en el alcance delproyecto.

Stabilizing: Una vez se han completa-do todas las funcionalidades necesariaspara el proyecto, se pasa a una fase devalidación del conjunto de la solucióncentrada en la corrección de errores yla optimización del resultado final.MSF establece dos puntos importan-tes en el control del resultado: la con-vergencia de errores (bug convergence),que es el momento en que el númerode errores reportados es menor que elnúmero de errores que se consiguenresolver; y el umbral sin errores (zerobug bounce), que sucede cuando el equi-

po consigue no tener ningún errorabierto, independientemente que apa-rezcan posteriormente. Esto permiteir avanzando en la preparación de suce-sivas release candidates, versiones prác-ticamente finalizadas de la solución.Finalmente, se realiza una prueba pilo-to en entorno real para verificar lapuesta en producción de la soluciónimplementada y cerrar definitivamen-te todos los elementos del proyecto.

Deploying: La última fase se centratotalmente en el paso a producción delproyecto realizado, teniendo en cuen-ta las necesidades específicas de adap-tación al entorno de explotación exis-tente y su despliegue a todos los usua-rios del sistema. Implica la definiciónde las fases de instalación de clientes

Figura 2. Ciclo de versiones en la fase de Developing

En la fase de desarrollodel proyecto es dondeMSF utiliza un enfoquemás innovador sobre la

forma de afrontar laimplementación de los

elementos de la solución

Page 40: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

40

dnm.metodologías<<

y servidores, los métodos de desplie-gue y la formación de los administra-dores y los usuarios finales. Esta fasecontempla también la evaluación finaldel proyecto y su cierre, con la previ-sión de una nueva versión del mismoen mente.

Relación entre el Modelo de Equipos y el Modelo de Procesos

Después de conocer los dos modelosbásicos que componen MSF, puedeparecer a primera vista que se trata devisiones independientes del proyecto yque la relación entre sí es puramentesuperficial. Nada más lejos de la reali-dad, dado que MSF describe amplia-mente la vinculación entre cada una delas fases del proyecto y las tareas a rea-lizar por parte de cada uno de los rolesexistentes. Es imprescindible que cadamiembro del equipo asuma las tareas arealizar en las distintas fases del pro-yecto, dado que todos los roles inter-vienen durante todo el desarrollo conmayor o menor dedicación.

La relación entre los roles y las fasesde MSF se describe en el cuadro adjun-to en la figura 3, detallando las respon-sabilidades de cada rol durante la vidadel proyecto. Evidentemente, estaamplia lista de responsabilidades debeser adaptada a cada proyecto, pero esnecesario tener en cuenta cómo se lle-vará a cabo para no olvidar ningún ele-mento que pueda afectar a la calidad delresultado.

ConclusiónEn el artículo del próximo mes secompletará este acercamiento a lasmetodologías de Microsoft con la pre-sentación de MOF, su método de ges-tión de la explotación de entornosinformáticos. Mientras, los interesa-dos en ampliar este artículo y conocercon más profundidad esta metodologíapueden consultar la información dis-ponible en el sitio Web de Microsoft,http://www.microsoft.com/msf.

Figura 3. Cuadro de relación entre los roles del Team Model y las fases del Process Model

Dar el salto a MSF v4

Estos artículos se basan en la versión v3 de MSF, que nos permite disponerde un punto de vista general y compartido de esta metodología. La cuartaversión de MSF apareció inicialmente junto con Visual Studio 2005 y conmucha vinculación a la suite de trabajo en equipos de Microsoft conocidacomo Team System, que aporta un sólido conjunto de útiles herramientasque permiten llevar la metodología del terreno teórico al práctico. La meto-dología sigue estando disponible en el sitio Web de Microsoft, sin que exis-ta necesidad de adquirir este producto, de forma que será el siguiente pasopara los lectores interesados en el tema.

La principal novedad de MSF v4 es que Microsoft ha intentado adaptaresta metodología a las dos tendencias más consolidadas en el mercado encuanto a la gestión de proyectos: por un lado, los desarrollos ágiles, orienta-dos a equipos pequeños y donde es más importante el seguimiento que laformalidad de la metodología; y por otro, las gestiones basadas en la formali-dad y la calidad del proyecto, conocidas como modelos de madurez. Así, tene-mos dos versiones de MSF v4. La más popular es sin duda MSF for AgileDevelopment, que simplifica el modelo de la v3 para hacer más espiral todavíael modelo y que se centra en tareas identificadas que se asignan y resuelvende forma autónoma, con poca intervención de un jefe de proyectos y bus-cando el dinamismo y la colaboración del equipo. En cambio, MSF for CMMIDevelopment se centra en reforzar los niveles de calidad y los estándaresde documentación según el conocido modelo de madurez CMMI, siendomucho más estricto y definido en cuanto a los flujos de información y con-trol de calidad del resultado.

Con la base de términos y filosofía de aplicación de MSF presentada enesta serie de artículos, os recomiendo acercaros a estas dos variantes y pro-bar su uso con Team System para ver que la metodología en entornos Micro-soft ha dejado de ser algo teórico para convertirse en un auténtico pilar detoda empresa que realice proyectos de calidad y bien gestionados.

Page 41: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

si no lo tienes claro...

La revista para la Gestión del Rendimiento www.gestiondelrendimiento.com

GRGestión del Rendimiento

La revista de la

d

Cuando tomamos decisiones,necesitamos información; esainformación nos ayuda a ges-tionar mejor los procesos denuestras organizaciones y a sermás competitivos, dándonosmejores posibilidades de super-vivencia en el corto, medio ylargo plazo. Aproximadamenteel noventa por ciento de lainformación que necesitamosestá dentro de nuestra propiaorganización, pero por desgra-cia la dispersión de la informa-ción (múltiples fuentes dedatos, múltiples formatos, cali-dad del dato mostrado, etc.)hace que solo el treinta porciento esté accesible en el for-mato y en el tiempo adecuado;el resto son datos por tratar oinformación no estructurada...

Page 42: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dnm.inicio

Configuración de aplicaciones en VisualStudio 2005En Visual Studio 2005 se introdujo en las propiedadesdel proyecto un nuevo apartado, que es precisamentesobre lo que trata este artículo: la ficha “Settings” (“Con-figuración” en la versión en castellano). Por medio deesa ficha podemos definir los datos de configuraciónque usará nuestra aplicación. Esos datos de configura-ción pueden tener dos niveles, según queramos que seana nivel de la aplicación (válida para todos los usuarios)o que esos datos sean particulares a cada usuario. En elprimer caso, los datos serán de solo lectura; es decir, nopodremos modificarlos en tiempo de ejecución, sinoque solo podremos leer los valores asignados. Por otraparte, los datos de configuración a nivel de usuario sonvalores de lectura/escritura, y por tanto los podremosmodificar en tiempo de ejecución, que es lo deseable,ya que así podremos guardar las preferencias de cadausuario, como por ejemplo el tamaño y posición de laventana, algunos de los valores con los que normal-mente trabajará, etc.

La razón de que los valores de configuración anivel de aplicación sean de solo lectura es para que elusuario no pueda cambiar un valor que en realidad es“global” al resto de usuarios; por tanto, si necesita-mos valores “personalizables” por cada usuario, usa-remos el ámbito de usuario. Pero si necesitamos valo-res modificables a nivel de toda la aplicación, ten-dremos que hacerlo manualmente; Visual Studio nonos proporciona ninguna forma automatizada de que

los valores de configuración con ámbito de aplicaciónse puedan modificar en tiempo de ejecución, y portanto tendremos que usar nuestra propia forma deacceder y modificar esos valores, ya sea escribiendodirectamente en el propio fichero de configuraciónde la aplicación o, mejor aún, creando nuestro pro-pio fichero de configuración. En el código que acom-paña a este artículo incluyo una clase (ConfigXml) quenos puede servir para realizar esas configuracionespersonalizadas.

Tipos de datos de los valores de configuración

Los tipos de datos que podemos usar en la configu-ración son muy variados, e incluyen los tipos “norma-les” de .NET, y según estemos usando un lenguaje deprogramación u otro, esos tipos de datos se mostraránsegún la definición de los mismos en el lenguaje; porejemplo, en C# se nos mostrará string, boolo int, mien-tras que en Visual Basic será String, Boolean o Integer.También se incluyen tipos más complejos, como String-Collection o Font, aunque en realidad podemos usarprácticamente cualquier tipo de datos definido en .NETFramework e incluso en nuestro propio proyecto; en unmomento veremos cómo.

Añadir valores de configuración a nues-tras aplicacionesVeamos cómo podemos añadir valores de configuración(y usarlos posteriormente) en nuestras aplicaciones.

Configuración (Settings)El configurador que lo configure...

inicio

Guillermo “Guille”Som es Microsoft MVP

de Visual Basic desde1997. Es redactor de

dotNetManía, mentorde Solid Quality Iberoa-mericana, tutor de cam-

pusMVP, miembro deIneta Speakers BureauLatin America, y autorde los libros “Manual

Imprescindible de VisualBasic .NET” y “Visual

Basic 2005”.http://www.elguille.info

Cualquier aplicación que se precie debe tener en cuenta las preferencias delos usuarios, pero incluso si la aplicación no es “amigable” con el usuario quela utiliza, usará con total seguridad datos de configuración. En este artículoveremos cómo podemos gestionar esos datos de configuración utilizandolas facilidades que nos proporciona Visual Studio 2005.

Guillermo «Guille» Som

Page 43: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

Crear valores de configuración

Para crear valores que usaremos paraalmacenar datos de configuración debe-mos pulsar en las propiedades del pro-yecto (“My Project” en Visual Basic,“Properties” en C#) y seleccionar la ficha“Settings”. Se nos mostrará algo como loque aparece en la figura 1.

Viendo la figura 1 y dejándonos llevarpor la intuición, podemos deducir que en“Nombre” pondremos cómo queremosque se llame ese valor de configuración,en “Tipo” el tipo de datos que tendrá (ini-cialmente siempre se muestra string), en“Ámbito” pondremos si queremos que seauna valor a nivel de “Usuario” o de “Apli-cación” y en “Valor” el valor inicial quequeremos que tenga. Ese valor debe seradecuado para el tipo de datos; por ejem-plo, en la figura 2 tenemos varios valoresde configuración añadidos, entre los quehay uno de tipo bool, y en ese caso, lasopciones que nos muestra son True y Fal-se (con la primera letra en mayúsculas, yaque no son tipos de C# sino valores quese guardarán como cadenas y después seconvertirán adecuadamente).

Si necesitamos datos más complejos,por ejemplo una colección de datos, tam-bién podemos indicarlo. Tal como vemosen la figura 2, el valor de configuración“Ficheros” será del tipo StringCollection.

Y en este caso, siqueremos asig-narle un valorinicial, veremosque el propioVisual Studionos muestra unaventana en laque podemosindicar cada unode los elementos que la colección tendrá(ver la figura 3).

Y si lo que necesitamos es algunos delos tipos de da tos que no se han mos tradoen la lista desplegable con los tipos a ele-gir, podemos seleccionar la última opción(“Examinar”); eso hará que se muestreuna ventana con los tipos de datos quepodemos seleccionar, tal como vemos enla figura 4. Y si el tipo que queremos usarno está, lo podemos indicar, como es elcaso de la clase Colegas que tenemos ennuestro proyecto.

En este último caso, debemos teneren cuenta que al usar ese tipo que tene-mos definido en nuestro proyecto, seagrega una referencia a nuestra aplica-ción; la solución es eliminar esa referen-cia y asunto arreglado.

Pero no vamos a complicarnos dema-siado, ya que en ese caso no veremos lascosas importantes de todo esto de la con-figuración, que es lo que en realidad

dotN

etM

anía

<<

43

dnm.inicio<<

Figura 1. La ficha de configuración

Figura 2. Tipos de datos en la configuración

Figura 3. Editor de colecciones

La forma de configurar (crear o modificar en tiem-po de diseño) esos valores de configuración en VisualBasic es prácticamente la misma, solamente cambiael nombre de los tipos de datos. Sin embargo, la for-ma de acceder a los valores de configuración desdeprogramas es diferente en los dos lenguajes; muyparecida, la verdad, pero en Visual Basic el acceso sesimplifica gracias al objeto My.Settings. Pero comoen este artículo (como casi todos los de la seccióndnm.inicio) utilizo C#, pues... la forma de usar losvalores de configuración en Visual Basic habrá queverla en el código que acompaña a este artículo.En cualquier caso, y con permiso de los “puristas”,en el código de ejemplo muestro cómo crear una cla-se estática en C# para “simular” el objeto My.Set-tings de Visual Basic.

[ ]NOTA

Figura 4. Seleccionar otros tipos de datos

Page 44: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

44

dnm.inicio<<

importa. Así que veamos ahora cómo usarlos datos de configuración.

Acceder a los datos de configuración

Una vez que hemos definido los valo-res que queremos usar en nuestra apli-cación, ahora toca poder utilizarlos. Ennuestro ejemplo vamos a usar los valo-res de configuración que podemos ver enla figura 2. Lo bueno del sistema de con-figuración generado por Visual Studio2005 es que esos valores los usaremoscomo propiedades de una clase “espe-cial” que se añade a nuestro proyecto.Esa clase se llama Settings y en C# estádefinida en un espacio de nombres lla-mado Properties, que su vez está defini-do dentro del espacio de nombres denuestra aplicación. Y debido a que es unaclase donde están las propiedades de losvalores de configuración, podríamos pen-sar que tendríamos que crear una instan-cia de esa clase para poder accederlas; peroesto no es necesario, ya que el propio com-pilador de C# define una propiedad está-tica (compartida) en esa misma clase quenos permite acceder a esas propiedadesque hacen referencia a los valores de con-figuración. Esa propiedad se llama Defaulte internamente accede a un campo quecrea una instancia de la propia clase.Sabiendo esto, la forma de acceder a esosvalores será el siguiente:

this.Left = Properties.Settings.Default.Left;

Al definirse como propiedades de unaclase, la forma de usarlas es bastante intui-tiva. Y como podemos comprobar, lostipos de datos de esas propiedades son losmismos que hemos definido en la confi-guración; en este ejemplo el tipo “inter-no” de la propiedad Left es int, por lo queno tenemos que hacer ningún tipo de con-versión a la hora de asignar el valor.

Si los valores a los que hacen referen-cia esas propiedades han cambiado y que-remos “persistirlas”, lo primero que tene-mos que hacer es asignar el valor, porejemplo:

Properties.Settings.Default.Left = this.Left;

Y para que esos datos se guarden tene-mos que llamar al método Save:

Properties.Settings.Default.Save();

Es importante llamar al método Savepara asegurarnos de que los datos se guar-dan. Y debemos llamarlo siempre que cre-amos conveniente, aunque lo recomen-dable es hacer esa llamada cuando el for-mulario se vaya a cerrar, es decir, en elevento FormClosing.

Sin querer confundir las cosas, me gus-taría hacer una aclaración para los lecto-res que prefieren usar VB como lenguajede programación, y es que en él de formapredeterminada no es necesario llamarexplícitamente al método Save, ya que elcompilador se encarga de añadir la lla-mada a ese método cuando el formulariose cierra. Al menos si así lo hemos indi-cado en las propiedades del proyecto, mar-cando la opción “Guardar My.Settings”al cerrar. Precisamente porque My.Set-tings es otra funcionalidad que ofreceVisual Basic para gestionar todo el temade las configuraciones, y en realidad con-siste en la definición de una propiedad lla-mada Settings que está definida en unmódulo (y por tanto no es necesario indi-car dónde está definida), y además estemódulo está definido en el espacio denombres My, por tanto, la forma de usarlos valores de configuración en VisualBasic es la siguiente:

Me.Left = My.Settings.Left

En el fondo, esa propiedad Settingslo que hace es utilizar la propiedad “auto-instanciable” Default.

En C# podemos acceder fácilmente aesa propiedad Default sin necesidad de

escribir tanto, definiendo una variable enel formulario que simplemente haga refe-rencia a esa propiedad “predeterminada”:

Properties.Settings misProp =

Properties.Settings.Default;

De esta forma podremos acceder másfácilmente a las propiedades de configu-ración:

misProp.Top = this.Top;

Recibir notificaciones cuando cambienlos valores de configuración

Otra funcionalidad que Visual Stu-dio 2005 pone a nuestra disposición esla de saber cuándo se va a asignar unvalor a una propiedad de configuracióno cuándo se va a guardar o cuándo se hancargado los valores. Cuando queremosacceder a esos eventos de configuración,Visual Studio crea una clase parcial coninstrucciones para usar dos de los cua-tro eventos disponibles: SettingChangingy SettingsSaving.

El primero de los eventos anterioresse produce antes de que cambie uno delos valores de configuración, permitien-do cancelar la asignación. El segundo seproduce antes de que se guarden losvalores, y también podemos cancelarlo,aunque en este caso no tenemos accesoa los datos que se están guardando sal-vo que accedamos a las propiedades dela propia clase; sin embargo, con el even-to que nos informa de los cambios de laspropiedades, en la variable del segundoparámetro se pasa información sobre lapropiedad afectada, el nuevo valor a asig-

Los valores de configuración se usan como propiedades de una clase “especial” que se

añade a nuestro proyecto

Page 45: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

45

dnm.inicio<<

nar, etc., lo que veremos a continuacióncon más detalle.

Los otros dos eventos son Property-Changed y SettingsLoaded. En el primerose nos avisa cuando una propiedad ha cam-biado, y la única información pasada en elsegundo parámetro es el nombre de lapropiedad que ha cambiado. El segundoevento se dispara después de la carga delos valores de configuración.

La forma de acceder a ese fichero decódigo es desde la ficha “Configuración”de las propiedades del proyecto y pulsan-do el botón “Ver código” que está en laparte superior de esa ficha, tal como pode-mos comprobar en la figura 1. Al pulsarese botón, se abrirá un fichero con partedel código que normalmente usaremos;en particular, hay definidos dos de losmétodos que interceptarán los eventosSettingChanging y SettingsSaving, y en elconstructor de la clase están comentadaslas instrucciones que ligarán esos méto-dos con los eventos. Si queremos inter-ceptar los otros dos eventos, tendremosque escribir sus “manejadores” por nues-tra cuenta; como ya vimos en el número31 de dotNetManía, el propio editor deC# nos ayuda a la creación de los mismos.

Si nos decidimos a interceptar el even-to SettingChanging para detectar los cam-bios antes de que se asignen a las propie-dades, debemos tener en cuenta que losvalores pasados en la variable del segun-do parámetro no son tipos “explícitos”; esdecir, si el cambio se produce en el valorLeft, que como vimos es de tipo entero,en este evento se recibe dicho valor comoobject, porque ese mismo evento sirvepara todos los valores de configuración, ycomo hemos comprobado podemos usarprácticamente cualquier tipo de datos.

Por tanto, si queremos detectar elcambio en esa propiedad, tendremos quehacer la conversión correspondiente, talcomo vemos en el siguiente código:

Como vemos, el nombre del valor deconfiguración lo averiguamos por mediode SettingName, y el nuevo valor que se vaa asignar está en NewValue. Y si no quere-mos que ese nuevo valor se asigne, sim-plemente asignamos un valor verdaderoa la propiedad Cancel.

Trabajar con colecciones genéricas personalizadas

Al definir los valores de configuración nopodemos utilizar directamente tipos gené-ricos, pero nada impide que podamos defi-nir un tipo de datos propio que esté deri-vado de un tipo genérico y lo utilicemos.Por ejemplo, en nuestro proyecto pode-mos tener creado un tipo de datos llama-do Colega, y podemos querer almacenarinstancias de esa clase en una coleccióngenérica de tipo List<Colega>. Debido aque Visual Studio no nos permite usar esetipo para un valor de configuración, lo quepodemos hacer es definir nuestraclase/colección Colegas de esta forma:

public class Colegas : List<Colega>

{}

Esto simplemente hará que usemos laclase Colegas como una colección genéri-ca, pudiendo añadir valores de esta forma:

Colegas cols = new Colegas();Colega c = new Colega("Guille");cols.Add(c);cols.Add(new Colega("Pepe"));

Y si hemos definido en la configura-ción una propiedad que sea del tipo Cole-gas que hemos definido en nuestro pro-yecto, tal como vimos en la figura 4, pode-mos asignar valores de este tipo a la con-figuración de esta forma:

Properties.Settings.Default.Colegas = cols;

Y por supuesto, podemos acceder aese valor de la forma habitual, además sinnecesidad de hacer ningún tipo de con-versión, ya que en las propiedades de laclase Settings siempre se almacenan los

datos usando el tipo que hemos indicado.En el siguiente código obtenemos los valo-res de los “colegas” que tengamos en elfichero de configuración y los asignamosa un control ListBox:

Colegas cols =Properties.Settings.Default.Colegas;this.listBox1.Items.AddRange(

cols.ToArray());

Enlace de propiedades convalores de configuración

Algo muy habitual en el manejo de losvalores de configuración es hacer bindingde ciertas propiedades de los controles odel formulario a valores almacenados enla configuración de la aplicación. Tan habi-tual es, que es prácticamente casi todo loque la documentación de Visual Studiomuestra como ejemplos, y “casi” lo úni-co que se podía hacer en las versiones ante-riores de Visual Studio, aunque a dife-rencia de éstas, en Visual Studio 2005 esosvalores pueden tener un ámbito de usua-rio en lugar de ser solo a nivel de aplica-ción, con lo cual se facilita su uso.

La forma de ligar cualquier propiedadde cualquier control (o del formulario) aun valor de configuración es mediante laventana de propiedades, en particular dela propiedad “ApplicationSettings”, queen el caso del formulario, mostrará losvalores que vemos en la figura 5.

if (e.SettingName == “Left”){

int i = (int)e.NewValue;if (i < 0){

e.Cancel = true;}

}

La forma de ligar cualquier propiedad a un valorde configuración es mediante la propiedad

ApplicationSettings

Page 46: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

46

dnm.inicio<<

Como vemos en la figura 5, para elformulario hay dos propiedades prepara-das para recibir el valor. Esas propiedadesdependerán del control que estemos usan-do, pero si la propiedad que queremos“persistir” no está en esa lista de propie-dades, podemos pulsar en “PropertyBin-ding” y desde el cuadro de diálogo que senos mostrará podremos seleccionar la pro-piedad que queremos ligar con un valorde configuración. Si ya tenemos un valorde configuración del tipo adecuado, pode-mos usar esa propiedad o bien crear unanueva; en ese caso, como vemos en la figu-ra 6, podemos crearla directamente des-de ese mismo cuadro de diálogo.

Al crearla desde este cuadro de diálo-go, podemos indicar el ámbito que que-remos que tenga ese valor de configura-ción además de asignar los valores quequeremos que tenga. Y tal como vemos

en la figura 7, en la que asignamos el valorde la propiedad ClientSize, se mostraráel valor que actualmente tenga la propie-dad que queremos usar.

Una vez que tenemos las propiedadesenlazadas a valores de configuración, enla ventana de propiedades se nos mos-trarán todas las que lo estén, tal comopodemos comprobar en la figura 8.

Y en cada una deesas propiedades enla-zadas tendremos unicono que nos indicaráesa situación “de enla-ce”, además de indicár-senos cuál es el valorde la configuración conel que la propiedad estáenlazada, tal comovemos en la figura 9.

Ni que decir tieneque es el propio com-pilador el que se encar-

ga de implementar todos estos “enla-ces”, de forma que nosotros no ten-gamos que escribir código extra paraque se hagan efectivos. Lo único quetendremos que escribir (si estamosusando C#) es la llamada al métodoSave de la clase Settings a la hora deguardar los datos de configuración, ycomo ya comenté antes, el mejor sitioen el que podemos llamar a ese méto-do es en el evento FormClosing, paraque se guarden los valores de confi-guración cuando el formulario se estécerrando y no perdamos nada.

Como truco, decir que hay ciertaspropiedades que tienen un comporta-miento no esperado, como es el casode la propiedad Checked de los con-troles RadioButton, ya que el compor-tamiento esperado de ese tipo de con-troles es que al seleccionar un controlde un grupo, el resto se deseleccione,pero al estar la propiedad Checkedenlazada, esa “magia” se pierde, y ten-dremos que ser nosotros mismos losque tengamos que asignar los valoresadecuados a cada una de las opcionesque estén en un mismo rango. Ademásde que para ese tipo de controles, altener esa propiedad enlazada, el com-portamiento en tiempo de ejecuciónno es... nada deseable. Por tanto, mirecomendación es la de no enlazarautomáticamente las propiedadesChecked de los controles RadioButtony si lo necesitamos, hacerlo manual-mente, aunque, como es natural, usan-do los valores de configuración.

Figura 5. Indicar las propiedadesenlazadas a la configuración

Figura 8. En las propiedades se muestranlas propiedades enlazadas

Figura 9. En las propiedades enlazadas se nos

indica con qué valor lo está

Figura 7. Crear un valor para una propiedad

Figura 6. Enlace de propiedades

Page 47: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

47

dnm.inicio<<

Configuraciones totalmentepersonalizadasEsto de que el propio Visual Studio pro-porcione una forma automatizada dealmacenar valores de configuración estámuy bien. El problema principal es quelos valores de configuración a nivel de apli-cación son de solo lectura, es decir, nopodemos almacenar nuevos valores. Porun lado es lógico ese comportamiento, yaque así un usuario no alterará los valoresque todos los usuarios van a usar. Pero haycasos en los que nos puede interesar quesí se puedan modificar ciertos valores, porejemplo, la localización de una base dedatos o de un fichero con cierta informa-ción que todos los usuarios de la aplica-ción usarán.

En estos casos, podemos actuar de dosformas. Una es creando nuestro propio sis-tema de almacenar los datos de configura-ción; por ejemplo, yo suelo usar una clasellamada ConfigXmlque utilizo en la mayoríade los casos en los que necesito que los valo-res de configuración estén compartidos contodos los usuarios (incluso la uso para quecada usuario tenga sus propios datos, peroeso más que nada es por costumbre de usarlas cosas que me funcionan y sobre las quetengo más control).

La otra forma de modificar valores delpropio fichero de configuración es acce-diendo directamente a dicho fichero, quesuele tener el nombre de la aplicación conla extensión .config y que suele estar enel directorio del ejecutable (los cambiosrealizados en Windows Vista serán en eldirectorio roaming, pero para nuestro usoeso no afecta).

Como el fichero de configuración tie-ne formato XML, lo más fácil es usar unavariable de tipo XmlDocument y sabiendocómo se almacenan los datos, nos resul-tará fácil escribir un método que se encar-gue de hacer esas modificaciones pornosotros. En realidad, el acceso manualsolo lo tenemos que hacer para almace-nar los valores, ya que la lectura de esosvalores es automática y se realiza al ini-ciarse la aplicación.

Veamos cómo podemos modificaresos valores. Lo primero es definir unavariable a nivel del formulario, ya que lausaremos tanto en el evento FormClosing

como desde un método que será el que seencargue de guardar los datos. Despuésdefinimos el método que se encarga dealmacenar los datos en el fichero de con-figuración y finalmente, en el evento decierre del formulario asignamos esos valo-res. Si no queremos tener que escribircódigo extra, esos valores los debemostener “ligados” a las propiedades del for-mulario o de los controles que nos inte-rese que reflejen los valores de la confi-guración. Una observación: si queremos“persistir” la posición del formulario, lapropiedad StartPosition de éste debetener el valor Manual. En el listado 1 tene-mos todo el código necesario para haceresto que acabamos de comentar. Para noalargar demasiado el artículo, en loscomentarios del código se explica el tru-co para poder acceder correctamente a losvalores de configuración.

ConclusionesEn este artículo hemos visto cómo tra-bajar con los valores de configuraciónen nuestras aplicaciones creadas conVisual C# 2005, en las que aprovecha-mos la funcionalidad que nos da el entor-no de desarrollo para automatizar todoel trabajo de asignación y recuperaciónde los valores de configuración. Y comono es plan de olvidarse de los usuariosque utilizan Visual Basic, en el ZIP conel código he incluido también proyectoscreados con Visual Basic 2005 en los quese muestra cómo hacer todo lo comen-tado en el artículo, además de extras quepor falta de espacio no he podido expli-car, como es la posibilidad de usar la cla-se ConfigXml o cómo mostrar y modifi-car los valores de configuración al estilode la ventana de propiedades del propioVisual Studio 2005.

private XmlDocument configXml = new XmlDocument();// El método para guardar los valoresprivate void cfgSetValue(string clave, string valor){

// La sección en realidad tendrá la forma:// configuration/applicationSettings/APLICACION.Properties.Settings/string secCS = this.GetType().Namespace + “.Properties.Settings”;string seccion = “configuration/applicationSettings/” + secCS;XmlNode n = configXml.SelectSingleNode(

seccion + “/setting[@name=\”” + clave + “\”]”);if (n != null){

n[“value”].InnerText = valor;}

}

private void Form1_FormClosing(object sender, FormClosingEventArgs e){

// Guardar los datos de configuraciónProperties.Settings.Default.Save();

// El fichero de configuraciónstring ficConfig = Application.ExecutablePath + “.config”;// Cargamos el contenidoconfigXml.Load(ficConfig);

// Guardar los valores de configuración de la aplicación

// Guardar el valor de la posición del formulariocfgSetValue(“Posicion”, this.Left + “, “ + this.Top);

// El nombre de la base de datoscfgSetValue(“BaseDatos”, this.textBox1.Text);

configXml.Save(ficConfig);}

Listado 1. Modificar los valores de configuración a nivel de aplicación

Page 48: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

¿Que si he visto a Google en acción? No podríavivir sin él. Creo que es una de las invencionesmodernas que más significativamente ha afec-tado a nuestras vidas y a la forma en que hace-mos las cosas. Así que sé exactamente lo quequieres decir con redirección automática a pági-nas localizadas. Si conectas a Google desde Bul-garia, se te envía a www.google.bg, donde todala interfaz de usuario está escrita en caracterescirílicos. Sin embargo, desde la misma página,puedes acceder al sitio principal (el de exten-sión .com, en inglés). Creo que es un excelenteejemplo de amigabilidad en la interfaz de usua-rio que muchos sitios Web deberían imitar. Enuna más que agradable obra de reciente publi-cación, David Platt —una de las leyendas vivasdel software en Microsoft y reconocido autorde libros técnicos— indica precisamente estetruco de Google como un camino a seguir. Ellibro en cuestión es “Why Software Sucks andWhat You Can Do About It” (“Por qué el soft-ware molesta y qué se puede hacer al respec-to”), y está publicado por Addison-Wesley. Sitiene oportunidad, échelo un vistazo. No es muytécnico y ciertamente, no se trata de un libro

de programación. Pero está lleno de humor ynos hace pensar y sonreír; a veces, amargamente.

En ese libro, David compara el sitio Webde Google con el de UPS. Ambos sitios soncapaces de suministrar páginas localizadas basa-das en la ubicación del usuario. Sin embargo,Google realiza una suposición sobre esa ubi-cación y lo hace correctamente. UPS, por suparte, espera que el usuario seleccione dóndese encuentra en una lista desplegable. Lospatrones serían: “Déjame que imagine de dón-de vienes” y “Dime de dónde vienes”, respec-tivamente. No hay duda de que la segundaopción es mucho más sencilla de implementar,especialmente si los desarrolladores ni siquie-ra se molestan en guardar la localización selec-cionada en una “cookie”. ¿Cómo se haría lacodificación de la primera opción, como haceGoogle?

La información clave que se necesita paradeducir cuál es el país del usuario es la direc-ción IP asociada con la petición. En ASP.NETpodemos acceder a esa dirección IP mediantela propiedad UserHostAddress del objeto Request,de esta forma:

Web rica... pero Web...

Dino Esposito

Dino Espositoes mentor de SolidQuality Learning. Esponente habitual en

los eventos de laindustria a nivel

mundial. Visite sublog en: http://weblogs.

asp.net/despos.(todotNet.QA@

dotnetmania.com)

¿Ha visto alguna vez a Google en acción? No importa desde dónde uno se conecte, siempre parecesaber dónde estamos. Y automáticamente muestra la página principal localizada. Si estamos enEspaña, sale la página principal española; si estamos en Bulgaria, tenemos una página en alfabeto ciríli-co, y así sucesivamente. Me gustaría hacer lo mismo en el sitio Web de mi empresa. Si pudiera detec-tar la ubicación del usuario, podría redirigirle automáticamente a la página localizada adecuada.

todonet@qa

En este número discutimos una antigua pero divertida característica de Google (detecciónautomática de ubicación) e investigamos las formas de añadirla a nuestras aplicaciones perso-nales. También discutiremos el estado de sesión y los envoltorios (wrappers) ASP.NET para elmotor de Silverlight.

tod

otN

et.q

a@

dot

netm

ania.c

om

Page 49: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

Response.Write(

Request.UserHostAddress);

La dirección IP es el único pun-to de contacto del servidor Web conel usuario remoto que hace la llama-da. No obstante, la dirección IP pue-de ser una rica mina de informaciónsi sabemos manejarla. Una direcciónInternet Protocol (IP) se presentacomo una secuencia de cuatro núme-ros normalmente mostrados comoNNN.NNN.NNN.NNN. Juntos, los cuatronúmeros indican una ubicacióngeográfica codificada en tablas inter-nacionales. Diseccionada de formaadecuada, la dirección IP puede revelar informaciónsimilar a la que aportan los códigos telefónicos inter-nacionales que todos conocemos.

Más concretamente, las direcciones IP sondirecciones de 32 bits (un total de 4 bytes, o núme-ros entre 0 y 255) solo en la más comúnmente usa-da versión IPv4. IPv6 es el protocolo estándar emer-gente para Internet que Windows Vista, así comoun gran número de implementaciones de Linux,soporta de forma nativa. Según IPv6, las direccio-nes IP son de 128 bits (16 bytes). Las direccionesIP se manejan y generan por la Internet AssignedNumbers Authority (IANA). IANA registra blo-ques de direcciones en Registros Regionales deInternet, que a su vez dan cabida a bloques máspequeños de proveedores de servicios y empresas.

¿Cómo mejorar su sitio mediante el soportelocalizado geográfico para los usuarios? Es unacuestión de cuánto desea pagar por ello. Para una

búsqueda rápida, puede venir a costarle entre 0 y50$ por año. Si solamente se necesita reconocerusuarios de un pequeño conjunto de países, puedeir a sitios Web tales como http://www.ipaddress-location.org, interrogar acerca del rango de direc-ciones IP de un país dado, guardar la informaciónen una base de datos propia, y consultarla despuésmediante código. Por supuesto, esto requiere tra-bajo, ya que hay que transformar los datos planosen algo manejable de forma rápida y efectiva entiempo de ejecución. Pero es gratis. No lo he com-probado en profundidad, pero parece que no exis-te ninguna regla matemática intuitiva que simpli-fique la tarea. La otra posibilidad es comprar unabase de datos ya existente y actualizada cada añoque cuesta alrededor de 50$. Una se encuentra enhttp://www.ip2location.com/free.asp, desde don-de se puede descargar una versión gratuita para pro-bar y empezar a jugar con ella.

dotN

etM

anía

<<

49

Tod

otN

et.q

a@

dot

netm

ania

.com

Tod

otN

et.q

a@

dot

netm

ania

.com

dnm.todonet@qa<<

Soy un consultor de .NET y la mayor parte del tiempo trabajo en desarrollo de aplicaciones ASP.NET2.0. Como tengo pasión por .NET, leo a menudo sus artículos. En uno de ellos, acerca de la gestión deestado en ASP.NET, se indica que el estado de la sesión no es un buen sitio para colocar DataSetsgrandes hasta que sean llamados por las páginas. De ahí mi pregunta: ¿Cuál sería un rango aceptable detamaños para los datos de la sesión?

Como en las películas de acción, el policía bueno ledice al criminal: “Cualquier cosa que diga podrá serutilizada en su contra”. Así es como parece que suce-de en este caso: “Cualquier cosa que escriba puede serusada en contra mía”. Y hacerme escribir más y más…,ya que más y más preguntas podrían hacerse y res-ponderse sin fin, en un círculo del que es difícil decirsi es virtuoso o vicioso ☺. Pero volvamos al estado desesión en ASP.NET.

El manejo del estado de la sesión es una tareaque puede ser circunscrita a 3 pasos: asignar unID de sesión, obtener datos de la sesión de un pro-veedor y añadirlos al contexto de la página. Elmódulo de estado de sesión HTTP maneja la eje-cución de todas estas tareas. Al hacerlo, se apro-vecha de un par de componentes adicionales: elgenerador de ID de sesión y el proveedor de esta-do de sesión.

La dirección IP es el único punto de contacto del servidor Web con el

usuario remoto que hace la llamada. No obstante, la dirección IP puede ser

una rica mina de información si sabemos manejarla

Page 50: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

Esperar o hacérselo uno mismo. En la versión 1.0 deSilverlight no hay ninguna facilidad para el progra-mador a la hora de inicializar el entorno sin necesi-dad de escribir funciones Javascript y llamarlasmanualmente. El problema aquí no es tanto el escri-bir el código —es nuestro trabajo, después de todo—sino el modelo, y —déjeme decirlo— el estilo, que esmuy feo. Silverlight es en sí mismo un SDK para aco-meter ciertas tareas, y hace su trabajo correctamen-te. Las utilidades deberíamos encontrarlas en algúnotro lado, quizás en el Cuadro de herramientas deASP.NET. En lo que respecta a ASP.NET 3.5, no hay

nada, que yo sepa. Veremos en una actualización futu-ra. Mientras tanto, en ASP.NET Futures (http://www.asp.net/downloads/futures/) hay un par de controlesde servidor habilitados para Silverlight (Media yXAML) que pueden usarse en páginas ASP.NET. Noestán todavía en producción y no han sido publica-dos oficialmente.

Si quieres entretenerte un rato, puedes crear tupropio envoltorio ASP.NET para inicializar el entor-no Silverlight. Yo crearía una especie de control Sil-verlightManager y le haría generar el script de salidaque se necesita. No es difícil, créeme.

dotN

etM

anía

<<

50

dnm.todonet@qa<<T

odot

Net.q

a@

dot

netm

ania

.com

Tod

otN

et.q

a@

dot

netm

ania

.com

Tengo un interés especial en Silverlight. Tengo entendido que, en este momento, hay queinicializar el entorno utilizando código Javascript. Eso me suena horrible. ¿Hay alguna otraforma?

Los datos almacenados en el estado desesión afectan de una forma u otra lamemoria del servidor. De forma quecuanto más pequeño, mejor. Por otraparte, el estado de la sesión no es algonativo de la Web; lo inventó alguien, yfue porque era extremadamente útil.

En ASP.NET, cuando usas el estadode sesión en modo InProc (en el proce-so), cualquier objeto almacenado en elestado de sesión lo es como instanciaactiva de una clase. No tiene lugar nin-guna serialización o de-serialización, loque supone que puedes almacenar cual-quier objeto que desees (incluyendoobjetos COM) y acceder a él sin ninguna sobrecargasignificativa.

La situación es menos favorable si optas por un pro-veedor de estado Out-of-Process (fuera del proceso). Enesta arquitectura, los valores de la sesión son copiadosdel medio de almacenamiento original a la memoria deldominio de aplicación (AppDomain) que procesa la peti-ción. Se necesita una capa de serialización/de-serializa-ción para llevar a cabo la tarea, y esto representa uno delos mayores costos para estos proveedores. ¿Cómo se veafectado tu código? Primero, tendrías que asegurarte deque solo los objetos serializables se almacenan en el dic-cionario de sesión; como puede imaginarse, el estado nopodría almacenarse.

Para realizar la serialización/de-serialización de tipos,ASP.NET usa dos métodos, cada cual suministrando dis-tintos resultados en términos de rendimiento. Para los

tipos básicos, se usa un serializador interno optimizado;para los demás tipos, incluyendo objetos y clases defi-nidas por el usuario, ASP.NET hace uso del formatea-dor binario, que es más lento. Tipos básicos son String,DateTime, Guid, IntPtr, TimeSpan, Boolean, byte, char ytodos los tipos numéricos.

Es difícil encontrar un número clave por debajodel cual estemos seguros del rendimiento. Es una cues-tión muy específica de cada aplicación el indicar unvalor concreto. Sin embargo, considera que para unescenario InProc (el predeterminado) solo pagamos entérminos de ocupación de memoria. En un escenarioOut-of-Process, tenemos un costo adicional de seriali-zación que supone que para cada petición necesita-mos un 15% extra de tiempo en caso de una peticiónal servidor de procesos o un 25% si usamos una basede datos.

Traducido al castellano por Marino Posadas

Considera que para un escenarioInProc solo pagamos en términos de

ocupación de memoria. En un escenario Out-of-Process, tenemos un costo adicional de serialización

Page 51: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

51

comunidad.net

¡De primero, ensalada mixta!

Con este título, empezamos la nueva temporada en OnobaNET —celebrando nuestro 2º Aniver-sario— con sesiones como:

• “Novedades en C# 3.0”, con Diego Aragón y Marcelo Villacorta.• “Introducción a LINQ”, con Alberto Barroso y Fran Díaz.• “Introducción a Windows Mobile”, con Paco Carbajosa.• “Alta disponibilidad en SQL Server 2005”, con Miguel Rodríguez.

Cada presentación la dividimos en dos, una para cada ponente; éstas a su vez contenían la pre-sentación y una demo donde se explicaba todo. Después de cada demo hubo preguntas y se sorteóalgún que otro regalillo.

Para celebrar este evento, y haciendo mención al título, a la hora de presentar cada sesión, los ponentes cumplieron con la seguridad laboral y seenfundaron su correspondiente delantal.

En este evento —celebrado por primera vez en viernes— hubo ponentes nuevos. La gente se animó mucho y participó en todas las demos, condiferentes preguntas y mini-charlas dentro de algunas de las sesiones que dimos.

Todas nuestras presentaciones están colgadas en la sección eventos de nuestra web www.onobanet.com/eventos/eventos.aspx.

Fran Díaz

eventos.eventos.eventos.eventos.eventos.eventos

Hace 4 años, cuando decidí montar www.vb-mundo.com, no imaginé el creciente tráfico mensualde este portal y foro, mucho menos haber superado los 50.000 usuarios registrados, y desde luegono pensé en crear un programa propio y exclusivo de TV para desarrolladores.

VB-MUNDO TV constituye hoy (junto a MSDN TV) las 2 únicas alternativas televisivas dis-ponibles 100% para desarrolladores. En Internet pueden encontrarse cientos de miles de vídeosde webcasts, o archivos de podcasts, pero no hay vídeos con formato televisivo (bloques, secciones yun conductor frente a las cámaras).

Los webcasts constituyen un formato rico en contenido y realmente valiosos, pero nosotrosademás sumamos la personalización de alguien mirando a cámara explicándonos de manera senci-lla cosas complicadas, añadiendo noticias, trucos y creando interacción entre los usuarios y el pro-grama (a partir del tercer capítulo se leen algunos emails de usuarios y a partir del cuarto se con-testarán preguntas puntuales). Todo esto se realiza cuidando los detalles de la edición, iluminacióny musicalización.

VB-MUNDO TV consta de 4 bloques: saludo inicial, comentarios generales sobre el programaactual, comentarios breves o agradecimientos, pasando rápidamente al “caballo de batalla” del pro-grama: la sección “How To”. Existen 2 secciones “How To” (código explicado) durante cada capí-tulo y una sección llamada “El Producto” donde se muestran detalles generales de diversos pro-ductos relacionados con los desarrolladores.

Ya se ha visto desde creación de informes en .NET gracias a los ReportViewers, pasando porlos usos del HelpProvider y del ErrorProvider, hasta segmentos tan interesantes como hyperthre-ading con background workers. Ya para el cuarto capítulo mostraremos la creación y ejecución de unworkflow mediante Windows Workflow Foundation.

Planeamos también envíos especiales como la cobertura que han hecho durante abril 2007 delevento de Microsoft Cono Sur para su TechNet & MSDN Day, que puede descargarse tambiéndesde la página del sitio: www.vb-mundo.com/tv.asp.

Pablo Tilotta

Un programa de TV online para desarrolladores

¿Quieres trabajar enMicrosoft?

Durante octubre y noviembre se bus-can candidatos en Europa para cubriruna serie de puestos en Microsoft.

Who is a qualified candidate? 1. Someone who has (or will be

completing this year (before April2008) a bachelor’s (four year ormore) degree in ComputerScience or a related field.

2. Someone who has strong abilitiesand passion to write code inC/C++, C#.

3. Someone who is driven and pas-sionate about technology, desi-ring to make high-quality soft-ware products that will sell all overthe world.

4. Someone with fluent Englishcommunication skills.

Si cumples estos requisitos y te gus-taría intentarlo, haznos llegar tu currí-culo a [email protected].

Page 52: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

El estudio de LINQ to SQL, tecnología que comoseguramente conoce el lector habitual [1] estará dis-ponible como parte de .NET Framework 3.5 y VisualStudio 2008, y que se define a sí misma como un ORMligero (o sea, como una pieza de software que ofrece,además del acceso a las consultas integradas, capaci-dades básicas para el mapeado objeto-relacional) hadespertado últimamente mi interés por estas poten-tes herramientas que, sin lugar a dudas, elevan la pro-ductividad del desarrollo y ayudan a saltar el agujerode impedancia entre el mundo de la programaciónorientada a objetos y el de las bases de datos relacio-nales. Si bien la disponibilidad inmediata dentro de laplataforma de recursos básicos para tales fines haráque herramientas como la que presentamos este mes,IdeaBlade DevForce, deban reestructurarse paraaprovechar esos recursos, no pienso que las herra-mientas líderes de este segmento vayan a perder suatractivo ni mucho menos a desaparecer, por cuantoofrecen toda una serie de facilidades que van bastan-te más allá de lo que nos proporcionará LINQ to SQL(al menos, en esta primera versión).

Principales características de DevForceDevForce se distribuye en tres ediciones diferentes:Express, Professional y Enterprise. La versiónExpress es de uso y distribución gratuitos, y si bien,

como es lógico, no ofrece todas las facilidades de sushermanas mayores, sí suministra todas las capacida-des básicas relacionadas con la gestión y persisten-cia de objetos y todas las herramientas visuales aso-ciadas, por lo que se invita al lector a descargarla delsitio Web del fabricante [2] y probarla.

Entre los componentes principales de DevFor-ce podemos mencionar los siguientes:

• Mapeado objeto-relacional, que simplifica elacceso a datos, ofreciendo una interfaz orientada aobjetos de las bases de datos, que elimina la nece-sidad de escribir consultas SQL complejas.

• Gestión de la persistencia, a través de una capade acceso a datos de alto rendimiento que con-trola la forma en que los objetos se recuperan,guardan y almacenan en caché.

• Enlace a datos declarativo, que simplifica eldesarrollo de interfaces de usuario y sincronizala interfaz con los objetos de negocio sin necesi-dad de escribir código complejo para ello,encargándose igualmente del formato y valida-ción de datos y la gestión de errores.

• Herramientas visuales adecuadas, que seintegran dentro de Visual Studio y simplificanen gran medida el trabajo del desarrollador.

• Servidor de objetos de negocio (solo en edi-ción Enterprise), que permite el despliegue deaplicaciones en un entorno de N capas altamen-te escalable, garantizando la seguridad y la moni-torización centralizada, entre otras ventajas.

IdeaBlade DevForce

Laboratorio.netOctavio Hernández

Este mes dedicamos nuestra columna auna de las múltiples herramientas ORM(para el mapeado objeto-relacional) dis-ponibles para .NET en el mercado, Dev-Force (de la empresa californiana Idea-Blade), que aunque tal vez sea un pocomenos popular que algún que otro desus competidores, no tiene nada queenvidiarles, ofreciendo un amplio con-junto de posibilidades que permiten ace-lerar en gran medida el desarrollo deaplicaciones corporativas.

Nombre: DevForceVersión: 3.5Fabricante: IdeaBladeSitio Web: http://www.ideablade.com/Categoría: Marcos de trabajo,

herramientas ORMPrecio: • Edición Express: de libre utilización yredistribución de librerías.

• Resto desde 2.495 USD/desarrollador** - descuentos especiales para múltiples licencias,

instituciones académicas y ONG.

Ficha técnica

Octavio Hernándezes Development

Advisor de PlainConcepts, editor

técnico dedotNetManía y tutor

de campusMVP.Es MVP de C# desde2004, MCSD y MCT.

Page 53: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

53

dnm.laboratorio.net<<

Por otra parte, como característicasfundamentales del producto podemosmencionar las siguientes:

• Arquitectura en múltiples capaslógicas y físicas. DevForce produceaplicaciones con una arquitectura encinco capas lógicas, que a la vez sim-plifica la separación en capas físicassegún la conveniencia. Estas capas lógi-cas son:a) Capa de persistencia de datos. El mar-

co de trabajo de DevForce soportatodos los SGBD corporativos máspopulares del mercado: SQL Ser-ver, Oracle, Sybase, DB2 e Infor-mix, además de cualquier otra quesoporte OLEDB.

b) Capa de acceso a datos. La persisten-cia objeto-relacional de DevForcesuministra la capa de acceso a datos,gestionando el flujo y la sincroni-zación de los datos entre las enti-dades en el modelo de negocio ysus destinos definitivos en elalmacén de datos.

c) Capa de lógica de negocio. El modelode objetos de negocio de DevFor-ce encapsula las reglas y procesosaplicables al dominio de la aplica-ción. DevForce crea clases de nego-cio que se mapean al almacén dedatos subyacente; el desarrolladorpuede extender esas clases con lógi-ca personalizada.

d) Capas de interfaz de usuario. Laarquitectura de enlace a datos deDevForce facilita el intercambio ysincronización de datos entre lasentidades del modelo de negocio ylos controles visuales.

• Persistencia orientada a objetos. Elmecanismo de mapeado objeto-rela-cional de DevForce constituye unasolución robusta y probada en la prác-tica que hace posible mover la infor-mación entre las tablas de la base dedatos y los objetos de la capa de nego-cio con un mínimo esfuerzo por par-te del desarrollador, y programar deuna manera orientada a objetos.

• Caché de alto rendimiento y eje-cución en modo desconectado. Dev-Force almacena los objetos en el clien-te de manera transparente al progra-mador. Cuando un objeto es solicita-

do, el marco de trabajo lo busca ini-cialmente en la caché, y luego, solo encaso necesario, en el servidor. Adicio-nalmente, es posible diseñar las apli-caciones de modo que puedan operaren modo desconectado. En tal caso, lamemoria caché se utiliza comoalmacén temporal para las inserciones,actualizaciones y borrados; esta cachépuede ser serializada a disco, y luegorestaurada en el momento oportunopara enviar esas modificaciones al ser-vidor. El soporte transaccional ayudaa resolver los posibles conflictos deconcurrencia.

• Marco extensible para el enlacevisual a datos. El enlace a datos deDevForce automatiza el enlace entrelos controles visuales y las propieda-des de los objetos de negocio, de modoque los desarrolladores puedan dedi-carse a otras tareas. DevForce ofreceuna API potente y extensible para elenlace a datos que añade mucha fun-cionalidad a la que está presente en.NET de manera predefinida. Adicio-nalmente, esta API integra el soportepara librerías de componentes de ter-ceros como DevExpress e Infragistics.

• Topología híbrida para aplicacionesWindows y Web. Al desarrollar apli-caciones que deberán tener tanto inter-faz Windows como Web, es incuestio-nable la conveniencia de que ambas“vistas” compartan los mismos objetosy lógica de negocio. La infraestructurade DevForce hace eso posible. Losusuarios ocasionales podrán utilizar la

aplicación a través de Internet, mien-tras que los usuarios avanzados podránaprovechar las ventajas de una aplica-ción Windows Forms que opera a travésde Internet. Ambas clases de usuariocompartirán una misma lógica de nego-cio, manteniendo la consistencia de losdatos y reduciendo la cantidad de codi-ficación y mantenimiento.

Un recorrido rápidoPrimeros pasos

En esta sección daremos un vistazo rápi-do al proceso de desarrollo de aplicacio-nes basadas en DevForce a través de lacreación de una aplicación sencilla. Paraello, comenzaremos creando una soluciónen blanco desde el Asistente de proyectosde Visual Studio 2005. A continuación,lanzamos la herramienta IdeaBladeObject Mapper (Mapeador de objetos),que la instalación de DevForce añade almenú de “Tools” (Herramientas) delentorno integrado. El Mapeador de obje-tos (figura 1) es el centro de control des-de el que se llevan a cabo todas las tareasasociadas con la definición de las clases denegocio (entidades) y su mapeado contralas bases de datos relacionales en las quela aplicación se apoya.

Para empezar a interactuar con labase de datos, es necesario crear unafuente de datos de DevForce, indicandola cadena de conexión correspondiente.Como muestra la figura 1, también pue-den utilizarse servicios Web como orí-

Figura 1

Page 54: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

54

dnm.laboratorio.net<<

genes de datos. Para este ejemplo utili-zaremos la base de datos FUTBOL2006, quealmacena información sobre los equiposque tomaron parte en la Liga españolade fútbol 2006-2007 y en la que se basauna buena parte de los ejemplos de mipróximo libro “C# 3.0 y LINQ” [3]. Tan-to la base de datos como el código delejemplo pueden descargarse del sitioWeb de dotNetManía.

Siguiendo el nunca despreciable con-sejo de guardar pronto nuestro trabajo,seleccionamos la opción “File | Save as…”del Mapeador. Previamente deberemosestablecer un espacio de nombres, que seutilizará como nombre para el proyectoque contendrá nuestras clases de negocio,a la vez que como espacio de nombre paraellas. El nombre de fichero que se nos pro-pone para guardar la información que elmapeador utiliza es DNM.Laborato-rio41.orm, y al guardar este fichero segenerarán automáticamente dos proyec-tos de librerías de clases:

• AppHelper, proyecto colateral cuyomiembro más destacado es el ficherode configuración IdeaBlade.ibconfig,que cobra importancia a la hora deldespliegue.

• DNM.Laboratorio41, que contendrá lasdefiniciones de nuestras clases denegocio.

El mapeado y las clases de negocio

Para la creación de las clases de nego-cio, debemos seleccionar las tablas, vistasy procedimientos almacenados de la basede datos que deseamos incorporar a nues-tro modelo. Podemos llevar a cabo estalabor pulsando el icono ‘+’ de la barra deherramientas del Mapeador; para este

ejemplo seleccionaremos las tablas Fut-bolista, Club y Pais (figura 2). Una vezagregadas las tres tablas, éstas se mostraránen la lista “Classes” de la pestaña “All clas-ses”. Pero lo realmente importante es lalabor de mapeado detallado que podemosllevar a cabo a continuación en la pestaña“Class Detail” sobre cada una de las tablaspara establecer la manera en que se gene-rarán las clases de negocio correspon-dientes. A continuación presentamos lasprincipales posibilidades que ofrece Dev-Force en este sentido:

• En la pestaña “Class” se definen carac-terísticas generales como el nombrepara la clase de entidad, su plural, laclase base de la que la clase debe here-dar (caso de que se desee que algunaso todas las clases tengan un ancestrocomún), la columna a utilizar comoidentidad para las comprobaciones deconcurrencia optimista o la cláusulaWHERE de SQL a utilizar como filtropara las filas en el caso en que se tratede una tabla común para varias enti-dades que se discriminan por el valorde uno o más campos.

• La pestaña “Simple Properties” (figu-ra 3) es en la que se lleva a cabo el grue-so de la labor de mapeado. En ellapodemos indicar, para cada columnade la tabla, cómo debe ser mapeada ala propiedad correspondiente de la cla-se de negocio: el nombre para la pro-piedad, tipo .NET a utilizar, si es desolo lectura o lectura/escritura, la posi-bilidad de asignación de valor nulo oel valor predeterminado, entre otras.

• Por su parte, en la pestaña “RelationProperties” se establecen las carac-terísticas de las propiedades que seañadirán a las clases de negocio paradar soporte a las relaciones entre enti-dades. Nuestro modelo relacionalincluye dos relaciones 1:N de las quela tabla Futbolista es destino. Dellado del “1” se utilizará para el nom-bre de la propiedad generada lavariante en plural del nombre de laclase correspondiente.

• Por último, la pestaña “Enums” per-mite definir para una tabla un tipo enu-merado en lugar de una clase de enti-dad; cada uno de los valores de lacolumna indicada de cada fila de latabla se utilizará como valor del tipoenumerado. Esto es sumamente útilen el caso de tablas-nomencladores conun conjunto fijo de filas.

Al guardar de nuevo el fichero demapeado, se generará automáticamen-te código para el proyecto de clases denegocio. La arquitectura de las clases denegocio que genera la herramienta estal, que éstas siempre heredan de unaclase base cuyo nombre es el mismo,pero con el aditivo “DataRow”; éstasúltimas se apoyan a su vez en clases dela infraestructura de DevForce. Demanera similar a como funcionan las cla-ses parciales de .NET, el código gene-rado automáticamente por la herra-mienta se concentra principalmente enlas clases de más bajo nivel; y es en lasclases herederas donde encontramos el

Figura 3Figura 2

Page 55: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

típico comentario “añada aquí su lógi-ca de negocio” para que agreguemos lalógica específica de nuestras clases.

Generando la interfaz de usuario

DevForce no solo ofrece ayuda a lahora de generar los mapeados objeto-rela-cional y suministrar toda la infraestructu-ra necesaria para la gestión transparentede esos datos; sino también a la hora dedesarrollar la interfaz de usuario. Veamoscómo aprovechar esas facilidades, crean-do un nuevo proyecto de aplicación Win-dows Forms (que llamaremos Demo), al queagregaremos inmediatamente una refe-rencia a la librería que contiene nuestrasclases de negocio.

En este punto entra en juego un con-junto de componentes que DevForce ins-tala en el Cuadro de herramientas deVisual Studio 2005 (figura 4). En parti-cular, arrastraremos sobre el formulariodel proyecto un objeto ControlBinding-Manager, encargado de gestionar los enla-ces a datos entre los controles visualesdel formulario y las colecciones de obje-tos de negocio gestionadas por DevFor-ce. Entre las tareas que ofrece la etique-

ta inteligente de este componente tene-mos “Configure databindings”, median-te la que podemos seleccionar la clase denegocio a presentar (figura 5, seleccio-nando la clase Futbolista) e indicar quépropiedades de esas clase (tanto simples,como de relación, como las que hayamosincorporado posteriormente de formamanual) queremos presentar en la inter-faz, y mediante qué tipo de controlesdeseamos hacerlo (figura 6).

Cuando se pulse el botón “Aceptar”de este diálogo, se generarán los contro-les indicados sobre la superficie del for-mulario. El resto del diseño de la interfazes trabajo estándar con Windows Forms:arrastramos un BindingSource y conecta-mos a él el ControlBindingManager; unnavegador tampoco viene mal para per-mitir al usuario desplazarse por los obje-tos. Solo nos restará entonces escribir unmínimo código basado en la potentelibrería de DevForce para garantizar lacarga inicial de los objetos necesarios;dicho código se presenta en el listado 1.

Por supuesto, hay mucho más de loque es posible presentar en el espacio delque disponemos. El sitio Web del fabri-

cante [2] ofrece numerosos tutoriales ydocumentación al respecto.

ConclusionesA lo largo de este artículo hemos intenta-do mostrar las principales posibilidadesque ofrece IdeaBlade DevForce y cómoesta herramienta va más allá de ser un sim-ple mapeador objeto-relacional para cons-tituirse en un verdadero marco de traba-jo para el desarrollo rápido y eficaz de apli-caciones corporativas con acceso a basesde datos de datos relacionales.

dotN

etM

anía

<<

55

dnm.laboratorio.net<<

Figura 5

Figura 4

Figura 6

private void Form1_Load(object sender, EventArgs e){bindingSource1.DataSource =

PersistenceManager.DefaultManager.GetEntities<Futbolista>();}

[1]

[3]

ReferenciasHernández O., “Lo que nostraerá Orcas: LINQ toSQL”, en dotNetManía nº36, abril de 2007

Sitio Web de IdeaBlade:http://www.ideablade.com.

Hernández O., “C# 3.0 yLINQ”, ISBN: 978-84-935489-1-9, Krasis Press(http://www.krasispress.com)de próxima aparición.

[2]

Page 56: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions
Page 57: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

Professional Software Testing with Visual Studio 2005 Team System:Tools for Software Developers and Test EngineersTom Arnold, Dominic Hopton, Andy Leonard, Mike FrostEditorial: WroxPáginas: 408Publicado: septiembre 2007ISBN: 978-0470149782Idioma: inglés

Este libro es de los que muchos lectores, al verlo, pensamos: ¡por fin! Alguien se ha deci-dido a hacerlo. Es de esas obras que parecen necesarias para aprovechar en su integridaduna tecnología y que, después de hojear su contenido, nos anima inmediatamente a mirar-la con más profundidad.

La obra está teniendo una acogida espectacular, ya que cubre todas las fases del ciclo devida de un proyecto de software, y muestra con claridad cómo implementar las buenasprácticas en la fase de pruebas, minimiza el tiempo necesario en esta fase del desarrollo,y en suma, ayuda a la mejor comprensión y utilización de VSTS como una herramientaintegral de desarrollo. Los autores no son novatos, y en más de un caso han ayudado enel propio diseño de la herramienta. Ya conocíamos a Andy Leonard, por lo que no nosextraña el resultado.

Visual Studio Team System: Better Software Development for AgileTeamsWill Stott y James NewkirkEditorial: Addison-Wesley ProfessionalPáginas: 864Publicado: mayo 2007ISBN: 978-0321418500Idioma: inglés

Se trata de una obra de contenido similar al anterior, solo que abarca un espectro másamplio de la utilización de Visual Studio Team System (de ahí su longitud), que también estáteniendo una excelente acogida en EE.UU. El enfoque de los autores se centra en enseñar autilizar VSTS en entornos de programación ágiles reales, aprovechando el conjunto de herra-mientas integrado que posee VSTS. Newkirk es jefe de desarrollo en Microsoft, y en la actua-lidad, Product Unit Manager para CodePlex. Will Stott, consultor de estas técnicas, tam-bién en EE.UU. El recorrido del libro es, por tanto, eminentemente práctico, utilizando uncaso de estudio del que se van desbrozando todos los problemas que aparecen en el desarro-llo, y explicando las ofertas que la herramienta expone para su solución. Encontramos de espe-cial valor la explicación de los mecanismos que permiten integrar las soluciones teóricas dedesarrollo ágil en una herramienta como ésta.

biblioteca.net

nove

dad

es MCITP Self-Paced Training Kit (Exam 70-441):

Designing Database Solutions by Using SQL Server 2005Dejan Sarka, Andy Leonard, Javier Loria y Adolfo Wiernik. Editorial: Microsoft Press.

Páginas: 656. Publicado: septiembre 2007. ISBN: 978-0735623422.

Pro C# 2008 and the .NET 3.5 FrameworkAndrew Troelsen. Editorial: APress. Páginas: 1000. Publicado: octubre 2007. ISBN: 978-

1590598849.

TEXTO: MARINO POSADAS

Page 58: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions

dotN

etM

anía

<<

58

desván

Windows Live Translator, disponible

Aunque sus bondadesde traducción son,como puede imaginar-se, similares a las quepodríamos encontrar

en algunos otros servicios existentes por Internet, y setrata de una versión beta, lo cierto es que funciona bas-tante aceptablemente (deben revisar algunas construc-ciones en castellano, como las formas reflexivas) y escapaz de traducir buenas cantidades de texto. No estápensado para usarlo directamente, pero nos puede venirbien para comprender el sentido de ciertos textos quevemos en la Web. Dispone, además, de muchas opcio-es de traducción entre lenguas: ruso, árabe, inglés, chi-no, japonés, alemán, francés, coreano, portugués,holandés, y por supuesto castellano. Se puede probaren http://translator.live.com.

Marino Posadas

Los amantes de los gráficos no puedenperderse este vídeo (disponible enhttp://www.pcinpact.com/actu/news/38412-redi-m e n s i o n n e m e n t - i m a g e - p h o t o - p o i d s -photogra.htm) sobre lo que los investigadoresAriel Shamir y Shai Avidan, del Efi AraziSchool of Computer Science presentaron enla pasada edición de Siggraph (Special Interest Group for Com-puter GRAPHics). Se trata de una nueva técnica de redimen-sionamiento y modificación inteligente de las imágenes uti-lizando técnicas desarrolladas por ellos.

Vídeos sobre programación de API para Internet. Loschicos de ProgrammableWeb siguen publicando vídeos(cada vez tiene más éxito este formato para explicar proce-sos que requieren pasos discretos en una herramienta) sobrela integración de las API relacionadas con la Web. Ya tie-nen 19, incluyendo la programación de Yahoo, AOL y Sky-pe, entre otras. Están disponibles en YouTube, pero tam-bién en http://blog.programmableweb.com/2007/09/20/19-video-apis/funcionalidad.

Windows Scripting no es un blog, sino un subsitio con unaingente cantidad de material relacionado con la programaciónen general y los scripts en particular. Pertenece a ASPFree, perocontiene muy buenos artículos sobre una amplia gama de pro-gramming affaires, en sus propias palabras. El último recomen-dado, sobre WCF: http://www.aspfree.com/c/a/Windows-Scrip-ting/WCF-Essentials.

DZone Snippets es una de esas fuentes donde podemosencontrar casi de todo. Pero relacionado con la programa-ción y —concretamente— con el código fuente. Más de 8000usuarios y casi 4000 rutinas de código para cubrir todas lasnecesidades (o muchas de ellas). Accesible en el sitio:http://snippets.dzone.com.

Freeware Files ofrece, entre muchas otras utilidades, unaque es de especial interés para aquellos que tenemos quehacer demostraciones de código en público: ZoomIt per-mite ampliar cualquier parte del escritorio y arrastrarla ala zona que nos interese. Incluso permite dibujar sobre lazona ampliada (http://www.freewarefiles.com/pro-gram_2_237_19697.html).

Lina es una utilidad que permite, según sus autores, eje-cutar cualquier programa hecho para Linux en Win-dows, Mac y Unix. Se encuentra en un sitio Web dedi-cado (http://www.openlina.com/download.html) y se tra-ta de una delgada capa virtual que habilita al desarro-llador para escribir y desarrollar código con las herra-mientas Linux ordinarias, pudiendo luego ejecutarloen los sistemas antes citados.

documentos en la red

utilidades del mes

sitios del mesnoticias.noticias.noticias

Windows 2008 RC0

Microsoft acaba de liberar la release candidate 0 de Win-dows Server 2008, que ya está disponible para su descar-ga en http://www.microsoft.com/windowsserver2008/audsel.mspx.

Por primera vez disponemos de una Community Tech-nology Preview (CTP) de la tecnología de virtualizaciónde Windows Server (codename Viridian). Windows Server2008 incluye una capa pequeñísima (de menos de unmegabyte) de virtualización de software basada en hiper-visor que opera entre el hardware y el sistema operativode Windows Server 2008.

Este RC0 es un paso importante en el camino hacia laentrega final de Windows Server 2008 y significa que elcódigo del servidor está entrando en la etapa final de laspruebas, que se espera finalice en el primer trimestre de2008.

La presentación oficial, junto a Visual Studio 2008 ySQL Server 2008, en diferentes estadios de desarrollo, seproducirá a finales de febrero.

noticias.noticias.noticias

Page 59: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions
Page 60: dotNetManía - sergiogonzalezc.files.wordpress.com · operacionales para una migración exitosa de SharePoint 2003 a SharePoint 2007. ¿Tenemos razones para hacerlo? Microsoft Solutions