Tutorial de Visual Studio 2005 y SQL Server 2005 PDF
Tutorial de Visual Studio 2005 y SQL Server 2005 PDF
dotNetManía
www.dotnetmania.com
nº3 abril 2004 • Precio: 6,00 € (España)
Dedicada a los profesionales de la plataforma .NET
Laboratorio
Crystal Enterprise v10
Open Source
datNet
Comunidades
Equivalencia de instrucciones Concurso de creación de páginas Web
con ASP.NET
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
opinión
El real valor de las certificaciones del mundo informático (de sus realidades, mitos y proyección)
dnm.editorial
<< dnm.editorial
No en mi nombre
<< Por supuesto, la noticia del mes es el retraso que
sufrirán los lanzamientos de Whidbey y Yukon que
to? ¿Esta Comisión no debería ser más dura con
otros monopolios de hecho que sufrimos los usua-
se trasladan a mediados del 2005 y que saldrán al rios de manera sangrante? ¿Lo han hecho en bene-
mercado conjuntamente bajo los nombres Visual ficio de los usuarios o de los competidores de
Studio 2005 y SQL Server 2005. Algunos usuarios Microsoft? Me consta que los fabricantes de Real
han mostrado su malestar al respecto, puesto que Player, Real Networks están muy satisfechos.
habían pagado por el programa Software Assurance Personalmente a mí me importa poco si Windows
durante tres años sin recibir ninguna actualización lleva o no Windows Media Player, de todas formas
principal a cambio. Luego están los que se preocu- yo uso Winamp, pero un sistema operativo debe
pan por el soporte de las versiones actuales que pue- ser capaz de abrir el máximo tipo de archivos posi-
den terminar de ofrecerse con poca diferencia con ble. ¿Harán lo mismo con los visualizadores de
las versiones nuevas. Otros opinan que lo mejor es otros tipos de archivos? ¿Es mejor para los usua-
que el software salga al mercado cuando realmente rios un sistema operativo incapaz de abrir archi-
esté listo y que esto es mejor aunque haya que espe- vos en aras a que la competencia pueda vender sus
rar algo más. Pero es que todo esto afecta a tantas visores?
cosas que sería mejor que estos chicos de Microsoft No quisiera terminar sin tener un sentido
afinasen más, si bien es cierto, que yo me encuentro recuerdo para las víctimas y sus familiares y ami-
entre los que opinan que los lanzamientos precipi- gos del atentado cometido por seres humanos en
tados para cumplir fechas son a la larga peores para Madrid el 11 de marzo. Extraña palabra la palabra
los usuarios. “humanidad” que suele usarse como aglutinadora
Acabamos de recibir la noticia de la multa de de todos los buenos sentimientos que sólo los
casi 500 millones de euros (la más alta impuesta humanos podemos sentir. Me pregunto si también
hasta ahora por este organismo) que la Comisión debería servir para aglutinar todo lo malo que sólo
Europea ha impuesto a Microsoft por supuesto los humanos podemos hacer. Sólo un humano pue-
abuso de posición dominante en el mercado euro- de ser tan despiadado. ¿Fue, pues, éste un acto de
peo. Ahora se iniciará una nueva, larga y aburrida “humanidad”? Cómo me avergüenza pertenecer a
batalla legal, por supuesto. Esto viene después de la misma especie animal que alguno de mis con-
que Steve Ballmer hiciera un viaje inesperado a géneres. No debemos olvidar tampoco a los muer-
Bruselas, cancelando su keynote en el Summit el tos en Nueva York, en Irak, en Afganistán, en Pales-
miércoles 17, en la que se especulaba que habría tina, en Israel, y en tantos sitios donde mueren ino-
una demo de Indy, para intentar llegar a una sali- centes y no tan inocentes a manos de asesinos lega-
da negociada que finalmente no fue posible. les o ilegales ¿en nombre de quién? Desde luego
¿Tendremos un Windows europeo distinto del res- no en mi nombre.
3
El real valor de las certificaciones del mundo informático
dnm.sumario
3 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.
Biblioteca 54
C# al descubierto de Joseph Mayo.
Arquitectura de aplicaciones para .NET. Diseño de apicaciones y servicios de
Microsoft Press.
Comunidades 55
Concurso de creación de páginas Web con ASP.NET para la comunidad de
desarrolladores de ASP.NET en España
Desván 58
ás
dr
en
bt
yo e
pó
n irt
ib s
cu r
7 l inscrama
50
te
es a g
ga to pro
rt e n
En ue o s
sc st r
d e nue
de a
dnm.noticias
<< dnm.noticias
noticias.noticias.noticias.noticias.noticias.noticias
Whidbey y Yukon
ya tienen nombre: Visual Studio 2005
y SQL Server 2005
Yukon para finales de 2004 que no estaba previs- Manager, en una entrevista concedida a eWeek.
6
<< dnm.noticias
dnm.noticias
Por Willy Marroquín
Visual Basic MVP
willydev.net
El mundo de las certificaciones IT, casi desde su aparición ha generado controversia, entu-
siastas y detractores. En este escrito, daré una percepción personal a lo que pueda referir de
este tema, así que ¡allí vamos!
<< De sus realidades y de sus mitos podía creer que después de invertir cerca de 500 dóla-
res en una semana de educación técnica (demasiado
Cuando estaba en la universidad, una de las cosas dinero para las economías "latam" en esos días e inclu-
que siempre tuve muy claras era la del hecho de bus- so hoy) y pagar 80 dólares aproximadamente por el
car una certificación IT avalada. Cuando rendí mi pri- examen, alguien vendiera la prueba por 200 dólares
mer examen, hace ya varias líneas de código = ), la ver- aproximadamente (mucho más que para esos días el
dad estaba demasiado nervioso. Como cualquier neó- salario promedio para un desarrollador no sumaba más
fito, compartí mi tensión , con mis parceros (amigos) de 220 dólares mensuales en el mejor de los casos a
y mi familia, hablándoles de lo que para mí en ese este lado del charco), quedé realmente desilusionado,
entonces implicaba un espléndido reto. Al final del y entendí que nunca las certificaciones equivaldrían o
examen todo salió bien (es un momento que aún superarían las ingenierías por dos razones: una de ellas,
recuerdo con sonrisa en el rostro), llamé a mi familia la que acabo de relatar; y la siguiente, porque las tec-
y le escribí a mis amigos del suceso… Varios de uste- nologías tienen una duración muy corta, en cambio,
des se preguntarán porqué esta introducción de índo- cuando eres ingeniero, tus bases "ingeniériles" duran
le tan personal; pues bien así de importante fue para para siempre (aunque la verdad es que hoy me lleva-
mi rendir mi primer examen de certificación, pero con ría un rato recordar la metódica de solución a las trans-
el correr de los días dicha ilusión fue al traste… formadas de fourier =P).
"..Las certificaciones IT, desafortunadamente, no Con ello y otros bemoles, seguí igual tomando mis
son tan importantes como crees, es más, fue un dife- cursos técnicos y rindiendo mis exámenes (incluso per-
renciador algún tiempo, pero con los días se ha con- dí el 70-300, un examen de arquitectura de .NET en
vertido en toda una farsa.", me repitió mi maestra de el primer intento, hace sólo algunos meses). A estas
construcción de software. Lo curioso es que para esos alturas usted se puede preguntar ¿porqué seguir rin-
días en Colombia (hace siete años aproximadamente), diendo estas pruebas, que pareciere que día a día, estu-
la cantidad de certificados era mucho menor, e inclu- vieren más y más a la venta por unos pocos dólares?
so, ella viajó a Estados Unidos para tomar la capacita- (La verdad es que me asombra el nivel de fidelidad de
ción debida, pues no existía en el país ese tipo de entre- esos documentos; es tal el descaro, que salen hasta las
<<dotNetManía
namiento aun. Le pregunté por qué razón afirmaba tal capturas de pantalla). ¿Porqué rendir una prueba que
cuestión, "... Willy, verás en estas URL's los exáme- tiene un coste tan alto, si las respuestas están a la ven-
nes están a la venta…", la verdad no podía creerlo, no ta por un valor con el cual podría comprar el examen
8
<< dnm.opinion
9
<< dnm.opinion
Desde luego las variables macroeco- con la tecnología antes de rendir la prue- mente inconcebible que un profesional
nomías influyen localmente, pero si se ve ba de certificación de la misma y con ello diga tener credenciales que lo habilitan
con detenimiento el coste de este tipo de sustentar la credencial en caso de rendir como experto en un frente tecnológico
formación IT, no sólo debería ser ajus- positivamente la prueba. A día de hoy, y que no posea experiencia. Si usted es
tada localmente, sino después de ajusta- algunas compañías, mantienen esta mecá- empleador, es muy buena idea enterarse
da, reducirse por lo menos a la mitad. La nica. Esto permite mantener la credibi- del Skill de cada certificación, y con ello
justificación de esta premisa está en que lidad en la credencial y en consecuencia determinar si es equiparable lo uno con
somos nosotros los IT (me refiero a todo del profesional que decide tomarlas y me lo otro. Es notorio que la certificación es
el gremio, pero con más fuerza a los desa- lleva al siguiente punto de este escrito... un diferenciador, pero no lo será por
rrolladores de software) quienes hace- mucho tiempo, pasará a ser un requisito
mos que las plataformas permanezcan ¿Contrataría usted a un (así se puede leer en la encuesta de
y/o se difundan, ello debido a nuestra MCPMag que recomendaba unas líneas
inclinación hacia la misma (llámese como
profesional sin experiencia arriba), aunque bueno fuera que reco-
se llame), pues si no hay productos para de campo y con certificaciones brara su estatus de credibilidad.
la plataforma X o Y, ésta pierde su posi- a su haber? A pesar de esta posición un poco
cionamiento.... pero bueno ello daría para escéptica (y desde luego desde una pers-
otro escrito de esta saga. Esta es la misma pregunta que debe- pectiva muy personal y ya para rematar
Debido al crecimiento de las certi- rían hacerse las personas que se logran estas líneas), usted debe tener en cuen-
ficaciones como requisito, se hace cada certificar de una manera, cómo decir- ta que las certificaciones son buena idea,
vez más importante la intervención de lo… "poco ortodoxa". pero aún mejor idea es conocer a fon-
la industria, para que estas credenciales Si me hicieran esta pregunta, mi res- do las tecnologías para ser un real exper-
conserven (o en algunos casos recupe- puesta sería un contundente JAMÁS (¿de to… así no te certifiques. Nos vemos en
ren) su buen nombre. qué me sirve un experto de diploma, si un próximo articulo… debo seguir estu-
Una buena alternativa, pudiere ser el en realidad tengo un fiasco como emple- diando para rendir mi próxima certifi-
hecho de exigir un tiempo comprobable ado?). Desde mi perspectiva, es sencilla- cación =).
que brinda a los usuarios herramientas para estándar para enlazar los procesos empre- • Integración en Microsoft Office
diseñar, implementar y supervisar estos pro- sariales entre los socios comerciales, las System. Permite el análisis de procesos y
cesos en tiempo real”, dijo Ted Kummert, aplicaciones y los usuarios empresariales. datos.
10 noticias.noticias.noticias.noticias
Por Guillermo ‘Guille’ Som
Visual Basic MVP desde 1997
www.elguille.info
Equivalencia de instrucciones
de C# y VB .NET (y III)
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
Descripción C# VB .NET
Operador de igualdad == =
Distinto != <>
Menor, menor o igual, mayor o mayor o igual son los
mismos operadores en ambos lenguajes: <, <=, >, >=
Y & And
Or | Or
Xor ^ Xor
Negación (not) ! Not
Y cortocircuitado && AndAlso
Or cortocircuitado || OrElse
<<dotNetManía
11
<< dnm.lenguajes.net
<<
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 que no se permite pasar de un case a otro, salvo 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
<<dotNetManía
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
12
<< dnm.lenguajes.net
diente, en ese caso el final del bloque del código se indicará con End While.
la misma clase e incluso de la clase de
Tabla 10. Instrucciones de bucles la que se deriva.
13
<< dnm.lenguajes.net
ble reemplazar esos miembros desde otro ensamblado, al menos por compiladores que no tengan dicha res- ma que en cualquier momento te
tricción. Para más información: /cpguide/html/cpconkeyconceptsinsecurity.htm resulte fácil poder escribir código en
/cpguide/html/cpconsecurityconcernsforinternalvirtualoverloadsoverridablefriendkeywords.htm cualquiera de estos dos lenguajes.
Tabla 11. Constructores y destructores.
14
Por Ángel Esteban
Software Arquitect
Alhambra-Eidos
Configuración de aplicaciones
Web de ASP.NET
En versiones anteriores de la tecnología ASP, la configuración de aplicaciones Web se rea-
lizaba a través del administrador de servicios de Internet (Internet Information Server,
IIS), ya que la información relativa a la configuración de aplicaciones ASP se almacenaba
en un repositorio binario denominado metabase de Internet Information Server. Se tení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 ASP.NET ma .NET para configurar las aplicacio- web.config, y de esta forma pueda ver
esto ha cambiado y nos permite realizar nes Web de ASP.NET, aporta las la configuración de nuestra aplica-
una configuración de las aplicaciones siguientes ventajas: ción ASP.NET
Web basada en ficheros en formato
XML. Este sistema de configuración de • Valores de configuración en formato Proceso de obtención
ASP.NET hace uso de dos tipos de legible: Es muy sencillo abrir un
ficheros de configuración: fichero XML y leer o modificar la
de la configuración de una
configuración. aplicación Web
1. Configuración del servidor: Que se alma- • Actualizaciones inmediatas: Las
cena en un fichero denominado machi- modificaciones realizadas en la A continuación se va a comentar el
ne.config. Este fichero va a representar configuración de las aplicaciones proceso que sigue la plataforma .NET
la configuración por defecto de todas se aplican de forma inmediata sin para obtener y aplicar la configuración
las aplicaciones ASP.NET existentes necesidad de reiniciar el servidor final de una aplicación ASP.NET.
en el servidor y se localiza en el direc- Web o parar los servicios. A la hora de obtener la configura-
torio Windows \Microsoft.NET • Configuraciones fácilmente repetibles: ción se produce una fusión entre los
\Framework\[versión]\config. Para tener una aplicación ficheros machine.config y web.config. Los
2. Configuración de la aplicación: Se almace- ASP.NET con la misma configu- valores de configuración se heredan
na en el fichero web.config. Un servidor ración que otra aplicación distin- entre distintas aplicaciones ASP.NET,
Web puede contener varios ficheros ta, únicamente debemos copiar los siendo el fichero machine.config la con-
web.config, cada uno de ellos dentro del ficheros de configuración en el figuración raíz de la que heredan el
directorio raíz de cada una de las apli- directorio de la aplicación corres- resto.
caciones ASP.NET del servidor. La con- pondiente. Por lo tanto, en primer lugar tene-
figuración indicada dentro de un fiche- • Bloqueo de valores de configuración: mos el fichero machine.config que afec-
ro web.config sobrescribe los valores espe- Podemos bloquear los valores de tará a todas las aplicaciones ASP.NET
cificados en el fichero machine.config. configuración que deseemos para existentes en el servidor Web. A los valo-
que no sean sobrescritos. res de configuración indicados en este
Ventajas • ASP.NET configura de manera fichero se le añadirían o sobrescribirí-
<<dotNetManía
16
<< dnm.asp.net
sessionState y trace, que a su vez perte- determinada. En este fichero web.config indicaremos en segundos el tiempo
necen al grupo <system.web>, también se heredaremos la sección de los manejado- de espera que se aplicará a la ejecu-
define el manejador para la sección res indicada en el fichero machine.config. ción de un recurso solicitado. Una
17
<< dnm.asp.net
vez sobrepasado este tiempo de Configuración de la aplicación • mode: Indica el modo de almacena-
espera la aplicación ASP.NET fina- miento utilizado para el proceso que
lizará la ejecución del recurso. Por En esta sección vamos a poder alma- se corresponde con el estado de la
defecto es 90 segundos. cenar valores de detalles de configuración sesión. Los valores que podemos
• maxRequestLength: Indica en Kb el de la aplicación. Para almacenar estos asignar a este atributo son: InProc,
tamaño máximo de una petición. parámetros dentro del fichero de confi- el estado de sesión se encuentra en
Por defecto es 4.099 Kb. guración vamos a utilizar pares clave/valor. el proceso actual de ASP.NET; Off,
• userFullyQualifiedRedirectUrl: Indica Estos valores de configuración defi- el estado de sesión se encuentra
si al cliente se le va a devolver una nidos en la sección <appSettings> los desactivado; SQLServer, se utiliza
URL completa o una URL relati- vamos a poder recuperar en las páginas un proceso de SQL Server para
va. Por defecto es false, por lo que ASP.NET de la aplicación. Esta etiqueta almacenar el estado; StateServer, se
se enviará una URL relativa. de configuración de la aplicación no se utiliza un proceso en forma de ser-
encuentra dentro de la sección <sys- vicio de Windows para almacenar
Configuración de la página tem.web>. el estado. Por defecto es InProc.
Dentro de la etiqueta <appSettings> • stateConnectionString: En este atri-
Mediante la etiqueta <pages> pode- tenemos unas subetiquetas <add>. buto se indica la dirección IP y el
mos controlar algunos de los compor- Existirá una etiqueta <add> por cada número de puerto utilizados para
tamientos de las páginas ASP.NET parámetro o valor que queremos indi- comunicarse con el servicio de
presentes en una aplicación. La eti- car en la aplicación, esta etiqueta posee Windows que ofrece las facilidades
queta <pages> puede tener los siguien- dos atributos: key, que es la clave con la de almacenamiento. Este atributo
tes atributos: que después vamos a poder acceder a únicamente tiene sentido utilizarlo
este parámetro a través de la colección cuando el atributo mode tiene el
• autoEventWireup: Indica si los even- AppSettings, y value que va a ser el valor valor de StateServer.
tos de la página se van a lanzar de for- que le vamos a asignar al parámetro. • sqlConnectionString: Identifica la
ma automática. Por defecto es true. En el fuente 4 se muestra el frag- cadena de conexión de la base de
• buffer: Se utilizará para activar o mento de un fichero web.config en el que datos utilizada para almacenar el
desactivar el búfer de las páginas se definen dos parámetros para la apli- estado cuando el atributo mode
ASP.NET de la aplicación actual. cación: Se indica una cadena de cone- posee el valor SQLServer. Esta cade-
Puede tomar valores true/false. xión y una sentencia SQL. na debe incluir la dirección IP y el
• enableSessionState: Este atributo per-
mite activar o desactivar el estado de <configuration>
sesión, es decir, permite o no la uti- <appSettings>
lización del objeto Session para alma- <add key=”conexion” value=”server=aesteban;database=datos;uid=sa;pwd=”/>
cenar información común a la sesión <add key=”sentencia” value=”select nombre, apellidos,email from
actual del usuario con la aplicación Usuarios”/>
</appSettings>
Web. Puede tomar valores true/false.
</configuration>
• enableViewState: Permite activar o
desactivar el mantenimiento auto- Fuente 3. Ejemplo de uso de la etiqueta <appSettings>
mático de los valores de los contro-
les Web dentro de los formularios nombre y contraseña de usuario
Web. Por defecto es true. Configuración de la sesión para conectar a la base de datos de
SQL Server.
Estos atributos se corresponden con Desde el fichero de configuración • cookieless: Atributo que indica si el
los atributos del mismo nombre de la de la aplicación ASP.NET tenemos la objeto Session utiliza cookies para
directiva @Page, por lo que utilizando posibilidad de configurar la forma en la almacenar el identificador de sesión,
esta directiva podemos sobrescribir estos que se va a utilizar el estado de sesión o por el contrario no las utiliza y el
valores de configuración para una pági- mediante la etiqueta <sessionState>. Para identificador de sesión lo va mante-
na ASP.NET en concreto. ello presenta los siguientes atributos: niendo a través del mecanismo de
URLs. El mecanismo de URLs será
utilizado cuando el valor de este atri-
<configuration> buto sea true. Por defecto es false.
<system.web> • timeout: El atributo timeout especifi-
<pages buffer=”true” enableSessionState=”true”
ca, en minutos. el intervalo de inac-
enableViewState=”true” autoEventWireup=”true”/>
tividad para el objeto Session. Si el
<<dotNetManía
</system.web>
</configuration> usuario no actualiza o solicita una
página durante ese intervalo, la sesión
Fuente 2. Ejemplo de uso de la etiqueta <pages> termina. Por defecto es 20 minutos.
18
<< dnm.asp.net
Globalización to, el usuario IUSR_NombreServidor, vado a o no. Tiene por lo tanto la mis-
o bien bajo el usuario que nosotros le ma funcionalidad que el atributo de mis-
Los valores indicados en la sección indiquemos. Por defecto es false. mo nombre de la directiva @Page. Su
<globalization> nos va a permitir confi- • name: Este atributo estará disponi- valor por defecto es false.
gurar las opciones de codificación y cul- ble cuando el atributo impersonate requestLimit: En este atributo indi-
tura. La etiqueta <globalization> nos tenga el valor true, y lo vamos a uti- caremos el número máximo de peti-
ofrece cinco atributos para indicar diver- lizar cuando deseemos indicar una ciones HTTP de las que se va a alma-
sos aspectos de la codificación utilizada cuenta de usuario de Windows espe- cenar información de trazas. Las tra-
en nuestra aplicación: cífica para representar al proceso de zas van a ser almacenadas en un regis-
ejecución de ASP.NET. tro de trazas mediante un mecanismo
• requestEncoding: Mediante este atri- • password: En él indicaremos la con- circular en las que permanecerán las
buto podemos indicar la codifica- traseña del usuario que se va a uti- últimas n peticiones. Por defecto es
ción utilizada en cada solicitud. Por lizar en el proceso. 10.
defecto tiene la codificación utf-8.
• responseEncoding: Este atributo tie-
<configuration>
ne el mismo significado que el ante- <system.web>
rior pero aplicado a una respuesta <identity impersonate=”true” user=”aesteban” password=”xxx”/>
enviada al cliente. Por defecto tie- </system.web>
ne la codificación utf-8. </configuration>
• fileEncoding: Permite indicar el tipo
de codificación aplicado a los fiche- Fuente 5. Ejemplo de la sección <Identity>.
ros. Por defecto tiene la codifica-
ción utf-8. En el fuente 6 se puede observar el • pageOutput: Indica si la información
• culture: Podemos especificar el lugar uso de esta etiqueta. En este caso se indi- de trazas se va a mostrar al final de
en el que nos encontramos para que ca que utilice como identidad del proce- cada página ASP.NET, tal como se
se aplique a las cadenas el idioma ade- so de ASP.NET un usuario de Windows. hace con las trazas a nivel de pági-
cuado, así como también a las fechas Si quisiéramos utilizar el usuario de IIS, na. Por defecto es false.
y su formato. Por ejemplo, en-US
representa al idioma inglés de Estados
Unidos y fr-FR francés en Francia. <configuration>
• uiCulture: Indica la misma infor- <system.web>
mación que en el atributo anterior, <trace enabled=”false” localOnly=”true” pageOutput=”false” requestLimit=”10”
traceMode=”SortByTime” />
pero se va a utilizar para realizar
</system.web>
búsquedas en las cadenas del idio- </configuration>
ma correspondiente.
Fuente 6. Ejemplo de la sección <trace>.
<configuration>
<system.web> • traceMode: Este atributo nos permite
<globalization requestEncoding=”utf-8” responseEncoding=”utf-8” indicar el modo de ordenación de los
culture=”es-ES” uiCulture=”es-ES”/> mensajes de trazas en la sección
</system.web> Información de seguimiento. Puede pre-
</configuration> sentar los valores SortByCategory y
SortByTime. Por defecto es SortByTime.
Fuente 4. Ejemplo de la sección <Globalization>. • localOnly: Indica si la información
de trazas se muestra únicamente a
Identidad de la aplicación le asignaríamos el valor de cadena vacía los clientes locales o por el con-
a los atributos name y password: trario, se muestra también a los
En la sección <identity> vamos a clientes remotos. Por defecto es
poder configurar la identidad del pro- Configuración de trazas false.
ceso que ejecuta ASP.NET en el servi-
dor. Para ello esta etiqueta nos ofrece La configuración del mecanismo de Le animo a que siga investigando las
los siguientes atributos: trazas que de ASP.NET se hace a tra- numerosas posibilidades de configura-
vés del uso de la etiqueta <trace> que tie- ción para las aplicaciones Web que ofre-
<<dotNetManía
• impersonate: Si posee el valor true indi- ne los siguientes atributos: ce ASP.NET. Lo mejor es empezar por
ca que el proceso de ASP.NET se va enabled: Este atributo indica si el observar los contenidos de los ficheros
a ejecutar bajo la identidad por defec- mecanismo de trazas se encuentra acti- de configuración.
19
Por Jesús López Méndez
(SqlRanger)
<< Veamos,posteriormente
en primer lugar, cual es esa problemática y
qué alternativas tenemos para
Los conflictos de concurrencia no se produ-
cen solamente al actualizar un registro porque
tratarla. El problema fundamental que se nos otro usuario lo haya modificado, también ocu-
plantea son los conflictos de concurrencia. Un rren si el registro ha sido eliminado por otro usua-
conflicto de concurrencia se produce cuando un rio. Asimismo, tienen lugar cuando un usuario
usuario modifica un registro de una tabla de una intenta eliminar un registro que ha sido modifi-
base de datos y ese registro ha cambiado desde cado e incluso que ha sido eliminado. Con la
la última vez que lo leyó. Por ejemplo, conside- inserción, sin embargo, es evidente que no se pro-
remos la siguiente secuencia de sucesos: ducen conflictos de concurrencia, ya que es impo-
sible que otro usuario pueda modificar un regis-
• Los usuarios A y B leen el registro R1 de tro que aún no existe en la base de datos. En defi-
la base de datos cargándolo en un DataSet. nitiva, los conflictos de concurrencia pueden pro-
• El usuario A modifica R1 ducirse:
• El usuario A guarda R1 en la base de datos.
• El usuario B modifica R1 • Al modificar un registro
• El usuario B guarda R1 en la base de datos. • Al eliminar un registro
DBConcurrencyException, indicando un con- los campos, es decir, el valor que tenían los cam-
flicto de concurrencia al haber sido modi- pos del registro cuando se leyeron de la base de
ficado R1 desde la última vez que B lo leyó. datos. Pongamos un ejemplo para aclarar ideas.
20
<< dnm.ado.net
Supongamos que estamos trabajando pos en la cláusula SET, excepto el Aún así, podríamos obtener un
con la siguiente tabla en una base de IdEmpleado que es autonumérico y por conflicto de concurrencia, pero sólo
datos de SQL Server: tanto de sólo lectura. Esto viene a en el caso de que haya sido eliminado
el registro. Un inconveniente de esta
opción es que es posible perder modi-
CREATE TABLE Empleados ( ficaciones. Si por ejemplo, los usua-
IdEmpleado INT IDENTITY(1,1) PRIMARY KEY, rios A y B leen el empleado 10, el
DNI VARCHAR(12) NOT NULL UNIQUE, usuario A modifica su nombre y lo
Nombre VARCHAR(50) NOT NULL, guarda, y luego B modifica el apelli-
Apellidos VARCHAR(50) NOT NULL
do y lo guarda, las dos actualizaciones
)
tienen éxito, pero la modificación que
hizo A se pierde, ya que el nombre es
El comando UPDATE que detec- suponer que se actualizarán todos los sobrescrito con el valor que leyó B.
ta conflictos de concurrencia sería el campos en la tabla, independiente- En ciertos sistemas, esta posible pér-
siguiente: mente de si se han modificado o no, dida de modificaciones es inaceptable
y por tanto habría que elegir otra
opción.
UPDATE Empleados Otra alternativa sería incluir en la
SET DNI=@DNI, Nombre=@Nombre, Apellidos=@Apellidos cláusula SET sólo los campos que se
WHERE IdEmpleado=@Original_IdEmpleado AND DNI=@Original_DNI AND han modificado. De esta manera, aun-
Nombre=@Original_Nombre AND Apellidos=@Original_Apellidos que sólo incluyéramos la clave pri-
maria en la cláusula WHERE, no se
perderían las modificaciones. También
Como veis, están todos los valores lo que implica una falta de optimiza- es una opción interesante incluir en
originales en la cláusula WHERE de ción. la cláusula SET sólo los campos modi-
esta instrucción parametrizada. De Sin embargo, es posible que no nos ficados, y en la cláusula WHERE la
esta manera, si ha cambiado alguno interese detectar conflictos de concu- clave primaria más el valor original de
de los campos, no se cumplirá la con- rrencia y que queramos que la actua- los campos que han cambiado, así el
dición, y por tanto la instrucción no lización se lleve a cabo independien- conflicto de concurrencia que detec-
actualizará ningún registro, o lo que temente de si el registro ha sido modi- taríamos sería en el caso de que otro
es lo mismo, el número de registros ficado o no desde la última vez que se usuario hubiera modificado alguno de
afectados será cero. Solamente la ins- leyó. En ese caso sólo incluiríamos la los campos que han sido modificados
trucción tendrá éxito, o sea, actuali- clave primaria en la cláusula WHERE. o en el caso de eliminación. Por ejem-
zará el registro, si éste no ha cambia- La instrucción UPDATE sería la plo, si los usuarios A y el B leen el
do. Así es como ADO.NET detecta siguiente: empleado 10, el usuario A modifica su
los conflictos de concurrencia, con-
cretamente un DataAdapter lanzará
una excepción DBConcurrencyException UPDATE Empleados
cuando el comando de actualización SET DNI=@DNI, Nombre=@Nombre, Apellidos=@Apellidos
afecte a cero registros. Observad que WHERE IdEmpleado=@Original_IdEmpleado
este comando incluye todos los cam-
21
<< dnm.ado.net
los campos, pero resulta más eficiente ya que la ins- Empecemos primero por los conflictos que se
trucción es más corta, reduciéndose el tráfico de producen al actualizar. Si la causa es que otro usua-
red y reduciendo el trabajo del procesador de con- rio lo ha modificado podríamos tener las siguien-
sultas del servidor de base de datos. Un campo de tes alternativas:
tipo TimeStamp en SQL Server es una especie de
autonumérico de 64 bits único en toda la base de • Descartar las modificaciones y refrescar el registro
datos. No puede haber dos registros en una base de 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 hacer
las 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 de
La técnica de detección se basa fundamentalmente ver las modificaciones deshaciendo cambios o
de volver a guardar con lo que forzaría la actua-
en incluir en la cláusula WHERE lización.
• Directamente forzar la actualización. Esto se
de la instrucción UPDATE o DELETE conoce como la técnica “el último que llega
gana”. En realidad esta acción no es una res-
el valor original de los campos puesta a un conflicto de concurrencia, ya que
para llevarla a cabo incluiríamos únicamente
la clave primaria en la cláusula WHERE, no
detectándose conflictos de concurrencia por
modificación.
datos con el mismo valor de TimeStamp, incluso
aunque pertenezcan a distintas tablas. Cada vez que Si la causa es que otro usuario lo ha eliminado,
se modifica un registro que tiene un campo las alternativas serían las siguientes:
TimeStamp, el valor del campo también cambia.
Debido a esto y si usamos esta alternativa, después • Volver a insertar el registro en la base de datos. En
de modificar un registro, sería necesario volver a el caso de que tengamos un autonumérico en
leer el campo TimeStamp para poder realizar más la tabla no sería posible volver a insertar el
modificaciones en el mismo registro. registro exactamente igual a como era ante-
Detectar conflictos de concurrencia en la eli- riormente.
minación es similar a la actualización, con la salve- • Eliminarlo del DataSet. Esta es la opción que
dad de que en este caso sólo podemos jugar con la más se suele utilizar.
cláusula WHERE de la instrucción DELETE.
Podríamos incluir sólo la clave primaria, en cuyo Detectar la causa del conflicto, al igual que
caso sólo obtendremos conflictos de concurrencia refrescar un registro, puede realizarse volviendo a
cuando otro usuario haya eliminado el registro. En leer tal registro de la base de datos basándose en la
la mayoría de los casos, este conflicto sencillamen- clave primaria, pero si la clave primaria puede cam-
te lo podríamos ignorar. También podríamos incluir biar, esta técnica no sirve para su propósito ya que
todos los valores originales de los campos o la cla- si ésta ha cambiado no es posible identificar el regis-
ve primaria más el TimeStamp, en cuyo caso reci- tro y no es posible determinar si el conflicto de con-
biremos un conflicto de concurrencia cuando otro currencia ha ocurrido por modificación o por eli-
usuario haya modificado o eliminado el registro. minación. Por eso sería recomendable usar claves
Una vez que tenemos decidido cómo vamos a primarias artificiales como autonuméricos o
detectar los conflictos de concurrencia y cómo GUID’s.
vamos a hacer las actualizaciones y eliminaciones,
hemos de decidir cómo los vamos a tratar, o sea, En cuanto a los conflictos de concurrencia que
qué acciones vamos a tomar en el caso de un con- se producen al eliminar un registro, podríamos tener
flicto de concurrencia. Cada conflicto de concu- las siguientes alternativas cuando la causa es por
rrencia lo trataremos de manera diferente en fun- modificación:
ción de si se ha producido al hacer una actualiza-
ción o al realizar una eliminación y en función de • Deshacer la eliminación y refrescar el registro. Al
<<dotNetManía
la causa del conflicto, esto es, si ha sido porque usuario le informaríamos del conflicto y ten-
otro usuario lo ha modificado o porque lo ha eli- dría la posibilidad de volverlo a eliminar des-
minado. pués de haber visto los cambios realizados.
22
<< dnm.ado.net
23
<< dnm.ado.net
Y esta sería la instrucción UPDATE sin usar la ciones, que sea capaz de gestionar los conflictos de
concurrencia optimista: concurrencia y que disponga de todas las opciones
UPDATE Empleados
SET DNI=@DNI, Nombre=@Nombre, Apellidos=@Apellidos
WHERE IdEmpleado=@Original_IdEmpleado
Una buena alternativa a los DataAdapters que vie- • TimeStamp: Se incluirá la clave primaria más
nen incluidos en .NET Framework, es escribir nues- el valor original del campo TimeStamp si es
tro propio DataAdapter que no tenga estas limita- que existe.
24
<< dnm.ado.net
try
{
Adapter.Update(Empleados);
}
catch ( DBConcurrencyException ex )
{
// Nuestra respuesta a un conflicto va a ser refrescar el registro
Adapter.SelectCommand = Resync;
Resync.Parameters[“@IdEmpleado”].Value = ex.Row[“IdEmpleado”, DataRowVersion.Original];
// Eliminamos el registro
// y volvemos a lanzar la excepción
ex.Row.Delete();
ex.Row.AcceptChanges();
throw ex;
}
}
else
{
// la causa del conflicto es que ha sido modificado
25
<< dnm.ado.net
¿Qué es qué?
¿Qué es qué?
¿Qué es Whitehorse? 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
Whitehorse es el nombre en clave del software que se incluirá en una aproximación. La versión actual, la 1.0 llamada System Center 2005
Visual Studio 2005 y que aporta herramientas de diseño model-driven es la primera suite de gestión integrada para el Windows Server System
dirigida a los arquitectos de software, enlazando el modelo conceptual e incluye el System Management Server 2003, Microsoft Operations
al código. Manager 2005 y el nuevo sistema común de reporting.
Tendremos más información en el devdays que se celebrará en San Diego, Se habló de él en el Summit celebrado en Las Vegas el pasado mes de
California entre el 23 y el 28 de Mayo (http://www.microsoft.com/semi- marzo. La web del Summit 2004: http://www2.mms2004.com.
nar/teched2004). En Europa se celebrará en Ámsterdam, Holanda, entre el Más información en Microsoft Watch: http://www.microsoft-watch.com
29 de Junio y el 2 de Julio (http://www.microsoft.com/europe/teched). y en el sito Betanews http://www.betanews.com/article.php3?sid=1079576470
Entretanto puede descargarse un video demostrativo de la web de
MSDNTV en http://msdn.microsoft.com/msdntv
¿Qué es Lonestar?
¿Qué es Laguna? 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
En el Microsoft Mobile DevCon Conference 2004 celebrado en para Tablet PC. Si bien se iba a vender como un add-on para los usuarios
San Francisco entre el 23 y el 27 de marzo se habló de “Laguna”, nom- de Tablet PC, finalmente será incluido dentro de Windows XP SP2. Tendrá
bre en clave del SQL Server CE 3.0. Esta versión se verá retrasada igual un nuevo SDK para desarrolladores e integración con Office 2003.
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. ¿Qué es Windows XP Reloaded?
La web del Mobile DevCon Conference 2004 está en: Windows XP Reloaded es el nombre en clave para la versión de
http://www.microsoftmdc.com. Windows XP que hará de puente entre la actual y Longhorn.
Puede ver información de la versión actual de SQL Server CE 2.0
en: http://www.microsoft.com/sql/ce.
¿Qué es Symphony y Harmony?
Symphony es el nombre en clave de la próxima versión de Windows
¿Qué es Indy? XP Media Center Edition el cual está basado en XP SP2. Una versión
Indy es el nombre en clave de una nueva herramienta de gestión previa a Windows XP Media Center Edition 2004. Harmony es el nom-
desarrollada por Microsoft Research y que se comercializará por la divi- bre en clave del próximo Windows XP Media Center Edition 2004.
<<dotNetManía
sión Enterprise Management de Microsoft. Simula un centro de datos Incluirá soporte para High Definition Televisión, soporte para múl-
empresarial derivado del modelo de hardware, software y los sistemas tiples sintonizadores, soporte para diferentes formatos de grabación de
de servidores del cliente. vídeo y radio.
26 noticias.noticias.noticias.noticias
Por Mario del Valle y
Miguel Katrib
Grupo Weboo
Universidad de La Habana
<< Entre otras razones .NET supera a tecnolo- Las tecnologías orientadas a componentes
gías de componentes precedentes por la como COM y CORBA utilizan lenguajes de
transparencia con la que integra código y Definición de Interfaces (IDLs) para especifi-
car tipos. Pero los IDLs se basan sólo en las sig-
metadatos favoreciendo con ello la metapro-
naturas de los métodos y no incluyen más infor-
gramación. Este trabajo muestra cómo usan- mación semántica que la que se puede deducir
do reflexión (reflection) se define un conver- de los tipos y nombres de los métodos y de sus
sor de tipos que permite a partir de un obje- parámetros.
to, el cual comparte una misma funcionalidad Java alivia la limitación anterior porque la
noción de tipo definido por un interface1 está
con un interface, obtener un objeto proxy
incluida en el propio lenguaje de programación
equivalente en funcionalidad al original pero Java. Sin embargo, la tecnología Java tiene las
que garantiza ser subtipo de dicha interface. debilidades siguientes:
De este modo el objeto proxy puede ser uti-
lizado como si estáticamente hubiese decla- • Debido a su enfoque monolingüístico,
una componente en Java sólo se puede
rado que implementa el tipo interface. Con
usar por otra componente Java. No hay
ello se facilita la adaptabilidad del software y
<<
una forma simple de conectar una com-
la factorización de código ya existente para ponente Java con una componente escri-
poder aprovechar una funcionalidad común. ta en otro lenguaje o viceversa.
• Un buen aporte de Java es que permite
La solución propuesta permite ilustrar ade- incluir información extra en una compo-
más la existencia de un peligroso agujero de nente por vía de determinados convenios
en la escritura de comentarios especiales.
seguridad en el sistema de tipos de .NET, el Pero el mecanismo de reflexión de Java
cual lamentablemente no es controlado por no ofrece recursos para recuperar esta
el CLR.Esta falla permitiría la escritura de códi- información que se ha incluido en una
go malicioso aún ejecutando bajo el supuesto componente en forma de comentarios.
modo seguro del código administrado. Los desarrolladores deben conocer y tra-
bajar directamente con la forma en que
internamente estos comentarios están den-
tro de un fichero Java byte code. De modo
que un cambio en esta forma de repre-
sentación implicaría cambios en las apli-
caciones que utilizan estos comentarios.
<<dotNetManía
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).
27
<< dnm.plataforma.net
miento común pero no han sido defini- B b = new B(); minar el tipo que dinámicamente tendrá
dos con una tal raíz común. ¿Qué hacer ... el objeto que se pasa como parámetro y
si queremos incorporar una nueva fun- NewMethod(b); a las operaciones de conversión o mol-
28
<< dnm.plataforma.net
deo (casting) para poder interpretar al parámetro formal De este modo el código cliente interesado en usar
como del tipo deseado. Pero es más, este enfoque no es la funcionalidad NewMethod para un objeto de tipo B
aplicable si D fuese un tipo creado dinámicamente en que tiene la funcionalidad expresada por IA debe
tiempo de ejecución porque no dispondríamos de una seguir el siguiente patrón
definición estática de D para colocar estáticamente el
segmento de código anterior dentro de NewMethod. B b = new B();
...
Una solución basada en reflexión IA a = (IA)Caster.Cast(b, typeof(IA));
NewMethod(a);
Una mejor solución se basa en crear dinámica-
mente usando reflexión (lo que se verá en la sección La Figura 1 nos ilustra este escenario
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
interface IA{
T1 f1();
...
Tn fn();
}
Type interfaceType){
... Un escenario común en las GUIs es hacer una
} selección de un elemento entre varios de una lista.
}
29
<< dnm.plataforma.net
Habitualmente se usa para este fin un ComboBox o un Si lo que se quiere es aplicar este método con un
ListBox. Suponga que queremos un método ComboBox, bastaría con hacer:
Configure que pueda trabajar tanto para un ComboBox
como para un ListBox. Habría que escribir dos ComboBox combo = new ComboBox();
copias muy similares del tal método que sólo difie- ...
ren en el tipo del parámetro (Fuente 1) Configurate((IListControl)Caster.Cast(combo,
En un caso como este sería conveniente tener una typeof(IListControl)));
interfaz IListControl que “factorizara” el comporta-
Fuente 1
miento común de ComboBox y ListBox que nos inte- Para el ListBox lo mismo:
resa utilizar:
ListBox list = new ListBox();
interface IListControl{ ...
object SelectedItem{ Configurate ((IListControl) Caster.Cast(list.
get; set; typeof(IListControl)));
}
int SelectedIndex {
get; set; Emisión de código IL usando reflexión
}
IList Items{ get;}
y Emit
string Text {get; set;} Otra de las potencialidades de .NET combina-
bool Sorted { get; set; } das con la reflexión son los recursos para generar
void BeginUpdate(); código dinámicamente en tiempo de ejecución,
void EndUpdate(); código que incluso puede ser ejecutado a su vez
void Refresh(); durante de la propia ejecución de quién lo creó (lo
event EventHandler que es el caso del tipo proxy explicado anterior-
SelectedValueChanged; mente). Para esto último .NET tiene en su libre-
event EventHandler ría un namespace Reflection y dentro de este a su
SelectedIndexChanged; vez el namespace Emit. Ilustraremos en esta sección
} cómo usando estos recursos el método castTo pue-
De este modo sólo habría que escribir un único de generar el tipo proxy del que hablamos en las
un método Configure: secciones anteriores.
Para generar un tipo dinámicamente primero
<<dotNetManía
30
<< dnm.plataforma.net
Luego a través de este objeto los métodos del proxy. Note que Luego con cada methodBuilder
asmBuilder se genera un módulo y este método recibirá como pará- se emitirá el código IL correspon-
dentro del módulo el tipo deseado metros el tipo interface al que se diente al cuerpo del método. Las ins-
quiere forzar la conversión (cast), el trucciones (Fuente 5) generan el
Fuente 2
Fuente 3
la implementación del método emitirá el código de los métodos del objeto que estará en el tope de la
EmitMethods (Fuente 4) que es el correspondientes al nuevo tipo que pila y el código IL para retornar a su
método que generará cada uno de se está generando. vez al regresar de esta llamada.
31
<< dnm.plataforma.net
Fuente 4 Generación de cada uno de los métodos del tipo proxy creado por el conversor
Fuente 5
¿Una solución más eficiente? class IATwinOf_B : IA{ Las capacidades del Emit permi-
/*... The same variables as ten generar un tipo (IATwinOf_B) con
Ciertamente esta solución, para apro- in B las mismas variables y los mismos
vechar una comunalidad vía proxy, impli- ... nombres que otro tipo (B). Pero para
A constructor to do
ca una llamada extra porque por cada lla- duplicar los métodos de B en
the copy from B
mada de la forma x.f() dentro de */
IATwinOf_B hace falta poder “copiar”
NewMethod el proxy llamará al target.f() public T1 f1(){ el código IL de los métodos origina-
del objeto que ha sido “envuelto” por el /* ... The same IL les de B en los métodos correspon-
proxy Pero este pequeño precio en ren- code as the IL dientes (los mismos nombres y la mis-
dimiento será compensado con la adap- code for f1 in B ma signatura) de IATwinOf_B.
tabilidad del código resultante. */ Desafortunadamente, parece que
Para evitar esta llamada extra se } argumentando protección de derechos
podría intentar crear un tipo que haga public Tn fn(){ de autor, Microsoft no incluye en las
/* ... The same IL
las veces de un duplicado del tipo B en capacidades de reflexión ninguna vía
<<dotNetManía
code as the IL
lugar de un tipo que haga de proxy de code for fn in B
para hacer un tal “cut and paste” del
B. El objeto duplicado sería una “copia” */ código. Este no es un argumento muy
que sí implementaría la interface IA } convincente porque la inclusión de una
32
<< dnm.plataforma.net
capacidad tal en la reflexión podría estar ción Ret en el IL, el tipo del objeto que class Account
controlada personalizando la política de va a estar en el tope de la pila coincida {
seguridad de código. De hecho no tie- con el tipo de retorno del método den- private int balance;
ne que considerarse una violación de tro del cual está dicha operación Ret. public int Balance
derechos de autor que un programador Note en la descripción de la sección {
aplicase una facilidad similar a un anterior que el tipo del objeto que que- get{ return balance;}
ensamblado generado por él mismo o dará en el tope de la pila es el tipo del }
por otro programador de su propio objeto devuelto por el método original. //...other methods
equipo o empresa que le haya concedi- Es este método original a quien se lla- }
do tal privilegio. ma según el código generado con
Claro el lector puede pensar que si Definimos también un tipo con la
se tienen tales privilegios entonces tam- generator.EmitCall(callCode, misma variable pero pública
bién pueda disponerse del código fuen- realMethod, null);
te original de B y entonces porqué no class UnprotectedAccount
reescribir B para indicar que imple- Sin embargo el Ret se ha generado {
menta a IA dentro del método emitido a través de public int balance;
}
class B: IA{
MethodBuilder methodBuilder = Se define ahora un tipo con un
/*...the same source text
proxyTypeBuilder.DefineMethod método que recibe un objeto Account y
as in the previous B
(mi.Name, lo devuelve
*/
MethodAttributes.Public |
}
MethodAttributes.Virtual, class Naive{
En contra de esta opción puede mi.ReturnType, public Account
decirse que no es lo mismo ceder dere- argsTypes); ReturnMyself(Account x){
chos de autor para que nos dupliquen el return x;
código IL que para que nos usen el fuen- y que como se indica tiene como tipo }
te2 ya que esto último muestra más fácil- de retorno el tipo mi.ReturnType que es }
mente la lógica utilizada. Pero permitir el tipo de retorno del método corres-
hacer cambios en el fuente, por simple pondiente en el tipo interface. De modo Con un conversor como el que se ha
que fuesen estos cambios, es dejar una que si en la interface y en el objeto original propuesto anteriormente en este traba-
puerta abierta a otras modificaciones y dos métodos difieren sólo en el tipo de retor- jo se podría utilizar un tipo Malicious
por tanto contrario al principio de “ocul- no esto no se detecta. para recibir un objeto Account y devol-
tar información” que una buena pro- Esto significa un serio agujero de ver el mismo objeto pero ¡interpretado
gramación orientada a objetos debe pro- seguridad en el sistema de tipos de como UnprotectedAccount!
mulgar. Además de la cascada de recom- .NET, aún ejecutando bajo el supues-
pilaciones que esto pude provocar. to modo seguro (safe) del código admi- interface Malicious{
nistrado (managed code). El ejemplo a UnprotectedAccount
Un agujero de seguridad en el continuación muestra como aprove- ReturnMyself(Account x);
chando esta debilidad se podría ¡acce- }
sistema de tipos de .NET der a las partes privadas de un objeto!
Lamentablemente el CLR de .NET Suponga que tenemos un tipo Account Si se ejecuta el Fuente 6 se podría
no controla, a la hora de hacer la gene- en el que la variable de instancia balan- acceder de esta forma a la variable pri-
ración JIT, que al encontrar una opera- ce es privada: vada balance del objeto original.
Fuente 6
<<dotNetManía
2 Aunque las capacidades de la propia reflexión nos permiten prácticamente reproducir el texto fuente de un ensamblado también hay ya
utilitarios para ofuscar el código IL y dificultar tal reproducción
33
<< dnm.plataforma.net
Fuente 7 Verificación de que un tipo implementa todos los métodos existentes en un tipo interface
if (realMethod.ReturnType != mi.ReturnType)
throw new Exception(“Invalid casting. Methods have different returntypes:”
+ mi.ReturnType.Name + “, “ + realMethod.ReturnType.Name);
Fuente 8
Las Windows Forms y en general gran parte de rando incluso código al vuelo en tiempo de ejecución,
la BCL (Basic Common Library) de .NET están pla- forman un potente recurso de metaprogramación que
gadas de situaciones de este tipo que podrían factori- será ilustrado en futuros trabajos.
34
Suscripción a dotNetManía
❑ Deseo suscribirme a dotNetManía por un año (11 ejemplares) y beneficiarme de la oferta del 10% de descuento por un
importe total de 60€ para España; o por 75€ para el resto de Europa; o por 90€ para el resto del mundo (IVA incluido).
❑ Deseo suscribirme a dotNetManía por un año (11 números) por un importe de 45€ por ser estudiante (IVA incluido).
Aporto fotocopia del carné de estudiante o sello del centro académico (IMPRESCINDIBLE). OFERTA VÁLIDA SÓLO
PARA ESTUDIANTES RESIDENTES EN ESPAÑA.
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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. Usted autoriza a la mecaniza-
ción de estos datos. El res-
❑ Giro postal a nombre NETALIA, S.L.
ponsable y destinatario de
❑ Transferencia bancaria a nombre de NETALIA, S.L. a: éstos es Netalia, S.L. Usted
La Caixa tiene derecho a acceder a sus
Número de cuenta 2100 4315 48 2200014696 datos, modificarlos y cance-
(Indique su nombre en la transferencia) larlos cuando lo desee. Sus
datos no serán cedidos en nin-
❑ Domiciliación Bancaria guna de las formas posibles a
terceras partes y no se utiliza-
Indique su número de cuenta:
rán más que para el buen fun-
cionamiento de su suscripción
❑ Tarjeta de crédito a la revista dotNetMania y
❑ VISA ❑ MASTERCARD para informarle de las activi-
Número de su tarjeta: dades comerciales que realice
Fecha de caducidad: / (Imprescindible) la editorial Netalia, S.L. Si no
desea recibir información
comercial de esta empresa
Firma y sello (imprescindible) marque la casilla siguiente ❑
a de de 20
❑ Nº1 ❑ Nº2
Hemos necesitado
que pase más de un
siglo pero ahora, en el
2004, ya podemos
ofrecerte la solución
+ rápida, económica
y eficaz para que tu
libro (sea cual sea la
materia tratada) o tu
tesina vea la luz sin
necesidad de esperar
otros tantos años.
nuevosescritores
c/ Collado Bajo, 13 • 28053 Madrid • ✆ 914 770 185 • Fax: 914 773 152
[email protected]
www.nuevosescritores.com
Por Luis Miguel Blanco
Software Arquitect
Alhambra-Eidos
Introducción a GDI+
37
<< dnm.plataforma.net
Si ponemos el código del fuente 1 en un botón res que representan la anchura y altura respecti-
del formulario, el resultado tras su ejecución será vamente.
similar a la figura 1.
Dim szMedidas As New Size(100, 50)
El área de dibujo
Para dibujar una figura en un formulario, pri-
meramente debemos delimitar un área en la super-
ficie del formulario, dentro de la cual realizaremos
nuestro dibujo.
Con figuras simples, esta región consiste en una
zona rectangular dentro de nuestro formulario, que
definiremos mediante un objeto de la clase
Figura 1 Rectangle, pasando a su constructor los objetos Point
y Size creados anteriormente, que servirán para
decirle al rectángulo cuál es su posición y tamaño.
38
<< dnm.plataforma.net
39
<< dnm.plataforma.net
‘ Dibujar un rectángulo
gphSuperfDibujo.DrawEllipse(New Pen(Color.ForestGreen, 4), _
New Rectangle(New Point(25, 45), New Size(200, 40)))
‘ Liberar recursos
gphSuperfDibujo.Dispose()
Fuente 2
El resultado lo apreciamos en la figura 3. tros alpha (transparencia), rojo, verde y azul res-
pectivamente; o también el método FromName, en
el que pasamos como parámetro una cadena con el
nombre del color a usar, como vemos en los siguien-
tes ejemplos.
Estilos de trazo
Figura 3
Por defecto, al dibujar con un objeto Pen, se uti-
liza una línea continua para trazar la figura. Sin
embargo, mediante la propiedad DashStyle, pode-
La clase Rectangle dispone de un constructor en mos variar el estilo de línea, consiguiendo que esté
el que podemos pasar directamente los valores compuesta por guiones, puntos, etc.
numéricos correspondientes a la posición y tama- Las propiedades StartCap y EndCap, por otro
ño, sin necesidad de crear un objeto Point ni Size, lado, permiten que el comienzo y final de línea sea
como muestra la siguiente línea de código. diferente de una línea estándar, pudiendo aplicar
un efecto de recuadro, redondo, romboide, etc.
New Rectangle(25, 45, 200, 40) Como comprobará, si escribe este código de ejem-
plo, es muy sencillo asignar estas propiedades, ya
Respecto al color, aunque el medio más senci- que al tratarse de enumeraciones, el editor de códi-
llo de seleccionarlo es eligiendo uno de los nom- go, gracias al Intellisense, nos muestra la lista con
bres de color de la estructura, también podemos los valores admisibles.
usar el método FromArgb, en el que pasamos los En el código del fuente 3 dibujamos una línea con
valores numéricos correspondientes a los paráme- algunas de las variaciones que hemos comentado.
gphSuperfDibujo.Dispose()
Fuente 3
40
<< dnm.plataforma.net
Figura 4
Figura 6
‘ array de objetos Point con las coordenadas del polígono método Form.Invalidate, que borra las
Dim pntPuntos(4) As Point figuras que hayamos dibujado en la
pntPuntos(0) = New Point(25, 70) ventana.
pntPuntos(1) = New Point(50, 40)
pntPuntos(2) = New Point(75, 70) Me.Invalidate()
pntPuntos(3) = New Point(60, 90)
pntPuntos(4) = New Point(40, 90)
El evento Paint.
Dim gphSuperfDibujo As Graphics = Me.CreateGraphics() Refrescando zonas ocultas
gphSuperfDibujo.DrawPolygon(New Pen(Color.DarkMagenta, 3), _ del formulario
pntPuntos)
41
<< dnm.plataforma.net
Figura 7
Y terminamos
Bien, pues esto ha sido todo, en este artículo
hemos hecho una pequeña introducción a GDI+,
Lo que debemos hacer ante esta circunstancia, el API de programación gráfica de la plataforma
es un refresco o repintado del gráfico en el formu- .NET Framework, describiendo algunas de sus
lario. Seguidamente explicamos cómo llevar a cabo principales características. También hemos descri-
esta operación. to los principales objetos implicados en una ope-
Cuando una región del formulario que había ración de dibujo, y efectuado unas pruebas demos-
estado oculta vuelve a mostrarse, se produce en ese trativas de la potencia y facilidad de programación
formulario el evento Paint, de esta forma sabemos de este conjunto de clases. Le invito a que como
que el objeto está solicitando que se vuelvan a dibu- ejercicio, experimente con otros métodos de los
jar aquellos elementos gráficos que podrían haber objetos comentados, para que vaya adquiriendo sol-
quedado borrados. tura en la gestión de gráficos con .NET.
Fuente 6
tes .NET totalmente gratuitos, descuentos para formación en ASP.NET así como oportunidades de
hosting ASP.NET.
42
noticias.noticias.noticias.noticias
Por Miguel Egea
SQL Server MVP
portalsql.com
<< La cantidad de información que una persona está dispuesta Tipos de copias
a perder en función de lo que eventualmente suce-
da es la respuesta a contestar para diseñar nuestra Existen tres tipos de copias de seguridad en
política de copias de seguridad. SQL-Server, las copias de seguridad completas, las
Esto parece sencillo, pero no lo es en absoluto. copias de diferencias y las copias del log:
Imaginemos un momento una empresa que factu-
re 1 millón al año, si sigue un horario normal tra- • Copias de seguridad completas: Las copias de
bajará 51 semanas, 5 días a la semana; esto supone seguridad completas realizan una copia de todos
una facturación al día de más o menos 3920 6 día. los datos, bien sea de una base de datos comple-
¿Estaría esta empresa dispuesta a perder la factura- ta, bien del fichero que se especifique. Esta ope-
ción de un día? ¿y de una hora?. Generalmente una ración se puede realizar 'en caliente', si se hace
empresa con esa facturación es una pequeña empre- mientras hay otros usuarios modificando la base
sa, cuanto más importante sea el volumen de nego- de datos, el proceso de copia se encarga de ano-
cio mucho más importante será tener una adecua- tar el puntero del log en el inicio de la copia y al
da política de copias de seguridad. final de ésta, guardando en el mismo conjunto
Incluso algunas veces, los departamentos de de copias la información que se ha incorporado
informática estamos seguros de tener esas copias de durante el proceso. Esto se hace ágilmente en el
seguridad, pero, ¿las hemos probado?, ¿hemos res- momento de la recuperación, ya que las exten-
taurado esa información para saber que la cinta no siones de datos son restauradas incluso aunque
está rota, que contiene lo que esperamos? tengan un estado 'erróneo'; posteriormente se
La política de copias de seguridad va más allá de aplican los cambios registrados en el log duran-
simplemente guardar un fichero. Debemos incluir te el proceso de backup y se obtiene una imagen
dentro de nuestro plan de sistemas las posibles cau- fiel del momento en que terminó la copia.
sas de catástrofe y verificar si estamos listos ante ellas. • Copias de seguridad diferenciales: Las copias
En cualquier caso de lo que vamos a hablar en de seguridad de diferencias guardan todas las
estas líneas es de cómo organizar las copias de segu- extensiones que han sido modificadas desde la
ridad y las restauraciones en nuestros servidores última copia de seguridad completa. Son por
SQL-Server, a comprender cuales son los modelos tanto un estupendo mecanismo para aquellos
de copia que nos ofrece la base de datos, a diseñar datos que no crecen pero si se modifican muy
una estrategia de copias de seguridad adecuada a frecuentemente. Hay muchos datos que cum-
<<dotNetManía
nuestro hardware y a contemplar el plan de restau- plen estas premisas, tarifas de artículos, tablas
ración que tenemos que implementar en caso de de acumulados de almacén, información de
catástrofe. cambio de divisas, etc.
43
<< dnm.servidores.sql
• Copias de seguridad del Log: El solidado la información en los ficheros La estrategia de recuperación ante una
tercer tipo de copias de seguridad no de datos. pérdida consistiría en restaurar la copia de
está disponible en todas las circuns- Sin embargo, no podrá recuperar la seguridad completa más reciente (vere-
tancias. Por ejemplo, la base de datos información en el momento de fallo; mos ejemplos con la opción no recovery),
master ofrece —generalmente— un solamente le valdrá la última copia de después restauraremos la copia de dife-
error al hacer esta copia de seguri- seguridad que tenga para recuperar la rencias más reciente también —aunque
dad. Esto es debido a que solamen- información. existan varias no se tomará más que la más
te se pueden hacer copias de seguri- En este modo no pueden hacerse reciente— y sobre esta copia de diferen-
dad del log de transacciones cuando copias de seguridad del log de transac- cias restauraremos todos las copias del log
el modo de recuperación es comple- ciones; obtendremos un error si lo de transacciones en el mismo orden en el
to o de registro masivo. intentamos. que se hayan guardado.
El procedimiento que tendríamos Es importante que no se ejecute la
El log de transacciones es una estruc- que seguir para realizar una restauración instrucción backup log <database> with
tura secuencial en la que se va guardando dependerá del tipo de copias que haya- truncate_only; si se ejecuta esta instruc-
la información de modificaciones solicita- mos hecho, pero pasará necesariamente ción necesitamos una copia de seguri-
das al motor. Periódicamente la informa- por restaurar la última copia de seguri- dad completa inmediatamente después
ción modificada —que permanece sola- dad completa y restaurar la última copia o no podremos seguir esta estrategia.
mente en memoria— es volcada a disco, de diferencias que hayamos efectuado. Completo: El modo de recupera-
esto se produce inmediatamente después Puede establecerse este modo eje- ción completo guarda toda la informa-
de lo que en SQL-Server se llaman pun- cutando la siguiente instrucción: ción (incluidas las operaciones masivas)
tos de comprobación checkpoint. Sin embar-
go, aunque el sistema sufriese una caída de
Alter Database <Nombre de BD> Set Recovery SIMPLE
tensión, esa información no se habría per-
dido. Ésta está cuidadosamente guardada
en el log y en el proceso de restauración Registro masivo: El formato de en el log de transacciones, esto hace que
que SQL lanza inmediatamente después recuperación de registro masivo no la política de copias debe ser adecuada
de una caída no prevista, se vuelven a con- sobrescribe el log de transacciones, por para evitar que en un momento deter-
solidar o rechazar los cambios que se pro- lo que permite recuperación ante erro- minado podamos perder información y
dujeron. Tal y como veremos más adelan- res de los discos o medios en donde se para evitar que el log de transacciones
te tener backups del log de transacciones estén guardando los datos. Guarda crezca de forma desmesurada.
no es solamente una garantía de recupe- menos información en ciertas opera- La estrategia de restauración en el
ración de la información —incluso al pun- ciones masivas del tipo Select Into, bcp, caso del modo de recuperación comple-
to de ruptura—, sino una operación bulk insert y operaciones sobre los ta puede ser la misma que hemos pro-
imprescindible para evitar que nuestro campos de tipo Text e Image (campos puesto para el modo de registro masivo.
archivo de log crezca desmesuradamente. blob). Existen comandos que nos muestran
En caso de una catástrofe se podría la situación de llenado del log y el espa-
Modos de recuperación recuperar toda la información menos cio que tiene ocupado. A través de este
las operaciones masivas, que tendrían comando podemos comprobar si es
El modo de recuperación marca la que volver a ser incorporadas de forma necesario hacer una copia de seguridad
cantidad y tipo de información que SQL- manual. del Log. El comando es:
Server guarda en el log de transacciones La estrategia de copias de seguridad
DBCC SQLPERF ( LOGSPACE )
y tiene grandes implicaciones en las polí- constaría de copias de seguridad com-
ticas de copias de seguridad, sobre todo pletas, copias diferenciales y copias de Este comando ofrece resultados
para determinar la información que sere- log de transacciones. como los que aparecen en la Tabla 1.
mos capaces de restaurar y el tiempo
máximo de pérdida de información. Base de Datos Tamaño en Mb % usado Status
Microsoft SQL-Server 2000 tiene
tres modos de recuperación: master 2.7421875 35.541309 0
Sencillo: Si tiene establecido el tempdb 0.4921875 44.694786 0
modo de recuperación sencillo, no cre-
cerá su log de transacciones; es equi- model 0.4921875 53.57143 0
valente a tener establecida la opción msdb 2.2421875 36.193378 0
Trun. Log on chkpt en la versión 7.0, e
implica que la información almacena- pubs 0.7421875 40.921051 0
<<dotNetManía
44
<< dnm.servidores.sql
Comprobar el modo de recuperación copias no están, así que si estáis ejerciendo esa res-
de una base de datos ponsabilidad, aseguraros de forma periódica de que
realmente hay copias y de que realmente éstas son
Para comprobar cual es el modo de recuperación buenas. No se puede garantizar de otra forma.
actual de una base de datos puede usar el administra- Una buena política de copias puede suponer la res-
dor corporativo en las propiedades de la base de datos tauración con carácter periódico (a menudo). Un
(ver figura 1) entorno de preproducción en el que se restauren estas
copias puede cumplir una doble misión: garantizar las
pruebas de integración en el entorno real y garanti-
zar que las copias de seguridad cumplirán su objetivo
en caso de ser necesarias.
Diseñando la estrategia
La estrategia de copias dependerá de cuánta infor-
mación esté dispuesto a perder, cuánta información
como máximo podría aceptarse como pérdida. Hay sis-
temas en los que recuperar la información de un día
de trabajo es aceptable y posible, sin embargo, hay otros
en los que solamente 30 minutos de información supo-
nen pérdidas importantísimas a la compañía.
Por tanto, la estrategia tiene que estar diseñada
Figura 1. Comprobar el modo de para cubrir los requerimientos de seguridad y puede
recuperación no ser puramente técnica sino también física. Por ejem-
plo, de nada servirán las copias de seguridad en unas
cintas en la estantería de encima del servidor ante un
incendio.
También puede comprobar el modo de recupera- Los libros en pantalla de SQL-Server también pue-
ción de la base de datos ejecutando desde cualquier den ayudarnos en el diseño de esta estrategia pues con-
aplicación (por ejemplo en analizador de consultas) la tienen una batería de preguntas que vienen muy al
instrucción: hilo de la cuestión.
<<dotNetManía
select DatabasePropertyEx(‘Northwind’,’Recovery’)
45
<< dnm.servidores.sql
El modo de recuperación idóneo fichero de transacciones no crezca des- proceder al reparto todo el día.
para nuestra compañía también es una mesuradamente. Cada una de las transac- Seguramente la mayoría de las transac-
decisión que está en función de esa estra- ciones se registran en el log y el espacio ciones se ejecutan en una hora, y el res-
tegia. Si es aceptable hacer solamente que usan no es marcado como rehusable to del día son mayormente consultas.
una copia de seguridad al día, por ejem- hasta que se salva con una copia de segu- Quizá entre las 9 y las 10 el log crezca
plo por la noche, cuando nadie está en ridad de Log. Por tanto, hay que estable- mucho y, por tanto, necesite copias más
la oficina, y no hay problemas en recu- cer frecuentes copias de seguridad de éste. frecuentes, por ejemplo, cada 10 minu-
perar la información que se inserta, qui- Pero, ¿qué significa frecuente? La ver- tos. Sin embargo, el resto del día bas-
zá el modo sencillo sea válido. Si por dad es que no hay una regla, todo depen- taría con una copia cada 2 horas (inclu-
ejemplo la base de datos en cuestión es de de la cantidad de información que se so menos), ¿Cómo determinar esto?
una base de datos para cálculos tempo- modifique o inserte, además no hay una Quizá una buena estrategia podría
rales en la que se inserta y borra mucha única respuesta a esta pregunta. ser la siguiente, crear un procedimien-
información pero no tiene más impor- Imaginemos una empresa de ventas to almacenado como el del fuente 1
tancia porque es información transito- en la que los pedidos se introducen (obtenido de http://www.portalsql.com).
ria, simple es un buen mecanismo ya que todos entre las 9 y 10 de la mañana para Ver fuente 2.
no obliga a ninguna política de copias
del log y éste no crece de forma des- Use pruebas
controlada. go
Si esto no es admisible entonces hay if databasepropertyex(‘Pruebas’,’recovery’)<>’FULL’
que ir al modo de recuperación completo ALTER DATABASE Pruebas SET RECOVERY FULL
o registro masivo. Para distinguir entre go
éstos hay dos cuestiones: la velocidad en — Creamos una tabla en la base de datos de pruebas, para que exista
la restauración y el tamaño de las copias. aunque
Si el modo de recuperación es de re- — no tenga datos en el primer momento de la restauración
CREATE TABLE TablaPruebas(id int identity(1,1),
gistro masivo, la restauración de copias
Descripcion char(30),
en las que se hayan creado índices nece- FechaHora datetime default getdate())
sitará volver a crearlos (sólo se almace- go
na el acto de hacerlos, no la información BACKUP DATABASE PRUEBAS TO DISK =’C:\BackupDePruebas.bak’
que han generado), por tanto tardará go
potencialmente más en la restauración. — Ahora creamos registros para insertar dentro de nuestra base de
Si el modo de recuperación es com- datos
pleto se guarda toda la información mo- Declare @i int
dificada. Por lo tanto, no será necesario SET @i=1
— hacemos un bucle hasta 200
volver a generar los índices para hacer
while @i<=200
la restauración, sin embargo, la copia de begin
seguridad tendrá todos esos datos modi- —
ficados y lógicamente será más grande. INSERT INTO TablaPruebas (Descripcion) values
(‘ El valor de @i es ‘ + cast(@i as char(3)))
Un ejemplo de copias — en el elemento 100 hacemos un backup de log
— lo vamos a hacer en el mismo fichero. Es más claro
Para realizar este ejemplo vamos a — hacerlo en ficheros diferentes
ejecutar las instrucciones para realizar if @i=100
BACKUP log PRUEBAS TO DISK =’C:\BackupDePruebas.bak’
las copias dentro del propio código. Esto
set @i=@i+1
no es lo habitual, generalmente para el end
proceso de realización de copias de segu- go
ridad lo que existe es una tarea progra-
mada con una frecuencia determinada, — vamos a borrar una tabla
frecuencia que además va en función de declare @Nombretransaccion char(20)
la cantidad de información y la distri- set @Nombretransaccion =’Borrar TablaPruebas’
bución temporal de la entrada de ésta. begin tran @NombreTransaccion with mark
Vamos a partir del código del fuente drop table Tablapruebas
Commit
1 en el que suponemos que existe una base
go
de datos llamada pruebas. declare @nombre varchar(100)
En el caso de los modos de recupera- set @nombre=’Segunda copia de lpg’
<<dotNetManía
ción de registro masivo y completo es muy BACKUP LOG PRUEBAS TO DISK =’C:\BackupDePruebas.bak’ with name=@nombre
importante hacer copias de seguridad lo
suficientemente frecuentes para que el Fuente 1
46
<< dnm.servidores.sql
Fuente 2
47
<< dnm.servidores.sql
La cláusula with file sirve para indicar de cual de Ahora, podríamos seguir restaurando el resto de Logs,
<<dotNetManía
las diferentes copias de seguridad que se han guarda- cambiando simplemente el número de file. Sin embargo,
do en el mismo fichero queremos conocer los fiche- en nuestro caso, la restauración se habría hecho justo des-
ros que contiene. pués de un drop table, es decir ¡no tendríamos nada!
48
<< dnm.servidores.sql
Fuente 3
Por todo esto, lo que vamos a hacer es restaurarlo La sintaxis de Backup Database y de Restore natu-
hasta justo el momento antes de haber borrado la tabla. ralmente permiten salvar o restaurar un solo fichero
Esto puede hacerse de varias formas: se puede o un grupo de ficheros.
averiguar la hora exacta a la que se hizo el borrado No obstante, este modelo tiene una complejidad
y restaurar hasta ese momento con la cláusula stopat. administrativa bastante grande. Por ejemplo , para
Sin embargo, a mi personalmente me parece más realizar una restauración completa, hay que seguir los
interesante marcar las transacciones (como hemos siguientes pasos:
hecho en el script) y restaurar hasta la marca. Si las
aplicaciones se desarrollan pensando en esta funcio- 1. Realizar una copia de seguridad del log de tran-
nalidad es muy útil. En un momento determinado sacciones tal y como esté en este instante.
podríamos restaurar hasta la creación de un núme- 2. Restaurar cada uno de los ficheros de base de datos.
ro de cliente o de factura, por ejemplo. 3. Restaurar cada uno de los Logs de transacciones
Vemos como se haría en el fuente 3. empezando por el inmediatamente posterior al
De esta forma podéis comprobar que existen toda- grupo de ficheros más antiguo restaurado.
vía los doscientos registros que acabamos de generar. 4. Restaurar el log que acabamos de salvaguardar
recuperando la base de datos.
permitir que nuestras copias ocupen mucho menos espa- copias, es importante diseñar una estrategia de recu-
cio y que sin embargo no tengamos riesgos grandes de peración ante errores que sea adecuada a los proble-
pérdida de información. mas que pueden presentarse.
49
Por Jordi Rambla
Regional Director de Microsoft
certia.ramblainf.com
El Señor Arquitecto
<< Parece que la arquitectura está de mo- recibirá explicaciones verbales y, en bas- de TIC, y justifica la visión que muchos
da. En eventos como el último PDC de tantes casos, incompletas y poco o nada directivos tienen de que la informática es
Microsoft se dedican tracks específicos, y cuantificadas. A pesar de que alguien tie- inmovilista, lenta y poco profesional.
hasta una matinal completa (el Architecture ne la imagen completa de los sistemas de Este es el punto en que aparece el con-
Symposium), aparecen newsletters, revis- la empresa, pocos o nadie, tienen una cepto de arquitectura del software, enten-
tas, secciones en revistas, webs, libros, visión de la Solución software de la dida como: “la estructura o estructuras del
documentos extensos y demás artilugios empresa. La mayúscula en “Solución” sistema, lo que comprende elementos soft-
comunicativos. Hasta en la trilogía Matrix pretende resaltar que el conjunto de apli- ware, las propiedades de esos elementos
aparece la figura del Arquitecto, un ele- caciones propias o adquiridas sobre las visibles externamente y la relación entre
mento endiosado y de discurso rocambo- que se asienta un negocio son, en el fon- ellos”. (…) “Central, entre estos concep-
lesco. ¿A qué se debe toda esa artillería? do, más importantes que sus motores base tos, es la noción de que las arquitecturas
¿Hemos de escondernos en la trinchera de datos, sus sistemas operativos o sus consisten en estructuras separadas y coor-
hasta que pase la tormenta, o ese bom- comunicaciones. ¿Por qué esta falta de dinadas y que cada una de estas estructu-
bardeo sirve para allanar el camino hacia consciencia del valor de estos activos y de ras ofrece un punto de apoyo para la inge-
el combate con nuestro enemigo virtual? lograr que funcionen tan bien engrasados niería de sistemas.” (…) “La visión del sis-
Los problemas y las soluciones a estas como el hardware o los sistemas? tema que tiene el arquitecto es abstracta,
propuestas por la arquitectura no son nue- Una de las consecuencias de la falta de decantando los detalles de implementación,
vos, los que es nuevo es el concepto. El “mapas” de nuestro software es que la insi- algoritmos y la representación de los datos
concepto nos enfrenta a tener otra pers- nuación de realizar cambios en las solucio- y concentrándose en el comportamiento e
pectiva sobre esos problemas; lógicamen- nes provoque respuestas de dos tipos: o interacción entre las ‘cajas negras’ que cons-
te, una perspectiva más rica y que nos per- pánico o inconsciencia. La reacción de páni- tituyen los elementos.” Estas descripciones
mite avanzar con mayor rapidez y acierto, co consiste en argumentar que todo es muy pueden leerse en diferentes puntos del libro
en comparación con los enfoques que usá- difícil y complicado y que, en definitiva, de Bass, Clements y Kazman y otras simi-
bamos anteriormente. “no se puede hacer”. Alternativamente, la lares en artículos como los del reciente
respuesta se dilata creando una comisión Microsoft EMEA Architects Journal.
Delineando que estudie el asunto. La comisión suele Citando de nuevo el libro de Bass,
enfrentarse al problema de la no-docu- Clements y Kazman: “La arquitectura es el
la arquitectura mentación de las aplicaciones, la ausencia primer artefacto que se puede analizar para
Las aplicaciones actuales se conciben de aquellos que las crearon y la dificultad determinar el grado en que se alcanzarán los
para resolver una problemática específi- de interrelacionar sistemas que nunca han atributos de calidad, al tiempo que sirve
ca y se adaptan a la infraestructura y cono- contemplado la integración como priori- como plano general del proyecto. Una arqui-
cimientos que existen en la empresa. Esas dad (de acuerdo, no seamos tan radicales, tectura sirve como vehículo de comunica-
aplicaciones son como islas, que tienden pongamos que está en el nivel 3 de priori- ción, es la manifestación de las primeras deci-
“ferrys”, con un horario y una capacidad dad). Conclusión: si puede hacerse, será siones de diseño y es una abstracción reuti-
de carga, a otras aplicaciones en forma de caro y/o lento. lizable que puede transferirse a nuevos sis-
volcados de datos hacia ficheros, tablas La reacción de inconsciencia o rambis- temas”. Es decir, la misión de un arquitec-
compartidas y demás artefactos. Sin mo (derivado de Rambo, héroe popular to consiste en producir papel (virtual, si usted
embargo, haga una prueba, solicite usted conocido por su arrojo, paciencia, senti- quiere, pero papel al fin y al cabo). Por
a cualquier departamento de TIC el dia- miento de abandono y locuacidad) se carac- supuesto, huelga decir que sólo necesitará
grama de los nodos de la red, routers, ser- teriza por intentar descubrir, sobre la mar- un mapa cuando la estructura software a ges-
vidores, rangos de IPs, con los anchos de cha, en qué afecta el cambio, ya realizado, al tionar sea amplia, no lo necesitará para ir a
banda que los interconectan, y lo tendrá resto de la estructura software y luego apli- comprar el pan cada mañana.
<<dotNetManía
en un momento. Pregunte por las aplica- car, no siempre con presteza, una solución Esos mapas tienen varias lecturas,
ciones, el volumen de datos que inter- de emergencia. En resumen, ninguna de las igual que los mapas de carreteras reales.
cambian entre ellas, y con el exterior, y dos respuestas supone un buen servicio a la El software tiene una dimensión de infor-
los mecanismos utilizados para ello, y sólo empresa que mantiene a ese departamento mación, una dimensión de seguridad, una
50
<< dnm.arquitectura
dimensión de rendimiento y disponibili- su experiencia, los sistemas preexistentes y beneficio claro y de retorno inmediato que
dad, otra de gestionabilidad y facilidad de los sistemas futuros. reciba una empresa de adoptar el concep-
mantenimiento, una dimensión humana to de arquitectura a su instalación.
(usuarios y desarrolladores), otra históri- Dibujando al arquitecto Ser arquitecto no es cosa fácil, su tarea
ca… Son el equivalente al plan de empre- consiste en conciliar requerimientos que,
sa o al presupuesto general de esta, pero En las organizaciones actuales, las per- en la mayoría de los casos, son antagóni-
centrado en la Solución software. Deberá sonas que asumen parte de esa responsa- cos. Deseamos más seguridad y más ren-
definir los grandes bloques, sus responsa- bilidad son los directores de TIC, los ana- dimiento, menor coste de implementación
bilidades, sus requerimientos operativos, listas, los responsables de sistemas, de pero mayor calidad del trabajo, por ejem-
sus interfaces con el resto de bloques y con seguridad y de comunicaciones, por ejem- plo. El arquitecto juega a encontrar la
el exterior, y su evolución. Observe que plo; pero ninguno de ellos lo hace como solución que optimice el valor de todas
no se menciona para nada la solución esco- tarea principal ni con una visión comple- estas variables.
gida para la implementación. Cuando, en ta del problema. De ahí vamos entrevien- Por otra parte, los conocimientos nece-
un plan de empresa, definimos la necesi- do la necesidad de esa figura, alguien que sarios son variados y, aunque no debe ser
dad de un departamento comercial, no no tenga que gestionar equipos humanos, un experto en todos los ámbitos, cuanto más
explicitamos qué marca de vehículo, móvil presupuestos y el día de un departamen- sepa y mayor experiencia tenga, mejor podrá
o agenda utilizará. to, como corresponde al director de TIC; realizar su tarea. Idealmente, un arquitecto
La arquitectura es, probablemente, el alguien que no es especialista en un domi- debería tener conocimientos de negocio y
fruto de la profesionalización del software nio o área funcional concreta como un gestión empresarial, de análisis funcional,
que mayor retorno de la inversión (ROI) analista; o que tenga una visión mono- de tecnologías de desarrollo, de estándares,
generará para la empresa, previniendo los cromática de la solución como un res- de sistemas, comunicaciones y bases de
males mucho antes de que aparezcan. De ponsable de sistemas o de seguridad. datos, de seguridad, de dispositivos inteli-
nuevo, igual que el plan de empresa o pre- Esta figura aún es, sin embargo, poco gentes, de “cálculo de estructuras”, de explo-
supuesto, supone una referencia básica para visible y poco concreta en las empresas. tación de la solución, de… ¿es necesario que
la toma de decisiones de gestión. ¿Cuántas veces un contertuliano le ha siga?, creo que ya se hace una idea, ¿ver-
entregado una tarjeta en la que rezara el dad? Puesto que se trata de una “ciencia”
Otro sentido para título de “arquitecto de software”? abstracta, es posible que esta sea un área en
¿Ninguna? No le haré la misma pregunta la que los informáticos licenciados con cier-
la calidad sobre los “ingenieros de software”, pues eso tos conocimientos de negocio (¿un máster?)
Cuando hablamos de control de cali- nos llevaría a otra discusión que, créame, puedan iniciar una carrera profesional con
dad del software solemos asociar el con- sería mucho menos ilustrativa. Es mucho mayor claridad que la que ofrecen las figu-
cepto con el número de bugs que tiene. Sin más fácil concretar la labor de un arqui- ras clásicas de las TIC.
embargo, cuando decimos que “un soft- tecto que la de un ingeniero. A pesar de la aparente juventud del
ware tiene calidad” abarcamos aspectos El arquitecto obliga a ver la TI desde concepto de arquitectura en la industria,
mucho más ricos, como la facilidad de uso, dos perspectivas: la de la infraestructura y no lo es tanto en los entornos algo más
la amplitud de sus funcionalidades, el ren- la del negocio, cada “caja negra” ejerce una académicos y podemos localizar biblio-
dimiento, la estabilidad, la facilidad de ins- función en el conjunto global, al igual que grafía, propuestas de métodos, herra-
talación, etc. Estos son los conceptos, a cada departamento ejerce una función en mientas y métricas para llevar a cabo esa
menudo relegados, que la arquitectura el conjunto de la empresa. Es una figura tarea tan amplia. Le recomiendo que visi-
aporta al software. que incorpora la estrategia global del nego- te la página web del reputado Software
Es difícil confeccionar una lista exhaus- cio en las TI. Engineering Institute de la Universidad
tiva de todos los requisitos que debería cum- Por otra parte, el arquitecto obligará Carnegie-Mellon, dispone de un área
plir una aplicación más allá de sus requeri- a considerar seriamente las métricas de las dedicada al estudio de la arquitectura.
mientos funcionales (lo que debe hacer la aplicaciones o el SLA (Service Level
aplicación), entre ellos podemos contem- Agreement, entendido como carga, tiem- Más allá de la teoría
plar: el rendimiento, la robustez, la dispo- po de respuesta, disponibilidad… de cada
nibilidad, la seguridad, la posibilidad de aplicación). Puesto que esos requeri- Realizar esta presentación teórica de
monitorizar o gestionar su funcionamien- mientos forman parte de su cuestionario lo que es la arquitectura y de lo que hace
to, la facilidad para depurarla, la compati- inicial a los que propongan cada necesi- un arquitecto, era necesaria para estable-
bilidad con la plataforma, la utilización de dad. Además, incorporará las aplicaciones cer un marco, para ir perfilando con mayor
recursos como disco, memoria o ancho de críticas (ERP, CRM, producción, SCM…) claridad el ámbito de actuación y dotar de
banda, la facilidad para modificarla, la faci- en una visión global con un objetivo valor al concepto.
lidad de uso y la interoperatividad con otros común; lo que no es baladí, pues estas apli- En próximos artículos atacaremos
sistemas internos y externos. ¿Olvidamos caciones son “reyes de Taifas”, ejerciendo aspectos más prácticos tales como la arqui-
<<dotNetManía
algo?, probablemente sí. Además, el arqui- una cierta tiranía en su área de influencia. tectura orientada a servicios (SOA), las
tecto deberá contemplar los aspectos de Plantear a priori como encajarán en el res- guías de arquitectura de Microsoft, los pat-
negocio como el time-to-market, el presu- to de la arquitectura y como se relaciona- terns, los “tiers & layers”, las aplicaciones
puesto, los recursos humanos disponibles y rán con las demás, será quizá el primer de ejemplo, etc.
51
Por Octavio Hernández
C# .NET MVP
Grupo Danysoft
trabajo de programación; y c) está dispo- de informes y cubos las Vistas de Negocio ofrecen también
nible no sólo para Windows, sino tam- CE10 ofrece un amplio rango de un acceso centralizado a los componen-
bién para Solaris y AIX. posibilidades para el diseño y ejecución tes de informes comunes, lo que hace
52
<< dnm.laboratorio.net
posible compartir componentes útiles Seguridad caciones Java que pueden ser planifi-
con otros diseñadores de informes. CE10 extiende la funcionalidad del cados para su ejecución periódica o des-
Hiperenlace de informes Directorio Activo y LDAP para dar sopor- pués de la ocurrencia de un evento.
Usted podrá utilizar hiperenlaces en te a un conjunto más amplio de escena- • Auditoría: Las nuevas posibilidades
los informes de Crystal Reports o Crystal rios de seguridad. ponen a disposición de los administra-
Analysis (ficheros .RPT y .CAR) para • Directorio Activo (modo nativo): dores un registro histórico de la inte-
conectar la información almacenada en Permite autenticar a usuarios CE10 racción de los usuarios con los objetos
diferentes informes y facilitar la navega- ante un servidor de Directorio Activo. y de la utilización del sistema.
ción a los usuarios finales. • LDAP (SSL): La extensión para Acceso, seguridad y gestión de datos
LDAP ofrece un canal de comunica- Las Vistas de Negocio, un servicio
Para el desarrollador ción seguro entre CE10 y un servidor de metadatos que forma parte de CE10,
de directorio, a través del cual se rea- permiten gestionar fácilmente la gene-
CE10 permite aprovechar todas las lizarán todas las peticiones de autenti- ración de informes contra múltiples fuen-
posibilidades de la plataforma de Crystal cación y autorización de CE10. tes de datos de diferente naturaleza y al
Enterprise con cambios y rediseño míni- Gestión de objetos mismo tiempo abstraer y organizar los
mos en las aplicaciones. Las novedades CE10 aumenta su capacidad para datos para los usuarios finales, gestio-
de esta versión permiten acelerar la cre- centralizar información crítica y distri- nando la eficiencia de consultas y segu-
ación de nuevas aplicaciones y simplifi- buirla de un modo consistente. ridad a nivel de datos.
car la migración de aplicaciones creadas • Objetos de hiperenlace: Mecanismo Soporte para múltiples plata-
para los componentes más pequeños de estándar para acceder a la información formas
la plataforma, por ejemplo Crystal almacenada en sistemas externos. CE10 le permite una amplia flexibi-
Reports. • Paquetes (packages) de objetos: Per- lidad en la elección de sistemas operati-
miten planificar, asegurar y gestionar vos, plataformas y lenguajes:
Controles de servidor .NET informes y aplicaciones relacionadas • Sistemas operativos: Soporte comple-
CE10 ofrece controles visuales y no como si fuera un único objeto. to para todas las funciones de servidor
visuales que contiene la lógica para las • Soporte para objetos de terceros: (incluyendo generación de informes y
operaciones comunes como la autenti- Permite distribuir información adicio- cubos) en Windows, Solaris y AIX.
cación, el listado de carpetas o la visua- nal asociada a los informes operativos • El escritorio web de CE10: La inter-
lización de informes. Es posible mani- • Asistente de publicación unificado: faz web estándar soporta ahora los
pular dichos controles en tiempo de dise- Permite publicar simultáneamente a entornos COM y Java.
ño e incorporarlos fácilmente a las apli- CE10 diferentes objetos, tales como
caciones. informes, documentos de Office y otros Conclusiones
Migración y escalado de aplicaciones ficheros.
Es posible utilizar CE10 para cen- Administración de sistemas CE10 dota a la empresa de una
tralizar y escalar aplicaciones indepen- CE10 permite descentralizar la admi- potente arquitectura unificada para satis-
dientes existentes creadas utilizando cual- nistración. Por ejemplo, se puede dele- facer las necesidades de información a
quier producto de la familia Crystal. gar o automatizar tareas específicas. todos los niveles. Recomendamos su eva-
• Administración delegada: Permite al luación a todos aquellos que necesiten
Para los administradores administrador del sistema distribuir las una plataforma de este tipo para garan-
tareas de administración a administra- tizar la disponibilidad de la información
de sistemas
dores de aplicaciones o elementos espe- a sus usuarios, y en particular a los cien-
CE10 ayuda a los administradores a cíficos de la organización. tos de empresas que actualmente utili-
simplificar su trabajo mediante la dele- • Notificaciones: Son disparadores a nivel zan Crystal Reports como herramienta
gación de tareas y la automatización de de objetos, diseñados en primer lugar para de generación de informes en sus apli-
las operaciones periódicas. CE10 tam- permitirle capturar los fallos críticos de caciones.
bién ofrece soporte multiplataforma, una ejecución o notificar a los usuarios que tie- Para más información consulte con
<<dotNetManía
gestión de datos completa y posibilida- nen a su disposición nueva información. DANYSOFT, VAR Business Objects,
des de auditoría detallada de utilización • Objetos de programa (program en http://www.danysoft.com o el
del sistema. objects): son ejecutables, scripts o apli- 902.123.146.
53
<< dnm.biblioteca.net
dnm.biblioteca.net
C# al descubierto
Joseph Mayo
Editorial: MCGraw-Hill
Nº de páginas: 784
ISBN: 84-205-3477-3
Publicación: 2002
Uno de los mejores libros sobre C# que hemos visto. Recorre de forma exhausti-
va todas las características del lenguaje, desde las estructuras básicas del lenguaje, has-
ta el uso de código inseguro, integración con COM+ o consideraciones de rendimiento.
Analiza igualmente, el uso de C# con algunas de las librerías más importantes
del BCL, tales como ADO.NET y ASP.NET, acceso a ficheros del sistema y
<<
Serialization, uso de bibliotecas de red, características de localización, manejo de
ficheros de recursos, XML, Atributos y Reflection. También revisa los mecanismos
principales que deben seguirse en la depuración de aplicaciones, y algunos aspec-
tos de la ejecución, como el funcionamiento del Recolector de Basura, el propio
CLR (Common Language Runtime), o el despliegue final de la aplicación. En suma
una completa obra para abordar el desarrollo con C# de cualquier proyecto serio.
54
dnm.comunidad.net
<< dnm.comunidad.net
<< El plazo de presentación de proyectos Premios • 3er premio: una película DVD. Un
comenzará el 1 de abril y finalizará el Visual Basic .NET 2003 Standard.
15 de junio. Para participar en esta ini- Sólo por participar, todos los con- Suscripción gratuita a una de las revis-
ciativa, los interesados deben utilizar cursantes que cumplan los requisitos y tas patrocinadoras durante un año.
.NET Framework y cualquier herra- cuyos sitios web sean considerados váli-
mienta de desarrollo como Visual Studio dos, recibirán como regalo dos entra- Requisitos técnicos
.NET o WebMatrix y apoyarse, si así lo das de cine.
desean, en los Starter Kits ASP.NET. Una vez terminado el plazo de pre- • 100% código manejado. El código
Los participantes pueden presentar sentación, un jurado compuesto de una del servidor estará implementado
sus trabajos en cualquiera de las seis cate- persona de cada empresa de alojamiento, 100% en código manejado .NET, per-
gorías habilitadas al efecto: Comercio una de cada revista colaboradora y dos mitiéndose el uso de cualquier len-
electrónico, Portal, Comunidad, In- personas de Microsoft revisarán de for- guaje para su generación. Se podrá uti-
formes, Control de tiempos y Categoría ma individual durante una semana los lizar cualquier versión del .NET
libre (no recogida en ninguna de las cin- sitios participantes, valorando su origi- Framework (1.0 o 1.1). No existen res-
co categorías anteriores). Por otra parte, nalidad y calidad y eligiendo los tres mejo- tricciones en el uso de técnicas de code-
varias empresas de alojamiento web pro- res en cada una de las seis categorías. behind en las páginas ASP.NET, y pue-
porcionarán alojamiento gratuito a los Posteriormente se reunirá el jurado den incluirse también controles o
participantes durante tres meses (desde al completo, se revisarán los 18 sitios librerías externas, siempre que se pro-
la fecha de inicio del concurso y hasta 15 elegidos por cada jurado y sobre ellos porcione el código fuente de las mis-
días después de terminado el plazo de se realizará una votación conjunta y se mas y éste sea también .NET.
inscripción), y una oferta especial con decidirá quiénes son los ganadores. Esta • Herramientas de desarrollo. No es
objeto de que sigan manteniendo sus decisión se anunciará a partir del vier- obligatorio el uso de una herramien-
sitios ASP.NET una vez finalizado el nes 25 de junio en la web de la campa- ta de desarrollo. Si se desea utilizar
concurso. También colaborarán varias ña en MSDN Online y se comunicará una, se podrá elegir entre cualquiera
publicaciones técnicas, las cuales ofrece- a través de la newsletter para desarrolla- de las existentes, como WebMatrix o
rán información del concurso y partici- dores de Microsoft, en los sitios web de Visual Studio .NET 2002 / 2003.
parán en la elección de los ganadores. las empresas de alojamiento, y en las • Acceso a datos. La aplicación servi-
revistas, sitios web y newsletters de las dora no tendrá disponible ninguna
Mecánica del concurso publicaciones patrocinadoras. base de datos como SQL Server o
Habrá tres premios por categoría: Access, pero se podrán utilizar fiche-
El desarrollador debe inscribirse • 1er premio: una consola de videojuegos ros auxiliares de texto o XML para
como concursante en la web Xbox más un juego, mando a distancia almacenar información persistente.
http://www.microsoft.com/spanish/msdn para ver DVDs en la Xbox y una pelí- • Código cliente. No se utilizarán com-
/concuasp en el plazo indicado. Una vez cula DVD. Un Visual Studio .NET ponentes en cliente que el usuario deba
inscrito se enviarán sus datos a una de las 2003 Enterprise Developer. Alojamiento descargar, del tipo ActiveX o similares.
empresas de alojamiento web, la cual le gratuito ASP.NET con una de las El HTML generado por la aplicación
dará de alta como concursante. Desde ese empresas patrocinadoras durante un web puede utilizar cualquier tecnolo-
momento dispondrá de un plazo máximo año. Suscripción gratuita a una de las gía presente en Internet Explorer 6:
de 15 días para que comience a crear su revistas patrocinadoras durante un año. –HTML y DHTML
sitio web (en caso de no hacerlo se le dará • 2º premio: un juego para Xbox y una –Hojas de estilo CSS
de baja) y de otro plazo máximo de 30 película DVD. Un Visual Studio –Scripting
días desde el alta para terminarlo. Cada .NET 2003 Professional. Alojamiento –Data Binding
desarrollador sólo puede participar con gratuito ASP.NET con una de las –Comportamientos
<<dotNetManía
un sitio web por cada categoría. Por otra empresas patrocinadoras durante un Para más información:
parte, para poder participar, el concur- año. Suscripción gratuita a una de las http://www.microsoft.com/spanish/ms
sante debe residir en España. revistas patrocinadoras durante un año. dn/concuasp.
55
<< dnm.opensource
Fernando Nogueras
<< Un framework es una especie de plantilla que nos sirve Hay numerosos frameworks en Java, como el
como punto de partida para crear nuestra aplicación. archiconocido struts, que implementa el patrón MVC
Los frameworks se basan en la idea de “Trabaja sólo (Model View Controller) y que se usa sobre todo para
una vez y reutiliza, aunque la primera vez tardes un construir aplicaciones Web, y me consta que es utili-
poco más”. Hay varios tipos de frameworks pensados zado en muchos entornos profesionales.
para aplicaciones con distintos objetivos. Los más La comunidad .NET es algo más joven que la de
comunes son los frameworks para la construcción de Java y aún presenta pocas alternativas en esta mate-
aplicaciones distribuidas, pues es esta arquitectura la ria, aunque poco a poco se empiezan a ver sus frutos
que puede englobar mayor tipo de situaciones y ser- y Microsoft va ‘soltando’ herramientas con código
vir para un mayor número de usos. libre, como los Application Blocks, que aunque no son
frameworks completos, sí que nos facilitan determi-
nadas tareas concretas.
datnet es un framework para construir aplicacio-
nes distribuidas en la plataforma .NET. Si bien aún
está en fase de desarrollo, el proyecto es bastante
maduro y puede utilizarse perfectamente para nues-
tro trabajo cotidiano, aunque al principio tendríamos
que pelearnos un poco con la instalación para “echar-
lo a andar”, pues la documentación y los tutoriales
escasean en este proyecto. Echo de menos una guía
de iniciación o Quick Tour.
Su arquitectura se basa en el uso de .NET
Remoting, Web Services, independencia del origen de
datos,… y en patrones de diseño bien conocidos, como
Façade, Command, Controller o MVC.
A continuación vamos a comentar brevemente la
arquitectura de una aplicación basada en datnet:
El framework ideal sería, en mi opinión, aquel que Los clientes (formularios Windows, páginas ASP,
te permita solamente preocuparte de desarrollar la Smart Devices, etc...) se comunican con un Controller,
lógica de negocio y la interfaz de usuario, sin tener en un Command o un Business Logic:
cuenta pormenores relativos a la plataforma o de si la a. Controller: Controla el flujo de la aplicación,
capa de acceso a datos está en el mismo equipo o en encargándose de hacer las llamadas pertinentes
un servidor de Hong Kong. Y que, por descontado, a la lógica de negocio y manteniendo el estado.
nos permita cambiar de un tipo de aplicación Web a b. Command: Cada comando se corresponde con
otra tipo Windows o a una para un smartPhone, sin una acción o caso determinado que puede rea-
<<dotNetManía
tener que desarrollar una sola línea de código adicio- lizar el usuario en la interfaz grafica.
nal. ¡Ah!, y su tiempo de aprendizaje tiene que ser de c. Business Logic: Capa común con las clases repre-
2 a 3 horas máximo. sentativas del mundo real o lógica de negocio.
56
<< opensource
Se utiliza el gateway para establecer no nos interesen para adaptarlo a nues- aumentar su cuantía en los próximos
la comunicación entre uno de los obje- tros requerimientos. Por ejemplo, meses. Aprovecho para instar al lector
tos explicados anteriormente y la lógi- podemos utilizar el Microsoft User a que se baje la última versión, la insta-
ca del servidor, utilizando unos objetos Interface Application Block para contro- le y se pelee con su código. Desde
especiales llamados DTO que encapsu- lar el flujo de nuestra aplicación y lla- dotNetManía seguiremos prestando
lan la información a enviar. mar a los objetos Command a través de especial atención a proyectos como éste
El gateway llama al Remote Service él o simplemente crear nosotros mis- que hacen más fácil la vida al progra-
directamente o bien, opcionalmente, a mos la interfaz de usuario y que esta se mador, y pedimos a los participantes de
través de un servicio web (Service ocupe de llamar a los Commands. estos proyectos que se esmeren en hacer
Dipatcher). En la página del proyecto podemos una documentación fácil y completa del
El Remote Service se encarga de ver consultar documentación más extensa proyecto, para que todo su esfuerzo se
que mensaje le llega y de generar la lla- sobre la arquitectura y algunos diagra- vea recompensado y la comunidad de
mada a los métodos correctos de la lógi- mas de secuencia que nos aclararán el programadores no se aburra al intentar
ca del servidor (Server Logic). funcionamiento de la misma, mostran- utilizarlo, por ser demasiado compleja
Una de las características más atrac- do la secuencia que se produce cuando su puesta en marcha.
tivas de datnet es que es un framework se hace una llamada al sistema. Página del proyecto:
bastante extensible, esto es debido a que Datnet es una buena base para aden- http://datnet.sourceforge.net/
está bien modularizado de forma lógi- trarse en el mundo de los frameworks Desde aquí puedes bajar los fuentes:
ca y podemos añadir o quitar partes que en .NET, que a buen seguro veremos http://sourceforge.net/projects/datnet
noticias.noticias.noticias.noticias 57
<< dnm.desvan
Marino Posadas
noticias.noticias
la búsqueda de soluciones que van, desde las passwords
temporales (que solo duran 60 segundos y son generadas
por el sistema), hasta la autenticación federada vía Internet.
Usuario y Password no son suficientes: según se comen- ¿Cuánta información nuestra o de nuestras compañías
tó en la pasada RSA Security Conference (http://infor- hay en Google?
mationweek.securitypipeline. com/news/18201171) sobre
seguridad, las viejas formas de autenticar están empe- Esa es la pregunta que se hace Scott Granemann, que ha
zando a mostrar debilidades que debieran de ser supera- hecho pruebas concluyentes al respecto, según podemos
das mediante nuevas tecnologías. La solución podría estar leer en su artículo “The perils of Googling”, publicado
en tarjetas inteligentes: Smart Cards (pequeños disposi- en The Register: http://www.theregister.co.uk/content/
tivos que se pueden “pinchar” en un ordenador y que 55/36142.html. Granemann se pregunta hasta dónde se
garantizan la identidad de éste). Empresas como RSA puede llegar con páginas como http://www.google.com/
Security Inc y VeriSign Inc, colaboran con Microsoft en advanced_search (búsqueda avanzada).
en SQL-Server y su trata-
miento desde la programa- Martin Fowler: Similar al anterior, el Martin Fowler's Bliki
ción en .NET. Multitud de artículos y buenas (http://martinfowler.com/bliki) es un depósito de ideas sobre
referencias. desarrollo.
58