1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Visual Studio 2005 y SQL Server 2005 doc

60 345 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Visual Studio 2005 y SQL Server 2005
Tác giả Alejandro Mezcua, Angel Esteban, Antonio Quirús, Antonio Rojo, David Carmona, Eladio Rincún, Francisco
Người hướng dẫn Paco Marín, Editor, Pilar Pérez, Administraciún, Marino Posadas, Asesor Tộcnico/Coordinaciún, Juan Manuel Urraca, Publicidad
Trường học dotNetManía
Chuyên ngành Software Development
Thể loại tài liệu
Năm xuất bản 2004
Thành phố Madrid
Định dạng
Số trang 60
Dung lượng 1,35 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

El real valor de las certificaciones del mundo informático de sus realidades, mitos y proyección opiniónnº3 abril 2004 • Precio: 6,00 € España Visual Studio 2005 y SQL Server 2005 Whidbe

Trang 1

El real valor de las certificaciones del mundo informático (de sus realidades, mitos y proyección) opinión

nº3 abril 2004 • Precio: 6,00 € (España)

Visual Studio 2005 y SQL Server 2005

Whidbey y Yukon ya tienen nombre

El poder de la reflexión en NET

Generación de tipos en tiempo de ejecución

Visual Studio 2005 y SQL Server 2005

Whidbey y Yukon ya tienen nombre

El poder de la reflexión en NET

Generación de tipos en tiempo de ejecución

Laboratorio Crystal Enterprise v10 Open Source

datNet Comunidades Concurso de creación de páginas Web con ASP.NET

Laboratorio Crystal Enterprise v10 Open Source

datNet Comunidades Concurso de creación de páginas Web con ASP.NET

Equivalencia de instrucciones

de C# y VB NET (y III) • Configuración de aplicaciones Web de ASP.NET

• Gestión de concurrencia en ADO.NET • Introducción a GDI+ • SQL-Server Diseñar la estrategia de copias de

seguridad y restauraciones •

El Señor Arquitecto

Equivalencia de instrucciones

de C# y VB NET (y III) • Configuración de aplicaciones Web de ASP.NET

• Gestión de concurrencia en ADO.NET • Introducción a GDI+ • SQL-Server Diseñar la estrategia de copias de

seguridad y restauraciones •

El Señor Arquitecto

dotNetManía

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

Trang 3

Por supuesto, la noticia del mes es el retraso quesufrirán los lanzamientos de Whidbey y Yukon que

se trasladan a mediados del 2005 y que saldrán almercado conjuntamente bajo los nombres VisualStudio 2005 y SQL Server 2005 Algunos usuarioshan mostrado su malestar al respecto, puesto quehabían pagado por el programa Software Assurancedurante tres años sin recibir ninguna actualizaciónprincipal a cambio Luego están los que se preocu-pan por el soporte de las versiones actuales que pue-den terminar de ofrecerse con poca diferencia conlas versiones nuevas Otros opinan que lo mejor esque el software salga al mercado cuando realmenteesté listo y que esto es mejor aunque haya que espe-rar algo más Pero es que todo esto afecta a tantascosas que sería mejor que estos chicos de Microsoftafinasen más, si bien es cierto, que yo me encuentroentre los que opinan que los lanzamientos precipi-tados para cumplir fechas son a la larga peores paralos usuarios

Acabamos de recibir la noticia de la multa decasi 500 millones de euros (la más alta impuestahasta ahora por este organismo) que la ComisiónEuropea ha impuesto a Microsoft por supuestoabuso de posición dominante en el mercado euro-peo Ahora se iniciará una nueva, larga y aburridabatalla legal, por supuesto Esto viene después deque Steve Ballmer hiciera un viaje inesperado aBruselas, cancelando su keynote en el Summit elmiércoles 17, en la que se especulaba que habríauna demo de Indy, para intentar llegar a una sali-

da negociada que finalmente no fue posible

¿Tendremos un Windows europeo distinto del

res-to? ¿Esta Comisión no debería ser más dura conotros monopolios de hecho que sufrimos los usua-rios de manera sangrante? ¿Lo han hecho en bene-ficio de los usuarios o de los competidores deMicrosoft? Me consta que los fabricantes de RealPlayer, Real Networks están muy satisfechos

Personalmente a mí me importa poco si Windowslleva o no Windows Media Player, de todas formas

yo uso Winamp, pero un sistema operativo debeser capaz de abrir el máximo tipo de archivos posi-ble ¿Harán lo mismo con los visualizadores deotros tipos de archivos? ¿Es mejor para los usua-rios un sistema operativo incapaz de abrir archi-vos en aras a que la competencia pueda vender susvisores?

No quisiera terminar sin tener un sentidorecuerdo para las víctimas y sus familiares y ami-gos del atentado cometido por seres humanos enMadrid el 11 de marzo Extraña palabra la palabra

“humanidad” que suele usarse como aglutinadora

de todos los buenos sentimientos que sólo loshumanos podemos sentir Me pregunto si tambiéndebería servir para aglutinar todo lo malo que sólolos humanos podemos hacer Sólo un humano pue-

de ser tan despiadado ¿Fue, pues, éste un acto de

“humanidad”? Cómo me avergüenza pertenecer a

la misma especie animal que alguno de mis géneres No debemos olvidar tampoco a los muer-tos en Nueva York, en Irak, en Afganistán, en Pales-tina, en Israel, y en tantos sitios donde mueren ino-centes y no tan inocentes a manos de asesinos lega-les o ilegales ¿en nombre de quién? Desde luego

Alejandro Mezcua, Angel Esteban,

Antonio Quirós, Antonio Rojo, David

Carmona, Eladio Rincón, Francisco

Charte, Fernando Guerrero, Fernando Nogueras, Guillermo ‘guille’ Som, Iván González, Jesús López, Jordi Rambla, Jorge Serrano, José Manuel Alarcón, Juan Torres, Liborio López, Luis Miguel Blan-

co, Marino Posadas, Miguel Egea, Miguel Katrib, Pablo Abbate, Pedro Gómez, Pedro Pozo, Pepe Hevia, Salvador Ramos

Diseño y Maquetación

Éride Diseño Gráfico Tel.: (34) 91 477 48 85 eride@eride.net • www.eride.net

Edita

Netalia c/ Robledal, 135

28529 Rivas-Vaciamadrid (Madrid)

Tf (34) 91 6667477 Fax (34) 91 4991364

Imprime

Gráficas Vallehermoso www.graficasvallehermoso.com

Trang 4

El real valor de las certificaciones del mundo informático 8-10 (de sus realidades, mitos y proyección)

El mundo de las certificaciones IT, casi desde su aparición ha generado

controversia, entusiastas y detractores.

Equivalencia de instrucciones de C# y VB NET (y III) 11-14

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

Tercera y última entrega de esta serie de artículos en la que hemos pretendido explicarle

cómo hacer las mismas cosas (o casi) tanto en C# como en Visual Basic NET

En versiones anteriores de la tecnología ASP, la configuración de aplicaciones Web

se realizaba de forma muy distinta En este artículo damos un breve repaso a las

opciones principales de configuración de ASP.NET

La concurrencia, en un entorno multiusuario, es siempre una cuestión

problemática, pero si además se trata de un entorno desconectado como el que se

usa en ADO.NET con sus DataSets y DataAdapters, la problemática es aún

mayor debido a la propia naturaleza desconectada del entorno.

Este trabajo muestra cómo usando reflection se define un conversor de tipos que

permite a partir de un objeto, el cual comparte una misma funcionalidad con un

interface, obtener un objeto proxy equivalente en funcionalidad al original pero

que garantiza ser subtipo de dicha interface.

La llegada de la tecnología NET ha venido acompañada de GDI+ (Graphics

Device Interface), que como su nombre deja entrever, se trata de la nueva

generación del API gráfico de Windows, adaptado a la plataforma NET

Framework.

SQL-Server Diseñar la estrategia de copias de seguridad y restauraciones 43-49

Todos los sistemas necesitan una salvaguarda, pero aquellos que contienen datos

importantes mucho más aún En una base de datos suele guardarse información

muy viva y casi siempre trascendental para el negocio que sustentan.

Parece que la arquitectura está de moda ¿A qué se debe toda esa artillería?

¿Hemos de escondernos en la trinchera hasta que pase la tormenta, o ese bombardeo

sirve para allanar el camino hacia el combate con nuestro enemigo virtual?

Business Objects, líder en el área de Business Intelligence, acaba de lanzar las primeras

versiones bajo su égida de los productos Crystal, adquiridos a Crystal Decisions En este

artículo presentamos Crystal Enterprise 10 [CE10], el hermano mayor de una familia

que también incluye a Crystal Analysis y al ampliamente conocido Crystal Reports.

C# al descubierto de Joseph Mayo.

Arquitectura de aplicaciones para NET Diseño de apicaciones y servicios de

Microsoft Press.

Concurso de creación de páginas Web con ASP.NET para la comunidad de

desarrolladores de ASP.NET en España

dataNet

Trang 5

a nu

es tro

s p ro

am as

Trang 6

En el número anterior de dotNetManía ya

ade-lantábamos como rumor el retraso que sufriríaWhidbey, según palabras del “padre” de ASP.NET

2.0, Scott Guthrie Pues bien, ya no es un rumor.

El día 10 de marzo, Microsoft hizo público el

retra-so que sufrirán tanto Whidbey como Yukon, quepasan de estar listos antes de terminar el 2004 aestarlo en el primer semestre de 2005 Fue elmomento para asignarles su nombre comercial:

Visual Studio 2005 y SQL Server 2005.

Según fuentes de Microsoft, “Microsoft hatomado la decisión de retrasar la entrega de estosproductos para poder llegar a ofrecer los altísi-mos requerimientos que nos han pedido nuestrosclientes”

Según Tom Rizzo, Director of Product

Management for SQL Server, hemos decidido sacar

una beta 2 de Yukon y una beta 1 de Whidbey haciamediados de 2004 y finalmente una beta 3 deYukon para finales de 2004 que no estaba previs-

ta Ambos productos van a estar estrechamenteintegrados, se lanzaron a la vez

El soporte completo de SQL Server 7 y SQLServer 2000 termina en el año 2005, por lo que elretraso en la salida de la nueva versión de SQLServer, significa que habrá menos tiempo para lamigración ¿Supone este retraso en la salida deYukon, un retraso igual en la fecha tope de sopor-

te de las versiones anteriores? Según el citado TomRizzo, Microsoft está considerando una amplia-ción de este soporte

Además, esto puede tener, a nuestro juicio, unclaro efecto dominó Longhorn, la siguiente ver-sión de Windows, sufrirá posiblemente un retra-

so en su salida, al igual que puede ocurrir con elOffice 12, la versión de Office para este sistemaoperativo Hay que tener en cuenta que este sis-tema operativo usará a Yukon para gestionar losdatos del sistema Así mismo, las nuevas versiones

