visual basic.net • c# • delphi • asp.net • ado.net • .net ... · pdf...

60
opinión nº2 marzo 2004 • Precio: 6,00 (España) Entrevista con Jason Vokes PLSM Borland EMEA X-Omega o cómo combinar SQL y XML con C# Microsoft SQL Server 2000 Reporting Services JLDA versión 3 en fase Beta Acceso DAV a Microsoft Exchange Server • Equivalencia de instrucciones de C# y VB .NET (II) • Autenticación ASP.NET a través de formulario y Active Directory • Compilación de código al vuelo en .NET• Cómo reducir el log de transacciones de una base de datos de SQL Server • Las legiones de César (MSF) Entrevista con Jason Vokes PLSM Borland EMEA Laboratorio Acceso a base de datos en Delphi 8. Los Borland Data Providers Open Source dotNetNuke Comunidades Lexico dotNetManía dotNetManía www.dotnetmania.com Dedicada a los profesionales de la plataforma .NET Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET Framework • Windows Server System El mercado informático necesita excelentes profesionales, no corporativismo y titulitos

Upload: lenhan

Post on 01-Feb-2018

279 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

opinión

nº2 marzo 2004 • Precio: 6,00 € (España)

Entrevista con Jason VokesPLSM Borland EMEA

X-Omega o cómo combinar SQL y XML con C#Microsoft SQL Server 2000 Reporting ServicesJLDA versión 3 en fase Beta

Acceso DAV a Microsoft Exchange Server • Equivalencia de instrucciones deC# y VB .NET (II) • Autenticación ASP.NET a través de formulario y Active Directory• Compilación de código al vuelo en .NET• Cómo reducir el log de transaccionesde una base de datos de SQL Server • Las legiones de César (MSF)

Entrevista con Jason VokesPLSM Borland EMEA

LaboratorioAcceso a base de datos en Delphi 8. Los Borland Data Providers

Open SourcedotNetNuke

ComunidadesLexico

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

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

El mercado informático necesita excelentes profesionales, no corporativismo y titulitos

Page 2: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic
Page 3: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

Este número es número de resaca. La resa-ca que queda después del primer número decualquier publicación, de las difíciles deci-siones que marcarán el estilo de la revista,desde la elección del equipo de colaborado-res, la búsqueda de patrocinadores, la maque-tación, el número de páginas, la orientaciónque tendrán las noticias, de las secciones, decómo enfocar los artículos técnicos, de aquien se va a dirigir, de qué va a aportar lapágina Web a la lectura… y de los nerviosdel día de su presentación. ¡Uff! Y lo que seme olvida, y lo que no cuento. Hasta que lle-ga el primer suscriptor ha habido meses detrabajo y cuando esto ocurre nos da la sen-sación de haber terminado cuando en reali-dad, no hemos hecho sino empezar.

¡Bienvenido al número dos dedotNetManía! En este número nos hemosesforzado por aportar una serie de artículostécnicos diversificados; le ofrecemos artícu-los de lenguajes, de ASP.NET, de .NetFramework, de SQL Server, de ExchangeServer, de arquitectura, tres nuevas seccio-nes: dnm.directo para cubrir eventos, realizarentrevistas, etc.; dnm.opensource que usare-mos para dar un repaso al mundo del open

source para .NET; y dnm.opinión dondepublicaremos artículos de los que aligeranun poco a una revista tan técnica cómo esta.Ni éstas, ni ninguna de las demás son sec-ciones fijas. Cada mes es como una cosechaque cada año sale distinta. No queremosencorsetarnos a unas secciones y contenidosfijos, preferimos la improvisación, bienentendida. Dentro de un orden, usaremostodas las secciones para hacer una fotogra-fía de la actualidad, de los productos y pro-yectos que van apareciendo o cambiando.

En el apartado de noticias no va a encon-trar noticias Best Seller, por ejemplo, en estenúmero ni hablamos sobre la filtración delcódigo fuente de Windows del que tanmachaconamente hemos sido informados.El motivo es porque el espacio del papel eslimitado y preferimos publicar noticias másinteresantes en relación a su contenido, ymás centradas en la tecnología, incluso aun-que no sean noticias de última hora. Hay quetener en cuenta que una revista impresa, lasnoticias llevan un retraso de entre mediomes, como mínimo, hasta dos meses depen-diendo de cuando se produzca la noticia ycuando llegue el ejemplar a sus manos.

dotN

etM

anía

<<

3

Resaca

<<

dnm.editorial<<dnm.editorial

EditorPaco Marín ([email protected])

AdministraciónPilar Pérez ([email protected])

Asesor Técnico/CoordinaciónMarino Posadas ([email protected])

Redactores y ColaboradoresAlejandro Mezcua, Angel Esteban,Antonio Quirós, Antonio Rojo, DavidCarmona, Eladio Rincón, FranciscoCharte, Fernando Guerrero, FernandoNogueras, Guillermo ‘guille’ Som, IvánGonzález, Jesús López, Jordi Rambla,

Jorge Serrano, José Manuel Alarcón,Juan Torres, Liborio López, Luis MiguelBlanco, Marino Posadas, Miguel Egea,Miguel Katrib, Pablo Abbate, PedroGómez, Pedro Pozo, Pepe Hevia,Salvador Ramos

Diseño y MaquetaciónÉride Diseño GráficoTel.: (34) 91 477 48 [email protected] • www.eride.net

Editanetalia, s.l.c/ Robledal, 13528529 Rivas-Vaciamadrid (Madrid)Tf. (34) 91 6667477Fax (34) 91 4991364

ImprimeCampillo Nevadowww.campillonevado.com

Depósito LegalM-3.075-2004

Suscripciones/Administració[email protected]

[email protected]

[email protected]

Nuevos [email protected]

Page 4: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dnm.sumario

El mercado informático necesita excelentes profesionales,no corporativismo y titulitos 8-10

Una reflexión de Fernando Guerrero sobre la creciente exigencia de titulacionescomo marchamo de calidad en los profesionales. ¿Cree que es imprescindible unatitulación universitaria para ejercer nuestra profesión? ¿Deberíamos colegiarnoscomo en otras profesiones?

Entrevista con Jason Vokes 11-14

Con motivo de la presentación de Delphi 8 para .NET, entrevistamos a JasonVokes, Developer Tools Product Manager para EMEA, responsable de todas lasherramientas de desarrollo para entornos Windows 32 y Microsoft .NET.

Autenticación ASP.NET a través de formulario y Active Directory 15-19

En este artículo trataremos la autenticación en ASP.NET, y explicaremos con unejemplo práctico como autenticarse mediante formulario con Active Directory.

Equivalencia de instrucciones de C# y VB .NET (II) 20-24

Segunda entrega de esta serie de artículos que pretende explicarle cómo hacer lasmismas cosas (o casi) tanto en C# como en Visual Basic .NET.

Compilación de código al vuelo en .NET 26-31

En este artículo veremos la forma de compilar bajo demanda código creado alvuelo o residente en archivos externos a nuestra propia aplicación. Como ejemplopráctico construiremos un evaluador de expresiones.

Acceso DAV a Microsoft Exchange Server 32-37

Microsoft Exchange Server, a partir de su versión 2000, pone a disposición delusuario todo su contenido mediante WebDAV. En este artículo se verá qué esWebDAV y cómo usarlo para manipular información de Microsoft ExchangeServer y usarla en nuestras propias aplicaciones.

Cómo reducir el log de transacciones de una base de datos de SQL Server 38-41

Explicamos qué es el Transaction Log, qué ocasiona su crecimiento y qué medidashay para evitar que crezca desmesuradamente. Proponemos diversas soluciones alproblema.

Laboratorio 42-45

Los Borland Data Providers (BDPs). Además de poder utilizar los proveedoresADO.NET integrados en la biblioteca de clases .NET, el nuevo Delphi 8 .NETnos ofrece otras alternativas entre las que se encuentra el flexible BDP.

Las legiones de César 46-50

Una introducción a la arquitectura MSF, Microsoft Solutions Framework, lametodología de gestión de proyectos de desarrollo de software que usa el gigante deRedmon y que, desde hace unos pocos años, sistematiza y recomienda para quequienes van a desarrollar software con herramientas Microsoft la use.

Biblioteca 52

Guía Práctica para usuarios JavaScript. De José Manuel Alarcón

ASP.NET Al descubierto. De Stephen Walther

Comunidades 53-54

Lexico

Open Source 56

dotNetNuke

Desván 58dnm

.sum

ario

Page 5: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

Entre

gaes

tecu

pón y ob

tendrá

s

507

de de

scuen

toal

inscri

birte

a nues

tros pro

gramas

Page 6: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

6

dnm.noticias<<dnm.noticias

DevDays 2004

Más de 1.100 personas asistieron el pasado 22de enero al DevDays 2004, en el Auditorio Nortede IFEMA en el Parque Ferial Juan Carlos I deMadrid. Parece que, después de la expectaciónlevantada por el PDC en Estados Unidos, habíainterés por oir lo que algunos de los mejoresconferenciantes de nuestro país tenían que decirsobre las nuevas tecnologías que Microsoft estápreparando.

“Microsoft Ibérica refuerza su compromi-so con los desarrolladores españoles mediante

la celebración del Developer Days 2004, y lesmuestra el camino que va a seguir la compañíaen los próximos años con el lanzamiento deproductos tan esperados como Longhorn,Yukon o Whidbey”, comentó Mauricio Ulargui,director de la división Developers de MicrosoftIbérica, quien añade que “nuestro objetivo escrear en España una comunidad de desarrolla-

dores que puedan aprovecharse de todas lasposibilidades que les ofrecerá la plataformaWindows en los próximos años”.

Se celebraron las siguientes conferencias.• En camino hacia SOA• Soluciones para el desarrollo de aplicaciones.• Coge ventaja sobre la nueva versión de Visual

Studio “Whidbey”.• La nueva generación de aplicaciones con

“Yukon”• Desarrollo en dispositivos móviles Smartphone

2003. • Desarrollo de aplicaciones seguras con .NET. • Desarrollo de Webparts para SharePoint 2003. • Avances en Windows “Longhorn”.

Este año fue el día de la presentación ofi-cial de dotNetManía por lo que desde la redac-ción de la revista le guardaremos un especialcariño.

Page 7: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dnm.noticias<<

Presentación deDelphi 8 para .NET

Más de 100 personas se dieron cita en el even-to de presentación de Delphi 8 a la comunidadde desarrolladores de Delphi de España. Secelebró en el centro de convencionesWinterthur en Madrid, organizado por BorlandIbérica con la colaboración de Danysoft.

Tuvimos la suerte contar con la asistenciade Jason Vokes, Developer Tools ProductManager para EMEA con el que tuvimos laoportunidad de charlar.

Las conferencias que pudimos escucharfueron:

• Introducción Delphi 8, por JasonVokes

• El nuevo entorno de desarrollo para.NET, por Pablo Reyes

• Características de Delphi 8 para el desa-rrollo de aplicaciones basadas en el fra-mework .NET, por Octavio Hernández

Disponibilidad de la beta de la versión 3 de JLDA que automatiza laconversión de J2EE a .NET

JLCA (Java Language Conversión Assistant) es una herramienta diseñada para convertir elcódigo existente escrito en lenguaje Java en programas para Microsoft Visual C# y .NETFramework, o sea, especialmente dedicada a atraer a los desarrolladores de Java a la plata-forma .NET.

Según dijo Brian Keller, Product Manager para Visual Studio .NET, esta versión soporta-rá la conversión de J2EE 1.3 y librerías JDK 1.3 así como EJB, JAAS, JCE, JMS, JNDI, y RMI.“Cada versión de JLCA convierte un mayor porcentaje de código que no requiere retoques,si bien ninguna herramienta de conversión elimina la necesidad de retoques posteriores”.

Asimismo, Brian Keller ha dicho que “estamos intentando ser interesantes para cual-quiera que esté trabajando con Java hoy y quiera cambiar sus aplicaciones para tener todaslas ventajas de .NET Framework”.

Las aplicaciones convertidas con JLCA pueden extenderse para utilizar la plataformade desarrollo .NET incluyendo ASP.NET, ADO.NET y Windows Forms. El gran avan-ce de la versión 3.0 es el soporte para la conversión de aplicaciones J2EE 1.3, incluyendoJava Server Pages (JSPs) y Enterprise JavaBeans (EJBs). Otras tecnologías de Java que pue-den ser traducidas incluyendo Java Authentication y Authorization Service (JAAS), JavaCryptography Extensión (JCE), Java Message Service (JMS), Java Naming y DirectoryInterface (JNDI) y Remote Method Interface (RMI).

La beta de JLCA 3.0 está disponible gratuitamente para los desarrolladores con unalicencia de Visual Studio.NET. Puede descargar una versión de evaluación de 60 días gra-tuitamente, si no la tiene.

JLCA 3.0 será parte de Whidbey, la próxima versión de Visual Studio .NET.Para más información visite:

http://msdn.microsoft.com/vstudio/downloads/tools/jlca/30beta/

III Jornadas de desarrolladores .NET

Las III Jornadas de desarrolladores de la plataforma .NET se celebrarán el 29, 30y 31 en las nuevas instalaciones de Microsoft Ibérica y son totalmente gratuitas.Durante los tres días habrá talleres que se impartirán en paralelo en distintas aulassegún niveles y es una excelente oportunidad para adquirir nuevos conocimientos¡sin ningún coste!. El horario será de 9:30 a 13:30 cada día. Al cierre de este núme-ro, la agenda aún no estaba terminada pero hemos tenido acceso a un borrador dela misma:

Día 29

• Apertura,• Taller 1: Seguridad y optimización de SQL Server para programadores.• Taller 2: ASP .NET con acceso a datos mediante ADO .NET

Día 30

• Taller 1: Programación para Office 2003 mediante Visual Studio Tools forOffice.

•Taller 2: Programación para dispositivos móviles con Compact Framework.

Día 31

• Taller 1: Seguridad en el código.

Para más información consulte la página web de eventos de Microsoft ibéricaen: http://www.microsoft.com/spain/eventos

Antonio Gómez, Marketing & Sales Managerde Borland Ibérica

Page 8: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

8

un compañero ar-gentino del grupo de noticias de SQLServer (news:// msnews.microsoft.com/microsoft.public.es.sqlserver)

comentó horrorizado los planes delgobierno argentino de exigir una titu-lación universitaria en informática atodos aquellos que quisieran ejercercualquier actividad legalmente en estecampo.

Resulta que hace algunos meses leíen El País algunos comentarios de un

miembro del colegio de Ingenieros yLicenciados de Informática sobre“intrusismo profesional” aplicados aaquellos que en España ejercen activi-dades de informática sin la titulaciónadecuada. Y la verdad es que buscandoen Internet encuentro muchos artícu-los sobre la “necesidad de atajar el intru-sismo profesional que aqueja esta pro-fesión”.

La verdad es que estos comentariosme suenan a corporativismo rancio y sin

sentido, ajenos a cualquier considera-ción sobre la realidad del mercado en elque vivimos.

Las universidades tienen la obliga-ción de crear, desarrollar e impartirconocimiento, proporcionando a lasociedad la oportunidad de mantener elnivel tecnológico que este competitivomercado requiere. Sin embargo, no escometido de la universidad garantizartrabajo a sus titulados, o imponer tra-bas al desarrollo del libre mercado.

Yo he sido estudiante universitario,aunque he de reconocer que no de losmejores, y hasta he impartido clases en launiversidad durante algunos años (peroeso fue durante el siglo pasado). Y de ver-dad creo firmemente en el valor de la uni-versidad, en cuanto a la transmisión deconocimiento, y la habilidad para formaren los estudiantes una mentalidad curio-sa, crítica e inquisitiva, a la vez que orde-nada, para desarrollar un trabajo técnicoy científico al más alto nivel.

Sin embargo, me espanta la idea deque alguien se crea que por obtener unatitulación académica, esto le lleve direc-tamente a ocupar un puesto en elOlimpo.

El mercado informático necesita excelentesprofesionales, no corporativismo y titulitos

Por Fernando GuerreroSQL Server MVPSolid Quality Learning

Hace unos días,<<

Las universidades tienen la obligación de crear,desarrollar e impartir conocimiento,

proporcionando a la sociedad la oportunidad de mantener el nivel tecnológico que este competitivo

mercado requiere

Page 9: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

¿Titulación académica o experiencia profesio-nal? ¿Colegios profesionales que den oportunida-des de formación y capacitación a sus colegiados, oColegios profesionales que intenten por todos losmedios limitar las atribuciones profesionales de losno colegiados?

La “titulitis” es una enfermedad muy arraigada enel mundo hispano. Y es curioso observar qué pocoarraigo tiene esta práctica en el mundo anglosajón. Enotros países nadie diría que es un abogado simple-mente por tener un título de la carrera de derecho, omédico por tener una licenciatura de medicina. En lamayoría de los países serías abogado si practicas la abo-gacía y tienes licencia para ello, y serías médico si prac-ticas la medicina y tienes licencia para ello.

Un buen amigo mío, Ron Talmage, SQL ServerMVP y profesional muy respetado en este mundo deSQL Server, me dio una sorpresa hace algún tiempo.Me enseñó un viejo libro que atesora en su bibliote-ca y me lo presentó como uno de los libros más impor-tantes en su vida: era su tesis doctoral. Lo que me dejóperplejo es que él nunca ha dicho en ningún sitio quetuviera un doctorado. Y ha subido hasta los peldañosmás altos de esta profesión sin mostrar esta creden-cial. Ron, amigo: Chapeau!

¿Se le debería exigir una licenciatura en literatu-ra a un poeta o novelista?, ¿o un doctorado en artedramático a un actor?, ¿o estudios universitarios a unpintor o escultor?, ¿o estudios de periodismo a unperiodista?

Si lo que hacen estas personas es arte, la verdad esque el trabajo que desempeña un buen técnico deinformática entra muchas veces en el campo del arte,lo cual no le excusa para evitar seguir las buenas prác-ticas establecidas en la industria.

Lo que nadie aguanta es un mal poeta, o un malactor, periodista o escultor, con estudios o sin ellos. Comonadie aguanta un mal médico, ingeniero, o profesor.

Habría que diferenciar entre capacitación técnicay capacidad legal para contratar trabajos y hacerse res-ponsable de los mismos.

Capacitación técnica se consigue mediante muchosdiversos sistemas, y es muy difícil determinar el nivelde capacidad para desempeñar un determinado tra-bajo fijándose exclusivamente en el nivel de titulaciónuniversitaria o no-universitaria, que el técnico hayaadquirido.

Es obvio que hay excelentes técnicos cuyos estu-dios no se corresponden con la actividad que llevan acabo. Otra cosa es la capacidad legal para contratartrabajos, y en esto sí creo que los gobiernos debenregular qué datos se deben obtener de los profesio-nales liberales para asegurar que los clientes puedanexigir responsabilidades. Sin embargo esto no debe-ría tener nada que ver con el currículo académico delos técnicos que van a realizar el trabajo, sino con laresponsabilidad profesional que deba exigírseles.

Por ejemplo, para abrir una tienda de alimenta-ción se necesita un permiso administrativo, y las per-sonas que atienden han tenido que pasar unas prue-bas de manipulación de alimentos, pero no se exigeque el dueño sea doctor en medicina y nutrición ;-)

El hecho de que un profesional de informática hayatenido que obtener una licencia para ejercer esta acti-vidad, simplemente tendría que significar que elgobierno tendría información suficiente y precisa acer-ca de dónde se realiza esta actividad, qué técnicos com-ponen el equipo directivo, y quién sería legalmenteresponsable si algo va mal, pero es el mercado el quetiene que determinar si los estudios académicos y/o laexperiencia de dichos técnicos merecen su confianzapara encargar los trabajos necesarios.

Por cierto, en otros países, como por ejemplo losEEUU, un licenciado en Físicas puede perfectamen-te dedicarse a diseñar puentes de autopistas (y sé dealgunos casos concretos). En esos casos, los clienteshan confiado plenamente en la capacidad técnica dedicho profesional, independientemente de su titula-ción. Las restricciones en atribuciones profesionalesse aplican exclusivamente a algunos pocos casos muyconcretos: Medicina, Abogacía y Arquitectura, pormotivos de alta responsabilidad.

Esto de las competencias profesionales es untema muy arraigado en la cultura española y supon-go que de ahí se ha trasladado a Latino América. Loscolegios profesionales intentan por todos los medioslimitar lo que otros colectivos pueden hacer, perose ocupan muy poco, salvando honrosas excepcio-nes, de que sus colegiados dispongan de la forma-ción más adecuada y actualizada para desempeñarlas actividades que el mercado les exige. La forma-ción de un técnico debería estar orientada a la capa-citación de dicho técnico para resolver problemastécnicos, no su habilidad para pasar exámenes que

dotN

etM

anía

<<

9

dnm.opinion<<

Sin embargo, no es cometido de la universidad garantizar trabajo

a sus titulados,o imponer trabas al desarrollo

del libre mercado

Page 10: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

en muchos casos son absurdos en su planteamientoy calificación.

Sin embargo muchas universidades están más inte-resadas en proporcionar formación científica exclusi-vamente, lo cual es maravilloso (a mí me ha servidoenormemente este tipo de formación), pero no tienemucho que ver con la capacitación técnica para resol-ver los problemas del día a día. Y esta capacitacióntécnica se puede proporcionar mediante muchos otrossistemas que cuestan menos recursos a la sociedad queformar miles de científicos cada año que nunca van arealizar ninguna actividad científica.

No me malinterpretéis. Yo soy un firme conven-cido de que es esta formación eminentemente cientí-fica la que hace de los ingenieros españoles (e hispa-nos en general) más versátiles que sus homólogos deotros países. Lo que digo es que posiblemente el pro-ducto obtenido se haya conseguido mediante una uti-lización desmesurada de recursos del estado (y el esta-do lo pagamos todos). No hay más que echar un vis-tazo a las estadísticas de fracaso universitario en carre-ras de ingeniería en España para observar que estu-diantes de carreras técnicas emplean normalmenteseis años para obtener titulaciones que se diseñaronalrededor de carreras de tres años, y de ocho a diezaños para carreras de seis años.

En otros países con mayor éxito que el nuestroen estos campos, se forma un ingeniero en cuatroaños, y si desea avanzar en sus estudios, puede alcan-zar un Master of Sciences (MSc) en dos años más. Yestoy hablando de años, no de cursos, y en muchoscasos simultaneando trabajo para poderse pagar losestudios, además de otras actividades culturales y lúdi-cas. ¿Son ellos más inteligentes que nosotros? Porsupuesto que no, pero tienen planes de estudios quepermiten obtener títulos totalmente reconocidos conla adecuada economía de medios requeridos para suobtención.

