07.03.08
Autenticación en WCF
Gracias a una duda en la lista de correo del Club .Net de Sevilla vamos a ver cómo funciona esto de la autenticación en WCF.
Os recomiendo que os leáis un poco la documentación que hay en MSDN sobre WCF, y que os descarguéis los ejemplos que están disponibles aquí. Son muy pero que muy completos, y muestran casi cada característica de WCF.
Lo que vamos a ver es sobre cómo poder autenticar a un usuario con un login y password. El ejemplo que trata este caso en concreto lo tenéis aquí. En el ejemplo, se usa un binding wsHttpBinding, está muy bien, todo perfecto. Pero lo que no queda claro es que la credenciales del login y password viajan cifradas por la red. Todo para evitar sniffers, ataques man-in-the-middle, etc…
El pero es que necesitamos un certificado que permita esa seguridad, que como se dice en el ejemplo, al definir la autenticación por Username a nivel de mensaje:
Con esta configuración, lo que no queda claro, es que las credenciales y todo el tráfico va cifrado a nivel de transporte. Pero para eso nos hace falta un certificado que el servicio usará para:
- Autenticarse a los clientes.
- Cifrar las comunicaciones a nivel de transporte.
En los ejemplos nos indican cómo generar un certificado para pruebas. Esto lo tenemos en los archivos Setup.bat y clean.bat junto a los archivos de solución de VS. Esos archivos usan unas herramientas disponibles para XP, Vista, Server 2003 y 2008, etc. Para XP podéis descargarlo aquí.
Este certificado no es confiable, ya que está firmado por nosotros mimos como entidad certificadora. Esto tiene sus ventajas e inconvenientes. Ventajas de cara a la seguridad (siempre incómoda pero necesaria, que luego pasa lo que pasa) y los inconvenientes es que no es barato. Pero bueno, lo importante es que necesitamos un certificado x509 (de esos).
Lo importante que no se dice en la documentación pero que si se ve en el código de los ejemplos, es que tenemos que indicar cuál es el certificado que nuestro servicio WCF va a usar. Una vez ejecutado el setup.bat y si vemos la palabra succeedd podemos continuar:
¿Por donde iba?.. Ah si. Tenemos que indicar el certificado que va a usar el servicio. Esto se hace en la sección de ServiceCredentials:
Ya tenemos un servicio que usa un certificado para autenticarse y cifrarse, muy bien. Pero quién se va a fiar de un certificado que no está firmado por Verisign? ¿Yo? No debería, ya que entonces la seguridad que le estamos metiendo es “pa na”. Quiero decir, que a la hora de hacer esto y poner un sistema en producción debemos contar con un certificado bueno, de pata negra. Aquí estamos viendo sólo cómo se hace para un entorno de desarrollo.
La falla de seguridad está en que podemos decirle a la aplicación cliente que no se fíe de este tipo de certificados. Por defecto, cuando agregamos una referencia a un servicio wcf con certificados con Visual Studio, la configuración que nos planta es que no va a aceptar certificados que no estén firmados por autoridades de confianza (como Verisign).
Esto es lo que me estaba fallando y lo que originó la serie de preguntas y respuestas en la lista de correo del Club .Net de Sevilla. Si nos vamos al App.Config de la aplicación cliente podemos cambiar ese comportamiento, y decirle a la aplicación cliente que confíe en estos certificados, esto lo hacemos de la siguiente forma:
Si nos vamos al App.Config del cliente que viene en el ejemplo, lo vemos. Además tenemos que decirle al endpoint del cliente que use este behavior:
Y ya está. A runear.
Espero que seáis más listos que un servidor (que no tiene certificación alguna) y no necesitéis esto.
Espero que sirva.
Juan María.
05.25.08
Nuevo cambio en MSDN
El Jueves leí en el blog de Somasegar el anuncio de otro cambio en MSDN. En concreto del look & feel. Soy programador y bueno, como a muchos programadores (cada vez menos), el tema del diseño es algo que nos cuesta más trabajo. Crear interfaces y experiencias de usuario amigables no es algo fácil, pero tampoco imposible.
En realidad envidio a las personas que tienen esa capacidad de crear de la nada algo bonito y usable para una gran mayoría. Pero en definitiva es algo en lo que, yo por lo menos, tengo que mejorar. Para gustos los colores y nunca mejor dicho.
La cosa es que estaba yo tan tranquilo con mis cosas y fuí a hacer una consulta a MSDN, mientras escribía la dirección en la barra de direcciones me acordé del post de Somasegar y pensé: Uy, a ver que han puesto nuevo…
Y toma, la primera en la frente: En la sección Sus recursos que está en el centro de la página aparecen tres enlaces a recursos impresionantes, como los blogs de los Davises (Carmona, Salgado, Cervigón), el de Héctor Montenegro, Jose Murillo, Cesar de la Torre y un largo etcétera. Cada uno con sus cosas buenas y cosas no tan buenas (por ser políticamente correcto,
). Gente de las que he aprendido un montón y sigo aprendiendo.
A lo que iba, la cosa es que este humilde blog aparece entre tan “privilegiada” compañía:
Se que suena ya un poco de autobombo pero es algo que me llena de orgullo y satisfacción. Ya comenté que no esperaba esta acogida cuando empecé con este blog.
Sólo puedo dar las gracias a toda la gente que he conocido y de las que tanto estoy aprendiendo.
Ya por último me gustaría tener un poco de feedback y saber vuestras opiniones, halagos, insultos, cambios y cosas que creeríais que podría cambiar, mejorar, eliminar, añadir …
Y sobre todo, muchas gracias por pasar por aquí.
03.17.08
Casi un año
Hace ya casi un año que comencé con la aventura de este blog. Una idea que se coció en el Club .NET de la Universidad de Sevilla, entre amigos. Unos cuantos locos por la tecnología que se reúnen para hablar de ella. No sólo sobre tecnologías de Microsoft, ahí están las experiencias con Mono, uno de nuestros compañeros está implementando la parte de WCF, otro como parte de la comunidad de desarrolladores de OpenLayers, … y una lista enorme de gente que si me pongo a enumerar … dejo a WordPress sin espacio en disco.
He conocido y sigo conociendo a un montón de gente tan apasionada en este tiempo que me llego a sentir incluso un poco acongojado de ver cómo se mueve este mundo. Y es que aunque siempre he sabido que el mundo de la informática se mueve deprisa, nunca lo había experimentado hasta que “engañé” a gente para que me dejara entrar en este mundo.
Hoy hemos alcanzado en este humilde blog las cien mil visitas. No se si será mucho para un año de vida de un blog técnico. Realmente no me importa, ya que las visitas que más me impresionaron fueron las treinta y tres primeras visitas en el mes de Marzo de 2007.
Sólo puedo daros las gracias a todos los que me visitáis y linkais. Sólo espero que este pasatiempo de traducción ayude a otros a resolver problemas.
Muchas gracias.
Juan María Laó Ramos.
10.05.07
Problemas con el servidor web de VS
Llevaba un tiempo teniendo varios problemas con la ejecución de una aplicación web en el servidor web que trae Visual Studio, llamado Cassini.
El principal problema es que los incidentes que sufría ocurrían de vez en cuando, es decir, no conseguía reproducir exactamente el error. Y lo peor de todo es que no sabía cuales eran las condiciones que hacían aparecer ese error. En el IIS funcionaba perfectamente, pero en mi máquina de desarrollo, de vez en cuando y sin saber porqué fallaba.
Después de estar un tiempo ejecutando paso a paso la aplicación resulta que la cache de un postback a otro se vacía. Sigo investigando y doy con este link: http://www.johnsadventures.com/archives/2006/02/why_does_my_aspnet_cache_keep_clearing_i.html
Parece ser que cuando la máquina se va quedando sin memoria, pues la cache de dicho servidor web para las aplicaciones web que esté ejecutando se libera.
Sólo con configurar el web config de la aplicación va perfecto, un poco lento cuando estoy haciendo varias cosas a la vez, pero ya no padezo de dicho error. Lo conseguimos configurando la cache en la sección System.Web del Web.config de nuestra aplicación de la siguiente manera:
<caching>
<cache disableMemoryCollection = “true”
disableExpiration = “false”
privateBytesLimit = “0”
percentagePhysicalMemoryUsedLimit = “90”
privateBytesPollTime = “00:02:00“/>
</caching>
Espero que sirva.
Juan María Laó Ramos
08.23.07
Firefox, Visual Studio 2005 y Windows Vista
Llevo tiempo peleándome con el pequeño servidor que trae VS 2005 para hacer pruebas con páginas ASP.NET en local. El problema que tenemos los desarrolladore web es el de siempre, que si no se ve bien en Firefox e IE, etc, etc. Típica discusión cuando no se hacen las cosas bien con los estilos CSS. Afortunadamente estoy aprendiendo un poco y le voy cogiendo el truco. Leer el resto de esta entrada »
07.31.07
De vuelta
Acabo de volver de unas pequeñas vacaciones. Y veo que tengo mucho que traducir, así que me pongo a ello ahora mismito.
06.06.07
Huelva: CodeCamp y Madrid: Remix
A ver si mi jefe no me pilla escribiendo esto en horario de trabajo.
.
Hemos estado en dos eventos en los útlimos cuatro días. El primero en la CodeCamp, en Huelva. Evento para estudiantes y profesionales. Una especie de toma de contacto entre ambos sectores en la que pudimos conocer productos, empresas, planes empresariales, experiencias en la sesión de “El diván de Mónica”,en donde tres MVP’s aportaron su testimonio y carrera en esto de la informática, sesiones sobre Silverlight por Jose Murillo, una de Robotics Studio por Miguel Ángel Ramos … y un largo etcétera.
Lo más importante que me llevo de este CodeCamp es las posibilidades y facilidades que hay disponibles para emprendedores que quieran montar su empresa por parte de Microsoft. Leer el resto de esta entrada »
05.08.07
Test unitarios y NUnit
Las máquinas no hacen lo que quieren, hacen lo que nosotros les decimos que hagan.
No sé muy bien dónde lo escuché, ni quien me lo dijo, o si lo vi en algún articulo o en una ppt. Pero es una verdad como un templo. Cuando escribimos código, tanto para un hola mundo como para un sistema de control de un aeropuerto, lo que esperamos de nuestros aporreos de teclado es lo que hagan lo que estábamos pensando mientras escribíamos.
Hay una gran diferencia entre lo que un programador piensa que debe hacer su código y lo que realmente hace el código recién escrito. Y ya no digamos del código que escribimos hace unas semanas.
Hace relativamente mucho tiempo que aparecieron los primeros frameworks para realizar test unitarios, y se van mejorando cada día. Pero, ¿qué son los test unitarios?, para los que no lo sepáis aún, según Ron Jeffries: “ son programas escritos para ejecutarse uno tras otro. Normalmente comprueban que ante unas entradas predefinidas, los resultados obtenidos van a ser siempre los mismos.”
Es decir, son programas que van a comprobar que nuestro código haga lo que esperamos que haga.
NUnit.
NUnit es un framework más para poder realizar de forma homogénea y estructurada los menesteres que he descrito en el apartado anterior.
Por intentar demostrar que me he mirado esto un poco a fondo, aunque no mucho, os cuento que NUnit es la implementación para la plataforma .NET de otro framework para hacer test unitarios, JUnit. JUnit es un framework para realizar test unitarios para la plataforma Java, que a su vez viene de la plataforma … (y aquí me cansé de investigar).
Todo el tema de los test unitarios ha surgido con las técnicas de desarrollo rápido Extreme Programming. Éstas últimas son técnicas de programación usadas para explotar varios factores del desarrollo software, como son la calidad, claridad, tiempo de desarrollo, eficiencia, y un largo etcétera.
Al grano.
Hablando en plata (“talking in silver”) , básicamente lo que necesitamos para poder hacer test unitarios con NUnit es: Primero descargárnoslo desde www.nunit.com, y lo segundo es instalarlo.
Una vez lo tengamos instalado ya podemos ponernos a hacer test a mansalva.
La forma en que los hago yo es la siguiente: Me creo un nuevo proyecto de librería C# en visual studio, le añado la referencia a la dll de NUnit. (En la documentación de NUnit os dice dónde la podéis encontrar).
Y listo, ya puedo crear las clases que testearan lo que yo quiera.
Sólo hay que tener en cuenta un par de cosas:
1. Añadir el atributo TestFixture a las clases que van a contener los test, por ejempo:
using System;
using NUnit.Framework;
namespace UnitTestingExample
{
[TestFixture]
public class SomeTests
{
}
}
2. Tenemos que indicar los métodos que van a hacer los test mediante el atributo Test
[TestFixture]
public class SomeTests
{
[Test]
public void UnTest()
{
//Hacer algo
}
}
Y listo, ya podemos testear lo que queramos.
NUnit nos ofrece un interfaz gráfico para ver los resultados de los test. ¿Cómo lo vemos? Muy fácil, compilamos nuestra librería, ejecutamos el interfaz gráfica que NUnit tiene preparado, en el menú File, seleccionamos Open, y podemos seleccionar la dll compilada que hemos generado con visual studio.
Muchas veces es necesario inicializar algunas cosas para que los test puedan ejecutarse. Por ejemplo, que haya un elemento en la base de datos, que se haya inicializado el valor de algunas variables, etc..
Para ello, están los atributos [TestFixtureSetUp] y [TestFixtureTearDown]. El primero inicializa todo lo que haya que inicializar ANTES de ejecutar los test, y la última se ejecutará DESPUÉS de ejecutar todos los test, de esta forma:
[TestFixtureSetUp]
public void MetodoDeSetup()
{
//Código necesario para la inicialización
}
[TestFixtureTearDown]
public void MetodoDeTearDown()
{
//Codigo
}
Pues nada, espero que os sirva tanto como me ha servido a mi.
Pero NUnit no se queda sólo en esto, tiene muchas cosas más que dejaremos para otros post.
Hope this help.
Autor: Juan María Laó Ramos. Microsoft Student Partner
05.07.07
Instalando Visual Studio Team Foundation Server
Alguien dijo alguna vez que las instrucciones no sirven para nada. Yo diría que no sirven mucho, pero algo sí.
He tenido que instalar Visual Studio Team Foundation Server, y me ha costado un poquito. Al principio no leí las instrucciones, me daba unos cuantos avisos diciendo:
- El SQL Server Agent no está iniciado, y no está configurado para ejecutarse manualmente.
- La actualización KBXXXX (No me acuerdo del número) no está instalada.
Y así un largo etcétera.
Despues de ir solventando los diferentes problemas que iban surgiendo. Ya pude iniciar la instalación. Pero “Oh campos mustios de soledad verdes tullidos”, al poco de iniciar la instalación me decía que los servicios Windows Sharepoint Services están configurados para trabajar con WMSDE, y debería estar configurado para trabajar con SQL Server.
Pues bien, aquí, después de leer y releer las instrucciones que iba encontrando, desinstalando los Windows Sharepoint Services, varias veces. No me indicaba dónde poder decirle que usase el SQL Server como motor de base de datos.
Investigando un poco por las cosas que tenía instaladas en el sistema, me dió por señalar la pestaña de “Mostrar las actualizaciones instaladas”
Y bualá, aparecía un componente llamado Windows Microsoft Sql Server Desktop Engine …
Las iniciales me hicieron sospechar: WMSDE, ¿será esto?
Total, que lo desinstalé, y cuando volví a instalar Windows Sharepoint Services porfín me dejaba seleccionar qué origen de datos usar.
Espero que le sirva a alguien.
Autor: Juan María Laó Ramos. Microsoft Student Partner