de productos como SharePoint Portal Server,Content Management, Commerce Server depen-den estrechamente de ASP.NET 2.0 e igualmen-

te se pueden ver afectados

Claro que hay fuentes que aseguran que elretraso es precisamente porque una buena parte

de los desarrolladores de Yukon están trabajando

en WinFS, y no sería de extrañar pues la salida deLonghorn es vital para la compañía y empieza aespecularse que podría irse hasta el 2007

Oficialmente, Microsoft sólo reconoce el ble retraso de Orcas que estaría disponible un par

posi-de años posi-después posi-de la salida posi-de Whidbey, según

afirma AriBixhorn, Visual Studio Lead Product

Manager, en una entrevista concedida a eWeek.

Trang 7

<<

Nuevas versiones de Windows

Windows 2003 R2 para 2005

Microsoft ha confirmado su intención de lanzar Windows 2003

R2, una actualización que evolucionará al actual Windows 2003

Server antes de la salida de Longhorn Se rumorea que

posible-mente aparezca en el verano de 2005

Estará diseñado para combinar las características de la versión

gold de Windows 2003, Windows 2003 SP1 y los llamados

“fea-ture packs” o actualizaciones que se han ido sirviendo desde su

apa-rición Aún no tenemos noticias sobre su comercialización,

aun-que esperamos sea una actualización gratuita para los clientes

actua-les de Windows 2003

El SP1 de Windows 2003 quizá esté disponible para finales de este año

Una de las posibles mejoras que la nueva versión tenga sea soporte para Indigo así como otras

carac-terísticas del lado del servidor de Longhorn, aún por determinar, e incluirá la nueva versión del NET

Framework que saldrá el año que viene

Esto es completamente lógico pues la nueva versión del sistema operativo del servidor aparecerá

des-pués de Longhorn y el actual Windows 2003 tendrá que soportar a los PCs que se conecten con Longhorn

actualiza-la red;un bloqueador de popups y ungestor de descargas en el también nuevo Internet Explorer junto con mejoras de seguridad en el

Outlook Express y en el Windows Messenger; un nuevo Windows Update; una remodelada

protec-ción de memoria para evitar los comunes “overruns”; mejoras de seguridad en el Windows Media

Player; y otros cambios

La RC1(Release Candidate 1) de Windows XP SP2 ya está disponible y los betatesters registrados

pueden descargarla desde http://www.microsoft.com/sp2preview Puede obtener más información

en el MSDN en

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwxp/html/secu-rityinxpsp2.asp

Trang 8

De sus realidades y de sus mitos

Cuando estaba en la universidad, una de las cosasque siempre tuve muy claras era la del hecho de bus-car una certificación IT avalada Cuando rendí mi pri-mer examen, hace ya varias líneas de código = ), la ver-dad estaba demasiado nervioso Como cualquier neó-fito, compartí mi tensión , con mis parceros (amigos)

y mi familia, hablándoles de lo que para mí en eseentonces implicaba un espléndido reto Al final delexamen todo salió bien (es un momento que aúnrecuerdo con sonrisa en el rostro), llamé a mi familia

y le escribí a mis amigos del suceso… Varios de des se preguntarán porqué esta introducción de índo-

uste-le tan personal; pues bien así de importante fue para

mi rendir mi primer examen de certificación, pero con

el correr de los días dicha ilusión fue al traste…

" Las certificaciones IT, desafortunadamente, noson tan importantes como crees, es más, fue un dife-renciador algún tiempo, pero con los días se ha con-vertido en toda una farsa.", me repitió mi maestra deconstrucción de software Lo curioso es que para esosdías en Colombia (hace siete años aproximadamente),

la cantidad de certificados era mucho menor, e

inclu-so, ella viajó a Estados Unidos para tomar la ción debida, pues no existía en el país ese tipo de entre-namiento aun Le pregunté por qué razón afirmaba talcuestión, " Willy, verás en estas URL's los exáme-nes están a la venta…", la verdad no podía creerlo, no

capacita-podía creer que después de invertir cerca de 500 res en una semana de educación técnica (demasiadodinero para las economías "latam" en esos días e inclu-

dóla-so hoy) y pagar 80 dólares aproximadamente por elexamen, alguien vendiera la prueba por 200 dólaresaproximadamente (mucho más que para esos días elsalario promedio para un desarrollador no sumaba más

de 220 dólares mensuales en el mejor de los casos aeste lado del charco), quedé realmente desilusionado,

y entendí que nunca las certificaciones equivaldrían osuperarían las ingenierías por dos razones: una de ellas,

la que acabo de relatar; y la siguiente, porque las nologías tienen una duración muy corta, en cambio,cuando eres ingeniero, tus bases "ingeniériles" duranpara siempre (aunque la verdad es que hoy me lleva-ría un rato recordar la metódica de solución a las trans-formadas de fourier =P)

tec-Con ello y otros bemoles, seguí igual tomando miscursos técnicos y rindiendo mis exámenes (incluso per-

dí el 70-300, un examen de arquitectura de NET en

el primer intento, hace sólo algunos meses) A estasalturas usted se puede preguntar ¿porqué seguir rin-diendo estas pruebas, que pareciere que día a día, estu-vieren más y más a la venta por unos pocos dólares?(La verdad es que me asombra el nivel de fidelidad deesos documentos; es tal el descaro, que salen hasta lascapturas de pantalla) ¿Porqué rendir una prueba quetiene un coste tan alto, si las respuestas están a la ven-

ta por un valor con el cual podría comprar el examen

El real valor de las certificaciones del mundo informático (de sus realidades,

Trang 9

entu-completo? -Cuando hago referencias a ellos, no me

refiero a las pruebas de preparación o a los libros que

se escriben sobre tema, desde luego- Ojalá las

multi-nacionales IT que tienen que ver con estos procesos de

certificación, acaben con este cuento pronto;

realmen-te es lamentable que ello suceda y no se pronuncien

Todas las compañías después de aprobar algunos de

sus exámenes, hacen llegar una especie de certificado

impreso y alguna documentación, pero siendo

objeti-vos, no pasa de allí la cuestión, la verdad es que me

pare-ce un poco desigual el "trato" El porqué de este

comen-tario viene a lo siguiente: si una compañía IT

promue-ve como un alto grado de avance el hecho de

certifi-carse, lo mínimo que esperaría sería la generación de

bolsas de empleo de las personas que certifican o la

pro-moción de dichas personas por algún tipo de canal, cosa

que ha día de hoy no sucede y parece que se divise (este

último comentario es una generalidad, desde luego, por

estos lados, las personas de Microsoft, están

retoman-do el tema con toda la fuerza que amerita)

Una perspectiva mundial

y los certificados

Recientemente una de las publicaciones más

importantes en el tema, MCPMag.com, publicó el

resultado de su estudio de salarios con respecto a los

profesionales certificados (no sólo de Microsoft, sino

de diferentes compañías), disponibles en

http://mcp-mag.com/salary2003/ (les recomiendo mucho la

lec-tura de este documento) Muestra dos tendencias

cla-ras: el nivel de profesionales ha aumentado

conside-rablemente, a medida que las certificaciones técnicas

han pasado a ser necesidad por solicitud de los adores y una tendencia al aumento de sus salarios…

emple-entonces ¿qué es lo inclusive de esta encuesta? Bueno,dicha labor de recolección de información, sólo se lle-

vó acabo en Estados Unidos, ¿y el resto de nosotrosdonde quedamos? ¿Será que nuestras economías pue-den equipararse en proporción a salarios…? La res-puesta evidentemente es no Lo que implicaría que elcoste de dicho tipo de educación fuere proporcional-mente ajustada No son lo mismo 100 dólares enEstados Unidos que en Latam

Figura 2 Reporte de MCP's en los últimos nueve meses

Figura 3 Reporte de MCSD's en los últimos nueve meses

Figura 4 Reporte de MCT's en los últimos nueve meses

Trang 10

Desde luego las variables

macroeco-nomías influyen localmente, pero si se ve

con detenimiento el coste de este tipo de

formación IT, no sólo debería ser

ajus-tada localmente, sino después de

ajusta-da, reducirse por lo menos a la mitad La

justificación de esta premisa está en que

somos nosotros los IT (me refiero a todo

el gremio, pero con más fuerza a los

desa-rrolladores de software) quienes

hace-mos que las plataformas permanezcan

y/o se difundan, ello debido a nuestra

inclinación hacia la misma (llámese como

se llame), pues si no hay productos para

la plataforma X o Y, ésta pierde su

posi-cionamiento pero bueno ello daría para

otro escrito de esta saga

Debido al crecimiento de las

certi-ficaciones como requisito, se hace cada

vez más importante la intervención de

la industria, para que estas credenciales

conserven (o en algunos casos

recupe-ren) su buen nombre

Una buena alternativa, pudiere ser el

hecho de exigir un tiempo comprobable

con la tecnología antes de rendir la

prue-ba de certificación de la misma y con ellosustentar la credencial en caso de rendirpositivamente la prueba A día de hoy,algunas compañías, mantienen esta mecá-nica Esto permite mantener la credibi-lidad en la credencial y en consecuenciadel profesional que decide tomarlas y melleva al siguiente punto de este escrito

¿Contrataría usted a un profesional sin experiencia

de campo y con certificaciones

a su haber?

Esta es la misma pregunta que rían hacerse las personas que se lograncertificar de una manera, cómo decir-lo… "poco ortodoxa"

debe-Si me hicieran esta pregunta, mi puesta sería un contundente JAMÁS (¿dequé me sirve un experto de diploma, si

res-en realidad tres-engo un fiasco como ado?) Desde mi perspectiva, es sencilla-

emple-mente inconcebible que un profesionaldiga tener credenciales que lo habilitancomo experto en un frente tecnológico

y que no posea experiencia Si usted esempleador, es muy buena idea enterarsedel Skill de cada certificación, y con ellodeterminar si es equiparable lo uno con

lo otro Es notorio que la certificación es

un diferenciador, pero no lo será pormucho tiempo, pasará a ser un requisito(así se puede leer en la encuesta de

MCPMag que recomendaba unas líneas

arriba), aunque bueno fuera que brara su estatus de credibilidad

reco-A pesar de esta posición un pocoescéptica (y desde luego desde una pers-pectiva muy personal y ya para rematarestas líneas), usted debe tener en cuen-

ta que las certificaciones son buena idea,pero aún mejor idea es conocer a fon-

do las tecnologías para ser un real to… así no te certifiques Nos vemos en

exper-un próximo articulo… debo seguir diando para rendir mi próxima certifi-cación =)

noticias noticias noticias noticias

Con motivo del Silicon Valley Speaker Series,

en marzo de 2004, Microsoft presentó

BizTalk® Server 2004 BizTalk es una