La experiencia profesional puede llevar a perso-nas sin estudios, o sin estudios universitarios com-pletos, a ofrecer servicios del más alto nivel técnico.

Y esto es especialmente de admirar, ya que la falta deformación académica supone en la mayoría de los casosun trabajo extra por parte del técnico para poder alcan-zar y mantener este nivel. Yo nunca entenderé cómoalguien se puede atrever a menospreciar a técnicos sinestudios, en aquellos casos en los que su capacidadtécnica está fuera de toda duda.

¿Dónde se exige en esta legislación que el técnicose mantenga al día en sus conocimientos técnicos? Unespíritu inquieto que busque permanentemente cual-quier oportunidad para mantenerse aprendiendo essiempre más importante a la larga que unos estudiosiniciales en la mejor universidad del mundo (aunqueesto supondría por supuesto un excelente comienzo).

Sin embargo, so seamos maniqueos, estamos com-parando aquí siempre dos colectivos muy limitados:

• El del titulado sin ninguna experiencia ni ganaspor mantenerse al día.

• El del no titulado con mucha experiencia conmuchas ganas de mantener su nivel de conoci-mientos.

Como todo el mundo puede imaginar, existe todoun abanico de posibilidades distintas, como por ejem-plo (yendo de nuevo a otros dos extremos):

• El titulado con uno o varios doctorados y muchosaños de experiencia y reconocido prestigio.

• El no-titulado que alardea de saber lo que nosabe, y que sólo le importa ganar algún dineroembaucando a algunos clientes.

Y por supuesto, cualquier combinación de lossiguientes elementos:

• Titulación a diferentes niveles.• Experiencia profesional en diferentes grados.• Honradez profesional, a diferentes niveles tam-

bién, que no todo es blanco o negro, sino dife-rentes tonalidades de gris, en este mundo.

Así que hay tantas combinaciones como personas,y las empresas y gobiernos deberían interesarse másen conseguir las personas adecuadas al trabajo quedeben desempeñar, de acuerdo a su capacidad profe-sional, que intentar imponer trabas administrativasque sólo frenan el avance tecnológico de nuestra aúnretrasada sociedad.

Como dice Tom Peters: “Hire for attitude, trainfor skills”, o lo que quiere decir en algunas palabrasmás: “contrata tus colaboradores basándote en su acti-tud, entonces dales la formación que necesiten parahacer su trabajo”. ¿Qué título universitario certificadisponer de una actitud curiosa?

http://www.tompeters.com/toms_world/observa-tions.asp?id=24&date=1/1/200

dotN

etM

anía

<<

10

dnm.opinion<<

Un espíritu inquieto que busque permanentementecualquier oportunidad para mantenerse aprendiendo es siempre más importante

a la larga que unos estudios iniciales en la mejor universidad del mundo

Page 11: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

11

fundamentalque quería que Jason nos respondieraera qué es lo que Delphi 8 podía apor-tar a los desarrolladores de la platafor-ma .NET o qué tenían los desarrolla-dores de Delphi en sus manos que losdemás desarrolladores de otros lengua-jes pudieran envidiar. No se trata dehacer la competencia a nadie, como seencargaron de dejar claro tanto él comoCarlos Heras, Alliances & Indirect SalesManager de Borland Ibérica, sino sim-plemente de conocer lo que Delphi 8puede aportar. Como podréis ver en estaentrevista, costó sacarle algunas pala-bras al respecto.

A la entrevista asistieron, aparte delpropio Jason Vokes y el mencionadoCarlos Heras, Octavio HernándezLeal, Director de servicios profesionales deDanysoft y Paco Marín editor dedotNetManía.

Algún desarrollador de Delphi mecomentaba el otro día que Borlandparecía estar más interesado en lamodularidad de sus productos queen los lenguajes en sí (especialmen-te en el caso de Delphi) ¿Es ciertoque Borland lo tiene como una bata-

lla perdida con respecto a los len-guajes de Microsoft?

Si se mira a Borland hoy en día, haymuchos más ingenieros trabajando aho-ra de lo que había hasta hace dos años.Todavía hay en Borland un grupo dedi-cado cien por cien a la producción deherramientas de desarrollo. Y por su-puesto, tenemos grupos de ingenierosespecializados en otras tecnologías, como

análisis de requisitos y tecnologías distri-buidas. Tenemos una de las mejores tec-nologías Java del mundo y también ofre-cemos una de las mejores posibilidadesen lo que respecta al mundo Windows.

Con respecto al personal que tene-mos en las tecnologías Together, yo nosoy un experto en el tema de diseño,pero tengo otros colegas que sí lo sony cada uno tenemos nuestro trabajo,

