Beruflich Dokumente
Kultur Dokumente
com
dotNetMana
dedicada a los profesionales de la plataforma .NET
eventos
MIX 2007
Burning, burning
I feel the silverlight rising!!!
Laboratorio
Nevron .NET Vision
TodotNet@QA
Pginas Web, indexadores y DHTML
Opinin
Seguimiento y control de los proyectos
entrevista
Scott Guthrie
General Manager
Divisin de desarrollo de Microsoft
editorial
dotNetMana
Dedicada a los profesionales de la plataforma .NET
Vol. III Nmero 38 Junio 2007
Precio: 6,50
Difcil originalidad
Editor
Paco Marn
(paco.marin@netalia.es)
Redactor jefe
Marino Posadas
(marino.posadas@netalia.es)
Editor tcnico
Octavio Hernndez
(octavio.hernandez@netalia.es)
Redaccin
Dino Esposito, Guillermo 'Guille' Som, Jos
Manuel Alarcn y Miguel Katrib (Grupo
Weboo)
Empresas Colaboradoras
Alhambra-Eidos
Plain Concepts
Raona
Solid Quality Learning
Adems colaboran en este nmero
Antonio Quirs, Csar de la Torre, Iskander
Sierra, Ivn Gonzlez, Mario del Valle, Miguel
Egea, Miguel Jimnez y Yamil Hernndez.
Corresponsal para Amrica Latina
Pablo Tilotta
Ilustraciones
Mascota: Yamil Hernndez
Portada: Javier Roldn
Atencin al suscriptor
Pilar Prez
(pilar.perez@netalia.es)
.netalia
c/ Robledal, 135
28529 Rivas-Vaciamadrid (Madrid)
www.dotnetmania.com
Dejndonos arrastrar, ya casi sin posibilidad de ser originales, por esta fiebre por el
diseo, cmo no seguir publicando los artculos sobre WPF del Grupo Weboo de la
Universidad de La Habana! Su trabajo Paso
de pginas en 3D con WPF define un visualizador de pginas que permite hojear un
documento con un efecto similar al de hojear un libro o una revista de papel. Quin sabe
si no acabaremos utilizndolo para una futura versin online de dotNetMana.
Y mire usted, ya de perdidos al ro. Est
bien, somos como todos, nos dejamos llevar
por la actualidad, y para rematar, este nmero lleva en el centro un pequeo pster de
la arquitectura de Silverlight que espero le
sea til. Culguelo cerca de su puesto de trabajo aun a riesgo de no ser muy original.
Junto al artculo de portada, Miguel
Egea con su trabajo Arquitecturas distribuidas con Service Broker, en el que se describe de manera prctica la utilizacin de la
tecnologa Service Broker de SQL Server
2005, y el Guille con el suyo para la seccin
de iniciacin Serializacin XML. El serializador que lo serialice... debe saber XML,
consiguen dar una cierta heterogeneidad al
contenido de este ejemplar.
Es posible que no hayamos sido muy
originales, pero, aunque est mal decirlo, creo que nos ha quedado un buen
nmero. Espero que tambin lo vea as y
sea de su agrado.
ISSN
1698-5451
Depsito Legal
M-3.075-2004
<< dotNetMana
Paco Marn
sumario 38
Seguimiento y control de los proyectos
8-9
Hace unos pocos nmeros hablbamos de las ventajas y virtudes de la planificacin. Cmo
abordar un proyecto si no nos hemos detenido antes a planificar de forma adecuada y rigurosa
las distintas tareas del mismo, los recursos que las realizarn, los costes asociados, la mecnica
de control de calidad, la gestin de riesgos, etc.? Sin embargo, con esto no basta.
10-12
Es, sin duda alguna, una de las personas ms relevantes en Microsoft, y desde su posicin de
General Manager en la divisin de desarrollo coordina los equipos de ASP.NET, CLR, WPF,
Silverlight, Windows Forms, IIS 7.0, Commerce Server, .NET Compact Framework y
Visual Studio Web.
14-16
Crnica desde Las Vegas del MIX 07, celebrado durante los das 30 de abril, 1 y 2 de mayo,
donde la cantidad de innovaciones que Microsoft ha presentado ha sido realmente espectacular.
Tambin en esta seccin contamos con la crnica del TechNet & MSDN Day en el Cono Sur
celebrado en el marco de la Semana de la Seguridad.
18-30
En este artculo se presentan los conceptos generales relacionados con la seguridad desde el punto
de vista de Windows Communication Foundation (WCF), para luego presentar en detalle dos
de sus caractersticas fundamentales: la autenticacin y la autorizacin.
32-38
En un artculo anterior, los autores nos adentraron en el mundo de los efectos 3D en WPF,
mostrndonos cmo lograr un objeto 3D muy utilizado, una esfera. En esta entrega nos
definen un visualizador de pginas que permite hojear un documento con un efecto
similar al de hojear un libro o una revista de papel.
39-42
43-48
En el artculo anterior vimos cmo persistir los objetos usando las clases que utilizan
IFormatter. En aquella ocasin tuvimos la oportunidad de ver cmo definir los tipos que
queramos serializar por medio del atributo Serializable y la interfaz ISerializable. En este
artculo veremos otra forma de serializar nuestros objetos, que utiliza XML puro como
formato.
dnm.todotnet.qa
Pginas Web, indexadores y DHTML
49-51
Las aplicaciones Web estn basadas en URL, y este hecho es clave para que los buscadores Web puedan
indexarlos y buscarlos apropiadamente. Este mes hablamos sobre HTML dinmico (DHTML), y en
particular sobre la propiedad innerHTML.
dnm.laboratorio.net
Nevron .NET Vision
52-55
Este mes presentamos .NET Vision, una suite de componentes para la capa de presentacin que
le permitir dotar a sus aplicaciones de posibilidades de visualizacin de informacin que
realzarn en buena medida sus interfaces de usuario.
dnm.biblioteca.net
57
dnm.desvan
58
<<dotNetMana
noticias
Los pasados 15 al 17 de
mayo se celebr en Los
ngeles una nueva edicin de
WinHEC (Windows Hardware Engineering Conference).
En su keynote de apertura, Bill
Gates resalt el alto ritmo de
ventas de Windows Vista y la
reaccin positiva ante l de
clientes y partners, transcurridos 100
das desde su salida al mercado. Gates
resalt la importante ola de innovacin
y nuevas tecnologas que con la salida
al mercado de Vista estn disponibles
ahora a los consumidores en general.
Asimismo, desvel el nombre del prximo sistema operativo de servidor de
Microsoft, que hasta ahora se conoca
por el sobrenombre Longhorn: Windows Server 2008. Y en otro orden
de cosas, anunci que nuevos fabricantes de hardware y software han decidido unirse al proyecto asociado a la
creacin del futuro Windows Home
Server.
opinin
Antonio Quirs
Antonio Quirs es
colaborador habitual
de dotNetMana. Cofundador de las revistas clippeRMana, FOXMana y Algoritmo.
Actualmente es director de operaciones en
Alhambra-Eidos.
<< dnm.opinin
<<dotNetMana
entrevista
Miguel Jimnez
Miguel Jimnez
es Software
Development
Engineer y
responsable de
formacin para ilitia
Technologies.
Coordina el Madrid
.NET User Group,
es MVP de Visual
C#, lder de INETA
en Espaa y
colabora
frecuentemente con
MSDN y otros
grupos de usuarios.
Contacta con l en
miguel@ilitia.com
Blogs:
http://blogs.clearscreen
.com/migs
Fotografas del
evento por Jos
Carlos Palencia
entrevista a
Scott Guthrie
Hola Scott, es realmente impresionante la cantidad de equipos que coordinas. Con tanto trabajo
de gestin y tantsimas personas en esos equipos,
podras indicarnos qu tareas se incluyen en tu rol?
Coordino todos esos equipos, pero de manera muy
sencilla porque todos estos equipos simplemente me
reportan a m. Puede parecer demasiado trabajo, pero
tenemos muy buenos lderes en cada uno de esos equipos que favorecen que este proceso sea muy transparente. Mi trabajo se basa principalmente en tres pilares: tener
a la gente adecuada, asegurar que tenemos una estrate-
<<dotNetMana
<< dnm.directo.entrevista
11
<< dnm.directo.entrevista
verlight, pero s disponemos de hueco
para la integracin con desarrolladores.
Los ltimos movimientos en las
herramientas para desarrolladores nos
guan hacia la interfaz de usuario, experiencias interactivas y usables de la tan
aclamada Web 2.0, y a nosotros nos
gustara saber qu es la Web 2.0 para
ti. Una definicin por Scott Guthrie.
Esta es una difcil. Yo creo que la Web
no es ni 1.0 ni 2.0, es ms bien una simple etiqueta. Creo que la nueva Web va
de cmo permitimos a la gente crear
experiencias de usuario ms atractivas,
con ms enganche. No es acerca de construir, es crear una conexin emocional
con el cliente y esto se consigue con los
desarrolladores que aportan funcionalidad, los diseadores creando la imagen y
una ltima parte con aspectos de red
social; esto hace que te enganches, que te
apasione y te sientas bien.
<<dotNetMana
12
ltimamente da la sensacin de
que el mundo del desarrollo por parte de Microsoft avanza demasiado
rpido. Es muy difcil, incluso en
roles ms tcnicos de evangelistas,
mantenerse actualizado en este mercado. La mayora de las empresas
comienzan a trabajar ahora con Framework 2.0 cuando ya tienen disponible la 3.0 y la 3.5 a la vuelta de
la esquina. Es alguien realmente
capaz de avanzar a una velocidad tan
vertiginosa?
Bueno, creo que el desarrollo en la
calle se est moviendo bastante rpido
en cuanto a nuevas tecnologas. La Web
nos permite actualmente buscar y encontrar informacin de manera muy sencilla, rpida y somos capaces de aprender
mucho ms rpido. Esto representa un
reto para nosotros. Si no continuamos
aadiendo funcionalidad y evolucionando nuestras herramientas para mejorarlas, es sencillo, nos quedaremos atrs. Ese
es el motivo por el que lanzamos tantas
versiones de nuestros productos; como
media, planeamos lanzar una versin de
Visual Studio cada 2 aos. Por este motivo, Visual Studio Orcas soporta multitargeting y nos permite utilizar los ltimos avances en el IDE de desarrollo a la
vez que podemos seleccionar el Framework de .NET para el que desarrollamos
nuestras aplicaciones. Adems, en cada
versin mantenemos completamente la
compatibilidad de API entre las diferentes versiones del Framework, de forma
que se pueda utilizar esta ventaja para
realizar transiciones ms suaves.
Muchas personas leen tu blog1, se
te conoce como uno de los miembros
ms activos tcnicamente en las comunidades Microsoft. Pero de dnde
sacas tiempo para realizar tu trabajo y
tener un blog tan sumamente tcnico?
Bueno, je je, suelo escribir por la
noche, ms bien tarde. Me gusta tener el
blog, es probable que la mayora de la gente lo encuentre til, pero a m me da una
oportunidad nica de probar nuestros
productos, las nuevas funcionalidades y
jugar con nuestras cosas.
Como Scott sabe, un grupo de sevillanos traducen su blog diariamente al castellano: http://thinkingindotnet.wordpress.com
eventos
eventos
Burning, burning
I feel the silverlight rising!!!
<<
Si a usted, lector asiduo de dotNetMana, le hablaran de Silverlight, Astoria, Jasper qu respondera? Posiblemente que la cantidad de innovaciones que Microsoft ha presentado durante el
Silverlight
<< dnm.directo.eventos
Expression Studio
A la par, las herramientas de desarrollo se actualizan para dar soporte a este nuevo miembro de la
familia. Durante la keynote central se anunci adems
el lanzamiento de la versin RTM de Expression
Studio, que engloba a Expression Web, Expression
Blend, Expression Design y Expression Media. De
Expression Blend, adems de la nueva versin, se
present la CTP de mayo de la versin 2.0, que
incluye un nuevo tipo de proyecto para desarrollar
aplicaciones Silverlight tanto en Javascript como en
.NET.
Expression Media Encoder es la herramienta para
la edicin de vdeo. Su objetivo es poder preparar los
vdeos en diferentes formatos, comprimindolos en VC1 para su publicacin en la Web y su visionado con Silverlight. En la pgina de Microsoft Expression est disponible para descarga una versin de prueba de 180
das de este producto. Los vdeos generados con esta
herramienta podemos publicarlos en nuestros propios
servidores o hacer uso del servicio gratuito de Silverlight Streaming para publicar hasta 4 Gb de vdeos.
Para ms informacin sobre este servicio y darse de alta
en el mismo, visite http://silverlight.live.com.
ASP.NET
ASP.NET tambin se actualiza con dos nuevos controles de servidor que nos permiten incluir de forma sencilla en una pgina o bien una aplicacin Silverlight o bien una fuente de audio o vdeo. Adems,
hay novedades en ASP.NET AJAX Extensions: la
inclusin de los controles de datos dinmicos y el
soporte para lenguajes dinmicos sobre el DLR
(Dynamic Language Runtime) como IronPython o
Javascript manejado. Todo esto lo podemos encontrar en un paquete denominado ASP.NET Futures
(May 2007).
Windows Media
Center
Windows Media Center se
ha ido posicionando poco a
poco no solo como el centro de entretenimiento del
hogar, sino tambin como
plataforma de desarrollo.
Desde hace unos meses ya
estn disponibles las versiones 5.0 y ms recientemente 5.1 del Windows Media
Center SDK. Durante el
MIX se presentaron algunos ejemplos de integracin
de Silverlight y WPF con
Windows Media Center,
demostrando las posibilidades de la plataforma para
dar lugar a una nueva generacin en lo relativo a los
anuncios y la publicidad.
Las Vegas
Tema aparte es la ciudad que Microsoft ha escogido
para celebrar el MIX, que merece tambin una mencin especial. Pero hasta aqu podemos contar. La
representacin espaola en Las Vegas decidi que lo
que sucede en Las Vegas, se queda en Las Vegas. El
prximo ao tendrn que ir ustedes mismos, invertir
unos dlares, tirar de la palanca y esperar que la suerte les acompae.
Texto: Ivn Gonzalez
<<dotNetMana
CLR reducido. Y ms increble incluso verlo funcionar, por ejemplo, en Safari bajo MacOS. S, ha ledo
bien: porque Silverlight es multiplataforma, y los desarrollos realizados en Silverlight podremos verlos en
Windows usando Internet Explorer o Firefox, al igual
que en MacOS X usando Safari o Firefox. Adems,
Miguel de Icaza y el equipo de Mono anunciaron
durante el evento que darn soporte para Silverlight
en Linux con el proyecto Moonlight.
15
<< dnm.directo.eventos
TechNet Day
Se presentaron soluciones realmente maravillosas y completas como
System Center, ForeFront y Virtual Machine System.
System Center no es otra cosa que
un conjunto de soluciones de monitorizacin de Infraestructura IT (aplicaciones, seguridad y hardware).
Despus fue el turno de Virtual
Machine System, producto con el cual
Microsoft se sumerge en el mundo de
los servidores virtuales.
Por ltimo, fue el turno de ForeFront, poderoso centro de seguridad
(antiphishing, antivirus, antispyware,
etc.), el cual permite desde una consola centralizada poder controlar la
seguridad de todo el parque de equipos de la compaa.
<<dotNetMana
MSDN Day
16
Agenda
SQLU SUMMIT Madrid 2007
18 al 22 de Junio Madrid
Organiza: Solid Quality Learning
El mayor evento dedicado a la plataforma de
datos de Microsoft que se celebra en Espaa,
donde se darn cita ponentes de primer nivel
tanto nacional como internacional. Cinco
das con tres tracks: SQL Server 2005, Business Intelligence y Desarrollo.
http://learning.solidq.com/ib
We Love Web!
28 de Junio de 2007 09:00h a 18:00h
Organiza: ilitia Technologies
Con tracks sobre Microsoft Office Sharepoint 2007 y Microsoft AJAX Extensions
1.0 para ASP.NET 2.0 y con una propuesta participativa: Trae tu porttil y aprende con nosotros.
formacion@ilitia.com
No al Anti-Aging
13 de Junio Madrid y 14 de Junio Barcelona
El estado del arte con BI con SQL Server 2005 & Desarrollo con LINQ
14 de Junio de 2007
Organiza: CatDotNet
http://www.catdotnet.org
eventos
plataforma.net
Csar de la Torre
autenticacin y autorizacin
En este artculo se presentan los conceptos generales relacionados con
la seguridad desde el punto de vista de Windows Communication Foundation (WCF), para luego presentar en detalle dos de sus caractersticas
fundamentales: la autenticacin y la autorizacin.
Windows Communication Foundation (en lo sucesivo, WCF) es, en definitiva, una nueva tecnologa
para desarrollar servicios (y fijaros en que digo
servicios, no servicios Web; supongo que
intuiris el porqu). Esto est ms o menos claro para todo el que haya odo algo sobre .NET
3.0 (WinFX en nombre beta) y sus pilares tecnolgicos (WCF, WF, WPF y WCS).
Hasta ahora, para desarrollar servicios Web XML
nos basbamos en ASMX (ASP.NET). Sin embargo, necesitamos algo ms que simplemente los servicios Web bsicos? Qu razones podramos tener
para dar el salto y cambiar en nuestras implementaciones de aplicaciones SOA, dejando de desarrollar servicios Web XML bsicos y empezando a utilizar una nueva tecnologa como WCF?
Bueno, las razones son precisamente los requerimientos avanzados de las aplicaciones empresariales, que necesitan ms cosas que simplemente una
comunicacin entre cliente y servicio (como hacen
los servicios Web bsicos). Yo veo los siguientes puntos/necesidades por los que dar el salto:
Seguridad avanzada orientada a mensajes en
las comunicaciones con los servicios, incluyendo diferentes tipos de autenticacin, autorizacin, cifrado, no tampering, firma, etc.
Mensajera estable y confiable.
Soporte de transacciones distribuidas entre
diferentes servicios.
Mecanismos de direccionamiento y enrutado.
<< dnm.plataforma.net
Estndares y especificaciones
WS-* que lo definen
WS-Security, WS-SecureConversation,
WS-Trust
WS-ReliableMessaging
WS-AtomicTransactions
WS-Addressing
WS-Policy
MTOM
Confidencialidad de los mensajes. Nos aseguramos de que solamente el destinatario de un mensaje puede ver y entender el mensaje en su forma original.
A nivel de implementacin tecnolgica, WCF nos ofrece un conjunto de
caractersticas para asegurar la transferencia de datos (en forma de mensajes)
en las comunicaciones y tambin el acceso a los recursos (componentes de negocio, fuentes de datos, etc.).
La transferencia de los mensajes se
puede asegurar bsicamente de dos
formas:
Seguridad basada en el transporte
(SSL/HTTPS).
Seguridad basada en los mensajes
SOAP.
La seguridad basada en el transporte
la proporciona precisamente dicho transporte, normalmente HTTPS, y es algo
que ya se poda utilizar con los servicios
Web bsicos. El problema es que este tipo
de seguridad nos deja atados a un protocolo (HTTPS) y a un tipo de seriacin
(XML) de los datos de la comunicacin.
<<dotNetMana
19
<< dnm.plataforma.net
cuando voy a pagar con una
tarjeta de crdito me dicen
que demuestre quin soy, me
piden autenticarme o identificarme con el DNI o pasaporte. El DNI es, en definitiva, una credencial de mi
identidad personal en el mundo real. En el mundo del software, la credencial ms
comn es un nombre de usuario acompaado de una clave
(password).
Hay muchos ms tipos de
credenciales en el mundo del
software, adems de usuario/password, como los certificados X.509 con claves privadas, credenciales Kerberos,
tokens SAML (Security Access
asegurar (cifrar), an
en el caso de que el
cliente sea annimo,
el servicio hace uso
de un certificado de
servidor para que el
cliente pueda asegurarse y determinar la
identidad del servicio. Adems, el cifrado se basar en las
claves del certificado de servidor. Esto
es muy similar a
como funciona SSL
(un sitio Web con
acceso HTTPS que
permite acceso annimo).
Servicio
Ninguna
Windows/Kerberos
Windows / Kerberos
Usuario/Password
Membership
CardSpace
<<dotNetMana
<endpoint name=MiConfigAnonimoBasicHttp
address=http://miServidor:8000/MiServicio/http
binding=basicHttpBinding
bindingConfiguration=basicAnonimoBinding
contract=MiServicioLib.IMiContrato />
<basicHttpBinding>
<binding name=basicAnonimoBinding>
<security mode=None/>
</binding>
</basicHttpBinding>
20
Cliente
Acceso annimo
La primera opcin de
credenciales posibles es
Ninguna, es decir, que el
cliente sea annimo. Sin
embargo, en el servidor, si
la comunicacin se quiere
<< dnm.plataforma.net
la siguiente; simplemente, en la siguiente definicin estoy especificando explcitamente que quiero utilizar seguridad
Windows.
Figura 1
<endpoint
name=MiConfigWindowsWsHttp
address=http://localhost:8000/MiServicio/
binding=wsHttpBinding
contract=MiServicioLib.IMiContrato />
Listado 2. Ejemplo de binding wsHttpBinding que utiliza
autenticacin Windows, por defecto.
<endpoint name=MiConfigAnonimoBasicHttp
address=http://miServidor:8000/MiServicio/http
binding=basicHttpBinding
bindingConfigurati<endpoint
name=MiConfigWindowsWsHttp
address=http://localhost:8000/MiServicio/
binding=wsHttpBinding
bindingConfiguration=SeguridadWindowsConfigBindingExplicita
contract=MiServicioLib.IMiContrato />
<bindings>
<wsHttpBinding>
<binding name= SeguridadWindowsConfigBindingExplicita >
<security mode=Message>
<message clientCredentialType=Windows/>
</security>
</binding>
</wsHttpBinding>
</bindings>
Listado 3. Ejemplo de binding wsHttpBinding que utiliza autenticacin Windows, de forma explcita
<<dotNetMana
Un esquema de la utilizacin de
tokens Windows/AD en aplicaciones
sera el que muestra la figura 1.
Por supuesto, en ese esquema, los servicios WCF estaran situados como una
sub-capa de interfaz de servicios dentro de la capa de negocio.
Y qu hay que hacer para habilitar seguridad basada en tokens Windows?
Nada! . Bueno, no es realmente as,
pero es importante conocer que por
defecto, el tipo de autenticacin que se
utiliza en el binding por defecto de WCF
(wsHttpBinding) es Windows/Kerberos.
Por ejemplo, un binding normal de
tipo wsHttpBinding, tal y como lo crea
el asistente de Visual Studio en un proyecto de servicio WCF, y sin aplicarle
ningn tipo de extensin, como se
muestra en el listado 3, ya va a estar utilizando seguridad basada en tokens Windows (autenticacin Windows).
21
<< dnm.plataforma.net
para obtener la identidad de un usuario autenticado por Windows/AD,
Membership, etc.
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name=UsernameWithTransport>
<security mode=Transport>
<transport clientCredentialType=Basic />
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name=MiServicioLib.MiServicio>
<endpoint address=https://localhost/MiServicio
binding=wsHttpBinding
bindingConfiguration=UsernameWithTransport
contract=MiServicioLib.IMiContrato
name=EndpointBasico />
</service>
</services>
</system.serviceModel>
Listado 4. Ejemplo de endpoint configurado para hacer uso de credenciales usuario/password
<<dotNetMana
22
proxy.ClientCredentials.UserName.UserName = nombreUsuario;
proxy.ClientCredentials.UserName.Password = laClave;
<< dnm.plataforma.net
Una vez tenemos configurado el
proveedor Membership, tenemos que
configurar una seccin de tipo Behavior
de WCF (listado 6).
La forma de obtener la
identidad del cliente
autenticado es la misma
independientemente del
token utilizado
Figura 2.
Esquema de autenticacin Membership por un servicio WCF
<! ***** Connection string SQL Server para MEMBERSHIP ***** >
<connectionStrings>
<add name=MembershipSqlServer2005 connectionString=Data
Source=localhost;Initial Catalog=ASPNETDB;Integrated Security=True
providerName=System.Data.SqlClient />
</connectionStrings>
<system.web>
<! ***** Sql Membership Provider ***** >
<membership defaultProvider=SqlMembershipProvider userIsOnlineTimeWindow=15>
<providers>
<clear />
<add
name=SqlMembershipProvider
type=System.Web.Security.SqlMembershipProvider
connectionStringName=MembershipSqlServer2005
applicationName=/
enablePasswordRetrieval=false
enablePasswordReset=false
requiresQuestionAndAnswer=false
requiresUniqueEmail=true
passwordFormat=Hashed />
</providers>
</membership>
</system.web>
Listado 5
<<dotNetMana
23
<< dnm.plataforma.net
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name=MiSvcMembershipSecBehavior>
<! Configuramos la autenticacin para que use MEMBERSHIP-PROVIDER >
<userNameAuthentication
userNamePasswordValidationMode=MembershipProvider
membershipProviderName=SqlMembershipProvider/>
<!Configuramos el certificado servidor X.509 del Servicio >
<serviceCertificate storeLocation =CurrentUser
storeName =My
x509FindType =FindBySubjectName
findValue =localhost />
</serviceCredentials>
<!Para debugging poner includeExceptionDetailInFaults a true>
<serviceDebug includeExceptionDetailInFaults=true />
<serviceMetadata httpGetEnabled=true/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<<dotNetMana
Listado 6
24
definicin de nuestro servicio que queremos enlazar con este behavior. Como
por ejemplo, la definicin de servicio
siguiente (en este caso hago hosting en una
aplicacin de consola y basado en protocolo HTTP por el puerto 8000, todo gracias a Http.sys) (listado 7).
El enlace del servicio con Membership est precisamente al principio, donde especificamos el behavior llamado behaviorConfiguration=MiSvcMembershipSecBehavior. Adems, tambin es nece-
<< dnm.plataforma.net
Autenticacin con token de
seguridad Certificado X.509
<system.serviceModel>
<services>
<service name=MiServicioLib.MiServicio
behaviorConfiguration=MiSvcMembershipSecBehavior >
<host>
<baseAddresses>
<add baseAddress=http://localhost:8000/MiServicio/ />
</baseAddresses>
</host>
<endpoint name=ConfigMiServicioWsHttpMembershipSec
address= http://localhost:8000/MiServicio/Membership
binding=wsHttpBinding
bindingConfiguration=MiBindingConf
contract=MiServicioLib.IMiContrato />
</service>
</services>
<bindings>
<wsHttpBinding>
<! Binding que requiere autenticacin con certificado X.509>
<binding name=MiBindingConf>
<security mode=Message>
<message clientCredentialType=
Certificate/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<bindings>
<wsHttpBinding>
<binding name=MiBindingConf>
<security mode =Message>
<message clientCredentialType =UserName/>
</security>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
Listado 7
En la configuracin de la aplicacin
cliente que consuma este servicio se
deber especificar un binding similar al
anterior; es decir, que el tipo de credenciales sea tambin de tipo Certificate ( <message clientCredentialType=Certificate />).
Listado 8
<<dotNetMana
25
<< dnm.plataforma.net
Este tipo de credenciales es probablemente el ms importante de cara al
futuro. Permite al servicio aceptar como
identificacin y autenticacin del cliente
unas credenciales proporcionadas originariamente por un STS. Digo que este
tipo de credenciales va a ser muy importante en el futuro porque que permitir
escenarios de federacin de identidades
y CardSpace (CardSpace, desde el punto
de vista de un usuario, es un selector de
identidades que aparece por primera vez
en Windows Vista e instalando .NET 3.0
en XP o Windows Server 2003).
Sobre las identidades federadas, cuando una organizacin se federa como partner con otra organizacin, lo que se est
haciendo es permitir a los usuarios del
partner que se autentiquen con cualquiera
de sus usuarios mediante el mecanismo
que prefiera. Por ejemplo, este escenario podra permitir que los usuarios de
otra organizacin se identifiquen y uti-
<<dotNetMana
26
licen mi servicio aun cuando por ejemplo dichos usuarios no pertenezcan a ninguno de mis dominios de Directorio
Activo e incluso no exista una relacin
de confianza tradicional de AD. Para ello,
se requiere al usuario de la otra organizacin que se autentique con un STS, el
cual le otorga un token SAML (Security
Assertion Markup Language). Una vez dispone de dicho token SAML, mi servicio
puede aceptarlo como token de autenticacin o requerir que dicho token SAML
sea autenticado por un STS de mi orga-
<< dnm.plataforma.net
<services>
<endpoint name=ConfigWsHttpInfocard
address=http://miServidor:8000/MiServicio/InfoCard
binding=wsHttpBinding
bindingConfiguration=RsMessageInfoCardSecurityBinding
contract=MiServicio.IMiContrato>
<identity>
<!- Utilizamos un certificado X.509 servidor para el servicio >
<certificateReference
findValue=MiCertificadoX509
x509FindType=FindBySubjectName
storeLocation=LocalMachine
storeName=My />
</identity>
</endpoint>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name=RsMessageInfoCardSecurityBinding>
<security mode=Message>
<! IssuedToken es autenticacion InfoCard (CardSpace)>
<message clientCredentialType=IssuedToken />
</security>
</binding>
</wsHttpBinding>
</bindings>
Listado 9. Configuracin de un endpoint de WCF (en el fichero .config del servicio) para
habilitar y exigir autenticacin CardSpace/SAML como poltica de MiServicio
Sistema de autorizacin
Roles/Grupos de Windows/AD
<<dotNetMana
27
<< dnm.plataforma.net
rios Windows/AD comprobando si pertenecen a ciertos grupos Windows
requeridos, es basndonos en el atributo PrincipalPermissionAttribute, el cual
se puede utilizar para diferentes tipos
de autorizacin y tokens de seguridad,
por lo que normalmente es necesario
una configuracin del tipo de seguridad
a utilizar en la autorizacin.
En este caso, como queremos utilizar
grupos de Windows/AD, tenemos que
realizar la siguiente configuracin declarativa en el fichero .config (listado 10).
<behaviors>
<serviceBehaviors>
<behavior name=ComportamientoDeMiServicio>
...
<serviceAuthorization principalPermissionMode=UseWindowsGroups/>
</behavior>
</serviceBehaviors>
</behaviors>
Listado 10. Configuracin para autorizacin con grupos Windows/AD
<<dotNetMana
El comportamiento serviceAuthorization establece que vamos a utilizar grupos Windows como modo de permisos
(principalPermissionMode). Adems, lo
que hace es poner un WindowsPrincipal
en el hilo de ejecucin actual cada vez que
se llama al servicio.
El atributo PrincipalPermissionAttribute lo tenemos que aplicar a cada
uno de los mtodos (operaciones) en
los que se quiera comprobar y aplicar
la autorizacin. En nuestro ejemplo,
vamos a comprobar que el llamador
pertenezca al grupo local Administrators (listado 11).
28
[PrincipalPermission(SecurityAction.Demand,
Role = Builtin\\Administrators)]
public string ObtenerInfoConfidencialParaAdministrators ()
{
return Hola!;
}
<< dnm.plataforma.net
<system.web>
<! ***** Sql Role Provider ***** >
<roleManager enabled =true defaultProvider =SqlRoleProvider >
<providers>
<add name =SqlRoleProvider
type=System.Web.Security.SqlRoleProvider
connectionStringName=MembershipSqlServer2005
applicationName=//>
</providers>
</roleManager>
</system.web>
Listado 13. Definicin de proveedor de ASP.NET Role providers
<behaviors>
<serviceBehaviors>
<behavior name=MiSvcMembershipSecBehavior>
<! Configuramos autorizacin ROLE-PROVIDER >
<serviceAuthorization principalPermissionMode =UseAspNetRoles
roleProviderName =SqlRoleProvider />
[PrincipalPermission(SecurityAction.Demand,
Role = Desarrolladores)]
public string ObtenerInfoConfidencialParaDesarrolladores()
{
// Devolvemos la lgica de negocio del mtodo
return Info confidencial para DESARROLLADORES...;
}
Listado 15. Ejemplo de autorizacin WCF con roles ASP.NET 2.0 Role Providers
<<dotNetMana
<! ***** Connection string SQL Server para ASP.NET Role Providers y
para Membership ***** >
<connectionStrings>
<add name=MembershipSqlServer2005 connectionString=Data
Source=localhost;Initial Catalog=ASPNETDB;Integrated Security=True
providerName=System.Data.SqlClient />
</connectionStrings>
29
<< dnm.plataforma.net
Conclusiones
[PrincipalPermission(SecurityAction.Demand,
Name = CN = NOMBRE TORRE LLORENTE CESAR - NIF 01234567D;
377b89722a174fa9fce0000e7c91662c1593642d)]
public string ObtenerInfoConfidencialParaCliente()
{
// Devolvemos la lgica de negocio del mtodo
return Info confidencial para Cliente (B2B)...;
}
Listado 16. Ejemplo de autorizacin basada en Certificado cliente X.509
<behaviors>
<serviceBehaviors>
<behavior name=MiSvcCertificateSecBehavior>
<! Configuramos autorizacin >
<serviceAuthorization principalPermissionMode =UseAspNetRoles/>
<<dotNetMana
30
Miguel Katrib,
Mario del Valle,
Iskander Sierra,
Yamil Hernndez
plataforma.net
Paso de pginas
en 3D con WPF
En un artculo anterior, los autores nos adentraron en el mundo de
los efectos 3D en WPF, mostrndonos cmo lograr un objeto 3D muy
utilizado, una esfera. En esta entrega nos definen un visualizador de
pginas que permite hojear un documento con un efecto similar al
de hojear un libro o una revista de papel.
Introduccin
Hasta ahora la mayora de las interfaces de usuario de las aplicaciones a la medida se basan en el
uso de controles bsicos que brindan los entornos
de desarrollo. Algunas tcnicas de interaccin basadas en efectos de tres dimensiones (3D) han sido
de dominio casi exclusivo de las aplicaciones de
juegos o de aplicaciones muy especializadas que
requieren de desarrolladores expertos en estas tcnicas. El acceso a recursos 3D ha estado disponible solo a travs de libreras implementadas fundamentalmente en C++, como OpenGL y DirectX.
Pero no resulta sencillo integrar tales libreras con
los paquetes de controles existentes para el desarrollo de interfaces de usuario, como es el caso de
Windows Forms. Esta falta de integracin ha desanimado la inclusin de efectos 3D en la interfaz de
usuario de muchas de nuestras aplicaciones.
Precisamente una de las caractersticas ms
atractivas de Windows Presentation Foundation
(WPF), que ya ha sido tema de un cuaderno tcnico de dotNetMana [1] y de algunos artculos
previos [2-4], es que reduce la impedancia entre
los mundos 2D y 3D. Las capacidades de extensibilidad de WPF permiten crear interfaces de usuario con efectos 3D sin exigir un conocimiento tan
especializado como el que se requiere para usar
DirectX u OpenGL. En un artculo anterior [3]
1
Simulando la realidad
La va ms simple para lograr efectos visuales 3D
es simularlos con recursos 2D. Por ejemplo, se
puede dibujar un botn que parezca abultado gracias al uso de gradientes, con colores ms claros
por encima y ms oscuros debajo, como los botones de la aplicacin Media Player de Windows
Vista que se muestra en la figura 1. Otra solucin
con ms realismo sera construir un objeto tridimensional parecido a un botn real (como el de
algn equipo electrnico) y aplicarle las texturas
y colores de iluminacin adecuados.
Figura 1.
Los botones de Windows Media Player.
Aunque, lamentablemente, de momento estamos muy lejos de poder sentir el olor del papel y de la tinta fresca de una
dotNetMana recin salida de imprenta.
<< dnm.plataforma.net
<<dotNetMana
La mayora de los controles intentan mostrar una apariencia 3D con efectos en 2D. Esto es posible gracias a las
pequeas dimensiones de los controles,
a la velocidad de movimiento cuando se
aplica una animacin, o a la sutileza del
efecto, lo que permite ocultar el simulacro. Pero para lograr un mayor realismo en los efectos 3D es preferible,
aunque por supuesto ms complejo, el
uso de la maquinaria 3D de WPF.
En este trabajo veremos cmo construir un objeto para mostrar una hoja
de un documento en 3D simulando los
movimientos y deformaciones que sufre
una hoja real de un libro o revista cuando se hojea.
Para comprender esta simulacin,
comience por observar cmo usted
hojea las pginas de esta propia revista dotNetMana. El movimiento ms
evidente es el que hace con cada hoja
cuando se rota sta sobre su borde
interior, que hace de eje con la encuadernacin. Si identificamos las distintas posiciones de una rotacin sobre
este borde en una propiedad Progress,
que tome valores entre 0 y 180, donde
0 indica que la hoja est completamente de frente y 180 sera la misma
hoja rotada 180 grados, es decir
mostrndonos su reverso, podramos
simular los movimientos de la hoja
como se muestra en la figura 2.
Sin embargo, a este efecto le falta
realismo, porque las hojas se ven rgidas. Hay que buscar un modo de
33
<< dnm.plataforma.net
Construccin de la malla
En primer lugar, definiremos una clase SimplePageModel3D (listado 1). Note
que la propiedad Content (que se hereda de la superclase ModelVisual3D) es de
tipo Model3D; sta es la que indica la
malla del objeto que se visualiza.
En el constructor de SimplePageModel3D se hace:
GeometryModel3D geom3D = new
GeometryModel3D();
this.Content = geom3D;
Despus, al hacer:
<<dotNetMana
Figura 5. Paso de una pgina hacia la izquierda al cambiar los valores de Progress,
Twist y Bend con diferentes animaciones.
34
<< dnm.plataforma.net
binding.Source = this;
BindingOperations.SetBinding(geom3D,
GeometryModel3D.MaterialProperty,
binding);
binding = new Binding(BackMaterial);
binding.Source = this;
BindingOperations.SetBinding(geom3D,
GeometryModel3D.BackMaterialProperty,
binding);
Se indica que se debe asociar el mismo material para la superficie del objeto
(Material) a travs de la propiedad Material, y se asocia el mismo material para
la superficie interior (BackMaterial) a
travs de la propiedad BackMaterial del
modelo. En nuestro caso usaremos ambos
materiales para revestir la cara de una hoja
de la revista y su reverso.
La propiedad Geometry de GeometryModel3D toma valor en el mtodo BuildGeometry que se llama en la ltima lnea
del constructor, y tambin al cambiar
cualquiera de las propiedades de la hoja
que afecta la forma de la malla. Este mtodo BuildGeometry (listado 2) es el que se
encarga de construir una malla a partir
de los valores de las propiedades Progress,
Twist, Bend, Width, Height, WidthSegments
y HeightSegments para describir las dimensiones de la hoja y el grado de resolucin
o de definicin de la malla.
Este mtodo crea una instancia de
MeshGeometry3D que se asocia a la propiedad Geometry del Content. Las propiedades Positions, TriangleIndices,
TextureIndices y Normals de esta instancia definen la malla de un objeto tridimensional. Cada una de estas propiedades contiene una coleccin de diferentes tipos. Una coleccin de Point3D
para Positions, una coleccin de Vector3D para Normals, una coleccin de int
para TriangleIndices y una coleccin
de Point para TextureIndices2.
Las posiciones se refieren a la ubicacin en el espacio de los vrtices de la
malla, tomando como referencia al punto (0, 0, 0) como el origen de coordenadas tridimensionales. Las propiedades
Width y Height determinan las coordenadas de las cuatro esquinas de la hoja, cuando sta no tiene ninguna deformacin
aplicada. Las propiedades WidthSegments
Por limitaciones de espacio, no pueden explicarse en detalles estas propiedades aqu. El lector puede referirse a un artculo previo de dotNetMana [4]
<<dotNetMana
...
private void BuildGeometry() {
GeometryModel3D geom = (GeometryModel3D) Content;
MeshGeometry3D mesh = new MeshGeometry3D();
35
<< dnm.plataforma.net
<<dotNetMana
36
Pasando la pgina
Una vez que tenemos definida nuestra
clase personalizada SimplePageModel3D,
solo hay que usarla adecuadamente en
el XAML de una aplicacin para dar el
efecto deseado. El listado 3 nos muestra un cdigo XAML para animar la
pgina movindola hacia izquierda (en
contra de las manecillas del reloj) y
hacia derecha (a favor de las manecillas
del reloj). Las animaciones asociadas a
cada sentido describen un trayecto para
los tres parmetros dados por las propiedades Progress, Twist y Bend, de forma de lograr un efecto de hojear la pgina como el que se ilustra en las imgenes de la figura 5.
Para que las animaciones tengan
acceso desde los recursos al elemento
page3D en el Viewport3D, hay que registrar el control bajo dicho nombre. Para
ello, en el constructor de la clase TestPage3D se obtiene la instancia de INameScope de la pgina y se registra el control page3D con el identificador page3D,
como muestra el listado 4.
public TestPageBuilder() {
InitializeComponent();
INameScope scope =
NameScope.GetNameScope(this);
scope.RegisterName(page3D,
page3d);
}
<Page x:Class=Test3D.TestPage3D
xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
xmlns:c3d=clr-namespace:Test3D
Title=TestPageBuilder
>
<Page.Resources>
<Storyboard x:Key=animLeft SpeedRatio=0.5>
<DoubleAnimation Storyboard.TargetName=page3D
Storyboard.TargetProperty=Progress
To=0 Duration=0:0:1/>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName=page3D
Storyboard.TargetProperty=Bend Duration=0:0:1>
<LinearDoubleKeyFrame KeyTime=0:0:0.1 Value=0.0/>
<LinearDoubleKeyFrame KeyTime=0:0:0.4 Value=0.4/>
<LinearDoubleKeyFrame KeyTime=0:0:0.8 Value=0.4/>
<LinearDoubleKeyFrame KeyTime=0:0:1 Value=0.0/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName=page3D
Storyboard.TargetProperty=Twist Duration=0:0:1>
<LinearDoubleKeyFrame KeyTime=0:0:0.3 Value=0.3/>
<LinearDoubleKeyFrame KeyTime=0:0:0.8 Value=0.3/>
<LinearDoubleKeyFrame KeyTime=0:0:1 Value=0.0/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key=animRight SpeedRatio=0.5>
<DoubleAnimation Storyboard.TargetName=page3D
Storyboard.TargetProperty=Progress
To=1 Duration=0:0:1/>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName=page3D
Storyboard.TargetProperty=Bend Duration=0:0:1>
<LinearDoubleKeyFrame KeyTime=0:0:0.1 Value=0.0/>
<LinearDoubleKeyFrame KeyTime=0:0:0.4 Value=-0.4/>
<LinearDoubleKeyFrame KeyTime=0:0:0.8 Value=-0.4/>
<LinearDoubleKeyFrame KeyTime=0:0:1 Value=0.0/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName=page3D
Storyboard.TargetProperty=Twist Duration=0:0:1>
<LinearDoubleKeyFrame KeyTime=0:0:0.3 Value=-0.3/>
<LinearDoubleKeyFrame KeyTime=0:0:0.8 Value=-0.3/>
<LinearDoubleKeyFrame KeyTime=0:0:1 Value=0.0/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Page.Resources>
<Page.Triggers>
<EventTrigger RoutedEvent=Button.Click SourceName=passLeft>
<EventTrigger.Actions>
<BeginStoryboard Storyboard={StaticResource animLeft}/>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent=Button.Click SourceName=passRight>
<EventTrigger.Actions>
<BeginStoryboard Storyboard={StaticResource animRight}/>
</EventTrigger.Actions>
</EventTrigger>
</Page.Triggers>
<Grid Background=Beige>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height=Auto/>
</Grid.RowDefinitions>
<Viewport3D>
<Viewport3D.Camera>
<PerspectiveCamera Position=0,-2,-24 LookDirection=0,0,1
UpDirection=0,1,0 FieldOfView=20
NearPlaneDistance=0.1 FarPlaneDistance=10000>
</PerspectiveCamera>
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D.Content>
<<dotNetMana
<< dnm.plataforma.net
37
<< dnm.plataforma.net
<<dotNetMana
Conclusiones
38
<Model3DGroup>
<AmbientLight Color=DarkGray/>
<DirectionalLight Color=LightGray Direction=-50,-60,100/>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D Positions=0 0 0 -3 0 0 -3 -4 0 0 -4 0
TriangleIndices=0 2 1 0 3 2
TextureCoordinates=0 0 1 0 1 1 0 1
/>
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<MaterialGroup>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<ImageBrush ImageSource=/images/page_Page_03.jpg>
<ImageBrush.RelativeTransform>
<ScaleTransform ScaleX=1 CenterX=0.5/>
</ImageBrush.RelativeTransform>
</ImageBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
<SpecularMaterial Brush=#80808080 SpecularPower=85/>
</MaterialGroup>
</GeometryModel3D.Material>
</GeometryModel3D>
</Model3DGroup>
</ModelVisual3D.Content>
<c3d:SimplePageModel3D x:Name=page3d Width=3 Height=4>
<c3d:SimplePageModel3D.Material>
<MaterialGroup>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<ImageBrush ImageSource=/images/page_Page_01.jpg/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
<SpecularMaterial Brush=#80808080 SpecularPower=100/>
</MaterialGroup>
</c3d:SimplePageModel3D.Material>
<c3d:SimplePageModel3D.BackMaterial>
<MaterialGroup>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<ImageBrush ImageSource=/images/page_Page_02.jpg>
<ImageBrush.RelativeTransform>
<ScaleTransform ScaleX=-1 CenterX=0.5/>
</ImageBrush.RelativeTransform>
</ImageBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
<SpecularMaterial Brush=#80808080 SpecularPower=100/>
</MaterialGroup>
</c3d:SimplePageModel3D.BackMaterial>
</c3d:SimplePageModel3D>
</ModelVisual3D>
</Viewport3D>
<Grid Grid.Row=1 DataContext={Binding ElementName=page3d}>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Grid.Column=0 Name=passLeft
HorizontalAlignment=Center>Pass To Left</Button>
<Button Grid.Column=1 Name=passRight
HorizontalAlignment=Center>Pass To Right</Button>
</Grid>
</Grid>
</Page>
Listado 3. Cdigo XAML para animar hacia la izquierda y derecha la pgina de la revista.
Referencias
[ 1 ] Katrib, Miguel, Del Valle, Mario,
<< dnm.servidores.sql
SQL Server
Miguel Egea
Arquitecturas distribuidas
con Service Broker
En este artculo se describe de manera prctica la utilizacin de la tecnologa Service Broker de SQL Server 2005 para implementar arquitecturas distribuidas.
<<dotNetMana
Miguel Egea
es un Mentor Asociado de Solid Quality
Learning Iberoamericana, Ingeniero Tcnico en Informtica de
Sistemas con ms de
16 aos de experiencia. MVP en SQL Server, ejerce como DBA
para importantes
empresas del Sector.
Miguel es, adems,
ponente asiduo en
eventos relacionadas
con tecnologas
Microsoft.
39
<< dnm.servidores.sql
A partir de este momento, este artculo es puramente tcnico, con numerosos ejemplos de cdigo
y justificaciones para cada uno de los elementos de
cdigo que se introducen. Creemos que este debe
ser su objetivo primario: servir de ayuda a los tcnicos a implementar la arquitectura de Service Broker
de manera eficaz y satisfactoria.
<<dotNetMana
Una vez que entramos en un mundo de intercambio de mensajes, la primera accin ser determinar
cul o cules son los tipos de mensajes que van a
intervenir en nuestra conversacin; es decir, debemos establecer nuestra gramtica, el modo en que
nuestros servicios se van a entender. Los tipos de
mensaje que se intercambian han de estar definidos. Existen dos tipos predeterminados, NONE y
WELL_FORMED_XML. Como sus nombres indican, NONE
no realizar ningn tipo de validacin sobre los
mensajes de ese tipo, mientras que WELL_FORMED_XML
comprobar que el mensaje intercambiado es un
XML bien formado. Adems de los dos tipos anteriores, el tipo de mensaje puede cumplir con las
restricciones de cualquier esquema XSD que definamos en nuestro sistema mediante la instruccin
CREATE XML SCHEMA COLLECTION). Ver listado 1.
Mediante el esquema MiEsquemaEnvio definimos
un esquema sencillo, en el que se enviar un ID de
40
Listado 1
Esta operacin ha de ser realizada en todos los servidores que vayan a recibir o enviar mensajes basados
en esta conversacin. Service Broker no realiza ningn
tipo de sincronizacin sobre tipos de mensaje y contratos, sino que en el momento de la configuracin
somos nosotros los que lanzamos estas definiciones
en tantos servidores como sea necesario. Aunque en
cada rol de servidor solamente crearamos las colas
que necesite cada uno; es decir, el que va a iniciar la
conversacin solamente recibir una respuesta, as que
<< dnm.servidores.sql
Servicios
Realmente la comunicacin entre distintas instancias de Service Broker es a travs
de los servicios. Los servicios no hacen
otra cosa que definir, para una cola, qu
contrato o contratos son aceptables. Despus, cuando se envan mensajes, en el
inicio de la conversacin se expresar el
servicio de origen y el servicio de destino; de esta forma, un mensaje acaba en
una cola a travs de un servicio siempre
y cuando cumpla con el contrato que
acepta el servicio. En nuestro ejemplo la
sintaxis podra quedar algo as:
El que enva
La primera parte del cdigo est ejecutndose del lado del que enva un
Listado 2
mensaje. Las frmulas dispara y olvida (fire & forget) no son nada recomendadas en Service Broker; en general, no son nada recomendables en
ningn sistema de asincrona por mltiples razones, as que no caeremos en
la tentacin de poner un hola mundo
en ese estilo. Vamos a estudiar el cdigo pasito a pasito.
Vea primero la declaracin de algunas variables que necesitaremos y cul
es su misin en el listado 2.
La primera variable va a contener un
solo elemento cliente. Aunque la instruccin RECEIVE (que veremos enseguida) recibe conjuntos de registros
y no elementos individuales, haremos
una excepcin (esta vez s) para hacer
un tratamiento registro a registro.
La segunda variable nos servir para
determinar qu tipo de mensajes nos
estn llegando. Si por ejemplo enviamos un mensaje errneo al destino,
ste nos devolver un mensaje de
error en la cola de origen, y este error
habr que tenerlo previsto. Tambin
pueden recibirse mensajes de tipo fin
de conversacin, etc.
La variable @conversationhandle nos
servir para saber dentro de qu conversacin estamos enviando mensajes. Con ese handle identificamos de
forma nica la conversacin, tanto
para el que inicia la conversacin
como para el que contesta. De esta
BEGIN TRANSACTION
BEGIN DIALOG @conversationhandle
FROM SERVICE SrvPeticion
TO SERVICE SrvRespuesta
ON CONTRACT PeticionCredito
WITH ENCRYPTION=OFF;
SEND ON CONVERSATION @conversationhandle
MESSAGE TYPE Envio (@cliente)
COMMIT
<<dotNetMana
41
<< dnm.servidores.sql
El que recibe
El cdigo que tenemos a continuacin se pone a esperar de forma indefinida a que llegue un mensaje a la cola
PideRespuesta:
BEGIN TRANSACTION
WAITFOR
(
RECEIVE TOP (1)
conversation_group_id,
conversation_handle,
message_sequence_number,
service_name,
service_contract_name,
message_type_name,
validation,
message_body
FROM PideRespuesta
INTO @Conversacion
);
SELECT @conversationhandle=handle,
@cliente=message_body
FROM @Conversacion
COMMIT
WHILE (1=1)
BEGIN
BEGIN TRANSACTION
WAITFOR
(
RECEIVE TOP(1)
conversation_group_id,
conversation_handle,
message_sequence_number,
service_name,
service_contract_name,
message_type_name,
validation,
message_body
FROM Peticion
INTO @Conversacion
WHERE conversation_handle = @ConversationHandle
);
SELECT CAST(Message_body as XML) FROM @CONVERSACION
COMMIT
SELECT @message_type_name=message_type_name FROM @CONVERSACION
IF @message_type_name =
http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog
OR @message_type_name =
http://schemas.microsoft.com/SQL/ServiceBroker/Error
BEGIN
select acabo
END CONVERSATION @ConversationHandle ;
BREAK;
END
END
<<dotNetMana
Listado 4
42
Una vez que este cdigo se haya ejecutado, lo que tendramos es un registro en la tabla @conversacion con la peticin, que ahora habra que procesar. El
cdigo que procesa la peticin debera
incorporar lgica de negocio; en nuestro caso, siempre vamos a devolver el
mismo crdito, sin mirar nada. Ver listado 3.
Es muy importante que no solo se
enva una respuesta, sino que adems se
acaba la conversacin mediante la instruccin END CONVERSATION. Si no fuese
as, Service Broker pensara que en esta
conversacin pueden ser enviados ms
mensajes y mantendra registros de control en la vista del sistema sys.conversa-
Conclusin
Procesando la respuesta
Finalmente, solo nos queda procesar la respuesta. Procesarla adecuadamente implica recibir la contestacin,
hacer lo que sea necesario con ella y
acabar la conversacin del lado del que
la inici. El cdigo que se presenta en
En este artculo hemos hecho una introduccin a cmo Service Broker trata los
mensajes y cmo nos permite implementar conversaciones asncronas. Service Broker es mucho ms que esto: permite arquitecturas en balanceo de carga,
forwarding de mensajes y un buen
montn de funcionalidades que no da
tiempo a tratar en un artculo introductorio; tiempo habr para ir profundizando en estas funcionalidades.
<< dnm.inicio.taller
taller
Serializacin XML
El serializador que lo serialice... debe saber XML
En el artculo anterior vimos cmo persistir los objetos usando las clases
que utilizan IFormatter. En aquella ocasin tuvimos la oportunidad de ver
cmo definir los tipos que queramos serializar por medio del atributo Serializable y la interfaz ISerializable. En este artculo veremos otra forma de serializar nuestros objetos, que utiliza XML puro como formato.
Guillermo Guille
Som es Microsoft MVP
de Visual Basic desde
1997. Es redactor de
dotNetMana, mentor
de Solid Quality Iberoamericana, tutor de campusMVP, miembro de
Ineta Speakers Bureau
Latin America, y autor
de los libros Manual
Imprescindible de Visual
Basic .NET y Visual
Basic 2005.
http://www.elguille.info
La serializacin XML nos permite serializar las propiedades y campos pblicos de los tipos, y aunque pueda parecer que tiene menos potencia que la serializacin binaria, ya que sta ltima nos permite serializar el objeto completo, seguramente ser la que ms
utilicemos, principalmente por el hecho de que est
basada en el estndar XML, lo que nos permite el intercambio de datos entre diferentes plataformas. Utilizando este tipo de serializacin, no tendremos lmites
a la hora de distribuir nuestros objetos, ya que XML
es un estndar, y por tanto cualquier lenguaje o plataforma que hable ese estndar nos comprender.
La clase principal para la serializacin XML es
XmlSerializer (definida en el espacio de nombres System.Xml.Serialization), y para realizar las operaciones de serializacin y deserializacin se usan los mtodos Serialize y Deserialize. Como vemos, esto es
parecido a lo que vimos en el artculo anterior, pero
la diferencia principal es que esta clase no requiere
que las clases estn marcadas con el atributo Serializable; los nicos requisitos de las clases a serializar
es que sean pblicas, tengan un constructor pblico
sin parmetros y, por supuesto, que tengan elementos pblicos que se puedan almacenar en un fichero.
La forma ms simple de usar esta clase es indicando en el constructor el tipo que queremos serializar, y las operaciones de serializacin se realizarn
en un fichero cuyo formato ser XML. Accederemos
a ese fichero por medio de clases de tipo Stream. Por
ejemplo, si tenemos una clase llamada Colega2, pode-
mos usar el cdigo mostrado en el listado 1 para realizar la serializacin y posterior deserializacin.
Listado 1.
Proceso de serializacin con la clase XmlSerializer
<<dotNetMana
Serializacin XML
43
<< dnm.inicio.taller
public Colega2()
{}
public Colega2(string nombre, string email)
{
this.Nombre = nombre;
this.Email = email;
}
public override string ToString()
{
return Nombre + , + Email;
}
<<dotNetMana
44
Si nuestra clase implementa la interfaz ICollection (o se deriva de cualquier clase que la implemente), debe adems tener un indizador (propiedad
predeterminada en Visual Basic) que reciba un parmetro de tipo entero y devuelva el mismo tipo que
el usado en el mtodo Add. Adems, debe definir la
propiedad Count (aunque esto ltimo es por exigencias de la propia interfaz); esa propiedad puede ser pblica o estar implementada explcitamente, aunque es mejor definirla como pblica, ya que
Count es algo que todo el mundo espera encontrar
en una coleccin.
Cuando se va a serializar el objeto, se comprueba
por medio de Count el nmero de elementos que tiene y para obtener cada uno de los elementos de la
<< dnm.inicio.taller
Listado 4.
Clase de tipo coleccin de Colega2
<<dotNetMana
45
<< dnm.inicio.taller
que otro de los constructores de este atributo admite una cadena para el nombre
a asignar. Por ejemplo, si queremos que
el campo Email se serialice como Correo,
usaremos el siguiente cdigo:
[XmlElement(ElementName=Correo)]
public string Email;
<<dotNetMana
46
<Correo>guille@nombres.com</Correo>
</MiColega>
Crear esquemas
con la utilidad xsd.exe
Si los datos que queremos manejar no
son totalmente compatibles con .NET
o queremos que los datos que hemos
serializado se utilicen desde otras plataformas, ser conveniente que esos datos
se cian a ciertas caractersticas o que
exportemos el esquema usado para serializar nuestras clases.
La utilidad Xsd.exe, que se incluye
con el SDK de .NET, nos permite crear esquemas XSD a partir de ensamblados (DLL o EXE), crear clases a
partir de esquemas XSD e incluso crear esquemas a partir de un fichero
XML que contiene los datos de un
objeto serializado. Esta utilidad la usaremos desde la lnea de comandos, y
como primer argumento suministraremos el fichero que queremos procesar. Opcionalmente, podemos indicar
el nombre del fichero de salida y algunas opciones adicionales para cambiar
el comportamiento predeterminado,
que es el de crear esquemas XSD a partir del fichero que indiquemos en el
primer argumento, al menos si ese
fichero tiene extensin .DLL , .EXE o
.XML; de ser as, se generar el esquema XSD, un fichero con la extensin
.XSD. Si procesamos un fichero XML,
el nombre que se le dar al esquema
<< dnm.inicio.taller
xsd Colega03.xml
Los tipos de datos XML que la utilidad usar sern los que crea que
son los adecuados. Por ejemplo, el tipo
ID lo hemos indicado como tipo token,
pero como en el fichero .XML no se
indica de que tipo ser, la utilidad
XSD lo exportar como de tipo
string . En el listado 7 tenemos el
fichero XSD generado con la lnea de
comandos anterior, en el que podemos observar que se crea un tipo DataSet que no se incluye en el fichero
procesado; pero como XSD no sabe el
tipo real de MiColega, asume que es un
tipo complejo y lo exporta con el atri-
Listado 8. Esquema generado por XSD a partir del ensamblado que contiene la clase Colega2
<<dotNetMana
47
<< dnm.inicio.taller
using System.Xml.Serialization;
[System.CodeDom.Compiler.GeneratedCodeAttribute(xsd, 2.0.50727.42)]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(code)]
[System.Xml.Serialization.XmlRootAttribute(MiColega, Namespace=, IsNullable=true)]
public partial class Colega2 {
public string Correo;
[System.Xml.Serialization.XmlElementAttribute(DataType=token)]
public string ID;
[System.Xml.Serialization.XmlAttributeAttribute()]
public string Nombre;
}
De forma predeterminada, se crearn propiedades para cada uno de los elementos de la clase, pero
si queremos que se generen como campos, debemos
usar la opcin /f:
xsd schema0.xsd -c -f
La clase generada a partir de este ltimo comando es la mostrada en el listado 9, de la que he quitado parte del cdigo que indica que es una clase autogenerada.
Volviendo al tema del tipo DataSet (que no es un
DataSet sino un array) que genera la utilidad cuando
procesa un fichero con extensin .XML, en realidad lo
que hace es crear un array del tipo de datos que tiene
ese fichero. Por ejemplo, si generamos una clase a partir del esquema del listado 7, adems de la definicin
de la clase MiColega se crear tambin un tipo llamado NewDataSet que en el fondo es un array del tipo
MiColega, tal como podemos ver en el listado 10.
Conclusiones
public partial class NewDataSet {
[System.Xml.Serialization.
XmlElementAttribute(MiColega)]
public MiColega[] Items;
<<dotNetMana
48
todonet@qa
Dino Esposito
es mentor de Solid
Quality Learning. Es
ponente habitual en
los eventos de la
industria a nivel
mundial.Visite su
blog en: http://weblogs.
asp.net/despos.
(ttodotNet.QA@
dotnetmania.com)
Cul es la relacin entre los buscadores e indexadores Web y ASP.NET? Intento mantener mi
cdigo todo lo limpio que puedo, y cuando echo un vistazo al cdigo generado por ASP.NET llego a la conclusin de que no me gusta mucho. Me pregunto si esto puede afectar la manera en
que los buscadores como Google funcionan.Tambin me pregunto si AJAX, el viewstate, scriptresource.axd y la manera en que ASP.NET gestiona los enlaces afecta a los buscadores Web.
Permtame antes que nada decir que no tengo
mucha idea sobre cmo funcionan los buscadores Web, por lo que la mayora de las siguientes
consideraciones podran estar basadas en suposiciones incorrectas. Solo es una posibilidad, no
obstante.
Si tuviera que escribir cdigo para indexar
algn contenido Web, yo me centrara en la URL
pblica y el contenido devuelto por ella. Bsicamente, creara algn tipo de diccionario que tuviera la URL como clave y una lista de palabras clave obtenida del contenido servido a partir de la
URL. Asumiendo que los buscadores Web realmente clasifican la informacin de esta manera,
lo realmente importante es el cdigo de marcado
devuelto de la URL. El cdigo generado por el
motor de ejecucin de ASP.NET para servir la
pgina es simplemente la traduccin del marcado
ASP.NET definido por el desarrollador. Los campos ocultos y el atributo HREF de los campos de
<<dotNetMana
todotNet.qa@dotnetmania.com
Dino Esposito
49
<<dotNetMana
TodotNet.qa@dotnetmania.com TodotNet.qa@dotnetmania.com
<< dnm.todonet@qa
50
La reescritura de URL tiene lugar durante el procesamiento de la peticin y determina una modificacin de la URL originalmente solicitada. El objeto de
contexto HTTP de ASP.NET tiene un mtodo llamado RewritePath definido de la siguiente forma:
public void RewritePath(string path)
El contenido de esta seccin se procesa en tiempo de ejecucin , y genera tantas llamadas a RewritePath como entradas hay en la seccin. No hay diferencias significativas entre la reescritura de URL
declarativa o programtica; usted deber utilizar el
mapeado declarativo, a menos que necesite evaluar
condiciones complejas antes de decidor si hace el
mapeado.
Para las aplicaciones AJAX, escribir buen cdigo JavaScript es una necesidad.Y la mayor parte de
la eficiencia de nuestras pginas depende de lo que ocurre en el cliente. Esa es la razn de mi pregunta.Veo que la documentacin oficial de DOM sugiere actualizar las pginas utilizando su propia API,que no incluye la popular propiedad innerHTML.Muchos navegadores,sin embargo,soportan esta propiedad adems del DOM estndar. Quin tiene razn, y qu es lo mejor para m?
Inicialmente, la propiedad innerHTML era solo una pieza clave del soporte del navegador para el modelo de
objetos de HTML dinmico (DHTML). Introducido por Microsoft con el Internet Explorer 4.0, fue
copiado por otros navegadores en lo que simplemente se conoca como modelo de objetos del navegador.
El xito de DHTML llev a la definicin de un modelo de objetos de documento estndar: el DOM de
W3C. El DOM evolucion a partir de DHTML y
generaliz en gran medida el modelo original.
El DOM de W3C de hecho ofrece un modelo
basado en rbol para todo el documento, y este modelo no incluye ninguna propiedad innerHTML. La mayora
de los navegadores, sin embargo, soportan una mezcla de DOM y DHTML bsicamente, el DOM
estndar ms unas cuantas propiedades tiles como
innerHTML. De acuerdo con el DOM estndar, para
actualizar cierto contenido usted debe obtener una
referencia al nodo asociado a la etiqueta HTML deseada y asignar su texto. De la misma forma, para aadir un nuevo elemento usted debe crear el nuevo elemento y agregarlo al rbol.
Uno de los debates ms interesantes dentro de la
comunidad de desarrolladores Web es si se debe utilizar DHTML para manipular las pginas, u optar por
el enfoque ms limpio que propone el DOM de
W3C. El elemento clave a tener en cuenta es que la
<<dotNetMana
TodotNet.qa@dotnetmania.com TodotNet.qa@dotnetmania.com
<< dnm.todonet@qa
51
Laboratorio.net
Octavio Hernndez
Octavio Hernndez
es Development
Advisor de Plain
Concepts, editor
tcnico de
dotNetMana y tutor
de campusMVP.
Es MVP de C# desde
2004, MCSD y MCT.
.NET Vision es una suite de componentes de interfaz de usuario que hacen posible enriquecer nuestras aplicaciones, tanto para Windows como para
la Web, con elementos visuales muy efectivos a la
hora tanto de embellecer su apariencia como de presentar la informacin que ellas producen de una
manera que facilite una mejor interpretacin. Su
fabricante, Nevron (http://www.nevron.com) es una
empresa basada en Sofa, Bulgaria que hace honor
a la bien conocida excelencia de los programadores
de Europa del Este y que en relativamente poco
tiempo ha conseguido hacerse con una impresionante cartera de clientes que puede consultarse en
su pgina Web.
Ficha tcnica
Nombre: .NET Vision
Versin: Q4 2006
Fabricante: Nevron
Sitio Web: http://www.nevron.com
Categora: Componentes de interfaz de
usuario
Precios:
.NET Vision Enterprise: 1.589 USD.
.NET Vision Professional: 989 USD.
Por un coste adicional se puede adquirir
una subscripcin anual, que da derecho a
recibir todas las actualizaciones de los
productos durante un ao, as como
tambin un paquete de soporte tcnico
prioritario.
Se aplican descuentos progresivos segn
cantidad de licencias.
Adems, los productos que componen la
suite se pueden adquirir de manera
independiente.
<< dnm.laboratorio.net
Cada uno de estos productos se ofrece en dos ediciones: Enterprise y Professional. En todos los casos,
la edicin empresarial ofrece ciertas caractersticas
avanzadas que no estn disponibles en la profesional.
Consecuentemente, la suite como un todo tambin se
ofrece en esas dos ediciones; cada edicin de .NET
Vision integra las ediciones correspondientes de cada
uno de los productos. Para conocer las diferencias
entre las dos ediciones de cualquiera de las libreras,
consulte las pginas del sitio Web del fabricante que
se listan al final de este artculo.
Algo a destacar especialmente en el caso de .NET
Vision es el hecho de que no estamos en presencia de
un convoy en el que se mezclan de manera artificial productos que tienen muy poca o ninguna relacin entre s; en este caso, todo el software ha sido
concebido bajo una arquitectura unificada y modular, y por ejemplo las versiones para Windows Forms
de las libreras de grficos y diagramas se apoyan en
los componentes del paquete de interfaz de usuario;
ms an, todos los productos de la suite se apoyan en
un modelo de objetos comn llamado Nevron Document Object Model (DOM), lo que se traduce en mltiples facilidades a la hora de combinar la utilizacin
de varios de los productos.
rrollador la instalacin y
configuracin inicial del
producto. .NET Vision no
es una excepcin, y su programa de instalacin (figura 1) se encarga de todo lo
relacionado con instalar los
componentes en el GAC y
registrarlos ante Visual Studio 2005 (o 2003, para el
que tambin se ofrece
soporte).
Primer uso
Una vez instalada la suite, tendremos a nuestra disposicin en el cuadro de
herramientas de Visual
Studio (figura 2) una buena cantidad de componentes listos para ser utilizados
en nuestros proyectos. Los
Figura 2. Componentes de .NET Vision
principales componentes
en el Cuadro de herramientas.
que conforman cada uno
de los productos se describen ms adelante en este artculo.
Una buena va para familiarizarse con las posibilidades que ofrecen los diferentes productos que componen .NET Vision es ejecutar los ejemplos que ellos
incorporan (y que son colocados en la carpeta Exam-
<<dotNetMana
53
<< dnm.laboratorio.net
<<dotNetMana
54
<< dnm.laboratorio.net
Dado el hecho de
que el paquete User
Interface for .NET
incluye nicamente
componentes para
aplicaciones de escritorio, es natural que se
eche en falta la inclusin en .NET Vision
de una librera similar
a la anterior para el
desarrollo de aplicaciones Web ASP.NET.
Figura 5.Aplicacin de ejemplo de Diagram for .NET
El fabricante conoce
este hecho y ha venido
figuras, conectores, grupos y plantillas
trabajando en ello; como resultado, al
predefinidas.
cierre de esta edicin anunciaba un
La figura 5 muestra en ejecucin al
acuerdo al respecto con Intersoft Soluprincipal programa demostrativo que
tions (ver recuadro Novedades).
acompaa a este componente. Como
puede observarse, el diseador de diagramas no solo puede utilizarse en tiemConclusiones
po de diseo, sino tambin en tiempo
de ejecucin.
En este artculo hemos presentado, de
la manera resumida que nos exigen las
limitaciones de espacio, las principales
caractersticas de Nevron .NET Vision,
Sobre los componentes
una potente suite de componentes visuaASP.NET
les para la capa de presentacin de apliLo ms destacable de las versiones
caciones tanto para Windows como para
para ASP.NET de Chart for .NET y
la Web, que recomendamos sin duda
Diagram for .NET es que se apoyan
alguna a nuestros lectores.
en los mismos motores fiables y de alto
rendimiento en los que se basan sus
homlogas para Windows Forms. A
Referencias
la hora de devolver los grficos y diaPuede obtener ms informacin
gramas que generen al vuelo nuessobre el producto en la pgina
tras aplicaciones ASP.NET, disfrutaWeb del fabricante,
remos de todas las posibilidades que
http://www.nevron.com.
cabra esperar de una librera seria
de componentes de imagen para la
Toda la documentacin tcnica de
Web, como son:
los productos que componen la
Deteccin de navegador para adapsuite est disponible online en la
tar las respuestas a las capacidades
URL http://www.nevron.com/
del mismo.
DotNetVision/Index.htm.
Posibilidad de serializacin directa
de imgenes al navegador cliente.
Novedades
.NET Quark, fruto del acuerdo de
Nevron con Intersoft Solutions
Casi coincidiendo con el envo a
imprenta de este ejemplar, Nevron
ha hecho pblico un acuerdo con
Intersoft Solutions para sacar al mercado .NET QuarX, un paquete combinado que incluye .NET Vision
(que analizamos en este ejemplar) y
WebUI Studio.NET, una librera de
componentes visuales para aplicaciones ASP.NET de Intersoft.
WebUI Studio .NET ofrece un
amplio conjunto de controles que
hacen posible implementar con relativamente poco esfuerzo interfaces
Web que ofrecen experiencias de
usuario ricas apoyndose en los ms
recientes avances tecnolgicos en esta
rea, como AJAX. Ambas compaas
han creado un nuevo sitio Web conjunto, http://www.dotnetquarx.com,
en el que podr encontrar ms informacin.
ATENCIN
La oferta para los productos Nevron que
se presenta a principios de esta seccin no
es aplicable a .NET QuarX, que ya sale
al mercado con un agresivo precio introductorio 1.999 USD.
noticias noticias
<<dotNetMana
55
N24 (6,50)
N25 (6,50)
N26 (6,50)
N27 (6,50)
N28 (6,50)
N29 (6,50)
N30 (6,50)
N31 (6,50)
N32 (6,50)
N33 (6,50)
N34 (6,50)
N35 (6,50)
N36 (6,50)
N37 (6,50)
de
Puede enviar sus datos por Fax al 91 499 13 64, o por telfono al 91 666 74 77,
o por email a la direccin suscripciones@dotnetmania.com, o tambin puede
enviarlos por correo postal a la siguiente direccin:
de 2007
Netalia, S.L.
C/ Robledal, 135
28529- Rivas Vaciamadrid (Madrid)
biblioteca.net
Pro C# with .NET 3.0, Special Edition
Andrew Troelsen
Editorial: APress
Pginas: 1150
Publicado: febrero, 2007
ISBN: 1-59059-823-7
Idioma: ingls
Todo un clsico entre los libros dedicados a C# se renueva, expandiendo el amplio
material que ya cubre (que incluye todos los principales temas relacionados con el
lenguaje, la descripcin de las principales libreras, una amplia cobertura de la estructura y funcionamiento de los ensamblados y la programacin a bajo nivel, as como
amplios captulos relativos al desarrollo de los principales tipos de aplicaciones y servicios para .NET Framework Windows Forms, Web Forms, Web Services, aplicaciones distribuidas con Remoting) con seis nuevos captulos, dedicados a las nuevas libreras incorporadas a .NET 3.0 (Presentation Foundation, Communication
Foundation, Workflow Foundation) y a las nuevas posibilidades que estaremos aprovechando dentro de poco: C# 3.0 y LINQ.
Hoy por hoy, si tuviera que elegir un nico libro de C# para llevarme a una isla desierta, creo que ste es el que escogera. Altamente recomendado.
novedades
Sin duda alguna, este libro es la referencia definitiva si desea conocer en profundidad las estructuras internas y mecanismos en los que se apoya el Common Language Runtime (CLR) para la carga y ejecucin de aplicaciones, y hasta los ms mnimos detalles relacionados con el Lenguaje Intermedio (Intermediate Language, IL)
y el desarrollo de aplicaciones en ese lenguaje, el ensamblador de .NET Framework.
El libro ofrece muchsima informacin imposible de encontrar en otras fuentes, como
la estructura interna de los ejecutables de cdigo manejado o los cdigos internos de
las instrucciones IL. Lidin trabaja desde 1999 en el equipo del CLR en Microsoft, y
form parte del equipo que dise el lenguaje intermedio e implement ILASM,
ILDASM y otras utilidades de bajo nivel de .NET.
Curso de CSS
Christopher Schmitt. Editorial: Anaya Multimedia/OReilly. Pginas: 576. Publicado:
mayo, 2007. ISBN: 978-84-415-2198-8.
desvn
Marino Posadas
noticias.noticias.noticias
<<dotNetMana
58
Se trata de pequeos trucos funcionales escondidos en las aplicaciones ms populares. Algunos de ellos han sido colocados por el equipo
de desarrollo simplemente como una firma, como un sello de identidad. Otros, sin embargo, tienen una funcionalidad ms prctica, como
es el caso del que podemos encontrar en el nuevo Microsoft Word
2007. El truco no es nuevo: se abre un documento en blanco, y se teclea
exactamente lo siguiente: =rand(x,y), donde se sustituirn x e y por
dos nmeros enteros. Qu sucede? Pues que Word genera texto
automticamente siendo la norma que x es el nmero de prrafos a
generar e y el nmero de veces que se repite ese prrafo. En versiones
anteriores, el programa generaba una frase que contena todas las letras
del alfabeto ingls, (the quick brown fox jumps over the lazy dog), pero la
cosa ha cambiado en esta versin, y ahora se genera un texto ms lgico que es una especie de popurr de datos de la ayuda. Sigue siendo til
para esos propsitos, pero su aspecto es ms similar al que tendra un
texto real.
noticias.noticias.noticias
documentos en la red
El MIX07 termin, pero pueden verse los
restos, en el sitio Web creado a tal efecto por
los chicos de publicidad del evento. Hay noticias, entrevistas, algunos materiales descargables, el tpico regusto de aquello que termin,
y como dice el logo adjunto no todo lo que pasa en Las Vegas
se queda all, hay una parte que puede consultarse en la pgina: http://visitmix.com.
2007 Office System Document: Bringing Web 2.0 to the
Enterprise with the 2007 Office System es un amplio
documento sobre cmo aprovechar
las nuevas capacidades de Microsoft
Office System 2007 para crear contenidos y aplicaciones. Una mezcla de
divulgacin y presentacin de funcionalidad. Disponible en
http://www.microsoft.com/downloads/thankyou.aspx?familyId=8b48bd31-f043-4ab4-96eb-c6e958fe4ec9&displayLang=en