solu-ción de integrasolu-ción líder en la industria y

miembro del Windows Server System™ Las

aplicaciones creadas con BizTalk Server 2004

corren bajo NET Framework, lo cual

per-mite a los clientes automatizar y administrar

procesos empresariales complejos al integrar

aplicaciones, socios comerciales y

emplea-dos con el núcleo de organización de

proce-sos altamente escalable de BizTalk Server.

BizTalk Server 2004 ayuda a incrementar la

productividad de los trabajadores con

infor-mación, los profesionales en TI y los

desa-rrolladores a través de herramientas

especí-ficas para desarrollar, administrar y acceder

a los procesos empresariales en entornos

familiares tales como Microsoft Office

System y Visual Studio® NET 2003

“En la actualidad, las empresas se

enfren-tan a retos imporenfren-tantes para administrar y

automatizar los procesos empresariales cada

vez más desconectados BizTalk Server 2004

permite a los clientes administrar y

automa-tizar sus procesos empresariales, al tiempo

que brinda a los usuarios herramientas para

diseñar, implementar y supervisar estos

pro-cesos en tiempo real”, dijo Ted Kummert,

vicepresidente corporativo del Grupo de Servidores E-Business de Microsoft “Los primeros usuarios han obtenido gran valor

de sus soluciones BizTalk Server 2004, y el día de hoy nos emociona poder ofrecer los mismos resultados a más clientes”.

Nuevas características que zan y administran los procesos empre- sariales de principio a fin Además de las

organi-capacidades de integración de aplicaciones contenidas en las versiones anteriores, BizTalk Server 2004 brinda nuevas capaci- dades que permiten a las empresas admi- nistrar y aplicar reglas a los procesos empre- sariales, conectarse con los socios comer- ciales y analizar el estado de los procesos empresariales en forma más efectiva Las nuevas funciones incluidas en BizTalk Server 2004 incluyen lo siguiente:

• Administración de procesos riales (BPM) Ofrece una máquina de

empresa-mensajes y organización muy escalable con capacidad BPM de nivel empresarial, incluyendo soporte para Business Process Execution Language (BPEL), un nuevo estándar para enlazar los procesos empre- sariales entre los socios comerciales, las aplicaciones y los usuarios empresariales

• Integración en Visual Studio NET

2003 Permite a los desarrolladores

cre-ar, organizar y administrar los procesos empresariales a través de un ambiente de desarrollo integrado y muy productivo

• Supervisión de actividad de estado (HAT) Permite a los administradores

supervisar y administrar el estado de sus procesos empresariales dentro de sus ambientes BizTalk Server

• Entrada única empresarial Optimiza el

proceso de verificación de entrada de los usuarios Windows y no Windows que acce- den a las aplicaciones de giro empresarial

• Máquina de normas empresariales muy escalable Permite a los analistas empre-

sariales crear normas y políticas flexibles

y de mejor respuesta en torno a los cesos empresariales

pro-• Supervisión de actividad empresarial (BAM) Ofrece a los trabajadores con

información supervisión en tiempo real de los procesos empresariales a través de herramientas conocidas como Microsoft Office Excel o Microsoft Office SharePoint Portal Server 2003

• Integración en Microsoft Office System Permite el análisis de procesos y

datos.

Microsoft lanza BizTalk Server 2004

Trang 11

En algunas de estas instrucciones se utilizan

expresiones que devolverán un valor verdadero

(true) o falso (false)

En esas expresiones podemos utilizar cualquiera

de los operadores condicionales mostrados en la

tabla 8 También podemos formar expresiones

múl-tiples usando los operadores condicionales

mos-trados en esa misma tabla

En la tabla 9 se muestran algunos ejemplos de

cómo usar las instrucciones de selección o de tomas

de decisiones según usemos if elseo switch

case / Select Case

En los comentarios se indican algunas de laspeculiaridades de C# y de Visual Basic NET

Las instrucciones para realizar bucles

Las instrucciones para realizar bucles nos miten iterar un número determinado (o indeter-minado) de veces sobre una parte del código Elcódigo lo incluiremos dentro de dicho bucle

per-En C# el código a usar en un bucle puede seruna sola instrucción, terminada con un punto ycoma, o un bloque de código, incluido dentro de

un par de llaves

En VB NET los bucles siempre estarán dentro

de un bloque de código bien delimitado, es decir,

Menor, menor o igual, mayor o mayor o igual son los

Tabla 8 Instrucciones (operadores) de comparación

Tercera y última entrega de esta serie de artículos en la que hemos pretendido explicarle cómo hacer las mismas cosas (o casi) tanto en C# como en Visual

Basic NET

Trang 12

En Visual Basic NET un tructor se define por medio de un pro-cedimiento (Sub) llamado New En C#

cons-el constructor será un

procedimien-to “especial” que se llama igual que lapropia clase (o tipo) que estamos defi-niendo

Por otro lado, un destructor se liza cada vez que destruimos un obje-

uti-to, en NET Framework se llamafinalizador, de hecho, en Visual Basic.NET se utiliza como destructor unasobrecarga del método Finalizedecla-rado en la clase Object En C# el des-tructor se define usando el nombre

de la clase precedida con ~ Un tructor se llamará cuando un objetodeje de estar en “ámbito” o se asigne

des-un valor nulo a la variable Hay quetener en cuenta que en NET losobjetos no se destruyen inmediata-mente, sino que cuando dejan de ser

Tarea a realizar C# VB NET

Toma de decisiones con if if(a != b) <código>; If a <> b Then <código>