Entrevista a JasonVokesJason Vokes es Developer Tools Product Manager para EMEA,responsable de todas las herra-mientas de desarrollo para entornos Windows 32 y Microsoft .NET (C# Builder,Delphi,C++Builder y Kylix).También es el responsable de las herramientas de desarrollo de Borland paradispositivos móviles JBuilder y C++ Builder Mobile y Enterprise Studio for Mobile.Visitó España con ocasión de la presentación oficial de Delphi 8 que organizó Borland Ibéricaen Madrid el pasado 5 de febrero.Aprovechó para ofrecernos su conferencia “Introducción aDelphi 8” y charlar con todos los medios que le requerimos y también para hacerse unasfotos con nosotros (es muy presumido).

<< Para mí la pregunta

Jason Vokes, PLSM Boland EMEA.

Por Paco MaríndotNetManíadotnetmania.com

Page 12: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

12

dnm.directo.entrevistas<<

pero lo realmente excitante es que entretodos formamos un equipo que puedeayudar a eliminar alguno de los mayo-res riesgos que involucra el desarrollode software hoy en día, garantizandoque cuando se entrega un producto desoftware satisface al cien por cien lasespecificaciones iniciales para las quefue creado.

Llevamos ahora en paralelo muchasáreas diferentes y tenemos equipos muyfuertes en todas esas áreas. Para mí nohay ningún cambio de foco.

El equipo en el que yo trabajo estácentrado en ofrecer los entornos dedesarrollo mejores y más potentes delmundo, y por supuesto siempre pode-mos ser mejores, mejores y mejores.

¿Cuantas personas han estadoinvolucradas en el desarrollo deDelphi 8?

Nosotros no damos detalles especí-ficos de la cantidad de personas quecompone cada grupo, pero puedo decir-le que son centenas las personas queestán involucradas en sacar adelante unproyecto de esta envergadura.

Supongo que esta pregunta se lahabrán hecho cientos de veces, peroaún así se la haré. ¿Va a haber unaversión de Delphi 8 para Win32?

Con Delphi 7, esencialmente aúnestamos ofreciendo un entorno Win32.Cuando yo hablo con desarrolladoresWin32 no es como si hubiese un áreaamplia del producto que faltara. Las

peticiones que recibimos de los clientesson de poner un poquito por aquí, unpoquito por allá. No obstante, yo no veoque hayamos terminado de entregarherramientas de desarrollo para Win32todavía. Yo estaría personalmente a favorde que a esa tecnología se le diese toda-vía un paso más adelante. Por supues-to, es necesario todavía ofrecer cosasnuevas para que los desarrolladoresWin32 puedan seguir incorporandonovedades en las aplicaciones que tie-nen que desarrollar. Pero, tal y comoestán las cosas, en los meses que se apro-

ximan, ser programador de Windowsimplica ser un programador de .NET.

La plataforma .NET tiene muchoque ofrecerle a los desarrolladores y losdesarrolladores de Delphi que estánliderando la comunidad de desarrolla-dores, si se quiere ver así, estoy segurode que estarán ansiosos de moverse haciaadelante también.

Estoy seguro de que aportaremos lasposibilidades cuando se nos planteen lasnecesidades.

El programador de Delphi tendráque hacer un esfuerzo de aprendiza-je de la plataforma .NET Framework.Por las características de éste, es fácilcambiar de lenguaje. ¿Teme que pro-gramadores actuales de Delphi 7aprovechen para pasarse a alguno delos lenguajes de Microsoft VisualStudio?

Esta no es de las cosas que me man-tienen despierto por la noche. Tenemosvarios millones de desarrolladores RADpor todo el mundo y nosotros respon-demos a las necesidades de estos desa-rrolladores. Uno de los cometidos prin-cipales de Delphi 8 es ofrecer una tran-sición suave al trabajo de muchos añosde muchos desarrolladores para permi-tirles pasar fácilmente a la plataforma.NET. Mismo lenguaje de programa-ción, mismas librerías, y un entorno deprogramación distinto pero muy simi-lar al anterior.

Jason Vokes con Octavio Hernández, director de servicios profesionales de Danysoft en unmomento de la entrevista.

Tenemos una de las mejores tecnologías Java del mundo y también ofrecemos una de las mejores posibilidades

en lo que respecta al mundo Windows

Page 13: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

13

dnm.directo.entrevistas<<

¿Y al revés? Es decir, ¿puede Delphi aprove-charse de la facilidad que un desarrollador de laplataforma .NET tiene para trabajar en uno u otrolenguaje, para captar programadores de los len-guajes de Microsoft Visual Studio?

Nuestra responsabilidad son nuestros clientes.Actualmente ya ofrecemos la posibilidad del entornode trabajo de ECO para los programadores de C#Builder, por ejemplo, pero mi responsabilidad núme-ro uno es que las personas que están hoy aquí en esteevento, puedan seguir aprovechando sus inversiones,sus desarrollos de muchos años, de la forma más sua-ve posible.

En lo que respecta al tema de la productividad delos desarrolladores, sabemos que cuando incorpore-mos novedades a nuestra plataforma y nuestros entor-nos de desarrollo, otros la verán y dirán “mira estoestá muy bien” e intentarán hacer algo similar.Tampoco estamos en contra de esto porque esto ayu-da a avanzar a la tecnología.

Carlos Heras que estaba presente en la entre-vista, apostilló:

Ahondando un poco más, no se trata de hacer lacompetencia a nadie, sino que se trata de ofrecer aldesarrollador toda la serie de posibilidades que Borlandya está ofreciendo. Pero no se trata de ir a quitarleprogramadores a nadie.

Vale, vale, no van a hacer la competencia anadie, me queda claro. Quizá planteé mal la pre-gunta. Permítame que insista. ¿Qué aportaDelphi 8 a la plataforma .NET?

Fundamentalmente lo que ofrece la tecnología deBorland: Rapidez, flexibilidad y productividad, dijo Carlosadelantándose a Jason.

¿Jason, qué dices tú?Uhm… Rapidez, flexibilidad y productividad (en per-

fecto inglés) JBueno, hombre, no pretendía que se contra-

dijesen. Sólo quería que me diese una visión mástécnica y más extensa.

Hay muchas características que estamos ofrecien-do para hacer más fácil la vida al desarrollador y paraponer más potencia bajo su control.

Existen tres áreas clave de las que podríamos hablardesde el punto de vista de la tecnología:

• Estamos obteniendo muchas opiniones favora-bles sobre nuestra manera de implementarASP.NET para el desarrollo Web, por ejemplo,en relación con el diseñador Web que incorpo-ra el producto y algunos componentes para eldesarrollo de aplicaciones con ASP.NET y acce-so a base de datos que los desarrolladores podránaprovechar y mejorar así su productividad conrespecto a lo que pueden encontrar en VisualStudio.

• El siguiente área importante es el acceso a basede datos donde aportamos los BDPs (BorlandData Providers). Éstos ofrecen posibilidades paraacceder eficientemente a distintos motores debases de datos como Oracle, SQL Server eInterbase de una manera uniforme. Y que per-mite, con una gran flexibilidad, sin cambiar prác-ticamente el código, hacer una aplicación quepueda funcionar contra diferentes bases de datos.

• La tecnología ECO, con la que ofrecemos la posi-bilidad de crear aplicaciones model driven. Si semira desde un punto de vista del negocio, comoparte de su estrategia puede estar la necesidad deofrecer de una manera rápida varias aplicaciones adiferentes clientes. Usted puede definir un mode-lo UML que represente la solución, o puede tenerun modelo estándar que puede haber sido obteni-do de alguien, o haberlo diseñado yo mismo, o pue-de ser incluso “refactorizado” a partir de código

Carlos Heras,Alliances & Indirect Sales Manager de Borland Ibérica.

Tal y como están las cosas,en los meses que se aproximan,ser programador de Windows implica ser un programador

de .NET.

Page 14: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

14

dnm.directo.entrevistas<<

que se ha escrito en otros lenguajes.Entonces podemos darle a ECO esemodelo para que lo ejecute comouna aplicación para .NET sin tener-se que preocupar por todo el códi-go, toda la “fontanería” propia de undesarrollo de estas características:transacciones, persistencia de obje-tos, etc. Por supuesto, se podrá aña-dir más código a la aplicación, peroluego, puede que al cabo de unosmeses, el mercado cambie, y puedaser necesario cambiar la aplicación.En este caso se puede modificar elmodelo y aplicar esos cambios en elmodelo sobre el software que estáen funcionamiento, lo que hace muyadaptable esta tecnología.

¿En qué están trabajando los pro-gramadores del equipo de Delphi enrelación a una nueva versión deDelphi para .NET?

Siempre hay muchas áreas en las quese está trabajando. Cada vez que sale unanueva versión siempre hay que esperara ver qué es lo que dicen los usuarios

sobre ella, ver qué sugerencias hacen yqué cosa nueva necesitan. En principio,estamos viendo las cosas que estaránsoportadas para la siguiente versión de.NET Framework. Otro elemento cla-ve es hacer avanzar la experiencia delprogramador en lo que respecta a suproductividad.

¿Cuáles son las principales ven-tajas de los BDPs (Borland DataProviders?

La principal causa que hace nece-saria la existencia de los BDPs es elhecho de que Microsoft dispone de unapila de software que consiste en el sis-tema operativo, bases de datos, aplica-ciones finales, etc. Y por supuesto, ellosdan soporte a ésta muy bien y tienengran tecnología para ese tipo de cosas.Pero también hay inversiones muyimportantes de corporaciones muygrandes alrededor del mundo en otrastecnologías que no son de Microsoft,como por ejemplo en el área de basesde datos. Esencialmente los BDPs per-miten separar la lógica de negocio de

los objetos concretos que establecen laconexión a la base de datos que las apli-caciones van a utilizar. Cuando uno uti-liza los recursos predefinidos que ofre-ce .NET, en el momento que estácomenzando a desarrollar la aplicaciónya tienes que definirte por si vas a uti-lizar los componentes de conexión deOracle, de SQL Server, de ODBC o deOLEDB. A partir de este momento,sin tener en cuenta las posibles dife-rencias entre los dialectos SQL, la apli-cación puede ser la misma indepen-diente de la base de datos que se utili-ce. Si se trata de una casa que fabricasoftware que ofrece soporte genéricopara diferentes base de datos, los BDPsson un recurso ideal por que te permi-ten crear tus componentes sin atarte ala base de datos concreta que va a estardebajo del software que tú estás desa-rrollando.

Y, por supuesto, los BDPs son unacapa de software por encima deADO.NET y, por tanto, son puro.NET.

Jason Vokes con Octavio Hernández en la charla inicial de la presentación de Delphi 8 celebrada el 5 de febrero.

Page 15: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

que se encargue de comprobarsi el usuario existe en Active Directory y que com-pruebe a qué grupos pertenece. También creare-mos una sencilla página Web en la que comproba-remos cómo funciona la autenticación mediante for-mulario.

Hay tres tipos de autenticación en ASP.NET,que son:

• Formulario: Es el propio programador el quese encarga de definir el proceso para identi-ficar al usuario. Una vez identificado se cre-ará un token que servirá para identificar alusuario.

• Windows: Es el sistema operativo el que seencarga de identificar al usuario y puede rea-lizarse sin labores de programación.

• Passport: Es un Web Service el que se encargade identificar al usuario, en concreto se debeutilizar Passport SDK para utilizar este tipo deautenticación.

El tipo de autenticación Windows requieremenos labores de programación pero puede aumen-tar las labores de mantenimiento ya que se debecontrolar la creación de usuarios a través deWindows.

El tipo de autenticación Passport en realidad noes realizado por nuestro sistema, la identificaciónse realiza de forma remota a través de un Web Service.Este sistema que ha sido desarrollado por Microsoft

ha recibido tanto críticas como elogios. Por unaparte los críticos muestran desconfianza en dejar laidentificación de los usuarios de su Web a un ter-cero; por otra, los elogios vienen por la utilidad detener una única forma de identificación de usuariospara Internet, de forma que una vez que ha creadouna cuenta Passport sirve para identificarse en cual-quier Web que utilice este sistema, sin necesidad derepetir el tedioso proceso de registro y evitando losinconvenientes de mantener numerosos usuarios ypasswords para cada uno de los Webs a los que acce-demos.

Cada tipo de autenticación tiene sus ventajas perola más usada es la autenticación mediante formula-rio ya que nos permite controlar todo el proceso yresulta sencilla de implementar. La autenticaciónmediante formulario consiste en un proceso defini-do en el propio código de la aplicación que se encar-ga de comprobar si el usuario tiene o no acceso.

Además deberemos realizar dos modificacionesen el fichero web.config para que la aplicaciónASP.NET entienda que se debe realizar la autenti-cación por formulario.

La primera consiste en poner el modo de auten-ticación como FORMS, y que tiene los siguientesparámetros:

• name, es el nombre de la cookie que usare-mos para los usuarios autenticados.

• loginUrl, es la página Web en la que se deberealizar la autenticación del usuario, y a la

dotN

etM

anía

<<

15

Autenticación ASP.NET a través de formulario y Active Directory

Por Pedro PozoClikearclikear.com

En este artículo trataremos la autenticación en ASP.NET, y explicaremos conun ejemplo práctico como autenticarse mediante formulario con ActiveDirectory.

Crearemos una clase<<

Page 16: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

cual redireccionará la aplicaciónen el caso de que se trate de acce-der a otra página sin haberseautenticado previamente.

• timeout, es el tiempo en minutosen el cual expira la cookie deautenticación del usuario.

• protection, es el método que se uti-liza para proteger la cookie y pue-de ser:• None, no realiza ninguna protec-

ción de la cookie.• Encryption, utiliza métodos de

encriptación para que los datosde la cookie no sean visibles.

• Validation, no encripta los datosde la cookie pero compruebaque estos datos no han sido alte-rados al enviarlos por Internet.

• All, utiliza Validation yEncryptation para proteger lacookie.

La segunda modificación en elweb.config consiste en poner el modo deautorización deny users=”?” así no se per-mite el acceso a ninguna página de laaplicación sin haberse autenticado pre-viamente.

<authorization>

<deny users=”?” />

</authorization>

En la sintaxis utilizada para la auto-rización el carácter “?” indica usuarioanónimo y el carácter “*” indica todoslos usuarios. Por otra parte, tendremosla palabra deny que no permite el acce-so y la palabra allow que indica que sítiene acceso.

Quizá el proceso más utilizado parala autenticación mediante formulariosea realizar una consulta a una base dedatos para comprobar si el usuario exis-te, pero en este caso vamos a trabajarcon Active Directory para validar la exis-tencia del usuario.

Para llevar a cabo este procesoimplementamos una clase a la que lla-

mamos AutenticacionLdap. Enesta clase creamos un constructor al quele pasamos como parámetros el path deconexión a Active Directory y el domi-nio del mismo.

Active Directory es un servicio dedirectorio, es decir, un conjunto de ele-mentos (como por ejemplo PCs, usua-rios, grupos, impresoras, etc.) querepresentan todo lo que hay en una red.Cada uno de estos objetos que forman

Active Directory tiene sus propias pro-piedades a las que se les puede añadirlas que considere conveniente el admi-nistrador.

Además, los elementos del ActiveDirectory se pueden organizar enUnidades Organizativas (OU), pudiendodelegar labores de administración encada una de ellas.

A ese conjunto de tipos de objetos ysus propiedades es lo que se llamaEsquema de Directorio Activo.

Existen varias formas de referirse aun elemento de Active Directory, algu-nos de estos estándares son:

• RFC 822• LDAP (Ligthweight Directory

Access Protocol)• UNC (Universal Naming

Convention)

En este caso utilizaremos LDAP,cuyas siglas podrían traducirse comoProtocolo Ligero de Acceso a Directorios.LDAP es una versión simplificada delprotocolo X.500, que fue desarrolla-do para facilitar el acceso a ActiveDirectory.

Cuando queremos acceder a un ele-mento de Active Directory tenemos quecrear una conexión a LDAP Debemostener en cuenta que en LDAP debemosponer primero los elementos hijo delesquema de directorio y después los ele-mentos padre.

Un ejemplo de conexión es elsiguiente:

dotN

etM

anía

<<

16

dnm.asp.net<<

<authentication mode=”Forms”>

<forms name=”.ASPXUSERDEMO” loginUrl=”login.aspx” protection=”All” time-

out=”60” />

</authentication>

private string pPath;private string pDominioLdap;public AutenticacionLdap(string path,string dominioLdap){

pPath = path;pDominioLdap = dominioLdap;

}

Cada tipo de autenticación tiene sus ventajas pero la más usada es la autenticación mediante formulario

ya que nos permite controlar todo el proceso y resulta sencilla de implementa

Page 17: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

Donde lo primero que se debe poner es ldap://para así indicar el protocolo utilizado, seguido debeir el servidor en el cual se encuentra Active Directory,después pondremos OU= y la unidad organizativa a laque vamos a acceder.

En el caso de tener más unidades organizativasdentro de otra, podríamos acceder a ellas escribiendoel camino a seguir hasta la que queremos acceder yseparando con coma cada una de las unidades orga-nizativas. Como por ejemplo, para la siguiente estruc-tura de Active Directory:

Por último, ponemos DC seguido del nombre delos componentes del Dominio.

En este ejemplo, hemos puesto en variables de con-figuración dentro de web.config la conexión LDAP yel dominio en el cual se encuentra Active Directory.Lo ponemos como una variable de configuración dela aplicación para que sea sencilla su modificación sinafectar al código.

Debe tener en cuenta que éste es sólo un ejem-plo de conexión LDAP y deberá modificarlo ponien-do el nombre de su dominio así como los nombrescorrespondientes a los elementos de su ActiveDirectory.

La clase AutenticacionLdap tendrá el método Existeal que pasamos como parámetros el usuario y la pass-word y comprueba si existe en Active Directory.Crearemos una entrada a Active Directory con el usua-rio y password que estamos comprobando si existe yposteriormente se buscará ese usuario por la propie-

dad SAMAccountName que es una propiedad cuyosvalores son únicos dentro de un mismo árbol de ActiveDirectory. Ver fuente 1.

También crearemos en la clase AutenticacionLdapun método sobrecargado, al que llamaremos Pertenecey que nos indica si el usuario está incluido en un gru-po de Active Directory. Puede darse el caso que elusuario que estamos comprobando no tenga permi-

dotN

etM

anía

<<

17

dnm.asp.net<<

LDAP://miServidor/OU=miUnidadOrganizativa,DC=dotnetmaniacos,DC=com

OU=DepartProgramacion,OU=DepartInformatica,OU=DepartInvestigacion

<add key=”pathLdap” value=”LDAP://miServidor/OU=miOU,DC=miDominio,DC=com”/><add key=”dominioLdap” value=”DC=miDominio,DC=com”/>

public bool Existe(string usuario, string pwd){

DirectoryEntry entrada;DirectorySearcher buscador;SearchResult resultado;try{entrada = new DirectoryEntry( pPath, pDominioLdap + @”\” + usuario, pwd);buscador = new DirectorySearcher(entrada);buscador.Filter = “(SAMAccountName=” + usuario + “)”;buscador.PropertiesToLoad.Add(“cn”);resultado = buscador.FindOne();

if(resultado == null)return false;else

return true;}catch (Exception ex){pError=ex.Message;return false;}

}

Fuente 1

Page 18: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

sos en Active Directory para consultarlos grupos a los que pertenece, por tan-to se sobrecarga este método pudiendointroducir además otros dos parámetroscon el usuario y password de alguien quesí tenga permisos para consultar ActiveDirectory.

Para este método buscaremos elusuario a través de la propiedadSAMAccountName y una vez encontradoel usuario recorremos la propiedadmemberOf que es un array con todos losgrupos a los que pertenece. Ver fuente 2.

Debemos fijarnos que en este casoel usuario que crea la entrada a ActiveDirectory no es el mismo usuario queestamos comprobando si pertenece algrupo, sino que se trata de otro usuariocon permisos para consultar ActiveDirectory.

El otro método Pertenece que estarásobrecargado será igual que el que aca-bamos de ver pero no llevará los pará-

metros usuarioLdap y pwdLdap. Esto esdebido a que en este método se entien-de que el usuario que estamos compro-bando sí tiene permisos de consulta deActive Directory. Ver fuente 3.

Para este método se ha creado laentrada a Active Directory con el mis-mo usuario que estamos comprobandosi pertenece al grupo.

Una vez implementada la claseAutenticacionLdap tan sólo debe-ríamos crear un WebForm con dos cajasde texto y un botón que nos servirá deformulario para la validación de usua-rios. Para comprobar la validación delusuario crearemos un objeto de la claseAutenticacionLdap, al que le pasaremoslas constantes de la cadena de conexión

dotN

etM

anía

<<

18

dnm.asp.net<<

public bool Pertenece(string grupoLdap,string usuario, string pwd,string

usuarioLdap,string pwdLdap)

{

string pathGrupo;

string GrupoUsuario;

DirectoryEntry entrada;

DirectorySearcher buscador;

SearchResult resultado;

try

{

entrada = new DirectoryEntry(pPath,usuarioLdap,pwdLdap);

buscador = new DirectorySearcher(entrada);

buscador.Filter = “(SAMAccountName=” + usuario + “)”;

buscador.PropertiesToLoad.Add(“memberOf”);

resultado = buscador.FindOne();

for( int contador = 0; contador <

resultado.Properties[“memberOf”].Count;

contador++)

{

grupoLdap=grupoLdap.ToUpper() + “,”;

pathGrupo = (String)resultado.Properties[“memberOf”][contador];

GrupoUsuario = pathGrupo.ToUpper().Substring(3,grupoLdap.Length);

if (GrupoUsuario==grupoLdap)

return true;

}

}

catch (Exception ex)

{

pError=ex.Message;

return false;

}

return false;

}

Fuente 2

Active Directory es un servicio de directorio,

es decir, un conjunto de elementos

(como por ejemplo PCs,usuarios, grupos, impresoras,etc.) que representan todo

lo que hay en una red

Page 19: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

LDAP y el dominio, los cuales tenemosen web.config como variables de confi-guración de la aplicación.

Se comprobará si se encuentra elusuario en Active Directory llamandoal método Existe y pasándole como pará-metros el usuario y la password que sehan introducido a través del WebForm.

Una vez que hemos comprobadoque el usuario existe creamos el token deautenticación. Este token servirá paraidentificar al usuario a través de toda laaplicación Web.

Y, por último, se utilizará el métodoPertenece para comprobar en qué grupoestá incluido el usuario y redireccionar-lo a donde le corresponda. Ver fuente 4.

En este artículo hemos podido com-probar como ASP.NET nos ofrece varias

formas de autenticarse en una aplicaciónWeb y cómo se amplían las posibilida-des con respecto al antiguo ASP. Además

hemos visto alguna de las facilidades queASP.NET nos ofrece para acceder aActive Directory y por tanto a todos losrecursos de una red.

El proyecto completo que corres-ponde a este artículo lo pondrá encon-trar en la página Web de la revista en

http://www.dotnetmania.com.

dotN

etM

anía

<<

19

dnm.asp.net<<

public bool Pertenece(string grupoLdap,string usuario, string pwd){

string pathGrupo;string grupoUsuario;DirectoryEntry entrada;DirectorySearcher buscador;SearchResult resultado;try{

entrada = new DirectoryEntry(pPath,usuario,pwd);buscador = new DirectorySearcher(entrada);buscador.Filter = “(SAMAccountName=” + usuario + “)”;buscador.PropertiesToLoad.Add(“memberOf”);resultado = buscador.FindOne();for( int contador = 0; contador < resultado.Properties[“memberOf”].Count; contador++){grupoLdap=grupoLdap.ToUpper() + “,”;pathGrupo = (String)resultado.Properties[“memberOf”][contador];grupoUsuario = pathGrupo.ToUpper().Substring(3,grupoLdap.Length);if (grupoUsuario==grupoLdap)

return true;}

}catch (Exception ex){pError=ex.Message;return false;

}return false;

}

AutenticacionLdap usuario=newAutenticacionLdap(ConfigurationSettings.AppSettings[“pathLdap”],ConfigurationSettings.AppSettings[“dominioLdap”]);

if (usuario.Existe(txtUsuario.Text,txtPwd.Text)){

FormsAuthentication.SetAuthCookie(txtUsuario.Text,false);if (usuario.Pertenece(“GrupoAdministradores”,txtUsuario.Text,txtPwd.Text))

Response.Redirect(“InicioAdmin.aspx”);else if (usuario.Pertenece(“GrupoUsuarios”,txtUsuario.Text,txtPwd.Text))

Response.Redirect(“InicioUsuario.aspx”);}else{

LblError.Text = usuario.Error; }

Fuente 3

Page 20: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

20

<<

Declaración de variables,métodos,propiedades e indizadores

La declaración de las variables, méto-dos, propiedades, etc. difieren básica-mente en la forma de realizar la declara-ción. En C# se indicará el ámbito, esdecir, si es público, privado, etc. seguidodel tipo de datos, seguido del nombre dela variable. En VB se indicará el ámbitoseguido del nombre y por último la ins-trucción As seguida del tipo de datos.

Tanto en VB como en C# se puedendefinir constantes, en el caso de C# seusará la instrucción const antes del tipode datos, en VB se usará Const en lugarde Dim o Static cuando se declare unaconstante dentro de un procedimiento.Si esa declaración se hace a nivel de tipo,la instrucción Const se usará después delmodificador de ámbito. Las constantessiempre se definen con un valor.

Las variables también se pueden defi-nir y asignarle un valor predeterminadoal mismo tiempo que se declara. Si no seindica de forma explícita, ese valor, enVisual Basic siempre se asignará un valor"cero", pero en C# ese valor predeter-minado sólo se asignará si la variable sedeclara como miembro de un tipo (cam-po), si la variable se declara dentro deuna función, no se asigna ningún valorpredeterminado y habrá que asignarlealgún valor antes de usarla.

Los métodos serán las funciones yprocedimientos declarados en una clase.

En Visual Basic las funciones sonprocedimientos que devuelven un valory se declaran usando la instrucciónFunction, los métodos que no devuelven

un valor, en Visual Basic se declarancomo procedimientos Sub.

En C# todos los métodos son fun-ciones, las que devuelven un valor sedeclaran con el tipo de datos que devuel-ve y las que no devuelven un valor (lasequivalentes a los procedimientos de tipoSub de VB) el tipo se indica con la ins-trucción void.

En Visual Basic .NET las propiedadespueden recibir parámetros. En C# las pro-piedades no pueden recibir parámetros.

En C#, cuando se asigna un valor auna propiedad, (bloque set), el valor aasignar estará representado por un pará-

metro implícito llamado value que no seindica en la declaración. En VB .NETsiempre hay que indicar el parámetro enel bloque Set, aunque ese parámetro

puede tener cualquier nombre, se reco-mienda usar value.

En VB .NET las propiedades de sólolectura y sólo escritura, además de sóloindicar el bloque Get o Set, se debe indi-car que la propiedad es ReadOnly (sololectura) o WriteOnly (solo escritura)

Los indizadores nos permiten usaruna clase como si fuese un array: indi-cando un valor entre corchetes en el casode C# o entre paréntesis en el caso deVB .NET. En C# los indizadores sonpropiedades cuyo identificador (nom-bre) es la propia clase y se usa siemprethis. En Visual Basic .NET los indiza-

<<

Equivalencia de instrucciones de C# y VB .NET (II)

Cómo hacer las mismas cosas (o casi) en C# y Visual Basic .NET

Por Guillermo ‘Guille’ SomVisual Basic MVP desde 1997www.elguille.info

Page 21: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dores son propiedades predetermina-das y se puede usar cualquier identifi-cador, de forma que se puede accederusando el identificador o no. Tanto enC# como en VB, se debe indicar comomínimo un parámetro.

Los métodos, propiedades y otrasinstrucciones se declaran seguidas deun "bloque de código", en C# los blo-ques de código están incluidos dentrode un par de llaves { y }. En Visual BasicNET el final de dicho bloque de códi-go suele terminar con la instrucción End<tipo de bloque>, donde <tipo de blo-que> será el tipo de bloque que estamosdefiniendo, por ejemplo si es un Sub, elfinal del bloque se indicará con End Sub.

Los campos son las variables decla-radas en las clases (tipos). Esos camposserán los datos que la clase o tipo utili-cen. Se pueden definir campos de sólolectura de dos formas distintas: defi-niéndolo como una constante, lo cualhará que dicho campo sea realmente desólo lectura, no permitirá ninguna asig-nación de un valor diferente al usado aldeclararlo por código; y por otro lado,podemos definir campos de sólo lectu-ra a los que podemos asignar valores dedos formas distintas: al definirlo, en estecaso actuarán "casi" como una cons-tante, pero también podemos asignar-le un valor sólo y exclusivamente en elconstructor de la clase. De esta forma,podemos hacer que durante la ejecu-ción sea de sólo lectura, pero ese valorse puede asignar en tiempo de ejecu-ción; aunque sólo al crear la nueva ins-tancia.

La tabla 4 muestra cómo realizar enVB .NET y C# la declaración de varia-bles, métodos, etc.

Parámetros de los métodos

Los métodos pueden recibir pará-metros. Esos parámetros pueden ser porvalor o por referencia. Los parámetrospor valor son copias que se entregan alos métodos de los parámetros usados,cualquier cambio realizado a dichosvalores no afectarán a los originalmen-te usados. Por otro lado, los parámetrospor referencia, si se modifican dentrodel método, afectarán a los usados al lla-mar a dicho método.

Tarea a realizar C# VB .NET

Declarar una variable int var; Dim var As Integer

Declarar una constante int const var = 10; Const var As Integer = 10

Declarar un array (matriz) int[ ] var; Dim var() As IntegeroDim var As Integer()

Declarar e instanciar una variable <ámbito> <tipo> var <ámbito> var As New = new <tipo>(); <tipo>()

o<ámbito> var As <tipo>= New <tipo>()

Declarar un método que void método() Sub método()no devuelve un valor {} End Sub

Declarar un método que int método() Function método() As devuelve un valor {} Integer

End Function

Declarar una propiedad string Nombre{ roperty Nombre() As de lectura y escritura String

<bloque get> <bloque Get><bloque set> <bloque Set>

} End Property

Declarar una propiedad string Nombre{ ReadOnly Property de solo lectura Nombre() As String

<bloque get>} <bloque Get>End Property

Declarar una propiedad string Nombre{ WriteOnly Propertyde solo escritura Nombre() As String

<bloque set>} <bloque Set>End Property

Declarar un indizador string this[int index]{ Default Property (o propiedad por defecto en VB) Item(index As Integer)

<bloque get> As String <bloque set> <bloque Get>

} <bloque Set>End Property

Declarar un campo de solo lectura <ámbito> const <tipo> <ámbito> Constcon el valor asignado al declararlo <identificador> = <identificador> As

<valor>; <tipo> = <valor>

Declarar un campo de solo lectura <ámbito> readonly <ámbito> ReadOnlycuyo valor se puede asignar en <tipo> <identificador> <identificador> Astiempo de ejecución. [= <valor>]; <tipo> [= <valor>]

Dicha asignación se puede hacer al declarar el campo o en el constructor.

Tabla 4. Declaración de variables, métodos, propiedades e indizadores

dotN

etM

anía

<<

21

dnm.lenguajes.net<<

Page 22: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

22

dnm.lenguajes.net<<

Por defecto los parámetros son porvalor, en el caso de C# no existe ningu-na instrucción para indicar esa cualidad;en Visual Basic .NET existe la instruc-ción ByVal para indicarlo expresamen-te, aunque ese modificador es opcional.Visual Studio .NET siempre lo indica-rá usando ByVal.

Por otro lado, se pueden definir pará-metros por referencia, en el caso de VB.NET se indicarán mediante la instruc-ción ByRef. En C# existen dos tipos demodificadores para los parámetros porreferencia: out y ref. La diferencia fun-damental es que a los parámetros defini-dos con ref se les debe asignar un valorantes de usarlo como parámetro delmétodo, mientras que los parámetrosdefinidos con out no es necesario inicia-lizarlos antes de usarlos, pero se deberánasignar un valor dentro del método antesde usarlo. Otra diferencia de los pará-metros por referencia entre Visual Basicy C#, es que en C# siempre habrá queusar el mismo modificador que se ha usa-do para definir el parámetro, pero en VBno se usará dicho modificador.

También se pueden definir arrays deparámetros. En ese caso, se podrá lla-mar al método usando un número varia-ble de parámetros, aunque todos esosparámetros serán del mismo tipo y siem-pre serán por valor. Para declarar estetipo de parámetros, en C# se usará lainstrucción params y en VB se usaráParamArray. Si se utiliza este tipo deparámetros, será el último de la lista deparámetros del método.

En Visual Basic .NET existe el con-cepto de parámetro opcional. Esos pará-metros opcionales pueden ser por valoro por referencia y siempre habrá quedefinirlos con un valor por defecto,dicho valor se usará en el caso de queno se especifiquen al llamar al método.

La tabla 5 muestra la forma de decla-rar y usar los distintos tipos de paráme-tros de los métodos.

Declaración de espacios denombres, clases,estructuras,interfaces y enumeraciones

En nuestros programas podemoscrear nuestros propios tipos de datos,incluso espacios de nombres.

Los tipos de datos y las interfaces laspodemos declarar dentro de otros tiposde datos, pero lo habitual es que lasdeclaremos dentro de espacios de nom-bres o directamente en el fichero decódigo. En este último caso, si estamostrabajando con Visual Studio .NET, elespacio de nombres que contendrá nues-

tros tipos, de forma predeterminada seráel nombre del proyecto. En el caso deVB .NET ese espacio de nombres no semuestra en el código, estará "oculto" enlas propiedades del proyecto; por otrolado, si estamos usando C#, el espaciode nombres siempre se mostrará en elcódigo.

Tarea a realizar C# VB .NET

Parámetros por valor No se indica Es el valor predetermina-do, pero se puede usar lainstrucción ByVal

Definir parámetros por <método>(ref var) <método>(ByRef var As <tipo>)referencia

{} End <tipo método>

C#: El valor debe estar inicializado antes de usarlo al llamar al método

Llamar al método que <método>(ref var); <método>(var)define un parámetro por referencia

Definir parámetros <método>(out var) <método>(ByRef var As <tipo>)por referencia {} End <tipo método>

C#: No es necesario que el parámetro esté inicializado antes de llamar al método.

Dentro del método, hay que asignar un valor al parámetro out antes de usarlo

Llamar al método que <método>(out var); <método>(var)define un parámetro por referencia

Debido a la forma que se tratan las variables en Visual Basic, que siempre soninicializadas antes de usarlas, no hay esa diferencia en los parámetros por referencia

Definir un array <método>(params <método>(ParamArray var)de parámetros array[]){} End <tipo método>

Llamar a un método <método>([param1][, <método>([param1][, param2][,que define un array param2][, etc.]) etc.])de parámetros

Definir parámetros No aplicable, usar método>([ByVal|ByRef]Optionalopcionales sobrecarga de métodos var As <tipo> = <valor>)

Sólo VB puede definir parámetros opcionales. Se pueden definir tantos paráme-tros opcionales como necesitemos, pero los parámetros opcionales siempre habráque indicarlos después de los parámetros no opcionales y en caso de que se utiliceParamArray, éste debe aparecer después de todos los parámetros opcionales.

Tabla 5. Parámetros de los métodos

Page 23: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

23

dnm.lenguajes.net<<

Las clases se pueden derivar deotras clases y también pueden imple-mentar interfaces, así mismo las inter-faces y estructuras pueden implemen-tar otras interfaces. Aquí veremoscómo realizar todas esas declaracionesde tipos de datos.

Visual Basic .NET define un tipode clase especial en la que todos losmiembros de la clase son estáticos(están compartidos), es el tipo Module.En C# no existe un equivalente a untipo Module de VB .NET, lo más pare-cido sería una clase en la que todos losmiembros (campos, métodos, propie-dades, etc.) están compartidos (sonestáticos).

Los miembros estáticos pertenecenal tipo que lo define y están comparti-dos por todos los objetos (instancias)que se hayan creado en memoria.

La tabla 6 muestra cómo declararespacios de nombres, clases, estructu-ras, interfaces y enumeraciones, asícomo la forma de implementar unainterfaz o derivar una clase.

Definir los miembros de una interfaz y cómo se deben implementar en las clases que se deriven de esas interfaces

En las interfaces sólo se declaran losmiembros (métodos, propiedades, indi-zadores y eventos), pero sin código quelos haga operativos, ese código tendráque definirlo la clase que implementela interfaz.

Cuando una clase implementa unainterfaz, la clase está obligada a defi-nir los miembros definidos en dichainterfaz. En C# sólo es necesario decla-rar un miembro que tenga el mismonombre que tiene en la interfaz. EnVisual Basic .NET el nombre delmiembro puede ser diferente al usadoen la interfaz, pero debe indicarseexplícitamente que ese miembro es elque se utiliza para definir el indicadopor la interfaz.

En la tabla 7 vemos la forma de defi-nir los miembros de una interfaz y cómose implementan en las clases derivadasde esa interfaz.

Tarea a realizar C# VB .NET

Declarar un espacio de nombres namespace NamespaceGuille.Pruebas Guille.Pruebas{} End Namespace

Declarar una clase (class) class Prueba Class Prueba{} End Class

Declarar una clase que class Prueba2 : Prueba Class Prueba2se deriva de otra {} Inherits Prueba

End Class

Declarar una clase que implementa class Prueba3 : IPrueba Class Prueba3una interfaz Implements IPrueba

{} End Class

Declarar una clase que se deriva class Prueba4 : Prueba, Class Prueba4de una clase e implementa IPruebauna interfaz {} Inherits Prueba

Implements IPruebaEnd Class

Declarar una clase que se deriva class Prueba5 : Prueba, Class Prueba5de una clase e implementa IPrueba, IPruebaB Inherits Pruebamás de una interfaz {} Implements IPrueba,

IPruebaBEnd Class

La herencia de .NET sólo permite la herencia simple, sólo podemos derivar nuestras clases de una solaclase. Pero se permite la implementación de múltiples interfaces.En C#, no se indica explícitamente sise deriva de una clase o se implementa una interfaz, el único requisito es que la clase base se indiqueantes que las interfaces.En VB .NET hay que indicar siempre si se está derivando la clase de otra, mediante Inherits o si seestán implementando interfaces, mediante Implements. Siempre debe aparecer Inherits antes de Implements y ambas antes de cualquier otro código que con-tenga la clase.

Declarar una clase de tipo No aplicable. Module PruebasModule En C# sería como class, End Module

pero todos los miembros usarán el modificador static.

Declarar una estructura struct MiEstructura Structure MiEstructura{} End Structure

Declarar una estructura struct MiEstructura2 : Structure MiEstructura2que implementa una IPrueba, IPrueba2 Implements IPrueba, o más interfaces {} IPrueba2

End Structure

Declarar una interfaz interface IPrueba Interface IPrueba{} End Interface

Declarar una interfaz interface IPrueba2 : Interface IPrueba2que implemente otras interfaces IPrueba Implements IPrueba

{} End Interface

Declarar una enumeración enum MiEnumeración {Lu, Enum MiEnumeraciónMa, Mi}; Lu : Ma

MiEnd Enum

En C# las constantes (miembros de la enumeración) se separan con comas.En VB .NET cada una delas constantes que forman parte de una enumeración deben estar definidas en líneas independientes oen instrucciones diferentes (separándolas con dos puntos).

Tabla 6. Declaración de espacios de nombres, clases, estructuras, interfaces y enumeraciones

Page 24: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

diseño gráficodiseño editorialdiseño páginas web)

(netalia edicionesc/ Robledal, 13528529 Rivas-Vaciamadrid (Madrid)Telf: 91 666 74 77Fax: 91 499 13 64www.dotnetmania.com

éride diseño gráficocollado bajo,1328053 madridTelf: 91 477 48 [email protected]

servicio integral de diseñoavalado por más de diez años de experiencia

no sigas sumergido…

en un mar de dudas,

acude a un servicio profesional

y que emerjan las ideas

que tu empresa merece.

Page 25: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic
Page 26: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

26

y cualquiera de sus lenguajes ofre-cen infinidad de funcionalidades avanzadas parael programador. Pocas son las características que,deseándolas para uno de nuestros programas, noestén ya implementadas en alguna de las clasesque vienen con .NET. Sin embargo hay ciertascosas que no es posible hacer de manera directay cuya resolución tampoco es fácil de deducir, enparte debido a la carencia de una buena docu-mentación. Este artículo trata precisamente deuna de éstas.

Aquellos programadores que provengan delmundo ASP, acostumbrados a escribir códigoVBScript o JavaScript, es posible que hayan echa-do en falta al menos un par de facilidades que se

usan continuamente y que no están disponiblescon C# o Visual Basic .NET. Una de ellas es laposibilidad de evaluar expresiones contenidas encadenas de texto. En VBScript y JavaScript exis-ten sendas funciones Eval() que permiten obte-ner el resultado de interpretar una expresióncualquiera en el lenguaje correspondiente. Estacaracterística tiene múltiples aplicaciones ya quepermite evaluar expresiones introducidas por elusuario, obtener el resultado de funciones mate-máticas e incluso crear nuestros propios siste-mas de desarrollo basados en archivos persona-lizados que mezclan código y etiquetas especia-les. Ni C# ni Visual Basic .NET disponen de unmétodo similar.

Otra de las cosas que los programadores clá-sicos de ASP solemos hacer es probar fragmen-tos de código y algoritmos utilizando archivoscon extensión ‘.vbs’ o ‘.js’ de Windows ScriptingHost (WSH), el intérprete de comandos deWindows. Si estamos trabajando en una funciónrebelde y queremos probar rápidamente cambiosy ajustes de manera aislada al resto de la aplica-ción, dado que, tanto JScript como VBScript, sonlenguajes soportados por WSH, sólo tememosque crear y depurar el código usando esta herra-mienta y posteriormente copiarlo y pegarlo en laaplicación definitiva. La plataforma .NET noofrece forma de escribir y ejecutar código auto-máticamente con sólo hacer doble-clic sobre unarchivo.

En este artículo vamos a ver la forma de conse-guir suplir estas dos carencias de un modo sencillousando las clases de compilación y de reflexión.

Compilación de código al vuelo en .NET

Por José Manuel AlarcónKrasiskrasis.com

En este artículo veremos la forma de compilar bajo demanda código crea-do al vuelo o residente en archivos externos a nuestra propia aplicación.Como ejemplo práctico construiremos un evaluador de expresiones.

La plataforma .NET<<

Existen en .NET diversos espacios de nombresrelacionados con la compilación de código

(System.CodeDom). Éstos, combinados con lasclases para introspección (System.Reflection)

ofrecen al programador avanzado una herramienta de incalculable valor

Page 27: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

Una solución sencilla aunque limitada para evaluar expresiones

Una solución rápida y sencilla para obtener lacapacidad de evaluar expresiones simples en .NETes usar la biblioteca de tiempo de ejecución deJScript.NET. Cree un nuevo proyecto de VisualStudio y añada una referencia a la bibliotecaMicrosoft.JScript. Si utiliza el examinador de objetos(Ver figura 1) verá que JScript posee un objeto lla-mado GlobalObject que posee un miembro Eval. Estemétodo sirve precisamente para nuestro propósito yaque basta con pasarle una expresión en JScript paraque se interprete y obtengamos su valor. Este méto-do no se puede llamar directamente, pero si creamosuna DLL en JScript que encapsule el método Evalserá muy sencillo hacer uso de su funcionalidad des-de otros lenguajes.

Si bien esto puede ser una solución en muchoscasos, ofrece varios problemas en otros:

• Sólo se puede interpretar código JScript, con susparticularidades de sintaxis.

• No se puede acceder a clases contenidas en nues-tra propia aplicación (no JScript) o en otrosensamblados, lo que en la práctica lo limita a laevaluación de expresiones muy simples comoexpresiones matemáticas o de cadena.

• Carga más la aplicación puesto que se utilizan doscompiladores: el de JScript y el del lenguaje en elque estamos programando.

Compilar código al vueloAparte de evaluar simples expresiones sería inte-

resante obtener un control total sobre el proceso,pudiendo además utilizar cualquier clase que sea nece-

saria, expresiones propias de nuestro lenguaje prefe-rido e incluso utilizar estructuras de control de flujo.

Existen en .NET diversos espacios de nombresrelacionados con la compilación de código(System.CodeDom). Éstos, combinados con las clasespara introspección (System.Reflection) ofrecen al pro-gramador avanzado una herramienta de incalculablevalor, que supera con creces a las capacidades que ofre-cían anteriormente funciones como Eval o Execute enJScript y VBScript.

Muchas de las clases de System.CodeDom se utili-zan para construir en el compilador elementos de códi-go que, más tarde, podemos recuperar en formato decódigo fuente. Algunas aplicaciones utilizan esta carac-terística para generar código fuente en un determi-nado lenguaje, como por ejemplo la estupenda utili-dad WebService Studio (Figura 2) que genera dinámi-camente código cliente en C# para usar un servicioWeb definido a partir de su WSDL.

Lo que estamos buscando en este artículo, sinembargo es justo lo contrario. Es decir, a partir deun código fuente preexistente o generado para la oca-sión, queremos compilarlo y utilizarlo dinámicamentesin abandonar nuestro programa, y por supuesto sinusar herramientas externas (como los compiladoresde línea de comandos) ni crear archivos temporales.

Como veremos a continuación, los compiladoresde los lenguajes .NET ofrecen clases que permitencontrolar toda su funcionalidad de manera genéricay sin salirnos de la plataforma.

Evaluador de expresiones multilenguajeComo ejemplo práctico para explicar la técnica de

compilación al vuelo vamos a crear un evaluador quepermita obtener el resultado de cualquier expresiónescrita tanto en C# como en VB.NET. Es decir, repli-caremos la funcionalidad del método Eval de JScript

Figura 1. La biblioteca de tiempo de ejecución de JScript.Netdispone de una función Eval que interpreta cualquier expresiónJScript que le pasemos como argumento.

Figura 2. Algunas utilidades como WebServiceStudio utilizan las clases de System.CodeDom

para generar código fuente al vuelo.

dotN

etM

anía

<<

27

dnm.plataforma.net<<

Page 28: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

28

dnm.plataforma.net<<

pero para cada uno de estos otros lenguajes.Hemos creado una clase llamada Evaluador den-

tro del espacio de nombres dotNetMania que tiene dosmétodos llamados evalCS, para interpretar código C#;y evalVB, que evalúa expresiones escritas en VisualBasic. En código de ejemplo también hay un proyec-to de WindowsForms que sirve para probar el módulode evaluación desarrollado. Aunque hemos escrito elmódulo usando C#, pasarlo a Visual Basic sería cues-tión de unos pocos minutos.

La técnica del ejemplo consiste en usar el compila-dor de lenguaje deseado para crear un módulo ejecuta-ble que se compila directamente en memoria. Acto segui-do, usando las clases de introspección de .NET, se lla-ma a los métodos de las clases contenidas en dicho módu-lo de forma que obtengamos sus valores de retorno.

Por ejemplo, si tenemos la expresión en C#siguiente:

“El resultado es: ” + (int) ((5.2+4.17)*3)

Al evaluarla obtendríamos una cadena con el núme-ro 28 al final ya que el resultado de la operación mate-mática se convierte en un entero y se concatena a unacadena. Si quisiésemos disponer de una función en nues-tro programa que devolviese siempre este resultadopodríamos crear una clase que definiese un método con-teniendo el código de la línea anterior, por ejemplo:

Si pudiésemos compilar este código sólo habría queescribir la instrucción Prueba.Resultado para obtener elvalor de la expresión anterior. Esto precisamente es loque vamos a hacer para conseguir nuestro objetivo.

En nuestra función evalCS lo primero que hace-mos es crear una instancia de la clase de compilaciónde C#:

Todos los compiladores de .NET implementan lainterfaz ICodeCompiler, por lo que una vez obtenida unareferencia a cualquiera de ellos se pueden utilizar indis-tintamente sin importar el lenguaje que procesen. Ahorapodemos utilizar el objeto obtenido para compilar elcódigo que deseemos en nuestro lenguaje de elección,en este caso C#. Utilizamos un objeto StringBuilder paraconstruir rápidamente el código que se va a compilar

(en este fragmento Expresion es la cadena con la expre-sión a evaluar):

Como vemos lo único que se hace es construir unacadena con el código fuente de un archivo .CS. En elcaso de la expresión de ejemplo que hemos escogidoel código resultante es:

Si ahora compilamos este código y llamamos almiembro MetodoComodin de la clase ClaseComodinobtendremos el resultado que estábamos buscando.

Antes de proceder a compilar código alguno debe-mos establecer algunos parámetros de trabajo para elcompilador. El siguiente código:

CompilerParameters cp = new

CompilerParameters();

cp.ReferencedAssemblies.Add(“system.dll”);

cp.GenerateExecutable = false;

cp.GenerateInMemory = true;

Permite establecer las condiciones de la compila-ción. Lo que se hace es añadir una referencia al ensam-

public class Prueba{

public string Resultado(){

return (“El resultado es: ” + (int) ((5.2+4.17)*3));}

}

StringBuilder sbComodin = new StringBuilder();sbComodin.Append(“using System;\n”);sbComodin.Append(“namespace dotNetMania {\n”);sbComodin.Append(“ public class ClaseComodin {\n”);sbComodin.Append(“ public object MetodoComodin() {\n”);sbComodin.AppendFormat(“return ({0}); “, Expresion);sbComodin.Append(“}\n”);sbComodin.Append(“}\n”);sbComodin.Append(“}”);

using System;namespace dotNetMania{

public class ClaseComodin{

public object MetodoComodin(){

return (“El resultado es: “ + (int) ((5.2+4.17)*3));}

}}

ICodeCompiler compilador = (new CSharpCodeProvider().CreateCompiler());

Page 29: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

29

dnm.plataforma.net<<

blado base de .NET (SYSTEM.DLL), indicarle alcompilador que genere un ejecutable y, por fin, decir-le que genere dicho ejecutable en memoria.

Con los parámetros ya establecidos sólo es nece-sario compilar:

En la variable res obtenemos una referencia a unobjeto que refleja los resultados de la compilación.Con éste podemos, por ejemplo, comprobar si se hanproducido errores al compilar:

En este fragmento lo único que se hace es reco-rrer los errores en caso de que se produzcan y trans-mitirlos al programa que está haciendo uso de nues-tro método.

Si no se han producido errores creamos un obje-to de la clase que hemos definido en el código que seacaba de compilar:

Ya casi hemos llegado a la meta. Disponemos denuestro código compilado en memoria y de una refe-rencia a un objeto de la clase que se ha definido en elcódigo generado al vuelo. Todavía nos falta la capa-cidad de poder llamarlo y obtener el resultado quebuscábamos. Es aquí donde entra en juego la intros-pección. Gracias a ella podemos obtener una refe-rencia a una representación del método que quere-mos llamar, y efectuar dicha llamada a través de sumétodo Invoke, así:

Devolvemos el resultado de MetodoComodin.El código total resultante para esta función de eva-

luación es el reflejado en el Fuente 1.

El evaluador de código VB.NET es análogo al queacabamos de ver. La única diferencia es que, ademásde añadir referencias al ensamblado System tendre-

mos que agregar una referencia al ensamblado de com-patibilidad de Visual Basic, de forma que las expre-siones puedan usar funciones heredadas de versionesanteriores del lenguaje. Le recomiendo que eche unvistazo al código de ejemplo para comprobar cómo sehace. Por lo demás, todo es exactamente igual. Por

supuesto, puede añadir otros ensamblados en los pará-metros del compilador de forma que sus expresionestengan acceso a cualquier clase .NET, incluyendo suspropias clases personalizadas.

He creado un pequeño programa de WindowsFormspara probar la clase. En la figura 3 se puede observaren funcionamiento. El evaluador se puede utilizar tam-

bién en aplicaciones ASP.NET.Hay muchas expresiones que se pueden evaluar

indistintamente en C# y en VB.NET, como son lasnuméricas o las que usen la sintaxis correcta de losobjetos fundamentales de .NET. Una ventaja de usarel evaluador de expresiones de VB es que el compila-dor no hace distinción entre mayúsculas y minúscu-las, por lo que, por ejemplo, esta expresión:

“ una frase”.trim()

Produciría un error como el de la figura 4, alevaluarla como código C# (influye el hecho de queTrim() no tenga la primera letra en mayúscula),

if (res.Errors.HasErrors){

StringBuilder errores = new StringBuilder();errores.Append(“La compilación ha producido los siguientes errores:\n”);foreach (CompilerError error in res.Errors){

errores.AppendFormat(“{0}\n”, error.ErrorText);}throw new Exception(errores.ToString());

}

CompilerResults res = compilador.CompileAssemblyFromSource(cp, sbComodin.ToString());

object Comodin = res.CompiledAssembly.CreateInstance(“dotNetMania.ClaseComodin”);

return Comodin.GetType().GetMethod(“MetodoComodin”).Invoke(Comodin, null);

Page 30: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

30

dnm.plataforma.net<<

public static object evalCS(string Expresion){

//Si la expresión está vacía se devuelve un nulo y nos ahorramos la compilaciónif (Expresion.Trim() == “”) return null;

//Se obtiene una referencia a un compilador de C#ICodeCompiler compilador = (new CSharpCodeProvider().CreateCompiler());

//Asignamos parámetros de compilaciónCompilerParameters cp = new CompilerParameters();

//Se añaden las referencias mínimascp.ReferencedAssemblies.Add(“system.dll”);

//Se indica que se debe generar un ejecutable...cp.GenerateExecutable = false;

//..y compilar en memoria, no a discocp.GenerateInMemory = true;

//Ahora se genera el código de un ensamblado comodín al vueloStringBuilder sbComodin = new StringBuilder();sbComodin.Append(“using System;\n”);sbComodin.Append(“namespace dotNetMania {\n”);

//Se crea la clase comodín para evaluar la expresiónsbComodin.Append(“ public class ClaseComodin {\n”);

//y se crea el método comodínsbComodin.Append(“ public object MetodoComodin() {\n”);

//Esta es la expresión a evaluarsbComodin.AppendFormat(“return ({0}); “, Expresion);

//Se cierra el métodosbComodin.Append(“}\n”);

//Se cierra la clasesbComodin.Append(“}\n”);

//y el espacio de nombressbComodin.Append(“}”);

//Se compila el código al vueloCompilerResults res = compilador.CompileAssemblyFromSource(cp, sbComodin.ToString());

//Se verifica si se han producido errores de compilación o noif (res.Errors.HasErrors){//Se averigua qué errores ha habidoStringBuilder errores = new StringBuilder();errores.Append(“La compilación ha producido los siguientes errores:\n”);foreach (CompilerError error in res.Errors){

errores.AppendFormat(“{0}\n”, error.ErrorText);}//y se genera un error para informar de ellothrow new Exception(errores.ToString());}

// Si no ha habido errores de compilación se obtiene // una referencia a la clase comodín recién compiladaobject Comodin = res.CompiledAssembly.CreateInstance(“dotNetMania.ClaseComodin”);

// y usando la instrospección se llama al método // comodín de éste devolviendo el valor obtenido como un objetoreturn Comodin.GetType().GetMethod(“MetodoComodin”).Invoke(Comodin, null);

}

Fuente 1. El método EvalCS completo

Page 31: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

noticias.noticias.noticias.noticia

dnm.plataforma.net<<

mientras que obtendríamos el resul-tado esperado si lo evaluamos comocódigo Visual Basic.

Más ideas respecto a la compilación al vuelo

Este sencillo ejemplo nos ha ser-vido para ilustrar grosso modo el fun-cionamiento de la técnica propuesta,pero las posibilidades son enormes.Con ella es posible facilitar la defini-ción de extensiones para nuestros pro-

gramas, exponiendo al compiladorobjetos propios de la aplicación y com-pilando al vuelo código que los usua-rios escriban en archivos externos. Elintérprete de línea de comandos esti-lo WSH, del que hablábamos al prin-cipio, es relativamente sencillo de cre-ar, de forma que podríamos utilizardirectamente código VB.NET y C#sin necesidad de compilarlo previa-mente, sólo con un doble-clic sobreun archivo.

En el código de ejemplo de esteartículo se compila desde cero la

expresión cada vez que se evalúa, locual es un proceso algo lento. Se pue-de optimizar la clase para que guardereferencias a las expresiones compila-das previamente, de forma que ensucesivas evaluaciones, en lugar devolver a generar y compilar el código,llame directamente al código pre-compilado. Este mismo método pue-de facilitar grandes ganancias de ren-dimiento cuando las funciones quedefinamos al vuelo no sean tan senci-llas como las del ejemplo y, por ejem-plo, dispongan de parámetros.

Figura 3. En la figura se puede observar la clase evaluadora en funcionamiento con el programa de ejemplo. Observecomo la misma expresión se ha escrito de manera diferentepara ser evaluada con C# y con VB.NET, aunque el resultado esexactamente el mismo.

Figura 4. Los errores de compilación al vuelo los transmitimos artificialmente al código que utiliza la clase evaluadora, informando del problema ocurrido.

El que iba a ser X# y que luego se llamó, en clave, Xen,ahora sabemos que se probablemente se llamará XOmega.

X Omega es, o mejor dicho, será “un lenguaje dise-ñado para tender un puente entre los mundos de la pro-gramación orientada a objeto (CLR), bases de datos rela-cionales (SQL) y los datos jerarquizados (XML)”, segúncuenta Erik Meijer, Technical Lead del grupo Webdata deMicrosoft y uno de los padres del lenguaje, en su página deMicrosoft Research People en http://research.micro-soft.com/~emeijer/

Los creadores de X Omega entre los que se encuen-tran, además del propio Eric Meijer, el investigador deMicrosoft Research Wolfram Schulte, usan una metá-fora geométrica para ilustrarlo: programar con círculos,triángulos y rectángulos (similar a la antigua manera derepresentar la POO). El círculo representa la progra-manción orientada a objetos, C# y el CLR. El CLR ges-tiona la ejecución del código; el triángulo representa losdatos en una estructura jerárquica, o sea, XML (con XOmega, Microsoft se propone abarcar XML en C#); y elrectángulo representa los datos almacenados en tablas debases de datos, incorporando construcciones para la mani-pulación de datos relacionales directamente dentro dellenguaje.

Junto con el soporte nativo de XML y SQL, XOmega incluirá la totalidad del lenguaje C#. Según loscreadores, haberlo creado como una extensión de C# lelleva a la programación simplificada y al incremento dela productividad.

Un poco de historia

Hace poco más de dos años, Schulte y Meijer empe-zaron un proyecto para buscar un camino para integrarlos datos directamente desde un lenguaje de programa-ción. Escribieron una propuesta para un nuevo lenguajellamado X# que enlazaría SQL, XML y el modelo de pro-gramación orientada a objetos.

En febrero de 2002, el equipo de Webdata deMicrosoft decidió tomar la especificación del lenguaje ydesarrollarlo. El equipo completó un prototipo de inves-tigación del lenguaje en abril de 2003. Este prototipoempezó a fomentarse de dos formas dentro de Microsoft:

• Por un lado, Microsoft Research en Cambridge, elcual está trabajando en conjunción con la Universidadde Cambridge, está añadiendo un nuevo modelo decomunicaciones para X Omega que hará más fácilpara los programadores escribir servicios Web y apli-caciones multihebra (la extensión multihebra vienede Polyphonic C#, un derivado de C#, y tambiénuna extensión de X Omega). Dentro de seis meses, Microsoft Research Cambridgeplanea una release de investigación de Xen. Cuandoesté operativa, el lenguaje probablemente se llamaráX Omega, pero no permitiremos el uso para desa-rrollar en aplicaciones reales, según Schulte.

• Por otro lado, varios equipos de productos internosde Microsoft tendrán acceso a código y conceptos deX Omega, a través del equipo de Webdata. El equipode Webdata de Microsoft es parte del equipo de pro-

ducto de SQL Server y está encargado de “parir” tec-nologías de acceso a datos que se incorporan a variosproductos de Microsoft.El equipo de Longhorn, el equipo de SQL y el equi-po de Visual Studio están en medio de éstos muy pro-bablemente para tomar elementos de X Omega yencontrar caminos potenciales para incorporarlo, dijoSchulte. Mientras que ninguno de estos equipos seespera que incorporen ningún código de X Omegapor ahora, la gente del subsistema de comunicacio-nes Indigo están muy interesados en X Omega.

Fuentes principales Microsoft Watch, ExtremeTechy las páginas de los principales desarrolladores. Vea infor-mación adicional en dotnetmania.com.

X-Omega o cómo combinar SQL y XML con C#

Page 32: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

32

¿Qué es WebDAV?WebDAV significa literalmente Web Distributed

Authoring and Versioning o, usando una traducción bur-da, “Creación y Versionado Web Distribuido”. La idea detrásde este protocolo es la de permitir la creación, modifi-cación y borrado de elementos existentes en un servi-dor Web de manera remota.

Básicamente es una extensión del protocoloHTTP 1.1 en la que, además de los conocidos méto-dos GET y POST de HTTP (que permiten pedirlearchivos a un servidor Web y mandarle datos respec-tivamente), se añaden nuevos métodos comoSEARCH, PROPPATCH y otros que permiten mani-pular de manera remota los distintos elementos queresidan en un servidor Web.

Además de aportar nuevos métodos al protoco-lo HTTP, WebDAV define que la comunicaciónentre la aplicación y el servidor ha de realizarse uti-lizando XML como dialecto en aquellos métodosque requieran datos adicionales para poder ser pro-cesados. Por ejemplo, si se quiere realizar una bús-queda de elementos habrá que indicar qué se quie-re buscar.

En este contexto, la aplicación cliente lanza unasolicitud HTTP estableciendo un determinadométodo DAV y en el contenido de la solicitud inclu-ye un determinado documento XML. El servidorprocesará la solicitud y responderá devolviendo a suvez otro documento XML que la aplicación deberáinterpretar.

WebDAV es una propuesta de estándar del IETF,definida en la RFC 2518. Se puede obtener más infor-mación en http://www.ietf.org/.

Exchange Web StoreA partir de la versión 2000 de Microsoft Exchange

Server todos los elementos almacenados en un deter-minado servidor, como mensajes de correo, contac-tos, citas, etc., se alojan en el denominado ExchangeWeb Store.

El Web Store es una base de datos donde cualquierelemento almacenado lleva asociada una URL únicaque se podrá utilizar para referenciar ese elementoindividual.

Existen bases de datos que almacenarán buzones ybases de datos que almacenarán carpetas públicas.Independientemente de la base de datos, el acceso alos elementos se hará mediante una URL. Por omi-sión, la URL base para los buzones tendrá el formato‘http://[servidor]/exchange/[buzon]/[carpeta]/’ y paralas carpetas públicas será ‘http://[servidor]/public/[car-peta]/’.

Mediante Internet Information Services (IIS), sepuede acceder a los elementos almacenados utilizan-do HTTP (con la seguridad correspondiente que sehaya configurado). Este es básicamente el funciona-miento que hay detrás de Outlook Web Access.

Por ejemplo, si en mi buzón de Exchange he reci-bido un mensaje de correo con el asunto ‘Hola’, podréacceder desde Internet Explorer a ese elemento sim-plemente poniendo su URL, es decir, ‘http://local-host/exchange/amezcua/ inbox/hola.eml’, suponien-do que mi servidor de Exchange está instalado en mimáquina (localhost) y que mi buzón de usuario es‘amezcua’. La solicitud HTTP que el servidor reci-be es ‘GET /exchange/amezcua/inbox/hola.eml’.Como se está accediendo a un directorio virtual con-

Acceso DAV a Microsoft Exchange Server

Por Alejandro Mezcua.NET MVPZaltor

Microsoft Exchange Server, a partir de su versión 2000, pone a disposicióndel usuario todo su contenido mediante WebDAV. En este artículo se veráqué es WebDAV y cómo usarlo para manipular información de MicrosoftExchange Server y usarla en nuestras propias aplicaciones.

<<

Page 33: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

33

dnm.servidores.exchange<<

trolado por Exchange (/exchange/), el servidor loca-lizará el elemento solicitado en la base de datos y lomostrará. En este caso, por omisión mostrará los for-mularios HTML de Outlook Web Access, pero estecomportamiento se puede modificar, aunque este temaqueda fuera del ámbito de este artículo.

Cuando se accede al buzón de un usuario, el nom-bre de la bandeja de entrada no es siempre ‘inbox’ comose ha mostrado (‘http://localhost/ exchange/amez-cua/inbox/hola.eml’), sino que puede ser ‘Bandeja deentrada’ (‘http://localhost/exchange/amezcua/bande-ja de entrada/hola.eml’). El que la carpeta aparezca enun idioma u otro depende del idioma de la herramientaque se utilizó para acceder al buzón del usuario la pri-mera vez. Por ejemplo si se crea un nuevo buzón y laprimera vez se accede con Internet Explorer en espa-ñol, se generará todo el árbol de carpetas del buzónusando ese idioma.

Cada elemento de la base de datos, una vez iden-tificado por su URL, dispone de una serie de propie-dades que determinan su contenido. Por ejemplo, sise quiere conocer el asunto de un determinado men-saje de correo, habrá que acceder al elemento y obte-ner el valor de la propiedad ‘urn:schemas:httpmail:sub-ject’ o ‘urn:schemas:mailheader:subject’.

La idea final es entonces que cualquier elementodentro de Exchange está identificado de manera uní-voca mediante una URL y que IIS permite el acceso acualquier elemento de la base de datos mediante HTTP.

La documentación completa del esquema de defi-nición de objetos y propiedades está en el SDK deExchange. El SDK, además de la documentación, dis-pone de herramientas y utilidades para facilitar el desa-rrollo. En concreto una muy útil es ExchangeExplorer. Este programa permite acceder al Web Storey poder navegar por él de manera sencilla, viendo loselementos que contiene y sus propiedades con suscorrespondientes valores.

El SDK de Exchange se puede conseguir enhttp://msdn.microsoft.com/exchange/, donde hay ade-más interesantes artículos de desarrollo no sólo sobreeste tema, sino sobre todo lo relacionado conExchange Server.

WebDAV y ExchangeCombinando las ideas de los apartados ante-

riores, si además de permitir el acceso a los ele-mentos del Store de Exchange mediante HTTPbásico, se habilita también el acceso WebDAV, dis-pondremos de la capacidad de manipular cualquierade los objetos almacenados en Exchange de mane-ra remota.

De esta forma se puede utilizar Exchange comoplataforma de aplicaciones que integre los elementoscomunes de colaboración de una manera sencilla(correo, citas, contactos, etc.).

Por otro lado, el store de Exchange es extensible.Esto quiere decir que además de los elementos comu-nes mencionados, se pueden crear nuevos tipos de ele-mentos que sean únicos para nuestra aplicación (porejemplo una ‘cuenta de cliente’), o ampliar y perso-nalizar las características de los elementos ya existen-tes. Esto da pie a usar la base de datos de Exchangepor ejemplo como plataforma muy útil para el desa-rrollo de aplicaciones tipo CRM, donde mantener lainformación de contactos y de la relación que se man-tiene con ellos es muy importante.

Finalmente, como se está manipulando la informa-ción directamente en la base de datos, Outlook refleja-rá automáticamente los cambios realizados. Es decir, siexternamente se crea una cita, ésta se verá en Outlookcomo si se hubiese realizado desde la propia aplicación.

Un ejemplo prácticoJunto a este artículo se incluye una pequeña apli-

cación de ejemplo que permite definir consultas DAV,ejecutarlas en un servidor y ver el resultado devuelto(XML). Se incluyen varias consultas predefinidas querealizan operaciones habituales y que servirán comopunto de partida para realizar operaciones más com-plejas y que se puedan adaptar a cualquier aplicación.El resto del artículo se centra en ver cómo funcionaeste sencillo ejemplo.

Proceso de realización de una consulta con .NET

Recopilando lo comentado en los apartados ante-riores, se ve que las tecnologías a utilizar para podertrabajar con el servidor Exchange son básicamenteHTTP y XML. Ambas tienen amplísimo soporte den-tro de .NET Framework, con lo que la programaciónresultará muy sencilla una vez se conozca lo que sequiere hacer.

Los pasos básicos a realizar serán:1º Definir las credenciales de red a utilizar para hacer

A partir de la versión 2000 de Microsoft ExchangeServer todos los elementos almacenados

en un determinado servidor, como mensajes de correo, contactos, citas, etc., se alojan en el denominado Exchange Web Store

Page 34: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

34

dnm.servidores.exchange<<

una petición HTTP con la seguridadcorrespondiente (usuario y contrase-ña). Para ello se usará la claseSystem.Net.NetworkCredential.

2º Definir la solicitud HTTP median-te la clase System.Net.HttpWebRequest.En esta clase se indica la URL a laque se quiere acceder y se establecenlas cabeceras HTTP correspondien-tes (método DAV, tipo de solicitud‘text/xml’, tamaño del cuerpo delmensaje a enviar, etc.).

3º Obtener acceso al ‘stream’ de datosque se vayan a mandar en la peti-ción HTTP (a través del métodoGetRequestStream() de la claseHttpWebRequest y escribir en este stre-am la solicitud XML deseada. Paraescribir en el stream se puede utilizarla clase System.IO.StreamWriter.

4º Una vez definido esto, se enviarála solicitud y se obtendrá la res-puesta del servidor mediante la lla-mada al método GetResponse() dela claseSystem.Net.HttpWebRequest, obte-niendo un objeto de tipoSystem.Net.HttpWebResponse.

5º Desde el objeto HttpWebResponse setiene acceso a un nuevo streammediante la llamada al métodoGetResponseStream(). Este streamcontiene la respuesta del servidor yse puede cargar en una clase de tipoSystem.Xml.XmlTextReader para acce-der a su contenido y manipularlo dela manera más adecuada para la apli-cación (como un documento XML,con XPath, etc.).

En el ejemplo adjunto, todos estospasos están definidos en una funciónllamada EjecutarConsulta(), definidaen la clase frmMain, que toma los datosdel formulario para realizar la solici-tud. Se remite al lector al ejemplo paraver el código completo. Incluyecomentarios para seguirlo con clari-dad. El ejemplo está desarrollado usan-do el lenguaje C#.

Leer el contenido de un buzón

Como primer ejemplo, se va a obte-ner la lista de elementos que existan enla bandeja de entrada en un buzón deExchange. Estos serán normalmente

mensajes de correo. De cada mensaje decorreo se van a obtener los campos ‘sen-dername’, el asunto, la fecha de recep-ción y si el mensaje está marcado comoleído (en Outlook se verán en negrita sino se han leído). Para ello, la solicitudXML a enviar al servidor será:

Como se ve, la solicitud es muy sen-cilla. El primer paso es determinar elnamespace DAV: en la raíz del docu-mento (xmlns:D = “DAV:”). Eneste ejemplo se le asigna el identifica-dor D, que se utilizará en el resto de losnodos del documento.

En la raíz del documento se deter-mina que el tipo de solicitud a realizares ‘searchrequest’, es decir, una bús-queda. El contenido del documentoindica que la consulta es de tipo SQL(<D:sql>), y la búsqueda es una sim-ple sentencia SELECT, donde los cam-pos a obtener son las propiedades de losmensajes y en el apartado FROM de lasentencia se indicará la URL del Web

Store a la que se quiere enfocar la con-sulta (la carpeta en la que están los men-sajes). Si se quieren obtener los mensa-jes del buzón ‘amezcua’ del servidorlocal, habrá que sustituir [ServerUrl]por http://localhost/exchange/amez-cua/inbox/.

Una vez definida la consulta, hay queenviarla al servidor mediante HTTP aesta misma URL. En la aplicación deejemplo, la URL a la que se envía la peti-ción hay que escribirla en la caja de tex-to URL. La aplicación además sustitui-rá por comodidad en la consulta XMLel texto [ServerUrl] por lo que se escri-ba en la caja de texto URL, de maneraque no hay que escribirla dos veces.

Para obtener la lista de mensajes, elmétodo DAV será SEARCH.

Si se ejecuta esta consulta en la apli-cación de ejemplo, el formulario se verácomo aparece en la figura 1.

Como se ve en esta imagen, en larespuesta del servidor (parte inferior de

<?xml version=”1.0”?><D:searchrequest xmlns:D = “DAV:”><D:sql>SELECT “urn:schemas:httpmail:sendername”, “urn:schemas:httpmail:subject”,“urn:schemas:httpmail:datereceived”, “urn:schemas:httpmail:read” FROM “[ServerUrl]” </D:sql></D:searchrequest>

Figura 1:Aplicación de ejemplo ejecutando la búsqueda de todos los elementos de un buzón.

Page 35: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

35

dnm.servidores.exchange<<

la ventana) se definen varios namespa-ces que determinan el ámbito de cadauno de los campos en el nodo raíz deldocumento XML (<a:multistatus>).Por ejemplo, el campo ‘sendername’(<d:sendername>) está definido en elnamespace “urn:schemas:httpmail:”(xmlns:d=”urn:schemas:httpmail:”) y sereferencia en el ejemplo como ‘d:’.

La lista de namespaces completa sepuede encontrar en la documentacióndel SDK de Exchange.

Por cada elemento encontrado enla consulta, se devolverá un elemen-to <a:response> (namespace ‘DAV:’,o, dicho de otro modo, respuestaDAV). Por cada uno de ellos sedevuelve la URL completa del ele-mento en el nodo <a:href>, que habi-tualmente la aplicación almacenará

para manipular cada uno de los ele-mentos individuales.

A continuación aparecen uno o variosnodos de tipo <a:propstat>. Dentro decada elemento <a:propstat> aparece unsub-apartado <a:prop> con los valoresde las propiedades solicitadas, como<d:sendername>Alejandro Mezcua</d:sen-

dername>.

Se puede apreciar en la respuesta tam-bién un nodo <a:status> como primersub-apartado del nodo <a:propstat>. Eneste ejemplo, aparece el estado como<a:status>HTTP/1.1 200 OK</a:status>,indicando que todas las propiedades bajoese nodo ‘propstat’ se han podido leercorrectamente. El estado se devuelve enformato estándar de HTTP.

Realmente, la respuesta HTTP delservidor devuelve un estado 207, ‘Multi-

Status’, indicando que se devuelve unarespuesta que combina varias respues-tas HTTP. Esto se puede examinar enel código, depurando la aplicación. Severá que la propiedad StatusCode delobjeto HttpWebResponse contiene justa-mente ‘207’, con la propiedad Status-Description = Multi-Status.

Si la consulta hubiese sido por ejem-plo la que muestra el fuente 1, donde seestá solicitando un campo que no exis-te (marcado en negrita como “sender-nam”, cuando debería ser “senderna-me”) la respuesta del servidor sería laque muestra el fuente 2.

Sigue siendo una respuesta HTTP207 (Multi-Status) y se ve que las pro-piedades que se han podido encontraraparecen en una sección <a:propstat>

con un nodo hijo <a:status> con con-

<?xml version=”1.0”?>

<D:searchrequest xmlns:D = “DAV:”>

<D:sql>

SELECT “urn:schemas:httpmail:sendernam”, “urn:schemas:httpmail:subject”,

“urn:schemas:httpmail:datereceived”, “urn:schemas:httpmail:read”

FROM “[ServerUrl]” </D:sql>

</D:searchrequest>

<?xml version=”1.0”?>

<a:multistatus xmlns:b=”urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/” xmlns:d=”urn:sche-

mas:httpmail:” xmlns:c=”xml:” xmlns:e=”urn:schemas-microsoft-com:office:office” xmlns:a=”DAV:”>

<a:response>

<a:href>http://localhost/exchange/amezcua/Inbox/Prueba%20DAV2.EML</a:href>

<a:propstat>

<a:status>HTTP/1.1 200 OK</a:status>

<a:prop>

<d:subject>Prueba DAV2</d:subject>

<d:datereceived b:dt=”dateTime.tz”>2003-12-12T10:23:24.703Z</d:datereceived>

<d:read b:dt=”boolean”>1</d:read>

</a:prop>

</a:propstat>

<a:propstat>

<a:status>HTTP/1.1 404 Resource Not Found</a:status>

<a:prop>

<d:sendernam />

</a:prop>

</a:propstat>

</a:response>

……

Fuente 1

Fuente 2

Page 36: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

36

dnm.servidores.exchange<<

tenido OK (HTTP 200) y otra sección con un esta-do HTTP 404 (no encontrado). Bajo ésta se indicaque la propiedad que no se ha encontrado es <d:sen-dernam /> (ya que la propiedad correcta es <d:sen-

dername>). De esta forma, al examinar el documen-to XML se podrá ver con claridad si la consulta rea-lizada es correcta o no.

Todas estas combinaciones se pueden probar en laaplicación de ejemplo para que el lector se familiari-ce con el protocolo.

Modificación de las propiedades de un objeto del servidor

Otra de las tareas habituales que se realizarán cuan-do se trabaje en este entorno, será la de modificar losvalores de las propiedades de los distintos elementosque estén alojados en el Web Store.

Para modificar un elemento, el método DAV a uti-lizar es PROPPATCH.

En el ejemplo se proporciona una consulta quemodifica un elemento para marcarlo como no leído.La consulta realizada es:

En esta consulta se define que la operación a eje-cutar es “DAV:propertyupdate” y la propiedad que sequiere modificar es “urn:schemas:httpmail:read”. Elvalor que se quiere establecer en la propiedad es 0 (noleído, <h:read>0</h:read>).

En esta consulta se puede apreciar que no se inclu-ye ninguna URL como se hizo en la sentencia SQLdel ejemplo anterior. Para ejecutar esta consulta en laaplicación de ejemplo es necesario conocer la URLdel elemento al que se desea establecer la propiedad.Si tomamos la URL del primer elemento de la con-sulta anterior, la aplicación de ejemplo quedaría tal ycómo puede verse en la figura 2.

Igual que en el ejemplo anterior, el servidor res-ponde con un documento XML de tipo multistatus(HTTP 207).

En este caso, la respuesta simplemente es una con-firmación de si se ha podido o no modificar la pro-piedad del objeto dado.

En algunos casos puede resultar útil indicarle al ser-vidor que no devuelva todo este documento XML, porejemplo para ahorrar ancho de banda, y que simple-mente responda con el código de estado HTTP y undocumento más reducido. Para ello se puede estable-cer la cabecera “Brief: t” y el documento XML devuel-to será menor.

Una prueba interesante de este ejemplo es dispo-ner de Outlook conectado al buzón de Exchangemientras simultáneamente se ejecuta esta consulta.Outlook en unos segundos actualizará su vista mos-trando el elemento como no leído. Se comprueba asíque se puede disponer de n clientes dispares traba-jando simultáneamente con los elementos de la basede datos. Se deja como ejercicio para el lector la cre-ación de una consulta que añada un elemento de calen-dario. Si al mismo tiempo Outlook está mostrando lavista del calendario, la nueva entrada aparecerá ‘mági-camente’ al ser creada desde la aplicación de ejemplo.

Restringir el número de elementos devueltos

Otra cosa útil es limitar el número de elementosque se quieren obtener en la consulta. En el primerejemplo, se devuelven todos los mensajes que hay enun determinado buzón, pero el protocolo permite

<?xml version=”1.0”?>

<d:propertyupdate xmlns:d=”DAV:” xmlns:h=”urn:schemas:httpmail:”>

<d:set>

<d:prop>

<h:read>0</h:read>

</d:prop>

</d:set>

</d:propertyupdate>

Figura 2:Aplicación de ejemplo con la consulta para marcar un objeto del servidor como no leído.

Page 37: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

37

dnm.servidores.exchange<<

definir que se devuelva sólo un número dado de ele-mentos.

Todos los elementos de una determinada carpetaestán numerados con un índice empezando por cero.Si se quisiera obtener únicamente el primer elemen-to del buzón, habrá que añadir una nueva cabeceraHTTP a la solicitud indicando el rango de elementosa obtener, en este caso del elemento 0 al elemento 0.La cabecera se escribiría como “Range: rows=0-0”. Enla aplicación de ejemplo se incluye esta funcionalidadsi se marca la casilla ‘Restringir resultados’ y se inclu-ye en las cajas de texto el índice menor y el mayor adevolver. Si se ejecuta el ejemplo en la aplicación elresultado se verá tal y cómo aparece en la figura 3.

La cabecera Range se añade a la solicitud HTTPcon el método AddRange de la clase HttpWebRequest.Además de permitir la obtención de elementos indi-viduales, o de elementos consecutivos (p.e. del 0 al 5)se pueden crear rangos más complejos que permitanobtener varios elementos de la lista separados (del 0al 5 y del 18 al 25). Este punto viene bien documen-tado en el SDK de Exchange.

Notas sobre la aplicación de ejemplo

El proyecto que se facilita junto al artículo estádesarrollado en Visual Studio .NET 2003 usando ellenguaje C#. Si el lector dispone sólo de la versión2002 de Visual Studio .NET no podrá abrir el pro-yecto directamente, pero puede crear un nuevo pro-yecto de Windows Forms y añadir las clases que seproporcionan (archivos con la extensión .cs) para podercompilar la aplicación.

La funcionalidad principal de este ejemplo estáen la función EjecutarConsulta de la clase frmMain.Esta función realiza una consulta HTTP de manerasíncrona hacia la URL de destino. Esto implica quela aplicación completa permanecerá bloqueada has-ta que se reciba una respuesta del servidor o se ago-te el tiempo de espera de la solicitud HTTP. En unaaplicación real esta operación se realizaría de mane-ra asíncrona para no bloquear el interface de usua-rio. En este caso se ha decidido no hacerlo facilitan-do así la lectura del código para ver las operacionesbásicas que se realizan.

Por otro lado, por la misma razón de legibilidaddel código, la función EjecutarConsulta no tiene encuenta todas las posibles combinaciones de cabece-ras HTTP y métodos DAV disponibles, con lo queciertas consultas es posible que no funcionen comose espera con el código tal cuál se presenta. Se remi-te al lector al SDK de Exchange para determinar lasposibles combinaciones y se le anima a realizar lasmodificaciones pertinentes para conseguir el resul-tado deseado.

Finalmente, el lector verá que existen dos clasesen el proyecto llamadas DavQueryDef y DavQueryDef-Collection. Estas clases permiten que se puedan guar-dar fácilmente las consultas al disco para poder recu-perarlas posteriormente. Se guardan en el disco en unarchivo XML generado a partir de la serialización deesas clases.

ConclusionesComo se ha visto en este artículo, Microsoft

Exchange Server pone a disposición de los progra-madores un interface basado en HTTP y XML(WebDAV) que permite manipular el contenido delWeb Store para beneficio de aplicaciones a medida.Tanto HTTP como XML son tecnologías con ungran soporte en .NET, con lo que desarrollar apli-caciones para esta plataforma resulta muy sencillotécnicamente hablando.

Se ha proporcionado una aplicación de ejem-plo que puede servir como base para la creaciónde aplicaciones de colaboración sofisticadas. Elejemplo permite crear manualmente consultasWebDAV que se pueden probar rápidamente con-tra cualquier servidor Exchange al que se tengaacceso.

El rango de posibles aplicaciones que se puedendesarrollar es muy amplio. Junto al ejemplo se pro-porcionan algunas consultas básicas para empezar atrabajar, pero se deja como tarea para el lector defi-nir consultas más elaboradas que se podrán incorpo-rar a esta aplicación para su prueba.

Figura 3:Aplicación de ejemplo con la consulta para obtener sólo el primer elemento del buzón.

Page 38: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

38

de SQL Server hay, al menos,un archivo .LDF donde se van registrando en serietodas las transacciones que se realizan en dicha basede datos. Y en principio quedan almacenadas his-tóricamente, lo que ocasiona que si no se tomanciertas medidas acabe teniendo unos tamaños des-comunales e incluso llenando el disco donde seencuentra. También es importante conocer que lostamaños de los archivos de datos (.MDF y .NDF)no tienen porqué tener ninguna relación en cuan-to al tamaño con los archivos (.LDF).

Para evitar el crecimiento desmesurado del logtenemos varias alternativas:

1) Poner la base de datos en modelo de recuperaciónsencillo. Ver figura 1.

Esta opción implica que sólo se almacenaránen el log de transacciones, las que se están eje-cutando actualmente, y una vez finalizadasdesaparecen de dicho registro. Es una opciónmuy cómoda para evitar problemas con el cre-cimiento del log, pero por el contrario no dis-pondremos de información aquí almacenadaque nos puede ayudar enormemente en casosde catástrofes en dicha base de datos, a la horade recuperar su información.

2) Poner la base de datos en modelo de recuperacióncompleto (que es la opción por defecto al crear unabase de datos).

Cómo reducir el log de transacciones de una base de datos de SQL Server

Por Salvador RamosSQL Server MVPHelpDNA.net

Esta es la pregunta que con más frecuencia aparece en los grupos de noticiasde SQL Server (news://news.microsoft.com/microsoft.public.es.sqlserver).Aquívamos a dar diversas soluciones al problema y a explicar qué es el TransactionLog, qué ocasiona su crecimiento y qué medidas hay para evitar que crezcadesmesuradamente.

Por cada base de datos<<

Figura 1. Poner la base de datos en modelo de recuperación sencillo

Page 39: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

39

dnm.servidores.sql<<

Esta opción implica que quedarán almacenadastodas las transacciones, incluyendo las que hayanfinalizado. Se recomienda utilizar esta opción.

Para evitar que este archivo almacene de formaindefinida todas las transacciones que se pro-ducen en dicha base de datos debemos imple-mentar una política de copias de seguridad queincluya también el backup de este log de tran-sacciones, quedando esta información históricaalmacenada en los dispositivos de copia de segu-ridad. Para ello disponemos de la instrucciónBACKUP LOG (puede ampliar informaciónsobre ella en los Books On Line de SQL Server).Tenga en cuenta que las copias de la base dedatos no truncan el registro de transacciones.Además con las copias de seguridad del registrode transacciones puede recuperar la base de datoshasta un momento determinado, lo que nos seríade gran ayuda si a cierta hora se ha lanzado unaoperación no deseada, como el borrado de unatabla completa. En ese caso podríamos restau-rar la información hasta el momento anterior ala ejecución de dicho borrado.

Es importante saber que podremos hacer copiasdel registro de transacciones con mayor fre-cuencia que las copias de la base de datos, ya queestas primeras consumen menos recursos.

Una buena política de copias de seguridad inclu-ye copias del registro y de la base de datos. Asíen caso de catástrofe, se restaurará la últimacopia de la base de datos que tengamos dispo-nible y posteriormente se irán restaurando lascopias del registro de transacciones que tenga-mos posteriores a la copia de seguridad de labase de datos. Consiguiendo así una menor pér-dida de información. Cosa que con la solucióndada en el punto 1 no sería posible, y sólo podrí-amos recuperar los datos de la última copia dela base de datos, ya que no dispondríamos deinformación histórica del registro de transac-ciones.

Una vez vistas las alternativas para evitar este tipode problemas, siendo la mejor establecer el modo derecuperación completo y poner en marcha una bue-na política de copias de seguridad de la base de datos,vamos a pasar a resolver los casos, ya sea el motivoque fuese, nos encontramos con el log de transaccio-nes con un tamaño desmesurado o el disco lleno ynecesitamos reducir su tamaño.

Tenga en cuenta que aun habiendo puesto en prác-tica las medidas vistas anteriormente, puede que enun momento dado nos encontremos con un creci-miento desmesurado del fichero del log de transac-

ciones, por ejemplo, debido a la ejecución de una tran-sacción que afecte a un gran número de registros. Yaque el log de transacciones necesita una gran canti-dad de espacio para registrar esta operación. Paradetectar este tipo de actualizaciones masivas se pue-de utilizar el Profiler de SQL Server.

También es importante tener en cuenta que no sedebe borrar el registro de transacciones, salvo causasde fuerza mayor (principalmente falta de espacio endisco). Lo que se debe hacer es diseñar una estrategiade copia de seguridad adecuada.

Vamos a dar dos soluciones rápidas al problema,que en la mayoría de los casos resuelven la situación:

1) Hacer un backup del log y reducir el fichero.

Ejecutar dos o tres veces la instrucción CHECK-POINT. Esto asegura que todas las páginas dememoria se han escrito en el fichero de datos.

En este punto es conveniente hacer una copia deseguridad de la base de datos, ya que hemos eli-minado la información del Transaction Log, y siocurriese un error sólo podríamos recuperar infor-mación desde la última copia de la base de datos.

Ejecutar la instrucción BACKUP LOG WITHTRUNCATE_ONLY. Esta instrucción hace quese trunque el registro de transacciones, elimi-nando la información histórica de transaccionesque había en él.

Posteriormente ejecutar DBCC SHRINKFILEindicando el nombre del fichero .LDF a reducir.

Las transacciones quedan almacenadas históricamente, lo que ocasiona que si no se toman ciertas medidas acabe teniendo

unos tamaños descomunales e incluso llenando el disco donde se encuentra

Page 40: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

2) Eliminar el fichero para que se genere de nuevo.Esta opción es demasiado drástica, hay que emple-arla sólo si falla la anterior:Poner la base de datos en modo Single User.

Ejecutar dos o tres veces la instrucción CHECK-POINT. Esto asegura que todas las páginas dememoria se han escrito en el fichero de datos.

Asegurarse de que no hay transacciones abier-tas a la base de datos, con lo que no puede habertransacciones a medio ejecutar.

Separar la base de datos del servidor, bien des-de el administrador corporativo o bien utilizan-do el procedimiento almacenado del sistemasp_detach_db.

Eliminar el fichero (o ficheros) .LDF corres-pondiente a dicha base de datos.

Volver a adjuntar la base de datos al servidor,bien desde el administrador corporativo o bienutilizando el procedimiento almacenado del sis-tema sp_attach_db. SQL Server, al volver a conec-tar la base de datos y no encontrar el fichero deltransaction log, crea uno nuevo.

¡Importante! Si no se ejecuta el proceso com-pletamente y en ese orden estricto, podría tenerproblemas de inconsistencia de información en elfichero de datos.

Por ejemplo, si se apaga el equipo, sin más, antesde haber terminado todo el proceso, SQL Server noha tenido tiempo de volcar las páginas de datos de lamemoria al disco. Al reiniciar SQL Server, el proble-ma será corregido utilizando la información conteni-da en el registro de transacciones, pero si éste no estápresente, el archivo de datos se dará por bueno, ypodría estar realmente inconsistente debido a quehubiese transacciones que no habían terminado en elmomento de apagar el equipo.

Otro detalle importante es que el log de transac-ciones nunca se limpia totalmente, ya que siempre hayoperaciones internas que SQL Server necesita man-tener en él, aunque el tamaño que éstas ocupan esmínimo.

A pesar de todo lo visto hasta ahora nos podemosencontrar con problemas que impidan truncar el logde transacciones, y puede que los pasos vistos hastaahora no sean tan obvios como puedan parecer tras sulectura inicial.

A continuación vamos a dar una explicación másdetallada sobre el registro de transacciones que nosayude a entender y poder resolver las situaciones enlas que no nos funcione lo visto anteriormente.

El registro de transacciones está compuesto por,al menos, dos Registros Virtuales (VLF = Virtual LogFiles). El truncado del registro de transacciones se rea-liza VLF a VLF. Sólo si tienes dos VLF y te ocupantodo el fichero, no podrás truncarlo. Aunque dudoque cada VLF llegue a ocupar mucho espacio.

En el log de transacciones siempre hay una parteactiva, y ésta no se podrá truncar nunca. Esta parteestá compuesta por todas las transacciones que aúnestán incompletas, y si se truncase se producirían inco-herencias en la base de datos. La primera entrada a laparte activa del registro está identificada por elMinLSN (nº de secuencia de registro mínimo de recu-peración).

En la figura 2 se muestra un ejemplo con veinteVLFs, en el cual nunca se ha realizado una operaciónque elimine información del log de transacciones.

dotN

etM

anía

<<

40

dnm.servidores.sql<<

Figura 2

Page 41: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

noticias.noticias.noticias.noticia

Microsoft ha anunciado la disponibilidad de SQLServer 2000 Reporting Services. Con esto Microsoftequipa a las compañías con una nueva herramientapotente de generación de informes que puede aumen-tar la perspectiva sobre su negocio aportando infor-mación en tiempo real desde cualquier fuente de datosa cualquier dispositivo.

Como resultado, empleados de cualquier niveltendrían mejor acceso a la información que incre-mentará la habilidad de tomar decisiones con másinformación y aporta más valor al negocio de suscompañías. Con el añadido de Reporting Services,SQL Server, una parte de Microsoft Windows ServerSystem, aporta una plataforma única, la más com-pleta gestión de datos y Business Intelligence (BI)del mercado con analíticas integradas que incluyenprocesos analíticos online, data mining, data ware-housing, herramientas para extraer, transformar ycargar datos y funcionalidades de generación deinformes.

“Reporting Services es una solución empresarialmás asequible que otras soluciones de la competen-cia en el mercado de hoy en día. Se construye sobreel éxito de SQL Server 2000 para aportar una solu-ción integrada y escalable tanto si es usada para enviarinformes interactivos a cinco o 50.000 suscriptores”,dijo Paul Flessner, vicepresidente senior de EnterpriseServer en Microsoft. “Con Reporting Services, nues-tros clientes se beneficiarán de una solución de infor-mes rentable, fácil de usar que les permite mejorar la

influencia de los datos para la toma de decisionesempresariales más inteligentes”.

Tom Rizzo, Product Manager de Microsoft SQLServer, ha dicho que la decisión de añadir ReportingServices a la familia SQL viene directamente de lasdemandas de los clientes “Posiblemente no a usua-rios expertos, pero sí para los usuarios comunes den-tro de las compañías quienes necesitan más y mejo-res accesos a los datos”. Como comunicó en el eADT(en febrero de 2004), Microsoft también ha prome-tido continuar incluyendo el conjunto de herra-mientas de Crystal Decisions de Business Objects enla actual versión de Visual Studio .NET y enWhidbey.

El producto ha pasado ya los procesos de beta tes-ting. La primera fase comenzó en la primavera de2003 y la segunda alrededor de octubre. “En la beta2 nosotros tuvimos 30.000 usuarios registrados. Enla primera semana 7.500 personas descargaron lacopia de evaluación”, dijo Tom Rizzo.

Puede enviar informes en formatos HTML, PDF,TIFF, hojas de cálculo Excel, ficheros delimitadospor comas y XML.

Los vendedores de servicios similares de infor-mes incluyendo Crystal Decisions y Actuate tienenun sistema a de licencias que pueden hacer “irresis-tible” al nuevo Microsoft Reporting Services que esgratuito si tienes una licencia de SQL Server 2000.

Para más información:http://www.microsoft.com/sql/reporting/

Microsoft añade su propia herramienta de reportinga SQL Server 2000

dnm.servidores.sql<<

Al realizar el truncamiento, quedan truncadas las filasque se encontraban en los VLFs anteriores al que con-tiene el MinLSN (siempre se truncan VLFs completos).

Esta operación no reduce el tamaño del archivoen disco. Como se puede comprobar (ver figura 3)sigue siendo igual, sólo reduce el tamaño del archivode registro lógico. Aunque ahora si que queda prepa-

rado para que pueda ser reducido con una operaciónBDCC SHIRINKFILE.

Al ejecutar una instrucción DBCC SHRINKFILEsólo se le indica a SQL Server que se quiere reducirel tamaño físico del fichero .LDF, consiguiendo eli-minar el espacio anteriormente truncado.

Existen una serie de instrucciones DBCC que nosayudan a comprobar la consistencia física y lógica dela base de datos. Entre ellas tenemos DBCC LOGIN-FO, con ella se obtiene una lista de los VLF, y fiján-donos en la columna Status podremos ver los que noestán activos. Éstos son los que tienen el valor 2.

La puede probar ejecutando desde el QueryAnalyzer: DBCC LOGINFO(NorthWind).

Tenga en cuenta que esta es una instrucción nodocumentada.

Figura 3

Page 42: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

42

Introducción

La plataforma .NET representa para los progra-madores el contexto en el que, en el futuro, deberánejecutarse todas las aplicaciones escritas para Windows,por lo que no es de extrañar que la oferta de herra-mientas .NET vaya incrementándose paulatinamen-te. Una de las últimas en aparecer, está disponible des-de el pasado mes de enero, es Borland Delphi 8 forMicrosoft .NET Framework, analizada en el primernúmero de ésta nuestra revista.

Borland siempre ha sido conocida entre los pro-gramadores por sus magníficos entornos de desarro-llo, desde los tiempos de Turbo Pascal, de los cualesel más importantes en la última década ha sido Delphi.La octava versión de este producto está dirigida a lageneración de soluciones .NET, aportando un entor-no de trabajo totalmente nuevo, extensiones al len-guaje, nuevos componentes, etc.

Como lenguaje .NET de pleno derecho, el nue-vo Delphi .NET puede acceder a todos los serviciosde la biblioteca de clases con que cuenta la platafor-ma: WinForms, ASP.NET, ADO.NET, etc. No ten-dría nada de particular, salvo la diferente sintaxis dellenguaje, la construcción de un proyecto utilizandolos mismos recursos y clases que encontraríamos enVisual Studio .NET. Las diferencias comienzan en loselementos exclusivos de Delphi .NET, entre los quese encuentran sus mecanismos de acceso a datos.

Acceso a datos en la plataforma .NETLa llegada de la plataforma .NET supuso la intro-

ducción de un nuevo mecanismo de acceso a datos,

evolucionado a partir de ADO (Active Data Objects),al que se denominó ADO.NET. Este modelo tienedos pilares fundamentales: los proveedores de accesoa datos y el conjunto de datos desconectado o DataSet.

Los proveedores ADO.NET son los responsablesde facilitar la conexión con la fuente donde se encuen-tran los datos, la recuperación de los mismos y la trans-misión de órdenes de modificación, inserción o borra-do. La primera versión de la plataforma incorporabados proveedores: SqlClient y OleDb. El primero esespecífico para SQL Server, mientras que el segundoabre las puertas, a través de COM Interop, a la utiliza-ción de cualquier proveedor OLE DB clásico. La pos-terior revisión de la plataforma, coincidiendo con la pre-sentación de Visual Studio .NET 2003, introdujo dosproveedores adicionales: Odbc y OracleClient que,como es fácil imaginar, hacen posible el acceso a fuen-

<<

Acceso a bases de datos en Delphi 8 .NET

Además de poder utilizar los proveedores ADO.NET integrados en la bibliote-ca de clases .NET, el nuevo Delphi 8 .NET nos ofrece otras alternativas entrelas que se encuentra el flexible BDP (Borland Data Provider).

Por Francisco CharteTorre de Babelwww.fcharte.com

las transiciones de un RDBMS a otro,no implican la sustitución de componentes sino casi

exclusivamente una modificación en la cadena de conexión

Page 43: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

tes ODBC (Open Database Connectivity) yla conexión directa con Oracle a travésde OCI (Oracle Call Interface).

La elección de un determinado ori-gen de datos conlleva el uso de un con-junto de componentes u otro, cada unode ellos alojado en un namespace dife-rente. Si en principio nuestros datosresiden en un servidor SQL Server recu-rriríamos al ámbito System.Da-ta.SqlClient y emplearíamos las clasesSqlDataReader, SqlDataAdapter, etc.Si, con posterioridad, necesitamos hacerla transición a un servidor Oracle, debe-ríamos sustituir lo anterior por el ámbi-to System.Data.OracleClient y las cla-ses OracleDataReader, Oracle-DataAdapter, etc.

A pesar de que sería posible codificarlos procesos con cierta independencia delproveedor de datos, utilizando interfa-ces genéricas como IDbConnection eIDataReader, lo cierto es que cambiarla fuente de los datos supone un trabajoconsiderable.

El proveedor BDP de Delphi 8 .NET

Delphi ha destacado siempre por suflexibilidad a la hora de acceder a dis-tintos RDBMS, utilizando para ello

BDE (Borland Database Engine), IBX(InterBase Express), dbExpress, dbGo,etc. Delphi 8 .NET no iba a ser unaexcepción, añadiendo a todos los ante-riores, y a la capacidad de utilizar losproveedores ADO.NET de la platafor-ma .NET, el nuevo BDP .NET.

La diferencia fundamental entre elproveedor de datos de Borland y los pro-veedores de Microsoft, antes citados, esque el primero nos permite acceder adiferentes orígenes de datos utilizandoel mismo conjunto de componentes.Dicho con otras palabras: BDP no es unproveedor específico para un determi-nado RDBMS. Inicialmente podemosusarlo para acceder de manera indistin-ta a Access, InterBase (el RDBMS deBorland), Oracle, DB2 y SQL Server,pudiendo extenderse para usar asimis-mo otras fuentes potenciales.

En lugar de los cuatro tríos de com-ponentes que encontramos en VisualStudio .NET (véase figura 1), en la pale-ta de herramientas de Delphi 8 .NETencontramos exclusivamente un com-ponente de cada tipo (véase figura 2):uno para conexión, otro que represen-ta los comandos a ejecutar, un terceroque actúa como adaptador y el últimoencargado de generar los comandos.

Esta arquitectura, más sencilla, tie-ne como consecuencia que las transi-ciones de un RDBMS a otro, en caso deser necesarias, no implican la sustitu-ción de componentes sino casi exclusi-

vamente una modificación en la cadenade conexión de BdpConnection.

Configuración de la conexión

El entorno de Delphi 8 .NET dis-pone de una ventana, llamada DataExplorer, similar al Explorador de ser-vidores de Visual Studio .NET y desdela que podemos servirnos de las cone-xiones ya definidas para examinar laestructura de una base de datos: sustablas, columnas, procedimientos alma-cenados, etc. Una simple operación dearrastrar y soltar, desde esta ventana aun contenedor, provoca la configuraciónautomática de los componentes de cone-xión y el adaptador de datos asociado.

Lógicamente, podemos definir tan-

tas conexiones como precisemos, apa-reciendo cada una de ellas en la venta-na anterior como una hoja dentro de larama que corresponda al tipo deRDBMS. Cada conexión es, en defini-tiva, una colección de parámetros quese guarda bajo un determinado nombreen un archivo local.

Al configurar un componenteBdpConnection hay que facilitar unacadena de conexión, en la propiedadConnectionString, que, entre otrosdatos, contiene el nombre del ensam-blado correspondiente al RDBMS sobreel que va a trabajarse. En la figura 4, porejemplo, puede apreciarse cómo adap-

dotN

etM

anía

<<

43

dnm.laboratorio.net<<

Figura 1. Los componentes de acceso adatos existentes en Visual Studio .NET2003

Figura 2. Componentes BDP en la paletade herramientas de Delphi 8 .NET

Figura 3. El Explorador de datos nos permite examinar las conexiones ya definidas

Page 44: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

tamos el componente BdpConnection1 para acce-der a una base de datos InterBase. Modificando esteparámetro, Borland.Data.InterBase, cambiaríamosel tipo de base de datos de origen por otra SQL Server,Oracle, DB2 o Access, según el ensamblado que indi-cásemos.

La propiedad ConnectionString de un compo-nente BdpConnection puede modificarse tanto enla fase de diseño, definiendo una conexión o asignan-do la cadena de conexión equivalente, como en eje-cución. Esto nos permitiría cambiar el tipo de base dedatos según las necesidades se viesen alteradas duran-te el funcionamiento de la aplicación.

El Editor de conexiones

Aunque, como acaba de decirse, es posible confi-gurar el contenido de la propiedad ConnectionStringmanualmente, introduciendo el ensamblado del pro-veedor, el camino donde se encuentra la base de datosy demás parámetros específicos, este trabajo resulta-rá mucho más sencillo si nos servimos del Editor deconexiones con que cuenta Delphi 8 .NET. Graciasa él podemos tanto crear nuevas conexiones como ade-cuar las ya existentes.

Este editor enumera, en el panel de la izquierda,todas las conexiones existentes, mostrando los pará-metros de la que tengamos seleccionada en cadamomento. Al añadir una nueva conexión podemos ele-gir el RDBMS asociado, configurándose automática-mente el nombre del ensamblado que corresponda.

Preparada la conexión mediante este editor, la con-figuración de un componente BdpConnection resul-ta tan sencilla como desplegar la lista adjunta a la pro-piedad ConnectionString y seleccionarla por su nom-bre. El diseñador recuperará toda la información yconstruirá la cadena de conexión para nosotros.

La información que aparece en el Editor de cone-xiones se aloja localmente en un archivo llamadoBdpConnections.xml, siendo útil exclusivamentedurante la fase de diseño. Lo que se incorpora al códi-go del proyecto, configurada la conexión, es la cade-na con todos los parámetros y no el nombre quehubiésemos dado a dicha conexión.

Distribución de una aplicación que usa el BDP

Al instalar una aplicación sobre un sistema que yacuenta con la plataforma .NET puede asumirse la exis-

dotN

etM

anía

<<

44

dnm.laboratorio.net<<

Figura 4. Configuramos un componente de conexión paraacceder a una base de datos InterBase

Figura 5. Editor de conexiones de Delphi 8 .NET

Figura 6. Contenido del archivo XML que almacena las cadenas de conexión

Page 45: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

tencia de los proveedores de datos ADO.NET inte-grados en ésta, pero obviamente no del BDP. Es nece-sario, por tanto, distribuir conjuntamente con cual-quier aplicación Delphi .NET que emplee este pro-veedor una serie de ensamblados.

Por una parte tenemos los ensamblados genéricos:Borland.Data.Common.dll y Borland.Data.Provider.dll, necesarios indistintamente del RDBMSal que accedamos. Además tendríamos un ensambla-do adicional por cada tipo de base de datos:Borland.Data. Msacc.dll, Borland.Data.Mssql.dll,Borland.Data.Oracle.dll, Borland. Data.DB2.dll yBorland.Data. Interbase.dll, según conectemos conAccess, SQL Server, Oracle, DB2 o InterBase, res-pectivamente.

Todos estos ensamblados deben ser añadidos a laGAC (Global Assembly Cache), estando a partir de esemomento disponibles para cualquier aplicación Delphi8 .NET que pudiéramos instalar.

Otras opciones de acceso a datos

Delphi 8 .NET es una herramienta basada en unnuevo compilador, que cuenta con un entorno reno-vado respecto a Delphi 7 y utiliza una biblioteca declases diferente a la versión previa. Esto no significa,sin embargo, que Borland haya olvidado ofrecer a losdesarrolladores caminos que faciliten la transición desus proyectos desde la plataforma Win32 a .NET.

En este contexto es donde debemos incluir alterna-tivas para el acceso a datos como BDE.NET, IBX.NET,dbExpress. NET y DataSnap.NET, equivalentes a BDE,IBX, dbExpress y DataSnap en Delphi 7. Esto significaque podemos seguir utilizando los mismos componen-tes que hasta ahora, conectando con bases de datosParadox, dBase, InterBase, etc.

Otra novedad es el componente TADONET-Connector, un derivado de TDataSet que hace muysimple la conexión a través de un proveedorADO.NET o BDP estableciendo un conjunto míni-mo de propiedades, como en Delphi 7. Son todasopciones enfocadas a suavizar tanto la conversión deaplicaciones existentes como la evolución al mundo.NET en los nuevos proyectos.

Acceso independiente del proveedor en ADO.NET 2.0

La posibilidad de implementar el acceso a una basede datos de forma independiente del proveedor pue-de parecernos algo innecesario en un primer momen-to, pero sería realmente lo deseable tanto si tenemosprevista la transición futura como si no es así, ya queel cambio puede producirse en cualquier ocasión porcircunstancias ajenas a nuestros planes. Por ello no esde extrañar que Microsoft haya previsto esta posibi-

lidad en la próxima versión de ADO.NET, la 2.0 cono-cida como Whidbey.

ADO.NET 2.0 define una serie de clases, en elámbito System.Data.Common, que representan cone-xiones, comandos, adaptadores de datos y lectores inde-pendientes del proveedor. Sus nombres de clase sonDbConnection, DbCommand, DbDataAdapter yDbDataReader. Funcionalmente serían equivalentesa los componentes BdpXXX de Delphi 8 .NET.

En el mismo ámbito, según se aprecia en la figu-ra 7, encontramos una clase llamada DbProviderFactories con varios métodos estáticos que facilitanla recuperación de la factoría de un proveedor dado.La factoría es una clase a través de la cual crearíamosla conexión y, posteriormente, los comandos y adap-tadores. Por ejemplo:

De esta manera, y simplemente modificando elargumento System.Data.Oledb entregado comocadena al método GetFactory(), podríamos cambiarde un proveedor a otro sin necesidad de sustituir todoslos componentes relacionados.

dotN

etM

anía

<<

45

dnm.laboratorio.net<<

Figura 7. ADO.NET 2.0 cuenta con una clase genérica para acceder a factorías de proveedores de datos

// Obtenemos la factoríaDbProviderFactory factoria=DBProviderFactories.GetFactory(“System.Data.Oledb”// Y la usamos para crear un componente de conexiónDbConnection conexion=factoria.CreateConnection();// y un adaptadorDbAdapter adaptador=factori.CreateAdapter();

Page 46: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

46

las legiones romanas sepasearon por el mundo occidental de forma triun-fante derrotando a cuantos ejércitos enemigos seponían en su camino. Dónde estaba el secreto. Quéhacía invencible a un ejército de italianos morenosy bajitos. Cómo pudieron derrotar a las numerosashordas germanas y galas con sus corpulentos y sal-vajes guerreros. Por qué impusieron la voluntad deRoma desde una punta a otra del mundo conocido.Hay dos respuestas para todas estas preguntas: ellegionario y la metodología organizativa. Mientras losmillones de germanos que se desplazaban desde lapenínsula de Jutlandia constituían un impresionantey desorganizado ejército donde la desesperación por

conseguir alimentos era el leit motiv fundamental,el ejército del siete veces Cónsul Cayo Mario erainfinitamente más pequeño pero estaba poderosa-mente motivado y organizado, Aqua Sextia es elresultado de la lucha del orden y la motivación fren-te al caos, allí centenares de miles de germanos pere-cieron a manos de un ejército diez veces más peque-ño. Si Cayo Mario fue el gran sistematizador delnuevo ejército republicano, Julio César, fue sin duda,el genio militar más importante de su época. Su cla-ve era la motivación. Sus hombres lo adoraban yabordaban cada batalla con tal énfasis y pundonorque no había enemigo que les resistiera. Palabrascomo centuria, cohorte, tribuno, legado, praefectusfabrum, centurión, etc. eran las claves del asunto; una

maquinaria perfectamente diseñada y altamentemotivada que llevaba a cabo su labor de forma terro-ríficamente perfecta.

Y bien, sufrido lector, ya te estarás preguntandoqué tiene que ver César con Bill Gates y Roma conMicrosoft. Bueno, pues sí que tienen que ver y eneste artículo intentaré demostrarlo. La multinacio-nal americana es hoy al mundo del software lo quelas legiones romanas fueron al mundo de la milicia,una poderosa maquinaria perfectamente organiza-da donde la conjunción de los equipos de trabajo,los métodos seguidos y la motivación de cada tra-bajador son piezas claves de su éxito. Supongo quetodos nos hemos preguntado en alguna ocasión quémétodo siguen, por ejemplo, los desarrolladores delequipo de Exchange Server o de Office para obte-ner productos tan complejos y perfectos constitu-yendo, además, uno de los mejores ejemplos de ren-tabilidad empresarial que podemos tener hoy. Larespuesta es MSF de forma abreviada o, lo que es lomismo. Microsoft Solutions Framework, la metodolo-gía de gestión de proyectos de desarrollo de soft-ware que usa el gigante de Redmon y que, desdehace unos pocos años, sistematiza y recomienda paraque quienes van a desarrollar software con herra-mientas Microsoft la use.

Conforme los proyectos que abordamos son máscomplejos, conforme tenemos que garantizar conmás rigor los cumplimientos en tiempo, precios yrequerimientos de las soluciones que nuestros clien-tes nos piden, se hace más necesario aplicar un méto-do al trabajo, seguir una norma clara y rigurosa quenos permita garantizar el resultado a obtener fuerade las tan a menudo improvisaciones del mundo deldesarrollo. MSF nos ayuda en esta labor. Lógica-mente, MSF no es algo único en el mundo ni super-original, las metodologías de desarrollo se vienenusando desde hace años y seguro que otras comoMerisse, SSADM, Métrica, Xtreme Programming,etc, suenan a nuestros oídos. Lo que de llamativo tie-ne MSF para nosotros es que estamos ante la meto-

Las legiones del César

Por Antonio QuirósGeneral Area ManagerAlhambra-Eidos

Hace más de dos mil años<<

En un equipo MSF se produce una importantered distribuida de funciones, responsabilidades

y confianza mutua

Page 47: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dología oficial de Microsoft y que, portanto, parece la causante del éxito rotun-do de todos aquellos productos desarro-llados por la misma, así como de suimpresionante trayectoria empresarial.

Hay mucho de que hablar,¿Dónde pondremos el foco?

Realmente MSF consta de dos enfo-ques diferentes, en función del tipo deproyecto que se lleva a cabo:

• MSF (Microsoft Solutions Frame-work), propiamente dicha, que estádirigida a planificar, diseñar, desa-rrollar, implementar, operar y man-tener soluciones creadas a partir detecnologías Microsoft.

• MOF (Microsoft Operations Frame-work) ofrece directrices técnicasque permiten a las organizacioneslograr la confiabilidad, disponibi-lidad y compatibilidad de los siste-mas y soluciones basados en tec-nologías Microsoft.

En cualquier caso, hay que partirsiempre de la definición operativa deproyecto, entendiendo que éste es unaempresa temporal que cuenta con unprincipio y un final definidos cuyo obje-tivo es crear un producto o servicio úni-co. Por otro lado, por administración deproyectos entendemos un área de cono-cimiento, técnicas y herramientas quese utilizan para lograr los objetivos delproyecto dentro de unos parámetros decalidad, costes, plazos y límites previa-mente acordados.

Con este punto de partida, el lectorcomprenderá ya que la tarea es ardua.Organizar de forma correcta un pro-yecto, supondrá, según las definicionesque hemos anotado, conocer y practi-car un amplio abanico de técnicas eco-nómicas, tecnológicas, de recursoshumanos, de control de calidad, etc.,todo ello de forma organizada y rigu-rosa, siguiendo un protocolo que nosayude a no olvidar nada de lo auténti-camente importante y a serializar lascosas de forma conveniente.

Un corto artículo no da para trazaraunque sea una breve imagen de tan

ingente cantidad de cuestiones, por esomi propuesta al lector será algo más con-cisa; se trata de analizar uno de los fac-tores claves de MSF que vuelven a acer-carnos al asunto de las legiones.

Se ha resaltado antes la importanciade la organización humana, de su moti-vación, de la correcta imbricación decada elemento para lograr el éxito delconjunto. Toda una parte de MSF seocupa de esto. Se trata del MSF TeamModel o lo que es lo mismo el modelopara la organización de equipos de tra-bajo que MSF propugna y que en estemomento está plasmado en el docu-mento denominado MSF Team Modelv. 3.1 que podemos encontrar en el áreaMSF del web de Microsoft. Al modelode equipo de MSF es a lo que dedica-remos el resto de este artículo.

El MSF Team Model v. 3.1Una de mis tareas en los últimos

tiempos ha sido la de estudiar e inten-tar aplicar las políticas de recursoshumanos basadas en el seguimiento devalores corporativos. Me ha parecidosiempre de trascendental importanciaque cada empresa haga públicos losprincipios que subyacen a su actividadempresarial, los valores que propugnanpara sus empleados y las bases en que

tratan de establecer la relación con susclientes. Si todo esto está claro y espublicado por la empresa y conocidopor todos, todos saben a qué atenerse,cada miembro del equipo de trabajo sabequé espera de él la empresa, cómo espe-ra que sea su comportamiento, cómodesea que se conduzca en su acción labo-ral diaria, etc. Una empresa importan-te es aquella donde sus equipos de tra-bajo tienen un alto grado de conoci-miento e identificación de los valoresempresariales, teniendo esto comoresultado un impacto relevante en lamotivación de los empleados.

Bien, pues de eso nos habla MSFTeam Model, de los principios subyacen-tes al factor humano en los proyectos.

Los Role Cluster o funciones en un proyecto MSF

Vamos a comenzar por describir losdistintos roles que interaccionan en unproyecto MSF. Para la metodología deMicrosoft, los roles no tienen una claraidentificación personal, es decir que unrol puede estar siendo ostentado porvarias personas y también una personapuede ostentar distintos roles. La defi-nición Role Cluster es la que usa MSF parareferirse a este tipo de perfiles o funcio-nes. Los distintos Role Clusters que inte-

Conforme los proyectos que abordamos son más complejos se hace más necesario aplicar un método al trabajo, que nos permita garantizar el resultado a obtener fuera de las tan a menudo

improvisaciones del mundo del desarrollo

dotN

etM

anía

<<

47

dnm.arquitectura<<

Page 48: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

48

dnm.arquitectura<<

raccionan en un proyecto, o funcionescomo los llamaremos a partir de ahora,pueden verse en la tabla siguiente.

La organización en funciones noimplica una visión jerárquica del pro-yecto. Este modelo organizativo tienemás que ver con la adecuación de per-files a objetivos a conseguir, dentro deun esquema de funcionamiento dondela responsabilidad se comparte plena-mente entre todos los miembros delequipo.

Funciones Características

Product Management El objetivo deesta función es satisfacer a los usua-rios, por lo que quienes la realizandeben actuar como abogados de losusuarios en todo momento. Son losresponsables de manejar la visióncompartida del proyecto que sedifundirá al resto del equipo. Son unpunto crucial en la relación entre losusuarios y el equipo del proyecto,gestionan las expectativas de losusuarios y las administran definien-do las funcionalidades que debentener los productos desarrollados.Sus áreas funcionales de referenciason marketing, desarrollo de nego-cio, intereses de los usuarios y pla-nificación de producto.

Program Management Su objetivo esobtener la solución dentro de las res-tricciones determinadas para el pro-yecto. Se responsabilizan, pues, delproceso de desarrollo con el fin deobtener el producto a tiempo.Mientras que la función de ProductManagement tiene una mayor cer-canía conceptual con los usuarios, lade ProgramManagement la debetener con el equipo que construye lasolución; son, pues, quienes organi-zan los recursos humanos del pro-yecto. Sus áreas funcionales son lagestión de proyectos y la arquitectu-ra de soluciones.

Development Son los encargados deconstruir la solución, desde las espe-cificaciones al propio producto ter-minado. Aquí tenemos a los arqui-tectos, analistas y programadores detoda la vida. Sus áreas funcionalesson, pues, la consultoría tecnológi-ca, la arquitectura y el diseño de soft-

ware y el desarrollo de soluciones.Test Se responsabilizan de probar la

solución y sólo autorizar la libera-ción de la misma cuando se hanpasado todas las correspondientespruebas y controles de calidad. Susáreas funcionales de referencia sontodas las que tienen que ver con laspruebas de las soluciones, tanto enlo que a la planificación como a laejecución de las mismas, así como asu reporte.

User Experience Son quienes mejorconocen y manejan los requerimien-tos de los usuarios. Al igual que en lafunción de Product Managementactúan como abogados de los usua-rios defendiendo su punto de vista.Entre sus funciones primordiales seencuentran las de ocuparse de losaspectos de usabilidad, rendimiento,etc, de las soluciones. Desarrollan,igualmente, los procedimientos deayuda y los planes de formación inhe-rentes al proceso de despliegue decualquier solución de software. Susáreas funcionales son las comunica-ciones técnicas, la formación, la usa-bilidad, el diseño gráfico, la interna-cionalización y la accesibilidad.

Release Managemet Su objetivo eslograr despliegues sin problemas delas soluciones construidas. Se ocu-pan de los asuntos que tienen que vercon las instalaciones y el soporte delos sistemas. Normalmente propor-cionan apoyo logístico al equipo delproyecto. Sus áreas funcionales sonlas infraestructuras, el soporte y lasoperaciones.

Los fundamentos del modelode equipo MSF

Ya hemos visto las distintas fun-ciones con que todo proyecto MSFdebe contar. A continuación vamos aenumerar un conjunto de principiosque están a la base de cómo el equipodel proyecto aborda la realización delmismo.

Responsabilidad clara y compartida

Cada miembro del equipo es res-ponsable del éxito general del proyectoy de la calidad de la solución, esperán-

dose de él un nivel de colaboración másallá incluso de lo que pueden ser sus fun-ciones dentro del proyecto.

Esto implica que existe una organi-zación de las responsabilidades dondese cruzan las personales en función dela, valga la redundancia, función desa-rrollada en el proyecto, con las globa-les que el equipo debe mantener de caraa los clientes del proyecto. Esto quieredecir que cada miembro del equipodebe tener claro cual es su entorno deresponsabilidad, pero debe actuar decara al proyecto como si toda la res-ponsabilidad del éxito del mismo reca-yera sobre él.

Equipos reforzados

Cada miembro del equipo del pro-yecto debe asumir sus propios compro-misos. Las palabras clave a este respec-to son autorización y compromiso. Losmiembros de un equipo MSF debentener la confianza de los administrado-res del proyecto, de forma que con laautonomía suficiente deben ser capacesde administrar sus tareas, gestionandoy reportando los retrasos que puedanproducirse. Así, pues, en un equipo MSFse produce una importante red distri-buida de funciones, responsabilidades yconfianza mutua, todo ello con la ideade cumplir los objetivos finales deter-minados para el proyecto.

El foco en el valor del negocio

Cada solución a desarrollar tiene unaclara vertiente de negocio para los usua-rios de la misma. Esta es la clave quedebe constituir el objetivo del equipode desarrollo. Muchos equipos olvidan,o no tienen en cuenta de forma conve-niente, que están realizando un trabajocrucial para el negocio de quienes loencargan. Sólo una visión respetada ycomún de estas claves de negocio coad-yuvará al éxito del proyecto.

Permanecer ágil y esperar los cambios

El dinamismo es factor crucial entodo proyecto. Aunque muchos miem-bros de los equipos de un proyecto abo-minan de los cambios, éstos son inhe-rentes a todo desarrollo de software. Por

Page 49: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

tanto, todos los miembros del equipo deben esperarlos cambios y saber reaccionar de forma positiva antelos mismos, viendo en ellos una oportunidad de mejo-rar el proyecto y no un obstáculo para su consecu-ción.

Fomentar las comunicaciones abiertas

El libre flujo de la información reduce los malosentendidos. MSF propugna un entorno de comuni-caciones honestas tanto entre los miembros del equi-po como entre éstos y los elementos externos al mis-mos. Este principio clave se ve constreñido sólo porla confidencialidad a que determinados procesosempresariales y tecnológicos deben estar sometidos.

Conceptos claveExisten un conjunto de conceptos clave para la

organización de todo equipo de trabajo que quierafuncionar a través de la metodología MSF. El respe-to y seguimiento de cada uno de estos conceptos noes anecdótico, sino que constituyen el auténtico núcleodiferenciador frente a proyectos llevados a cabo a tra-vés de otras dinámicas de equipo.

Equipo de individuos

Todas las funciones son importantes para un pro-yecto y tienen una igual valía conceptual. Esto incre-menta la posibilidad de comunicaciones libres entrela totalidad de los miembros del equipo así como sunivel de responsabilidad tanto sobre su función comosobre la totalidad del proyecto. Sólo la convicción deque cualquiera de los objetivos perseguidos en el pro-yecto tienen una igual valía conceptual puede hacerque se consiga el nivel de calidad necesario en el pro-ducto final que se desea obtener. No es más impor-tante la labor del arquitecto de software que la delresponsable del plan de implantación. Un productode arquitectura ejemplar que se implanta de modopoco sensato tendrá tan poco éxito como otro dearquitectura mediocre y sus virtudes pasarán desa-percibidas.

No hay que olvidar, en cualquier caso, que esteprincipio no supone que las decisiones sobre el pro-yecto deban tomarse siempre de forma consensuada.Cada función posee un claro ámbito de responsabili-dad y eso debe ser respetado por cada uno de losmiembros del equipo.

Tendencia a la satisfacción del cliente

La satisfacción del cliente es la principal priori-dad de todo equipo. En todo momento debe existirun compromiso claro del equipo del proyecto paraayudar a solventar los problemas de negocio que el

cliente espera abordar con la solución a desarrollar.Muchas veces los desarrolladores de software ven enun proyecto la oportunidad de lucir sus conocimien-tos tecnológicos, esto no es malo en sí mismo siem-pre que no se olvide que hay un objetivo por encimadel mismo, resolver el problema de negocio del clien-te que nos ha encargado la solución.

Tendencia al producto

El resultado de la labor de todo proceso de desa-rrollo de software es la obtención de un producto.Hay muchos elementos que pueden ayudar a fomen-tar la identidad del producto a obtener, Microsoft hacemucho hincapié en el uso de nombres clave para losproductos en desarrollo, rodeándolos de elementosde merchandising, tales como camisetas, tazas da café,etc. La relevancia que así se consigue del productoredunda en la moral del equipo de desarrollo y, portanto, en el producto final desarrollado.

La tendencia al producto fue perfectamente des-crita por Chris Peters, un jefe de proyecto deMicrosoft para el que la misión de todos y cada unode los miembros de un equipo es liberar un produc-to final, no hacer código o testear o realizar el diseñode clases o hacer el plan de formación; todos tienenuna única misión por encima de todas las demás: libe-rar un producto final.

Tendencia a productos libres de fallos

La calidad del producto final no debe ser delega-da a un equipo que se ocupe de la misma, sino que debeser un objetivo de todos y cada uno de los miembrosdel equipo. Todos debemos tender a que nuestro tra-bajo esté libre de fallos. Todos los miembros del equi-po deben ser abogados del cliente en la persecuciónde la calidad del producto desarrollado. Además, si lacalidad no se persigue en todos y cada uno de los pro-cesos de un proyecto estaremos delegando a unmomento final la persecución de los mismos lo queelevará sobremanera los costes finales del proyecto.

Buena voluntad para aprender

Cada miembro del equipo de un proyecto debemantener un permanente compromiso de autoa-prendizaje y mejora permanente de su entorno decompetencias y conocimientos. Una de las cosas queha hecho grande a Microsoft es la creación de una cul-tura que fomenta en todo momento tanto conseguirel aprendizaje como compartir el mismo.

Los equipos motivados son efectivos

La desmotivación es una de las grandes fuentes defracaso de los proyectos. Sólo los equipos con un alto

dotN

etM

anía

<<

49

dnm.arquitectura<<

Page 50: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

50

dnm.arquitectura<<

nivel de motivación y de moral puedenconstruir grandes soluciones. Algunastécnicas propugnadas por Microsoftpara conseguir esto son:

• Clarificar la visión del equipo.• Trabajar en la construcción de la

identidad del equipo a través de lastécnicas de merchandising antesmencionadas.

• Fomentar los eventos sociales entrelos miembros del equipo para for-talecer el nexo entre colegas.

•Planificar sesiones de construccióndel equipo en que los diferentesmiembros del mismo pueda experi-mentar con distintas vías de colabo-ración e interacción fuera incluso delas del propio trabajo del proyecto.

• Asegurarse de que los objetivosindividuales son respetados yfomentados.

• Atender las expectativas de mejorade los miembros del equipo y escu-char siempre sus puntos de vista.

• Celebrar los éxitos.

Prácticas probadasExisten un conjunto de prácticas

probadas que aseguran el éxito de losproyectos MSF. Microsoft las ha expe-rimentado en sus desarrollos y, por tan-to, parece que la demostración del éxi-to a que conducen está fuera de todaduda.

Equipos pequeños y multidisciplinares

Los equipos pequeños y multidisci-plinares poseen grandes ventajas, entrelas que destaca su mayor dinamismo ycapacidad de respuesta. La recomenda-ción para los grandes proyectos es cre-ar un equipo de equipos donde cada unade las pequeñas piezas mantenga todoel entorno de recomendaciones MSFpara su trozo de proyecto.

Trabajar juntos

Uno de los grandes objetivos a per-seguir en la organización de equiposMSF es la eliminación de los obstácu-los a la comunicación, de forma que lainformación pueda compartirse de laforma más limpia posible.

Tener a los equipos unidos en unamisma localización sería, pues, una delas prácticas probadas elementales paraconseguir este objetivo. Sin embargo,hoy existe una amplia experiencia en laconfiguración de equipos virtuales quefuncionan de forma unitaria aunqueestén ubicados en distintos lugares geo-gráficos. A pesar de esto, existe unimportante factor de riesgo en la pues-ta en funcionamiento de este tipo deequipos. No todos los perfiles indivi-duales se adecuan a esta modalidad orga-nizativa y esto habrá de tenerse en cuen-ta a la hora de determinar qué personasson las más adecuadas para formar unequipo virtual. Las características queMicrosoft recomienda para las personasque formarán parte de un equipo vir-tual son:

• Que puedan trabajar de forma inde-pendiente

• Que demuestren competencias deliderazgo

• Que posean las competencias espe-cíficas requeridas para la solución

• Que puedan compartir conoci-miento con la organización

• Que puedan ayudar a desarrollarmétodos efectivos de trabajo

Participación total en el diseño

Cada función dentro de un equipoMSF debe participar en la creación delas especificaciones del producto, ya quetodos deben tener una perspectiva úni-ca del diseño y de su relación con cadauno de sus objetivos individuales.

Por ello, la participación total en eldiseño debe fomentar un clima en elcual las buenas ideas de todos losmiembros del equipo afloren y coope-ren en la obtención del un productomejor.

ConclusionesDee Hook, fundador y CEO de

Visa Internacional, inventó el terminochaordic, mezcla de caos y orden (chaosy order) para referirse a la naturaleza delos proyectos de IT. Esto representa unimportante punto de partida para MSF,ya que la metodología de Microsoftparte de respetar esa naturaleza. En el

mundo del desarrollo de software nosencontramos con los proyectos clara-mente caóticos donde entre los usua-rios y los desarrolladores montan unespectáculo tal que para un observadorneutral resulta difícil entender lo queallí está pasando y también nos encon-tramos con los proyectos rigurosa-mente encorsetados en el ámbito deuna metodología compleja, donde elauténtico objetivo de hacer softwarequeda enmarañado en una enredadamalla de fases, hitos, documentos, reu-niones, etc. Para MSF la inversión dede este caótico proceso, con el fin deinyectar orden en el mismo pero sincaer en estériles reglamentaciones, esuno de los objetivos a conseguir y unade las ventajas competitivas que le haceestar posicionada como una de lasmetodologías ágiles de que podemosdisponer hoy para hacer software consolvencia.

Si a esto unimos que el aval con quese nos presenta es que es la metodolo-gía a través de la que Microsoft ha con-seguido sus éxitos, poco más necesita-mos para comenzar a usarla en nuestrosproyectos. Un último punto a su favores el pragmatismo con el que se abor-dan la totalidad de los principios teóri-cos que subyacen al método, lo proba-do, lo efectivo, lo que realmente fun-ciona fuera de principios abstractos yreglamentaciones teóricas abstrusas.Algo, sin duda, que nos incita a poner-la en práctica ya.

Para este artículo se ha usado ladocumentación de base de la metodo-logía, tal como está expuesta oficial-mente por Microsoft. Un importanteapoyo ha sido la siguiente documen-tación:

• MSF Process Model 3.1 (1.1)• MSF Project Management Discipline

v. 1.1• MSF Readiness Management Discipline

v. 1.1• MSF Risk Management Discipline v.

1.1• MSF Team Model v. 3.1• MSF v. 3 Overview Whitepaper

El lector puede acceder a la mismaen el área MSF del web de Microsoft:www.microsoft.com/msf

Page 51: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic
Page 52: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

<<

Guía práctica para usuariosJosé Manuel Alarcón

Editorial: Anaya MultimediaNº de páginas: 336ISBN: 84-415-1631-6Publicación: 2004

¡JavaScript en un pañuelo! Imprescindible referencia del lenguaje JavaScript queacaba de ser revisada y actualizada. Con este libro tenemos a mano la sintaxis yuso del lenguaje, especialmente útil cuando ya sabes cómo hacer las cosas peronecesitas refrescar tu memoria, o incluso, si quieres aprender a través de peque-ños ejemplos y olvidarte de los "temibles" mazacotes.

A mi juicio, los libros pequeños cómo éste, centrados en lo que quieren ense-ñar, y apoyándose continuamente con ejemplos, son los mejores para aprender.

Se centra en la programación JavaScript y no en otra cosa, yendo directamen-te al grano desde el principio, sin capítulos dedicados a otras tecnologías.

ASP.NET al descubiertoStephen Walther

Editorial: Prentice Hall/SAMSNº de páginas: 1326Tamaño: 170x240ISBN: 84-205-3472-2Publicación: 2002

Traducción al español del estupendo ASP.NET Unleashed. Este libro es todoun tratado de ASP.NET, dedicado a los programadores que necesiten crear apli-caciones Web. Si ya eres desarrollador de ASP, te vendrá bien pues tiene con-tinuas notas para lo que el autor llama el "ASP Clásico".

En la última parte del libro hay dos aplicaciones de ejemplo. Un sitio de bús-queda de empleo, ASP.NET Jobs, y una tienda on-line, ASP.NET UnleashedSample Store.

Asume que sabemos HTML y que tenemos experiencia con algún lenguaje deprogramación, y más vale así porque sino necesitaríamos ruedas para moverlo,¡que ya tiene 1360 páginas!

dotN

etM

anía

<<

52

dnm.biblioteca.net<<

dnm.biblioteca.net

Page 53: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

Lexico POO es un compilador en castellano, producido por LaboratoriosRioSur.NET E.U., que corre sobre la plataforma .NET.Laboratorios RioSur.net E.U. es una compañía creada para la investigación,pro-ducción y comercialización de software y se orienta a facilitar la incorporaciónde tecnologías de la información en el sector académico. Ha trabajado, previa-mente a su presentación ante la comunidad internacional,durante 15 años en pro-yectos de investigación relacionados con la educación.

dotN

etM

anía

<<

53

dnm.comunidad.net<<dnm.comunidad.net

Lexico POO

surge en 1985 como respuesta a lasnecesidades de un curso tipo taller destinado a ini-ciar en la algoritmia a estudiantes del programaIngeniería de Sistemas en la Universidad de Antioquiasituada en la ciudad de Medellín, Colombia. Allí, fru-to de una evaluación del curso, se encontró que losalumnos tenían una mirada distorsionada del mismopues le consideraban abstracto, hipotético e irreal,concepción que generaba mucho ruido en el fomen-

to de las habilidades para el diseño de algoritmos. Lacarencia de herramientas de apoyo para el procesoque les permitiera “ver” funcionando los frutos de supensamiento producía desmotivación y tensionesinnecesarias. Ante ese panorama se decidió diseñarun lenguaje muy simple que ayudara a cambiar esa

mirada negativa y generara incentivos en el aprendi-zaje. En un proyecto posterior financiado por esa uni-versidad se amplió el diseño inicial y se desarrolló unprototipo de controlador. El siguiente proyecto cons-truyó el primer compilador para DOS inscrito en elparadigma procedimental-imperativo y estructura-do. El proyecto sucesor de nuevo financiado por launiversidad evaluó principalmente la influencia quepudiese tener en los estudiantes obteniéndose resul-tados que sorprendieron a los investigadores. Luegose desarrolló una versión para la web del lado del ser-vidor y posteriormente la versión pura orientada aobjetos que corre sobre la plataforma .NET.

En un horizonte de cinco años los proyectos futu-ros abordarán la ampliación de facilidades para ini-ciar, la producción de documentación en papel y laadición de características internas que proporcionenmayor flexibilidad. La aspiración es que se convier-ta en un laboratorio disponible y ampliamente usa-do para el fomento de la disciplina de la programa-ción y con tal motivo se ha dispuesto un sitio deencuentro en la web para el intercambio de expe-riencias y retos.

Lexico es un lenguaje didáctico para programa-ción en español destinado a facilitar el aprendizaje yla enseñanza de la programación orientada a objetos.Pretende, y las investigaciones realizadas con él así lohan comprobado, mejorar el desempeño de los estu-diantes y motivarlos para avanzar en la generación dehabilidades en lógica de programación pues les per-mite experimentar con los algoritmos diseñados sintener que dedicar meses a aprender un lenguaje deproducción que les permita “ver” sus creaciones.

El compilador soporta las características exigidasinternacionalmente para considerarse puro respectoal paradigma, corre sobre la plataforma distribuible

<< El proyecto Lexico

Lexico es un lenguaje didáctico para programación en español destinado a facilitar el aprendizaje y la enseñanza

de la programación orientada a objetos

Page 54: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

.NET de Microsoft y es descargabledesde su portal ubicado en http://rio-sur.net

Su estructura es sencilla y se hanretirado elementos de eficiencia inne-cesarios en un entrenamiento.

Permite la suficiente sencillez paraentrenarse desde los conceptos básicos enalgoritmos por medio de la descripcióndel mensaje o comportamiento tareapara que la persona practique las estruc-turas fundamentales en lógica (secuencia

con {....}, decisión con es ? y ciclo de repe-ticiones con mientras) y la clásica estruc-tura de datos compuesta llamada arre-glo, hasta en el paradigma de la progra-mación orientada a objetos puro, POO.

El centro medular es la orientacióna objetos para lo cual posee el soporteapropiado y se ha simplificado al máxi-mo de manera que ayude a la inmersiónen los conceptos.

Los objetos pueden ser construidoscon base en las dos clases fundamenta-les, cantidad y caracteres, con base enlas clases establecidas por el programa-dor y con base en las 7000 definicio-nes de la plataforma.net de Microsoft,lo que permite desarrollar verdaderasaplicaciones que incluyan controles y elmanejo de eventos.

Las clases pueden ser definidas den-tro del archivo del programa central oen archivos externos y por la vía de laherencia con base en la librería FCL(Framework Class Library, librería de cla-ses del marco de trabajo) de Microsoft.Aquellas que no hayan sido definidasdentro del archivo principal de trabajoson incorporadas con la instrucciónincluya. Ver fuente 1.

Un ejemplo de descripción de unmensaje, algoritmo o comportamiento:

Fabián Ríos Castrillón y Fabio LeónRuiz Ruiz, profesor y estudiante res-pectivamente en la Universidad deAntioquia en Medellín, Colombia, res-ponsables del proyecto.

Un ejemplo OOP que utiliza unaclase profesional de .net y permite el usode eventos. Ver fuente 2.

dnm.comunidad.net<<

/*Fibonacci http://fractus.mat.uson.mx/Papers/Varios/Articulo97.html*/

tarea:{los objetos i, n, primero, segundo, tercero son cantidadesmuestre: “Entre el número de términos deseados: “entre: ncopie 0 en i, primerocopie 1 en segundomientras i<n haga:

{copie i + 1 en imuestre primerocopie primero + segundo en tercerocopie segundo en primerocopie tercero en segundo}

}

incluya “System.Windows.Forms”

clase ventana derivada_de “System.Windows.Forms.Form”{publicos:mensajes:ventana copie “Este es el título de mi primera ventana” en ventana.text}

Fuente 2

Fuente 1

La nueva versión de RoboHelp X5 ya está disponibleeHelp ha presentado RoboHelp X5 la nueva versión de la herramientapara la creación de ayudas y documentación que más nos gusta. Algunasde las nuevas características son:

• Soporte para multi-autor • Soporte para trabajo distribuido • Importación, exportación PDF y XML • Salida FlashHelp

Más información en www.ehelp.com

La agenda de WhidbeySegún Scott Guthrie la beta pública deWhidbey estará disponible en junio deeste año, mientras que se rumorea queserá en el primer cuatrimestre de 2005cuando se preveé la aparición de la ver-sión definitiva, en lugar de finales de estemismo año.

notic ias breves

Page 55: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

55

dnm.opensource<<

DotNetNuke

no es nueva, pues además deestar basado en dicha implementación de Microsoft,tiene un primo hermano suyo de algo más de edadllamado PHPNuke y escrito en el lenguaje que le dasu nombre.

DotNetNuke trata de poner a disposición de lacomunidad de programadores una implementaciónde un portal de contenido que sirva para gestionarlos usuarios, news, artículos, fotos, banners, foros,búsquedas, encuestas,…. y todo ello pudiendo sergestionado al 100 % y de forma intuitiva a través deuna interfaz de configuración del sistema a la que solopodría acceder el administrador del portal.

El funcionamiento de un portal DotNetNuke estábasado en módulos que podemos activar o desacti-var, así como configurar a través de la zona de admi-nistración. Siguiendo la idea de que la estructura seaextensible, siempre se podrán agregar fácilmentemódulos nuevos al portal.

Con esta sencilla inserción de nuevos módulosmejorará la funcionalidad de DotNetNuke y el desa-rrollo es mucho más estructurado, permitiendo la par-ticipación de programadores muy heterogéneos repar-tidos por toda la geografía terrestre, dando como resul-tado un sistema más rico, que nosotros mismos, comodesarrolladores, podremos modificar para satisfacerun conjunto muy diverso de requisitos del cliente.

A parte de los módulos típicos de un portal hayalgunos más de interés como:

• Un calendario de eventos a modo gráfico• Un lector de noticias en formato RSS• Información meteorológica• Soporte para XML/XSLLo primero que podemos hacer para adentrarnos

en el mundo de DotNetNuke es echar un vistazo alos ShowCases, que son distintos ejemplos en los cua-les se ha utilizado esta implementación para crear unportal de contenido real y en funcionamiento.

En estos se puede apreciar la verdadera potenciadel producto y lo que podemos conseguir con su alta

capacidad de configuración y personalización. La apa-riencia se configura de un modo muy fácil desde laconsola de administración eligiendo el skin que que-remos aplicar al portal. Además hay numerosos skinspara bajar de la red.

Después podemos echarle valor y bajarnos la últi-ma versión para proceder a instalarla en nuestro equi-po y así juguetear un poco.

La instalación no es demasiado compleja, a gro-so modo los pasos serían: primero habría que prepa-rar la base de datos en blanco en SQL Server, luegose descomprime el fichero de DotNetNuke y final-mente configuramos IIS a modo habitual para quefuncione un nuevo sitio Web. Ni que decir tiene quetendríamos que tener el Framework de .NET pre-viamente instalado.

Para conectar DotNetNuke con la base de datospodemos especificar la cadena de conexión en el archi-vo de configuración “web.config”.

Espero que estas líneas sirvan como pequeña intro-ducción del proyecto DotNetNuke o al menos parasaber que éste existe y emplazar al lector a conocermás a fondo su funcionamiento a través de los enla-ces que encontrará en la Web de nuestra revista.

Si participas en algún proyecto Open Source, uti-lizas algún código “libre” en tus desarrollos o sim-plemente has encontrado algo interesante en la redque sigue la filosofía Open Source y que está escritoen alguno de los lenguajes de la plataforma .NET oguarda alguna relación con la misma, no dudes enescribirnos a [email protected] para quepodamos hablar sobre él y darlo a conocer a la comu-nidad de desarrolladores .NET.

<< La idea de DotNetNuke

Aunque disponemos de múltiples módulos para ampliar su funcionalidad,DotNetNukees básicamente un portal de contenido escrito enteramente en .NET y basado en laimplementación de referencia IBuySpy de Microsoft. La aplicación de ejemplo IBuySpyde ASP.NET se creó con el fin de mostrar cómo se podían utilizar las nuevas tecnolo-gías .NET Framework y ASP.NET para generar aplicaciones de comercio electrónicocon todas sus posibles características.

Fernando Nogueras

Page 56: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

Deseo suscribirme a dotNetManía por un año (11 ejemplares) y beneficiarme de la oferta del 10% de descuento por un importetotal de 60€ para España; o por 75€ para el resto de Europa; o por 90€ para el resto del mundo (IVA incluido).

La suscripción se entiende a partir del número actual. Si desea suscribirse a partir de otro número, indíquelo:Si usa un número anterior al actual, los números descatalogados no serán tenidos en cuenta.

IMPORTES VÁLIDOS HASTA NUEVA OFERTA

DATOS DE FACTURACIÓN

CIF/NIF . . . . . . . . . . . . . . . . . . . . .Empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Nombre y apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Dirección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Población . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Código Postal . . . . . . . . . . . . . . . . . . . Provincia . . . . . . . . . . . . . . . . . . . . . . . . .Teléfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . email . . . . . . . . . . . . . . . . . . . . . . . . . . . .

DATOS DE ENVÍO (sólo si son distintos de los datos de facturación)

CIF/NIF . . . . . . . . . . . . . . . . . . . . .Empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Nombre y apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Dirección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Población . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Código Postal . . . . . . . . . . . . . . . . . . . Provincia . . . . . . . . . . . . . . . . . . . . . . . . .Teléfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . email . . . . . . . . . . . . . . . . . . . . . . . . . . . .

FORMA DE PAGO❑ Talón nominativo a nombre NETALIA, S.L.❑ Giro postal a nombre NETALIA, S.L.❑Transferencia bancaria a nombre de NETALIA, S.L. a:

La CaixaNúmero de cuenta 2100 4315 48 2200014696

(Indique su nombre en la transferencia)

❑ Domiciliación Bancaria Indique su número de cuenta:

❑ Tarjeta de crédito❑ VISA q MASTERCARD ❑ AMERICAN EXPRESS

Número de su tarjeta: Fecha de caducidad: / (Imprescindible)

Firma y sello (imprescindible)

a de de 20

Suscripción a dotNetManía

Usted autoriza a la mecaniza-ción de estos datos. El res-ponsable y destinatario deéstos es Netalia, S.L. Ustedtiene derecho a acceder a susdatos, modificarlos y cance-larlos cuando lo desee. Susdatos no serán cedidos en nin-guna de las formas posibles aterceras partes y no se utiliza-rán más que para el buen fun-cionamiento de su suscripcióna la revista dotNetMania ypara informarle de las activi-dades comerciales que realicela editorial Netalia, S.L. Si nodesea recibir informacióncomercial de esta empresamarque la casilla siguiente ❑

❑ Nº1número 1 gratuito*

* Hasta el 15 de marzo o hasta agotar existencias

Envíe este formulario por email a la dirección [email protected], o al fax (34) 91 499 13 64También puede enviarlo por correo postal a la siguiente dirección:

C/ Robledal, 13528529- Rivas VaciamadridMadrid (España)

Page 57: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

Así se quedó Juanita

Book esperando que

le publicaran su libro (foto: Ramírez, 1893)

Hemos necesitadoque pase más de unsiglo pero ahora, en el2004, ya podemosofrecerte la solución+ rápida, económicay eficaz para que tulibro (sea cual sea lamateria tratada) o tutesina vea la luz sinnecesidad de esperarotros tantos años.

Desde una tirada de100 ejemplares lasolución + profesio-nal y económica paraediciones cortas y/opersonalizadas.

nuevosescritoresc/ Collado Bajo, 13 • 28053 Madrid • ✆ 914 770 185 • Fax: 914 773 152

[email protected]

Page 58: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic

dotN

etM

anía

<<

58

Algunos programas de prevención contra el “spyware” son,en realidad,agentes dobles

Así lo denuncia John Borland, de CNET Newsen el artículo “Spyware cures may cause more harmthan good” (http://news.com.com/2102-1032_3-5153485.html?tag=st_util_print). Bajo la promesade vigilar la ejecución de programas de vigilancia(“spyware”), en realidad, realizan la misma funciónque los otros de forma silenciosa.

La próxima versión de Internet Explorer invali-dará el uso de la @

Así se evitaría la inclusión de nombres de usua-rio en las URL y por tanto una posible vulnera-bilidad. Parece se que la próxima versión del pro-grama producirá un mensaje del tipo “invalid syn-tax error”, si el símbolo @ aparece en la direcciónsolicitada.

Un empleado de Google, desarrolla una herramienta de “redes sociales”, como proyecto propio. OrkutBuyukkokten, doctor en Informática por la Universidad de Stanford, y empleado de Google que trabaja en el depar-tamento de investigación de interfaces de usuario, ha desarrollado una nueva herramienta de “encuentro social”(www.orkut.com) como parte del trabajo que Google exige a sus ingenieros un día a la semana: elaborar un pro-yecto propio. Según parece, ésta es solo una de las iniciativas que Google piensa presentar en los próximos meses.

Cientificos de la Universidad de Colorado,crean una nueva forma de materia

Los científicos que aparecenen la foto, Deborah Jin, MarkusGreiner y Cindy Regal, anun-ciaban hace unos días la creaciónde una nueva forma de materia lla-mada “condensado fermiónico”,que viene a añadirse a la lista decinco anteriores (sólido, liquido,gaseoso, plasma y los “condensa-dos Bose-Einstein”, descubiertos en 1995). Este tipo de mate-ria es un paso más en la obtención de materiales supercon-ductores de uso cotidiano, de los que esta nueva forma seencuentra, según Jin, “en un estado intermedio entre el super-conductor y el Bose-Einstein. La forma de comportarse delos átomos de Potasio super-enfriado, sugieren que podríanencontrarse formas de traducir ese comportamiento en sóli-dos a temperatura ambiente”.

noti

cias

.not

icia

s.no

tici

as.n

otic

ias

Microsoft ACSP: (Universidad Politécnica deValencia): proyectos fin de carrera con tecno-logía Microsoft: http://www.upv.es/dalum/acsp/proyectos.htm

Microsoft ACSP: (Universidad de Deusto): sitiode colaboración Microsoft-U. Deusto:http://www.acsp.deusto.es/

Sitio Web de David Salgado (MVP C#,Universidad de Deusto): www.muxu.net

C# Help: un montón de información sobre ellenguaje: http://www.csharphelp.com/

HitMill: Amplia información sobre casi todos loslenguajes, con una buena sección de C#: http://www.hitmill.com/programming/dotNET/csharp.html

OnlyForGurús: Información sobre diversas tec-nologías Microsoft ordenado por categorías:http://www.only4gurus.com/v2/index.asp.

Bitácoras(Blogs relacionacionados con .NET)

Brad Adams: http://blogs.gotdotnet.com/brada/Brian Jepson: http://www.jepstone.net/radio/2002/10/10.htmlChris Anderson (del equipo de desarrollo de VB.NET):

http://www.simplegeek.com/Larry O’Brien: http://www.thinkingin.net/Simon Fell: http://www.pocketsoap.com/weblog/

Utilidades del mesSWF Opener: pequeño ejecutable que permite abrir y ejecutar

ficheros flash sin necesidad de Internet Explorer. Puededescargarse de http://www.geeknews.net

EF Comander Free 3.8.1: Utilidad similar al Windows Comanderde Norton, pero actualizada y gratis. Descargas en:http://www.geeknews.net

HD Cleaner: Pequeña utilidad que permite realizar un manteni-miento de los discos duros. Permite el borrado de ficherostipo BAK, CHK, GID, ~ * *, TMP, etc. Requiere la versión4.71+ de Shell32.dll.

Para los enlaces exactos, visite nuestro sitio en la web, dotnetmania.com

dnm.desvan<<

documentos en la red

Marino Posadas

Page 59: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic
Page 60: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET ... · PDF fileVisual Basic.NET • C# • Delphi • ASP.NET • ADO.NET ... tanto en C# como en Visual Basic