Toma de decisiones con if if(a > b){ If a > b Then

con varias instrucciones <código> <código>

Instrucción if que si se if(a > b) If a > b Then

cumple haga una cosa y si no <código> <código>

usando varias líneas <código> <código>

End If

Varias instrucciones if else if(a != b) If a <> b Then

asociadas a otro if <código> <código>

else ElseIf b > i AndAlso a

> b Then if(b > i && a > b){

<código>

<código>

Else }

En C# no se distingue entre un if de simple línea o multilínea, pero si queremos usar varias instrucciones en

lugar de una sola acabada con un punto y coma, las incluiremos dentro de un bloque entre un par de llaves {}

En VB NET podemos crear un bloque If multilínea acabándola con End If, tanto en el bloque If como en el

blo-que Else o ElseIf podemos indicar una o más líneas con instrucciones Si no se indica End If se tomará como una

instrucción de una línea, en la que se puede incluir también la parte Else, pero siempre en la misma línea física

Seleccionar entre varias switch(<expresión>){ Select Case <expresión>

opciones usando switch case <constante1>: Case <valor1>

<código> <código>

break;

case <constante2>: Case <valor2>, <valor3>

case <constante3>: <código>

<código> Case <valorA> To <valorB>

En C# sólo se pueden usar valores constantes con cada cláusula case Podemos anidar una tras otra indicando

varios case seguidos Después de cada bloque case hay que usar la instrucción break o bien se debe salir del

blo-que de código, ya blo-que no se permite pasar de un case a otro, salvo blo-que usemos goto case <constante>

En VB NET en cada cláusula Case se pueden indicar varios valores separados por comas, incluso un rango de

valores usando To o un valor condicional usando Is Esos valores no tienen porqué ser constantes, pueden ser

también expresiones

Tabla 9 Instrucciones de decisión < <

Trang 13

se hará inmediatamente, este punto esimportante ya que si nuestro objetomantiene recursos externos éstos no

se liberarán inmediatamente, en esoscasos, es recomendable definir unmétodo al que llamemos de formaexplícita para liberar esos recursos jus-

to cuando ya no los necesitemos

Los constructores siempre rán a un constructor de la clase deri-vada, si no lo indicamos expresamen-

llama-te, el compilador intentará llamar a

un constructor sin parámetros Encaso de que la clase base no tenga defi-nido un constructor sin parámetros,tendremos que realizar nosotros esallamada, indicando el constructor ade-cuado, si no lo hacemos se producirá

destru-de forma explícita

En la tabla 11 podemos ver cómodefinir los constructores y destructo-res, así como la forma de invocar aotra sobrecarga de un constructor de

la misma clase e incluso de la clase de

la que se deriva

Tarea a realizar C# VB NET

Bucle for for(<inicio>; <final>; For <contador> =

<incremento>) <inicio> To <final>

<código> <código>

Next

Bucle for infinito for(;;) ; For i = 0 To 0 Step 0:

Nota: Espero que a nadie en su Next

sano juicio se le ocurra hacer esto

Bucle for con incremento for(int i = 0; i<10; i For i = 0 To 9 Step 2

distinto de uno += 2)

<código> <código>

Next

Bucle for para recorrer de mayor for(int i = 10; i>0; i—) For i = 10 To 1 Step -2

Next

En C# podemos indicar varias instrucciones después de if o else incluyéndolas dentro de un bloque entre

un par de llaves {} o bien una sola instrucción acabada con punto y coma

En VB NET podemos crear un bloque If acabándola con End If, tanto en la parte If como en la parte Else

podemos indicar una o más líneas con instrucciones Si no se indica End If se tomará como una instrucción

en una sola línea

<código> <código>

}while(true) Loop

Bucle con una condición después do{ Do

de cada iteración, se repetirá <código> <código>

mientras se cumpla la condición }while(<expresión>) Loop While <expresión>

Bucle con una condición al principio while(<expresión>) Do While <expresión>

<código>; <código>

Loop While <expresión>

<código>

End While

Bucle que continúe la ejecución do{ Do

hasta que se cumpla <código> <código>

la condición }while(! <expresión>) Loop Until <expresión>

Bucle que continúe la ejecución while(! <expresión>){ Do Until <expresión>

hasta que se cumpla la condición, <código> <código>

al principio del bucle

Salir de un bucle do o while break; Usar Exit seguida del

tipo de bucle:

Exit Do para Do Loop Exit While para While

End While

En C# los bucles do se utilizan con una instrucción while al final del bucle, esta instrucción es la que se

encarga de comprobar si el bucle debe seguir ejecutándose o no Si queremos que el bucle se repita

indefi-nidamente podríamos usar una expresión que siempre devuelva un valor verdadero

En Visual Basic NET podemos usar la instrucción While o la instrucción Until, en C# no existe la

ins-trucción Until, pero se puede simular usando un while en el que se niega la expresión usada

En VB NET se puede usar While como instrucción asociada a Do Loop o como instrucción

indepen-diente, en ese caso el final del bloque del código se indicará con End While

Tabla 10 Instrucciones de bucles

Trang 14

Definir clases abstractas

y selladas, miembros tractos y virtuales, redefinir

abs-y ocultar métodos

Las clases abstractas son clases quesólo se pueden utilizar para derivarnuevas clases, no se podrán usar paracrear nuevos objetos Una clase abs-tracta puede contener métodos y pro-piedades normales así como abstrac-tos, los métodos abstractos sólo sedefinen como en las interfaces: sincódigo que los hagan operativos.Por otro lado los métodos virtua-les son los que podremos redefinir en

la clase derivada, para dar la nalidad adecuada que creamos conve-niente Las referencias a las instanciascreadas en memoria siempre usaránlas versiones redefinidas de los méto-dos (o miembros) virtuales Por defec-

funcio-to, los métodos y propiedades de unaclase no son virtuales, es decir, no sepueden redefinir en las clases deriva-das, sin embargo podemos ocultarlos.Esos miembros ocultados sólo perte-necerán a la instancia de la clase quelos define, no a las referencias obte-nidas a través de tipos de la clase base.Los miembros abstractos siempreson virtuales

También podemos definir clasesselladas, lo contrario de las clases abs-tractas, es decir, clases que no se pue-den usar para derivar nuevas clases apartir de ellas

También podemos ocultar tiposademás de los miembros de una clase

En la tabla 12 podemos ver unalista de las instrucciones usadas paradeclarar clases abstractas, miembrosabstractos, virtuales, así como las ins-trucciones usadas para ocultar miem-bros y para redefinir los miembrosvirtuales de las clases base

Por supuesto no se han cubiertotodas las posibilidades sintácticasentre los dos lenguajes más usados de

la plataforma NET, pero espero que

al menos ahora tengas una idea tante aproximada de cómo hacer lastareas más comunes tanto en C#como en Visual Basic NET, de for-

bas-ma que en cualquier momento teresulte fácil poder escribir código encualquiera de estos dos lenguajes

Tarea a realizar C# VB NET

Definir un constructor de una clase public Cliente() Public Sub New()

que la clase se llama Cliente

Definir un constructor que recibe public Cliente(int id) Public Sub New(id As

En C# el constructor siempre se llama como la clase

En VB NET el constructor siempre es un método Sub llamado New

Los destructores sólo se pueden usar en las clases no en las estructuras

Definir un constructor que llama a otro public Cliente(int id, Public Sub New(id As

constructor de la propia clase string nombre) : Integer, nombre As

this(id) String) {} Me.New(id)

End Sub

Definir un constructor que llama public Cliente(int id, Public Sub New(id As

a otro constructor de la clase base string nombre) : Integer, nombre As

base(id) String) {} MyBase.New(id)

End Sub

Tabla 11 Constructores y destructores.

Tarea a realizar C# VB NET

Definir una clase abstracta abstract class Prueba MustInherit Class

Los miembros abstractos sólo definen el método o propiedad, pero no contienen código que lo defina

Redefinir un miembro abstracto o override void Prueba() Overrides Sub Prueba()

End Sub

Definir un miembro que oculta new void Prueba3() Shadows Sub Prueba3()

En VB NET si se quiere ocultar un miembro virtual, además de usar Shadows debemos usar la

instruc-ción Overloads

Nota sobre seguridad: Los miembros declarados como virtual internal (Overridable Friend en VB) en

teo-ría sólo se pueden reemplazar en clases definidas en el propio ensamblado, pero esa “restricción” sólo es

aplicable a los compiladores de C# y de VB, el CLR no tiene esa restricción, por tanto es teóricamente

posi-ble reemplazar esos miembros desde otro ensamblado, al menos por compiladores que no tengan dicha

res-tricción Para más información: /cpguide/html/cpconkeyconceptsinsecurity.htm

/cpguide/html/cpconsecurityconcernsforinternalvirtualoverloadsoverridablefriendkeywords.htm

Tabla 11 Constructores y destructores.

Trang 16

ASP.NETesto ha cambiado y nos permite realizar

una configuración de las aplicaciones

Web basada en ficheros en formato

XML Este sistema de configuración de

ASP.NET hace uso de dos tipos de

ficheros de configuración:

1 Configuración del servidor: Que se

alma-cena en un fichero denominado

machi-ne.config Este fichero va a representar

la configuración por defecto de todas

las aplicaciones ASP.NET existentes

en el servidor y se localiza en el

direc-torio Windows \Microsoft.NET

\Framework\[versión]\config.

2 Configuración de la aplicación: Se

almace-na en el fichero web.config Un servidor

Web puede contener varios ficheros

web.config, cada uno de ellos dentro del

directorio raíz de cada una de las

apli-caciones ASP.NET del servidor La

con-figuración indicada dentro de un

fiche-ro web.config sobrescribe los valores

espe-cificados en el fichero machine.config.

Ventajas

Este nuevo mecanismo de

configu-ración que encontramos en la

platafor-ma NET para configurar las nes Web de ASP.NET, aporta lassiguientes ventajas:

aplicacio-• Valores de configuración en formato

legible: Es muy sencillo abrir un

fichero XML y leer o modificar laconfiguración

• Actualizaciones inmediatas: Las

modificaciones realizadas en laconfiguración de las aplicaciones

se aplican de forma inmediata sinnecesidad de reiniciar el servidorWeb o parar los servicios

• Configuraciones fácilmente repetibles:

Para tener una aplicaciónASP.NET con la misma configu-ración que otra aplicación distin-

ta, únicamente debemos copiar losficheros de configuración en eldirectorio de la aplicación corres-pondiente

• Bloqueo de valores de configuración:

Podemos bloquear los valores deconfiguración que deseemos paraque no sean sobrescritos

• ASP.NET configura de maneraautomática el servidor Web IIS paraque no sea posible que un clienterealice una petición a un fichero

web.config, y de esta forma pueda ver

la configuración de nuestra ción ASP.NET

aplica-Proceso de obtención

de la configuración de una aplicación Web

A continuación se va a comentar elproceso que sigue la plataforma NETpara obtener y aplicar la configuraciónfinal de una aplicación ASP.NET

A la hora de obtener la ción se produce una fusión entre los

configura-ficheros machine.config y web.config Los

valores de configuración se heredanentre distintas aplicaciones ASP.NET,

siendo el fichero machine.config la

con-figuración raíz de la que heredan elresto

Por lo tanto, en primer lugar

tene-mos el fichero machine.config que

afec-tará a todas las aplicaciones ASP.NETexistentes en el servidor Web A los valo-res de configuración indicados en estefichero se le añadirían o sobrescribirí-

an los presentes en el fichero web.config

que posee un sitio Web, que actúa comouna aplicación ASP.NET

rea-en un repositorio binario drea-enominado metabase de Internet Information Server Se trea-enía que acceder a las distintas hojas de propiedades que nos ofrecía IIS para poder configu- rar nuestra aplicación.

Pero en la tecnología

<

Trang 17

Si dentro de este sitio Web tenemos

definida una aplicación ASP.NET, que

ofrece su propio fichero web.config, éste

se combinaría con el fichero XML

pre-sente en el sitio Web predeterminado

Y así podríamos seguir una cadena de

combinación de ficheros web.config.

Formato de los ficheros de

configuración de una

aplicación ASP.NET

Tenga a mano el contenido de un

fichero machine.config y web.config para

seguir el artículo de forma más

senci-lla y conseguir un mayor

aprovecha-miento del mismo

Los ficheros machine.config y el

fiche-ro web.config internamente presentan el

mismo formato XML El elemento raíz

es siempre <configuration> Dentro de

éste podemos encontrar dos secciones

generales: Sección de los manejadores y

sección de los valores de configuración

Sección de los manejadores

Identifican las clases de NET

Framework que se utilizarán cuando el

sistema de configuración se carga Esta

sección se encuentra entre las etiquetas

<configSections> La función de estas

cla-ses es la de leer los valores de la sección

de los valores de configuración que les

corresponda

El atributo name de la etiqueta

<sec-tion> define el nombre de la etiqueta del

elemento de la sección de los valores de

configuración del que se va a encargar

el manejador, cuya clase especificamos

en el atributo type, dentro de este

atri-buto además se indica el assembly en el

que se encuentra la clase junto con su

versión correspondiente

Si se desea definir manejadores para

una sección de valores de configuración

que a su vez va a tener varias secciones,

las distintas etiquetas <section> irán

inclui-das entre las etiquetas <sectionGroup>.

En el fuente 1 se muestra un

frag-mento del fichero machine.config que se

corresponde con la definición de dos

manejadores para las secciones

sessionState y trace, que a su vez

perte-necen al grupo <system.web>, también se

define el manejador para la sección

appSettings El grupo <system.web> va a

ser de gran interés, ya que nos va a mitir configurar los distintos aspectos

per-de nuestras aplicaciones ASP.NET

Una vez que se ha declarado la ción de los manejadores no es necesa-rio volver a declararla en los ficheros

sec-web.config, ya que si se encuentran en el

fichero machine.config, o en un fichero

web.config de nivel superior, la

En muchos de los casos necesitaremossaber únicamente el significado de laopción que vamos a modificar

Normalmente los valores de ración de la aplicación ASP.NET no los

configu-vamos a indicar en el fichero

machine.con-fig, ya que estos valores afectarán a todas

las aplicaciones ASP.NET del servidor,

sino que utilizaremos un fichero

web.con-fig particular para una aplicación ASP.NET

determinada En este fichero web.config

heredaremos la sección de los

manejado-res indicada en el fichero machine.config.

Tareas de configuración más comunes

Si examinamos detenidamente el

fichero de configuración machine.config

que tenemos en nuestro equipo, mos encontrar alrededor de treintaopciones de configuración distintas Eneste artículo no vamos a tratar todasestas tareas de configuración, sino quevamos a ver las más comunes y las quemás se pueden usar en un entorno real

web.config.

Configuración general

En esta sección se va a indicar una serie

de parámetros de configuración cos para la aplicación ASP.NET Para ello

genéri-se hace uso de la etiqueta <httpRuntime>.

Esta etiqueta tiene como más vos los siguientes atributos:

significati-• executionTimeout: En este atributo

indicaremos en segundos el tiempo

de espera que se aplicará a la ción de un recurso solicitado Una

< sectionGroup name =”system.web”>

< section name =”sessionState”

type =”System.Web.SessionState.SessionStateSectionHandler, System.Web, Version=1.0.2411.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”

allowDefinition =”MachineToApplication” />

< section name =”trace”

type =”System.Web.Configuration.TraceConfigurationHandler, System.Web, Version=1.0.2411.0, Culture=neutral,

Trang 18

vez sobrepasado este tiempo de

espera la aplicación ASP.NET

fina-lizará la ejecución del recurso Por

si al cliente se le va a devolver una

URL completa o una URL

relati-va Por defecto es false, por lo que

se enviará una URL relativa

Configuración de la página

Mediante la etiqueta <pages>

pode-mos controlar algunos de los

compor-tamientos de las páginas ASP.NET

presentes en una aplicación La

eti-queta <pages> puede tener los

siguien-tes atributos:

• autoEventWireup: Indica si los

even-tos de la página se van a lanzar de

for-ma automática Por defecto es true.

• buffer: Se utilizará para activar o

desactivar el búfer de las páginas

ASP.NET de la aplicación actual

Puede tomar valores true/false.

• enableSessionState: Este atributo

per-mite activar o desactivar el estado de

sesión, es decir, permite o no la

uti-lización del objeto Session para

alma-cenar información común a la sesión

actual del usuario con la aplicación

Web Puede tomar valores true/false.

• enableViewState: Permite activar o

desactivar el mantenimiento

auto-mático de los valores de los

contro-les Web dentro de los formularios

Web Por defecto es true.

Estos atributos se corresponden con

los atributos del mismo nombre de la

directiva @Page, por lo que utilizando

esta directiva podemos sobrescribir estos

valores de configuración para una

guración vamos a utilizar pares clave/valor.

Estos valores de configuración

defi-nidos en la sección <appSettings> los

vamos a poder recuperar en las páginasASP.NET de la aplicación Esta etiqueta

de configuración de la aplicación no se

encuentra dentro de la sección

<sys-tem.web>.

Dentro de la etiqueta <appSettings>

tenemos unas subetiquetas <add>.

Existirá una etiqueta <add> por cada

parámetro o valor que queremos car en la aplicación, esta etiqueta posee

indi-dos atributos: key, que es la clave con la

que después vamos a poder acceder aeste parámetro a través de la colección

AppSettings, y value que va a ser el valor

que le vamos a asignar al parámetro

En el fuente 4 se muestra el

frag-mento de un fichero web.config en el que

se definen dos parámetros para la cación: Se indica una cadena de cone-xión y una sentencia SQL

apli-Configuración de la sesión

Desde el fichero de configuración

de la aplicación ASP.NET tenemos laposibilidad de configurar la forma en laque se va a utilizar el estado de sesión

mediante la etiqueta <sessionState> Para

ello presenta los siguientes atributos:

• mode: Indica el modo de

almacena-miento utilizado para el proceso que

se corresponde con el estado de lasesión Los valores que podemos

asignar a este atributo son: InProc,

el estado de sesión se encuentra en

el proceso actual de ASP.NET; Off,

el estado de sesión se encuentra

desactivado; SQLServer, se utiliza

un proceso de SQL Server para

almacenar el estado; StateServer, se

utiliza un proceso en forma de vicio de Windows para almacenar

ser-el estado Por defecto es InProc.

• stateConnectionString: En este

atri-buto se indica la dirección IP y elnúmero de puerto utilizados paracomunicarse con el servicio deWindows que ofrece las facilidades

de almacenamiento Este atributoúnicamente tiene sentido utilizarlo

cuando el atributo mode tiene el valor de StateServer.

na debe incluir la dirección IP y el

nombre y contraseña de usuariopara conectar a la base de datos deSQL Server

• cookieless: Atributo que indica si el

objeto Session utiliza cookies para

almacenar el identificador de sesión,

o por el contrario no las utiliza y elidentificador de sesión lo va mante-niendo a través del mecanismo deURLs El mecanismo de URLs seráutilizado cuando el valor de este atri-

buto sea true Por defecto es false.

• timeout: El atributo timeout

especifi-ca, en minutos el intervalo de

inac-tividad para el objeto Session Si el

usuario no actualiza o solicita unapágina durante ese intervalo, la sesióntermina Por defecto es 20 minutos

< pages buffer =”true” enableSessionState =”true”

enableViewState =”true” autoEventWireup =”true”/>

< add key =”conexion” value =”server=aesteban;database=datos;uid=sa;pwd=”/>

< add key =”sentencia” value =”select nombre, apellidos,email from Usuarios”/>

</ appSettings >

</ configuration >

Fuente 3 Ejemplo de uso de la etiqueta <appSettings>

Trang 19

Los valores indicados en la sección

<globalization> nos va a permitir

confi-gurar las opciones de codificación y

cul-tura La etiqueta <globalization> nos

ofrece cinco atributos para indicar

diver-sos aspectos de la codificación utilizada

en nuestra aplicación:

• requestEncoding: Mediante este

atri-buto podemos indicar la

codifica-ción utilizada en cada solicitud Por

defecto tiene la codificación utf-8.

• responseEncoding: Este atributo

tie-ne el mismo significado que el

ante-rior pero aplicado a una respuesta

enviada al cliente Por defecto

tie-ne la codificación utf-8.

• fileEncoding: Permite indicar el tipo

de codificación aplicado a los

fiche-ros Por defecto tiene la

codifica-ción utf-8.

• culture: Podemos especificar el lugar

en el que nos encontramos para que

se aplique a las cadenas el idioma

ade-cuado, así como también a las fechas

y su formato Por ejemplo, en-US

representa al idioma inglés de Estados

Unidos y fr-FRfrancés en Francia

• uiCulture: Indica la misma

infor-mación que en el atributo anterior,

pero se va a utilizar para realizar

búsquedas en las cadenas del

idio-ma correspondiente

Identidad de la aplicación

En la sección <identity> vamos a

poder configurar la identidad del

pro-ceso que ejecuta ASP.NET en el

servi-dor Para ello esta etiqueta nos ofrece

los siguientes atributos:

• impersonate: Si posee el valor true

indi-ca que el proceso de ASP.NET se va

a ejecutar bajo la identidad por

defec-to, el usuario IUSR_NombreServidor,

o bien bajo el usuario que nosotros le

indiquemos Por defecto es false.

• name: Este atributo estará

disponi-ble cuando el atributo impersonate tenga el valor true, y lo vamos a uti-

lizar cuando deseemos indicar unacuenta de usuario de Windows espe-cífica para representar al proceso deejecución de ASP.NET

• password: En él indicaremos la

con-traseña del usuario que se va a lizar en el proceso

uti-En el fuente 6 se puede observar eluso de esta etiqueta En este caso se indi-

ca que utilice como identidad del

proce-so de ASP.NET un usuario de Windows

Si quisiéramos utilizar el usuario de IIS,

le asignaríamos el valor de cadena vacía

a los atributos name y password:

Configuración de trazas

La configuración del mecanismo detrazas que de ASP.NET se hace a tra-

vés del uso de la etiqueta <trace> que

tie-ne los siguientes atributos:

enabled: Este atributo indica si el

mecanismo de trazas se encuentra

acti-vado a o no Tiene por lo tanto la

ma funcionalidad que el atributo de

mis-mo nombre de la directiva @Page Su valor por defecto es false.

requestLimit: En este atributo

indi-caremos el número máximo de ciones HTTP de las que se va a alma-cenar información de trazas Las tra-zas van a ser almacenadas en un regis-tro de trazas mediante un mecanismocircular en las que permanecerán las

peti-últimas n peticiones Por defecto es

10

• pageOutput: Indica si la información

de trazas se va a mostrar al final decada página ASP.NET, tal como sehace con las trazas a nivel de pági-

na Por defecto es false.

• traceMode: Este atributo nos permite

indicar el modo de ordenación de losmensajes de trazas en la sección

Información de seguimiento Puede

pre-sentar los valores SortByCategory y

SortByTime Por defecto es SortByTime.

• localOnly: Indica si la información

de trazas se muestra únicamente alos clientes locales o por el con-trario, se muestra también a losclientes remotos Por defecto es

false.

Le animo a que siga investigando lasnumerosas posibilidades de configura-ción para las aplicaciones Web que ofre-

ce ASP.NET Lo mejor es empezar porobservar los contenidos de los ficheros

de configuración

< configuration >

< system.web >

< globalization requestEncoding =”utf-8” responseEncoding =”utf-8”

culture =”es-ES” uiCulture =”es-ES”/>

Trang 20

la última vez que lo leyó Por ejemplo, remos la siguiente secuencia de sucesos:

conside-• Los usuarios A y B leen el registro R1 de

la base de datos cargándolo en un DataSet

• El usuario A modifica R1

• El usuario A guarda R1 en la base de datos

• El usuario B modifica R1

• El usuario B guarda R1 en la base de datos

• El usuario B recibe una excepción

DBConcurrencyException, indicando un

con-flicto de concurrencia al haber sido ficado R1 desde la última vez que B lo leyó

modi-Los conflictos de concurrencia no se cen solamente al actualizar un registro porqueotro usuario lo haya modificado, también ocu-rren si el registro ha sido eliminado por otro usua-rio Asimismo, tienen lugar cuando un usuariointenta eliminar un registro que ha sido modifi-cado e incluso que ha sido eliminado Con lainserción, sin embargo, es evidente que no se pro-ducen conflictos de concurrencia, ya que es impo-sible que otro usuario pueda modificar un regis-tro que aún no existe en la base de datos En defi-nitiva, los conflictos de concurrencia pueden pro-ducirse:

Otro aspecto básico acerca de los conflictos

de concurrencia es la forma de detectarlos Latécnica de detección se basa fundamentalmente

en incluir en la cláusula WHERE de la ción UPDATE o DELETE el valor original delos campos, es decir, el valor que tenían los cam-pos del registro cuando se leyeron de la base dedatos Pongamos un ejemplo para aclarar ideas

instruc-Gestión de concurrencia en ADO.NET

Por Jesús López Méndez

(SqlRanger)

La concurrencia, en un entorno multiusuario, es siempre una cuestión mática, pero si además se trata de un entorno desconectado como el que se usa en ADO.NET con sus DataSets y DataAdapters, la problemática es aún mayor debido a la propia naturaleza desconectada del entorno.

proble-Veamos, en primer lugar,

<

Trang 21

Supongamos que estamos trabajando

con la siguiente tabla en una base de

datos de SQL Server:

El comando UPDATE que

detec-ta conflictos de concurrencia sería el

siguiente:

Como veis, están todos los valores

originales en la cláusula WHERE de

esta instrucción parametrizada De

esta manera, si ha cambiado alguno

de los campos, no se cumplirá la

con-dición, y por tanto la instrucción no

actualizará ningún registro, o lo que

es lo mismo, el número de registros

afectados será cero Solamente la

ins-trucción tendrá éxito, o sea,

actuali-zará el registro, si éste no ha

cambia-do Así es como ADO.NET detecta

los conflictos de concurrencia,

con-cretamente un DataAdapter lanzará

una excepción DBConcurrencyException

cuando el comando de actualización

afecte a cero registros Observad que

este comando incluye todos los

cam-pos en la cláusula SET, excepto el

IdEmpleado que es autonumérico y por

tanto de sólo lectura Esto viene a

suponer que se actualizarán todos loscampos en la tabla, independiente-mente de si se han modificado o no,

lo que implica una falta de ción

optimiza-Sin embargo, es posible que no nosinterese detectar conflictos de concu-rrencia y que queramos que la actua-lización se lleve a cabo independien-temente de si el registro ha sido modi-ficado o no desde la última vez que seleyó En ese caso sólo incluiríamos la

clave primaria en la cláusula WHERE.

La instrucción UPDATE sería la

siguiente:

Aún así, podríamos obtener unconflicto de concurrencia, pero sólo

en el caso de que haya sido eliminado

el registro Un inconveniente de estaopción es que es posible perder modi-ficaciones Si por ejemplo, los usua-rios A y B leen el empleado 10, elusuario A modifica su nombre y loguarda, y luego B modifica el apelli-

do y lo guarda, las dos actualizacionestienen éxito, pero la modificación quehizo A se pierde, ya que el nombre essobrescrito con el valor que leyó B

En ciertos sistemas, esta posible dida de modificaciones es inaceptable

pér-y por tanto habría que elegir otraopción

Otra alternativa sería incluir en la

cláusula SET sólo los campos que se

han modificado De esta manera, que sólo incluyéramos la clave pri-

aun-maria en la cláusula WHERE, no se

perderían las modificaciones También

es una opción interesante incluir en

la cláusula SET sólo los campos ficados, y en la cláusula WHERE la

modi-clave primaria más el valor original delos campos que han cambiado, así elconflicto de concurrencia que detec-taríamos sería en el caso de que otrousuario hubiera modificado alguno delos campos que han sido modificados

o en el caso de eliminación Por plo, si los usuarios A y el B leen elempleado 10, el usuario A modifica su

ejem-nombre y lo guarda y el usuario Bmodifica su nombre y lo guarda, elusuario B recibe un conflicto de con-currencia Pero si lo que ocurre es que

el usuario A modifica el nombre y el

B el apellido, no hay conflicto de currencia y las dos actualizaciones tie-nen éxito

con-Una última alternativa para la

cláu-sula WHERE es incluir la clave

pri-maria más el valor original de un

cam-po de ticam-po TimeStamp que cam-por

supues-to tendría que formar parte de la tabla

El funcionamiento es equivalente aincluir los valores originales de todos

CREATE TABLE Empleados (

IdEmpleado INT IDENTITY(1,1) PRIMARY KEY,

DNI VARCHAR(12) NOT NULL UNIQUE,

Nombre VARCHAR(50) NOT NULL,

Apellidos VARCHAR(50) NOT NULL

)

UPDATE Empleados

SET DNI=@DNI, Nombre=@Nombre, Apellidos=@Apellidos

WHERE IdEmpleado=@Original_IdEmpleado AND DNI=@Original_DNI AND

Nombre=@Original_Nombre AND Apellidos=@Original_Apellidos

UPDATE Empleados SET DNI=@DNI, Nombre=@Nombre, Apellidos=@Apellidos WHERE IdEmpleado=@Original_IdEmpleado

Los conflictos de concurrencia no se producen

solamente al actualizar un registro porque otro usuario

lo haya modificado, también ocurren si el registro

ha sido eliminado por otro usuario

Trang 22

ins-tipo TimeStamp en SQL Server es una especie de

autonumérico de 64 bits único en toda la base dedatos No puede haber dos registros en una base de

datos con el mismo valor de TimeStamp, incluso

aunque pertenezcan a distintas tablas Cada vez que

se modifica un registro que tiene un campo

TimeStamp, el valor del campo también cambia.

Debido a esto y si usamos esta alternativa, después

de modificar un registro, sería necesario volver a

leer el campo TimeStamp para poder realizar más

modificaciones en el mismo registro

Detectar conflictos de concurrencia en la minación es similar a la actualización, con la salve-dad de que en este caso sólo podemos jugar con la

eli-cláusula WHERE de la instrucción DELETE.

Podríamos incluir sólo la clave primaria, en cuyocaso sólo obtendremos conflictos de concurrenciacuando otro usuario haya eliminado el registro En

la mayoría de los casos, este conflicto

sencillamen-te lo podríamos ignorar También podríamos incluirtodos los valores originales de los campos o la cla-

ve primaria más el TimeStamp, en cuyo caso

reci-biremos un conflicto de concurrencia cuando otrousuario haya modificado o eliminado el registro

Una vez que tenemos decidido cómo vamos adetectar los conflictos de concurrencia y cómovamos a hacer las actualizaciones y eliminaciones,hemos de decidir cómo los vamos a tratar, o sea,qué acciones vamos a tomar en el caso de un con-flicto de concurrencia Cada conflicto de concu-rrencia lo trataremos de manera diferente en fun-ción de si se ha producido al hacer una actualiza-ción o al realizar una eliminación y en función de

la causa del conflicto, esto es, si ha sido porqueotro usuario lo ha modificado o porque lo ha eli-minado

Empecemos primero por los conflictos que seproducen al actualizar Si la causa es que otro usua-rio lo ha modificado podríamos tener las siguien-tes alternativas:

• Descartar las modificaciones y refrescar el registro

volviéndolo a leer de la base de datos Al usuario

le avisaríamos del conflicto de concurrencia y

le daríamos la oportunidad de volver a hacerlas modificaciones

• Refrescar sólo los valores originales sin descartar las

modificaciones Al usuario le avisaríamos del

con-flicto Entonces él tendría la oportunidad dever las modificaciones deshaciendo cambios o

de volver a guardar con lo que forzaría la lización

actua-• Directamente forzar la actualización Esto se

conoce como la técnica “el último que llegagana” En realidad esta acción no es una res-puesta a un conflicto de concurrencia, ya quepara llevarla a cabo incluiríamos únicamente

la clave primaria en la cláusula WHERE, no

detectándose conflictos de concurrencia pormodificación

Si la causa es que otro usuario lo ha eliminado,las alternativas serían las siguientes:

• Volver a insertar el registro en la base de datos En

el caso de que tengamos un autonumérico en

la tabla no sería posible volver a insertar elregistro exactamente igual a como era ante-riormente

• Eliminarlo del DataSet Esta es la opción que

más se suele utilizar

Detectar la causa del conflicto, al igual querefrescar un registro, puede realizarse volviendo aleer tal registro de la base de datos basándose en laclave primaria, pero si la clave primaria puede cam-biar, esta técnica no sirve para su propósito ya que

si ésta ha cambiado no es posible identificar el tro y no es posible determinar si el conflicto de con-currencia ha ocurrido por modificación o por eli-minación Por eso sería recomendable usar clavesprimarias artificiales como autonuméricos oGUID’s

regis-En cuanto a los conflictos de concurrencia que

se producen al eliminar un registro, podríamos tenerlas siguientes alternativas cuando la causa es pormodificación:

• Deshacer la eliminación y refrescar el registro Al

usuario le informaríamos del conflicto y dría la posibilidad de volverlo a eliminar des-pués de haber visto los cambios realizados

ten-La técnica de detección se basa fundamentalmente

en incluir en la cláusula WHERE

de la instrucción UPDATE o DELETE

el valor original de los campos

Trang 23

• Forzar la eliminación En realidad

esta acción no es una respuesta a

un conflicto de concurrencia, ya

que para llevarla a cabo

incluiría-mos únicamente la clave primaria

en la cláusula WHERE con lo que

no se detectan conflictos de

con-currencia por modificación

Por último, el conflicto de

concu-rrencia que se produce al eliminar un

registro que ha sido eliminado,

gene-ralmente puede tratarse

sencillamen-te ignorando el conflicto y

eliminan-do definitivamente el registro del

DataSet.

Como hemos visto, existen varias

alternativas para detectar y tratar los

conflictos de concurrencia Veamos

ahora qué nos ofrece ADO.NET en

este sentido

En ADO.NET tenemos una serie

de clases, los DataAdapters, que son

los encargados de revertir las

modi-ficaciones realizadas en un DataSet

sobre la base de datos mediante su

método Update Los DataAdapters

tie-nen tres propiedades: DeleteCommand,

UpdateCommand e InsertCommand que

son los comandos de actualización

Estos comandos son parametrizados,

de manera que sirvan para todas las filas

de un DataTable Cuando invocamos al

método Update de un DataAdapter, éste

recorre todas las filas del DataTable, y

si la fila es una fila eliminada, ejecuta

el DeleteCommand; si la fila es una fila

modificada, invoca el UpdateCommand;

y si es una fila nueva, invoca al

InsertCommand Si al invocar al

Update-Command o al DeleteUpdate-Command, el

número de registros afectados es cero,

el DataAdapter lanza una excepción

DBConcurrencyException indicando que

se ha producido un conflicto de

con-currencia Antes de invocar un

coman-do de actualización, el DataAdapter

establece el valor de los parámetros del

comando con los valores originales o

actuales de los campos de la fila

basán-dose en la configuración del propio

comando Cada parámetro de la

colec-ción Parameters de un comando tiene

la propiedad SourceColumn que indica

el nombre del campo cuyo valor

debe-rá copiarse al padebe-rámetro, y la

propie-dad SourceVersion que indica si se trata

del valor actual o del valor original

Antes de poder invocar al método

Update de un DataAdapter tenemos

que configurarlo correctamente, esto

es, tenemos que establecerle loscomandos de actualización Para con-

figurar un DataAdapter tenemos tres

alternativas:

• Usar el asistente para la

configu-ración del DataAdapter

• Usar un CommandBuilder

• Configurarlo manualmenteescribiendo nosotros mismos elcódigo

Para usar el asistente, sólo

tene-mos que arrastrar un DataAdapter

de la ficha datos del cuadro deherramientas a nuestro formulario

o componente y seguir sus ciones En el paso “Generar las ins-trucciones SQL” tenemos un botón

instruc-“Opciones avanzadas” que nos

pre-senta el cuadro de diálogo de lafigura 1

Como vemos, el asistente puedegenerar por nosotros los comandos de

actualización INSERT, UPDATE y

DELETE Si elegimos “Usar

concu-rrencia optimista”, el asistente

inclui-rá en la cláusula WHERE de las trucciones UPDATE y DELETE el

ins-valor original de todos los campos delregistro Mientras que si no activamosesa casilla de verificación, la cláusula

WHERE sólo incluirá la clave

prima-ria Si elegimos “Actualizar el junto de datos” el asistente añade una

con-instrucción SELECT a los comandos

de actualización para refrescar el tro En cualquier caso, la instrucción

regis-UPDATE incluye en la cláusula SET

todos los campos

Esta sería la instrucción

UPDA-TE para nuestra tabla de ejemplo

usando concurrencia optimista Vertabla 1

Figura1 Opciones avanzadas de generación de instrucciones SQL.

UPDATE Empleados SET DNI=@DNI, Nombre=@Nombre, Apellidos=@Apellidos WHERE IdEmpleado=@Original_IdEmpleado AND DNI=@Original_DNI AND Nombre=@Original_Nombre AND Apellidos=@Original_Apellidos

Trang 24

Como hemos dicho anteriormente, también

podemos usar un CommandBuilder Este sería el

código a usar para nuestra tabla de ejemplo:

Las instrucciones UPDATE y DELETE serían

equivalentes a las generadas por el asistente

usan-do concurrencia optimista y sin actualizar el junto de datos

con-La alternativa de configurar manualmente el

DataAdapter no es muy recomendable, ya que

requiere escribir bastante código y la funcionalidadobtenida es exactamente igual a la conseguida usan-

do el asistente Además es posible que cometamosalgún error al escribir el código, mientras que elasistente no los comete

Como vemos, el DataAdapter sólo nos deja la bilidad de incluir en la cláusula WHERE de las ins- trucciones UPDATE y DELETE o bien la clave pri-

posi-maria, o bien todos los campos No tenemos las otrasalternativas que se mencionan en este artículo Además

en la cláusula SET de la instrucción UPDATE, sólo

podemos incluir todos los campos, no tenemos laopción de incluir sólo los modificados

Por otra parte, ADO.NET sólo da soporte para

la detección del conflicto de concurrencia, no haynada que nos ayude a gestionarlo, por lo que ten-dremos que escribir nosotros mismos el códigonecesario

El código de ejemplo del fuente 1 muestra comogestionar conflictos de concurrencia, refrescando

el registro si ha sido modificado y eliminándolo si

ha sido eliminado

Como vemos, gestionar los conflictos de rrencia no es trivial y repetir el mismo código una yotra vez para cada caso es muy laborioso y pesado

concu-Una buena alternativa a los DataAdapters que

vie-nen incluidos en NET Framework, es escribir

nues-tro propio DataAdapter que no tenga estas

limita-ciones, que sea capaz de gestionar los conflictos deconcurrencia y que disponga de todas las opciones

mencionadas en este artículo Podéis encontrar un

DataAdapter para SQL Server (SqlRanger.SqlAdapter)

escrito por mí en la web de la revista o en mi propiapágina web: http://sqlranger.com/descargas.aspx

Este DataAdapter es completamente gratis y se

incluye el código fuente así como un ejemplo de su

uso El SqlRanger.SqlAdapter tiene propiedades

espe-cíficas para tratar la concurrencia Entre las que seincluyen:

• UpdateCriteria: Determina los campos a incluir

en la cláusula WHERE de la instrucción

UPDATE Puede tomar los siguientes valores:

• All: Se incluirán los valores originales de

todos los campos

• Key: Se incluirá sólo la clave primaria.

• Modified: Se incluirá la clave primaria más

los valores originales de los campos ficados

modi-• TimeStamp: Se incluirá la clave primaria más

el valor original del campo TimeStamp si es

que existe

• UpdateColumns: Determina qué campos recerán en la cláusula SET de la instrucción

apa-UPDATE Puede tomar los siguientes valores:

• All: Se incluyen todos los campos.

• Modified: Se incluyen sólo los campos

modi-ficados

• DeleteCriteria: Determina los campos a incluir

en la cláusula WHERE de la instrucción

DELE-TE Puede tomar los siguientes valores:

• All: Se incluirán los valores originales de

todos los campos

• Key: Se incluirá sólo la clave primaria.

• TimeStamp: Se incluirá la clave primaria más

el valor original del campo TimeStamp si es

que existe

UPDATE Empleados SET DNI=@DNI, Nombre=@Nombre, Apellidos=@Apellidos WHERE IdEmpleado=@Original_IdEmpleado

SqlDataAdapter Adapter = new SqlDataAdapter(“SELECT * FROM Empleados”, Connection);

SqlCommandBuilder CommandBuilder = new SqlCommandBuilder(Adapter);

Adapter.UpdateCommand = CommandBuilder.GetUpdateCommand();

Adapter.InsertCommand = CommandBuilder.GetInsertCommand();

Adapter.DeleteCommand = CommandBuilder.GetDeleteCommand();

Trang 25

public void Guardar(DataTable Empleados)

{

// creamos un adapter para realizar la actualización

SqlDataAdapter Adapter = new SqlDataAdapter(“SELECT * FROM Empleados”, this cn);

// usamos un command builder para configurar los comandos de actualización

SqlCommandBuilder CommandBuilder = new SqlCommandBuilder(Adapter);

Adapter.UpdateCommand = CommandBuilder.GetUpdateCommand();

Adapter.InsertCommand = CommandBuilder.GetInsertCommand();

Adapter.DeleteCommand = CommandBuilder.GetDeleteCommand();

// este comando nos sirve para refrescar un registro

SqlCommand Resync = new SqlCommand(“SELECT * From Empleados WHERE IdEmpleado=@IdEmpleado”, this cn);

Resync.Parameters[“@IdEmpleado”].Value = ex.Row[“IdEmpleado”, DataRowVersion.Original];

// el método Fill buscará el registro en el DataTable

// por clave primaria (IdEmpleado) y lo “refrescará”

// y volvemos a lanzar la excepción ex.Row.Delete();

// la causa del conflicto es que ha sido modificado

// Si el conflicto ha sido al eliminar el registro

// Fill ya lo habrá “recuperado” y refrescado

// Aparecerá el registro con el error

// Si el conflicto ha sido al modificar el registro

// Fill lo habrá “refrescado” Y aparecerá el registro

Trang 26

Determina la acción a realizar en

caso de un conflicto de

concu-rrencia al actualizar un registro

porque haya sido modificado

des-de la última vez que se leyó Puedes-de

tomar los siguientes valores:

• NoAction: No hace nada.

• ResyncAllValues: Refresca todos

los valores del registro, dolo a leer de la base de datos

volvién-• ResyncOriginalValues: Refresca los

valores originales del registro,leyéndolo de la base de datos

• ConflictUpdatingDeletedAction:

Determina la acción a realizar en

caso de un conflicto de

concurren-cia producido al actualizar un

regis-tro porque haya sido eliminado

des-de la última vez que se leyó Puedes-de

tomar los siguientes valores:

• Delete: Elimina

definitivamen-te el registro del DataSet.

• Insert: Vuelve a insertar el

re-gistro en la base de datos

• NoAction: No hace nada.

• ConflictDeletingChangedAction:

Determina la acción a realizar encaso de un conflicto de concu-rrencia producido al eliminar unregistro porque haya sido modi-ficado desde la última vez que seleyó Puede tomar los siguientesvalores:

• NoAction: No hace nada.

• ResyncAllValues: Refresca el

registro, volviéndolo a leer de

la base de datos

• ResyncCommand: Comando

parametrizado basado en

cla-ve primaria utilizado pararefrescar un registro

El SqlRanger.SqlAdapter genera

auto-máticamente los comandos de

actualiza-ción y el ResyncCommand, no siendo

nece-sario proporcionárselos Para ello hace

uso del SqlRanger.CommandBuilder.

Conclusión

La concurrencia es un tema mático en ADO.NET dada su natura-leza desconectada Existen varias opcio-nes para detectar y tratar los conflictos

proble-de concurrencia Cada una proble-de estasopciones tiene sus ventajas e inconve-nientes y es necesario elegir cuidadosa-mente la más adecuada para el sistema

en cuestión ADO.NET da soportelimitado para la gestión de la concu-rrencia, siendo una buena alternativa

escribir nuestro propio DataAdapter para

superar las limitaciones

noticias noticias noticias noticias

¿Qué es Whitehorse?

Whitehorse es el nombre en clave del software que se incluirá en

Visual Studio 2005 y que aporta herramientas de diseño model-driven

dirigida a los arquitectos de software, enlazando el modelo conceptual

al código

Tendremos más información en el devdays que se celebrará en San Diego,

California entre el 23 y el 28 de Mayo

(http://www.microsoft.com/semi-nar/teched2004) En Europa se celebrará en Ámsterdam, Holanda, entre el

29 de Junio y el 2 de Julio (http://www.microsoft.com/europe/teched).

Entretanto puede descargarse un video demostrativo de la web de

MSDNTV en http://msdn.microsoft.com/msdntv

¿Qué es Laguna?

En el Microsoft Mobile DevCon Conference 2004 celebrado en

San Francisco entre el 23 y el 27 de marzo se habló de “Laguna”,

nom-bre en clave del SQL Server CE 3.0 Esta versión se verá retrasada igual

que la versión completa, el SQL Server 2005 Según nuestras noticias,

ambas versiones saldrán juntas, si bien la versión beta 1 de Laguna

esta-rá disponible cuando esté la beta 2 de Yukon.

La web del Mobile DevCon Conference 2004 está en:

http://www.microsoftmdc.com.

Puede ver información de la versión actual de SQL Server CE 2.0

en: http://www.microsoft.com/sql/ce

¿Qué es Indy?

Indy es el nombre en clave de una nueva herramienta de gestión

desarrollada por Microsoft Research y que se comercializará por la

divi-sión Enterprise Management de Microsoft Simula un centro de datos

empresarial derivado del modelo de hardware, software y los sistemas

de servidores del cliente.

Indy está inmerso en la versión 2.0 de la suite Microsoft System Center para la que aún no hay fecha prevista de salida, ni tan siquiera una aproximación La versión actual, la 1.0 llamada System Center 2005

es la primera suite de gestión integrada para el Windows Server System

e incluye el System Management Server 2003, Microsoft Operations Manager 2005 y el nuevo sistema común de reporting.

Se habló de él en el Summit celebrado en Las Vegas el pasado mes de marzo La web del Summit 2004: http://www2.mms2004.com.

Más información en Microsoft Watch: http://www.microsoft-watch.com

y en el sito Betanews http://www.betanews.com/article.php3?sid=1079576470

¿Qué es Lonestar?

Aparte de un mítico grupo de rock catalán de los años 70, Lonestar es

el nombre en clave de la próxima versión del sistema operativo de Microsoft para Tablet PC Si bien se iba a vender como un add-on para los usuarios

de Tablet PC, finalmente será incluido dentro de Windows XP SP2 Tendrá

un nuevo SDK para desarrolladores e integración con Office 2003.

¿Qué es Windows XP Reloaded?

Windows XP Reloaded es el nombre en clave para la versión de Windows XP que hará de puente entre la actual y Longhorn.

¿Qué es Symphony y Harmony?

Symphony es el nombre en clave de la próxima versión de Windows

XP Media Center Edition el cual está basado en XP SP2 Una versión previa a Windows XP Media Center Edition 2004 Harmony es el nom- bre en clave del próximo Windows XP Media Center Edition 2004 Incluirá soporte para High Definition Televisión, soporte para múl- tiples sintonizadores, soporte para diferentes formatos de grabación de vídeo y radio.

¿Qué es qué?

¿Qué es qué?

Trang 27

Componentes y Reflexión antes de NET

Las tecnologías orientadas a componentescomo COM y CORBA utilizan lenguajes deDefinición de Interfaces (IDLs) para especifi-car tipos Pero los IDLs se basan sólo en las sig-naturas de los métodos y no incluyen más infor-mación semántica que la que se puede deducir

de los tipos y nombres de los métodos y de susparámetros

Java alivia la limitación anterior porque la

noción de tipo definido por un interface 1estáincluida en el propio lenguaje de programaciónJava Sin embargo, la tecnología Java tiene lasdebilidades siguientes:

• Debido a su enfoque monolingüístico,una componente en Java sólo se puedeusar por otra componente Java No hayuna forma simple de conectar una com-ponente Java con una componente escri-

ta en otro lenguaje o viceversa

• Un buen aporte de Java es que permiteincluir información extra en una compo-nente por vía de determinados convenios

en la escritura de comentarios especiales

Pero el mecanismo de reflexión de Java

no ofrece recursos para recuperar estainformación que se ha incluido en unacomponente en forma de comentarios

Los desarrolladores deben conocer y bajar directamente con la forma en queinternamente estos comentarios están den-tro de un fichero Java byte code De modoque un cambio en esta forma de repre-sentación implicaría cambios en las apli-caciones que utilizan estos comentarios

27

El poder de la reflexión en NET

Por Mario del Valle y Miguel Katrib

Grupo Weboo Universidad de La Habana

Entre otras razones NET supera a gías de componentes precedentes por la transparencia con la que integra código y metadatos favoreciendo con ello la metapro- gramación Este trabajo muestra cómo usan-

tecnolo-do reflexión (reflection) se define un

conver-sor de tipos que permite a partir de un

obje-to, el cual comparte una misma funcionalidad con un interface, obtener un objeto proxy equivalente en funcionalidad al original pero que garantiza ser subtipo de dicha interface.

De este modo el objeto proxy puede ser lizado como si estáticamente hubiese decla-

uti-rado que implementa el tipo interface Con

ello se facilita la adaptabilidad del software y

la factorización de código ya existente para poder aprovechar una funcionalidad común.

La solución propuesta permite ilustrar más la existencia de un peligroso agujero de seguridad en el sistema de tipos de NET, el cual lamentablemente no es controlado por

ade-el CLR.Esta falla permitiría la escritura de

códi-go malicioso aún ejecutando bajo el supuesto modo seguro del código administrado.

<

1 Para evitar confusiones hemos mantenido el término en inglés interface para referirnos a una de las formas de tipo en NET Lamentablemente

éste término es malinterpretado y usado incorrectamente en castellano cuando en ocasiones se escribe “interfase” o cuando se usa “interfaz” con

el que muchos lectores identifican el concepto de interfaz gráfica de usuario (GUI).

< <

Trang 28

Componentes y Reflexión

en NET

Las componentes de software en

.NET se basan en el concepto de

ensamblado (assembly).

• Un ensamblado en NET es

neu-tral desde el punto de vista del

len-guaje Un ensamblado NET se

puede utilizar de modo simple

des-de otro ensamblado con indes-depen-

indepen-dencia del lenguaje fuente en que

haya sido escrito cada uno

• Un ensamblado en NET contiene

código y metadatos Estos

metada-tos pueden ser extraídos de la

com-ponente mediante los recursos de

reflexión que el propio NET

ofre-ce De modo que las aplicaciones

que extraen y procesan la

informa-ción inmersa en un ensamblado en

forma de metadatos no dependen

de cambios en el formato físico en

que se representan estos metadatos

• NET introduce los atributos, una

nueva creación para que los

desa-rrolladores puedan añadir sus

pro-pios metadatos Los atributos son a

fin de cuentas objetos y por tanto

pueden gozar de muchos de los

beneficios que el modelo Orientado

a Objetos soporta

Con el presente trabajo

comenzare-mos a ir descubriendo el uso de la

refle-xión en NET y la utilidad de los

atri-butos y lo que la mezcla de ambos

pue-de significar para potenciar las

capaci-dades de metaprogramación de NET

Factorizando tipos en NET

Una tarea frecuente en

programa-ción consiste en reproducir un

com-portamiento similar mediante

diferen-tes implementaciones Si el

desarrolla-dor puede prever esta situación lo usual

debe ser entonces definir un tipo raíz

(sea definido por una clase o por un

interface en NET) y definir los

dife-rentes tipos que heredan (o

implemen-tan) del tipo raíz

Pero qué podemos hacer si varios

tipos ya existentes tienen un

comporta-miento común pero no han sido

defini-dos con una tal raíz común ¿Qué hacer

si queremos incorporar una nueva

fun-cionalidad que pueda trabajar con quiera de estos tipos de comportamiento

cual-“similar”?

Supongamos que tenemos dos tipos

By C que tienen un subconjunto demétodos f1, f2, … fncomunes a ambospero desafortunadamente estos tipos B

y C no fueron concebidos como ses derivadas de una clase base común

cla-A(o como implementaciones de un tipo

¿Cómo implementar una nueva cionalidad NewMethodque sea capaz detrabajar con objetos que tengan esta fun-cionalidad común f1, f2, … fninde-pendientemente si los objetos son detipo Bo de tipo C?

fun-Solución 1: Replicar la nueva lidad para cada uno de los tipos B y C

funciona-Como en NET disponemos desobrecarga de métodos la solución mástradicional fuerza a reescribir la nuevafuncionalidad reescribiendo el mismocódigo para usar cada uno de los tipos ( B y C en nuestro ejemplo)

solu-el bajo grado de escalabilidad debido a

la replicación de código que esto

impli-ca Si queremos que un nuevo tipo D

con funcionalidad similar a la de B y C

pueda usarse como parámetro de

NewMethodhabría que escribir un nuevo

NewMethod con un código similar al delos ya existentes sólo para poder acep-tar un parámetro del nuevo tipo D

Solución 2: Escribir un único método que haga una selección múltiple

Otro enfoque es escribir un único

NewMethodque se base en que el metro formal está declarado estática-mente como del tipo raíz Object y lue-

pará-go aplicar internamente la dad correspondiente según el tipo delparámetro real en ejecución

funcionali-void NewMethod(Object x){

if (x is B) ((B)x).f1();

else if (x is C) ((C)x).f1();

if (x is B) ((B)x).fn();

else if (x is C) ((C)x).fn();

}

Pero esta solución tiene también unalto grado de dependencia y baja escala-bilidad Si se desea incorporar un nuevotipo D hay que reprogramar el NewMethod

ya existente (para lo cual habría que poner del código fuente) para introducirinternamente las nueva alternativa

dis-if (x is D) ((D)x).fn();

Si bien esta variante de solución noreplica código como la anterior, es inefi-ciente debido a las preguntas para deter-minar el tipo que dinámicamente tendrá

el objeto que se pasa como parámetro y

a las operaciones de conversión o

Trang 29

deo (casting) para poder interpretar al parámetro formal

como del tipo deseado Pero es más, este enfoque no es

aplicable si D fuese un tipo creado dinámicamente en

tiempo de ejecución porque no dispondríamos de una

definición estática de D para colocar estáticamente el

segmento de código anterior dentro de NewMethod

Una solución basada en reflexión

Una mejor solución se basa en crear

dinámica-mente usando reflexión (lo que se verá en la sección

siguiente) un tipo proxy que emule al original pero

que sí especifique definir al tipo interface que expresa

la comunalidad Es decir, una vez que el

desarrolla-dor interesado detecte que hay un comportamiento

similar en los tipos B y C debe definir entonces un

tipo IA que exprese este comportamiento común

El nuevo código NewMethod que quiere aprovechar

esto común debe escribirse basado en que el

paráme-tro formal sea del tipo interfaceIA

El problema que hay que resolver es cómo lograr

que los objetos de tipo B o C,o de un nuevo tipo D

que pueda entrar en escena más adelante, puedan ser

pasados como parámetros a este método aún cuando

el tipo de estos no indique implementar IA

A fin de cuentas no debería ser el código de NewMethod

quien tiene que cargar con esa responsabilidad Si

que-remos pasarle un x a NewMethoddebería ser el código que

llama el que pueda indicar algo así como: interprétame a

éste xcomo de tipo IAaún cuando el tipo estático de xno

hubiese sido definido como que implementa a IA

Para lograr esto definimos un método Cast El

método Cast recibe como primer parámetro el

obje-to original y como segundo parámetro el tipo

interfa-ce como el que se desea que el primer parámetro sea

interpretado El método Cast creará dinámicamente

un tipo proxy que emula al tipo del objeto original

pero que indica implementar al tipo interface y

devol-verá como respuesta el tal objeto proxy

De este modo el código cliente interesado en usar

la funcionalidad NewMethodpara un objeto de tipo B

que tiene la funcionalidad expresada por IA debeseguir el siguiente patrón

B b = new B();

IA a = (IA)Caster.Cast(b, typeof(IA));

NewMethod(a);

La Figura 1 nos ilustra este escenario

Usando reflexión y las capacidades de generación decódigo que ofrece NET, el método Cast crea dinámi-camente un tipo IAProxyFor_B que implementa IA yque actúa como proxy de la funcionalidad común que eltipo B tiene con IA El tipo IAProxyFor_B es generadocon un patrón cuyo código IL equivaldría a un códigofuente C# como el que se muestra a continuación

class IAProxyFor_B : IA{

B realTarget;

public IAProxyFor_B(B x){

realTarget=x;

} public T1 f1(){

return realTarget.f1();

}

public Tn fn(){

return realTarget.fn();

} }

Un ejemplo real en las Windows Forms

Un escenario común en las GUIs es hacer unaselección de un elemento entre varios de una lista

Trang 30

Habitualmente se usa para este fin un ComboBoxo un

ListBox Suponga que queremos un método

Configureque pueda trabajar tanto para un ComboBox

como para un ListBox Habría que escribir doscopias muy similares del tal método que sólo difie-ren en el tipo del parámetro (Fuente 1)

En un caso como este sería conveniente tener unainterfaz IListControlque “factorizara” el comporta-

miento común de ComboBox y ListBox que nos resa utilizar:

inte-interface IListControl{

object SelectedItem{

get; set;

} int SelectedIndex { get; set;

} IList Items{ get;}

string Text {get; set;}

bool Sorted { get; set; } void BeginUpdate();

void EndUpdate();

void Refresh();

event EventHandler SelectedValueChanged;

event EventHandler SelectedIndexChanged;

Si lo que se quiere es aplicar este método con un

ComboBox, bastaría con hacer:

ComboBox combo = new ComboBox();

Configurate((IListControl)Caster.Cast(combo,

typeof(IListControl)));

Para el ListBoxlo mismo:

ListBox list = new ListBox();

combina-ría un namespace Reflection y dentro de este a su

vez el namespace Emit Ilustraremos en esta seccióncómo usando estos recursos el método castTo pue-

de generar el tipo proxy del que hablamos en lassecciones anteriores

Para generar un tipo dinámicamente primerohabría que generar un ensamblado donde colocar altal tipo (Fuente 2)

Ngày đăng: 14/02/2014, 03:20

TỪ KHÓA LIÊN QUAN

w