WCF y Balanceadores de Carga F5 Big IP

|

Como ultimamente sucede ando haciendo servicios Web, y me encanta WCF para hacerlo por muchas razones, en especial la rapidez con la que uno puede hacer cosas complejas, y como era de esperarse en una de las implementaciones que hice por el crecimiento que tienen, cambiaron sus balanceadores de carga de software por "cajas" F5 Big IP estas definitivamente son muy buenas para distribuir la carga y bajar el procesamiento de los servidores, por que entre otras cosas mas que balancear carga, se pueden encargar del procesamiento SSL, y por su puesto esto es un alivio para los servidores! Pero no para los servicios WCF que usan credenciales en el mensaje...
Resulta que como el F5 se encarga del procesamiento SSL, cuando el trafico es pasado al servidor de turno este pasa plano, claro para apliaciones web es facil configurar para que se reciba el trafico plano, de hecho en ciertos casos no hay que hacer nada, pero si usas un servicio WCF con credenciales en el mensaje, por restricciones de seguridad TIENES QUE USAR SEGURIDAD EN EL TRANSPORTE, esto significa encriptar la comunicación con SSL, no hay otra forma, o incurrir en otras practicas no recomendadas como pasar las credenciales como parametros de los mensajes (no hagan esto nunca!) y demas...

Uno puede notar el problema cuando claro ya configurado el F5 y apuntas a tu servicio con Seguiridad en el Transporte y Credenciales en el Mensaje, el trafico pasa y en el servidor donde se ejecuta el servicio te dicen que no pueden validar los mensajes que llegan, y de vuelta tambien tienes el mismo resultado, Faults diciendo que la seguridad no puede ser verificada, ok si tienes estos mensajes tienes el problema...

Hay 2 soluciones, la primera implementar un canal Http que permite que se pasen las credenciales en el mensaje sin seguridad en el transporte, eso puedes encontrar como hacerlo aca: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/87a254c8-e9d1-4d4c-8f62-54eae497423f/, pero la verdad no les recomiendo esto, revise un poco profundamente y hay ciertos casos en que no funciona completamente, y ademas es un poco complicado, ademas una advertencia es que si haces esto los mensajes pasan planos por la red y pueden ser vistos facilmente con un sniffer bien ubicado en la red...

La otra opcion antes no era posible, pero ahora si, antes los F5 no podian pasar el trafico SSL al servidor, solo podian pasarlo plano, gracias al soporte de F5 se nos indico que hoy ya se puede hacerlo, les sugiero que para los pasos exactos contacten al soporte de F5, los pasos basicos y no detallados en resumen son estos:

1.- Crear un virtual server en el puerto 443 y a el asociar un Profile SSL Server
2.- Crear un pool en el puerto 443 y poner como member server el servidor
3.- Dividir el certificado a usar en 2, 1 es el certificado y otro es la clave, subirlo al F5 a las ubicaciones correspondientes para cada tipo
4.- Crear un SSL Proxy, usando el certificado y la clave que se subio anteriormente
5.- Configurar a que apunte a los servidores correctos

Estos son pasos con mucha falta de detalle, yo insisto en que consulten a su soporte F5 para los pasos detallados, la consulta es como hacer un Servidor SSL de Cliente, para que el servidor reciba el trafico SSL.

Espero les sirva!

Una caracteristica interesante de IE 8

|

Desde hace un tiempo estoy probando Internet Explorer 8, y definitivamente me agrada mucho, tiene muchas cosas que de verdad te ayudan con el dia a dia de la navegacion, ejemplo a quien no le ha pasado que se le cerro un tab que no queria cerrar? A mi me pasa y bastante! Pues con Internet Explorer 8 puedes recuperar ese tab perdido en accion! Como? Simple en cuanto se haya cerrado abre otro nuevo tab, En la parte superior izquierda te aparecera Reopen closed tabs, “Reabrir tabs cerrados” en español ahi justo abajo del titulo encontraras el tab que acabas de cerrar, o si quieres ver otros tabs que cerraste podras abrir tu historial de navegacion para encontrarlo!!

En lo personal me ayuda mucho, claro no es un punto de que definitivamente haga que cambies de browser, pero si otras cosas como que definitivamente es mas rapido, los WebSlices, los aceleradores y cosas como el In-Private browsing, bueno aun estan en Beta 2, hay que esperar un poco mas de trabajo de la gente de MS, esperemos un browser de verdad competitivo es este nuevo año!!

Resultados de la búsqueda Personalizada

|



Problemas con SSL y WCF??


Un gran problema que normalmente se presenta cuando se usa SSL para las comunicaciones es que por supuesto no se cuenta con un certificado SSL valido, claro en los exploradores uno tiene la opcion de entrar indicandole al explorador que uno asume el riesgo, pero con WCF esto no puede ser hecho, asi de facil :)

El truco esta en hacer que el metodo que inspecciona la validez del certificado sea sobrecargado o a su vez sobrepuesto por otro (override), como? Hay una par de posibilidades:

1. Crear un metodo con el delegado RemoteCertificateValidationCallback

Este delegado hace que en el evento de ServerCertificateValidationCallback se ejecute la validación que uno quiera, entonces se crea un metodo como este:

public class clsCertificatePolicy : ICertificatePolicy
{
public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem)
{
return true;
}

public static bool RemoteCertificateValidationCallback(object sender, X509Certificate certtificate, X509Chain chain, SslPolicyErrors errors)
{

//Aqui las validaciones, yo siempre acepto el certificado, no lo hagan en casa!!
return true;
}
}

Y claro hay que ponerlo como manejador del evento:

ServicePointManager.ServerCertificateValidationCallback =
clsCertificatePolicy.RemoteCertificateValidationCallback;

Este claro debe estar antes de la o las llamadas, les aconsejo lo agreguen en un lugar general, es decir por ejemplo cuando su aplicación inicia.

Pero hay un metodo aun mas facil:

2. Usando una expresion lambda lo podemos hacer asi:

ServicePointManager.ServerCertificateValidationCallback =
((sender, certificate, chain, sslPolicyErrors) => true);

A quien se le ocurrio las epxresiones lambda deberia ser premiado!!

Espero que les sirva…

P.D.: No fui muy explicito en algunos detalles, la clase que propongo debe estar junto al proxy cliente que se usa para la comunicacion del cliente WCF hacia el servidor, y la asignacion del manejador del evento deber ser hecha en lo posible cuando inicia el programa, antes de usar el cliente WCF, solo tiene que ser hecha una sola vez!

Cualquier duda por favor avisenme!

Performance Counters de WCF

|

Desde que se inventaron esos famosos contadores de rendimiento que incorpora Windows definitivamente la vida de los desarrolladores se volvio mas clara!! Uno puede saber muchas cosas, como por ejemplo cuantas llamadas se hace por segundo al servicio, o a un endpoint especifico, o aun metodo especifico!! No les agradaria?? Pues a mi me sirve mucho para las tareas de mejoramiento y para entender como se estan comportando los servicios y los clientes de los mismos claro, realmente muchos datos para tan poco tiempo!!!

Como se los habilita? En el config de su aplicacion dentro del tag ServiceModel le agregan esto:

<diagnostics performanceCounters="All"/>

Como es de esperarse los contadores de rendimiento que se habilitan son los llamados ServiceModel (En las lista de contadores salen como ServiceModelEnpoint, ServiceModelOperation y ServiceModelService 3.0.0.0), ahi depende de las instancias que tengas podras ver contadores como llamadas por segundo, duracion de la llamada, etc.

A mi me ha resultado muy util, espero que a ustedes tambien!!

AI Framework con nuevo Release: v0.1.1

|

Pues si, a pocos dias del primer release, pues hubo que hacerle algunos ajustes, como por ejemplo reconstruir la base de datos de ejemplos para poder usar la forma de prueba de la red de Hopfield, asi mismo agregar algunas funciones de activacion extra para las neuronas, la de identidad hace que las neuronas sumen sus entradas!, arreglar que las cadenas de conexion a la base sean configurables desde el archivo de configuracion, etc…

Con esto espero que sea mucho mas usable el Framework asi la gente se interese mas y sea mas claro el uso que se le puede dar a este, si desean verlo esta aqui.

Espero que les sirva y si tienen algun comentario o desean saber mas del uso del Framework pues solo contactenme!!

Servicio de backup en linea

|

Hace tiempo que andaba buscando un servicio de backup, que me permita realmente olvidarme de que tengo que hacer backups, siempre uno no tiene esa costumbre de realizar respaldos a conciencia, y cuando menos se lo espera, puff!! Se robaron la compu, se daño el disco duro, formateamos la maquina, cayo virus, etc....

Y justo ahi es cuando nos damos cuenta de la importancia de un respaldo...

Con la afluencia de los servicios en linea se ha abierto muchos de backups, no todos son gratis u ofrecen muy poco espacio, pero este definitivamente fue ideal...

Encripta tu informacion antes de subirla con un algoritmo Blowfish de 448 bits, virtualmente imposible de romper, y lo hace todo en aproximadamente una hora, es decir vas al almuerzo y cuando vuelves voila!! Tu vida digital esta a salvo!!

No conforme con eso puedes personalizar todo lo que quieras respaldar, para mi caso mi codigo fuente por su puesto, y tambien lo que no quieras respaldar, no solo funciona en Windows si no tambien en MacOS lo cual es una amplia ventaja competitiva!!

Si se animan aqui esta el link: https://mozy.com/?code=FN8WH3 con eso ustedes reciben 2.2GB de almacenamiento y a mi tambien me dan un poco mas de espacio para los backups, olvide mencionar que te dan 256MB gratis por cada nuevo usuario que refieres?? Y sin limite de referidos?? Interesante verdad?? Pero si quieres tener espacio ilimitado puedes pagar como 5$ al mes y listo! Espacio ilimitado!!

Es una buena precaucion tener este servicio, no cuesta y te traera la paz mental que necesitas!!!

Ojala les sirva!!

Artifitial Intelligence Framework Project

|




Con un inmenso gusto quiero contarles que he publicado un proyecto llamado Artifitial Intelligence Framework en CodePlex!!




Asi como cada hombre durante su vida deberia plantar un arbol, cada desarrollador deberia crear un proyecto Open Source en su carrera, el AI Framework es un trabajo que tengo hace algun tiempo y he querido compartir con todos, y bueno de que trata??




Es un conjunto de librerias en C# 2.0 que permiten crear redes neuronales como uno desee, sin limites, asi mismo se puede recrear famosas redes neuronales como la de Hopfield o la maquina de Bolts con un poco de esfuerzo, y mas que nada es completamente gratis!! Cuando era estudiante para hacer ese tipo de software era pagado, y un dia para hacer un proyecto me toco desarrollar desde 0 toda la red neuronal, asi es que decidi de paso crearme algo un poco mas flexible...




Que se puede hacer con este proyecto??




- Crear y configurar tu propia red neuronal


- Entrenar tu red nuronal


- Probar tu red neuronal




Y asi mismo todo lo relacionado con las redes neuronales, por lo pronto no tiene una interface grafica para diseñar las redes pero lo voy a crear como un proyecto WPF, incorporarle Bloques de Aplicacion para mejorar la calidad del proyecto y cosas asi, ademas como es usual se necesita contribuidores!!




El link es http://www.codeplex.com/artint visitenlo y si tienen preguntas, sugerencias, comentarios o quieren ayudar pues con todo gusto!!


Comportamiento Extraño cuando haces commit con SQL Server y ADO .NET??

|

Hace algunos dias estaba buscando por que habia un comportamiento extraño en un software que desarrolle y estaba en produccion ya durante años, pero por cosas de la vida le cambiaron de servidor y como era de esperarse dejo de funcionar...
Lo que sucedia en escencia es que al dar commit en una transaccion sql, por medio del objeto SQLTransaction de ADO .NET, resulta que daba errores como el siguiente: "
This SqlTransaction has completed; it is no longer usable" o "
System.NullReferenceException", la verdad no sabia que pasaba, segun yo el software no fue modificado para nada asi es que le heche la culpa a la base de datos!! Busque tanto que era lo que pasaba y di con algunas posibles explicaciones como por ejemplo que SQL Server no tenia los suficientes recursos y en consecuencia cerraba ciertas transacciones sin avisar, esto si pasaba en SQL 2000 pero lo parcharon, y ese tipo de cosas que suenan a veces un tanto extraordinarias...

No hay peor ciego que el que no quiere ver, asi reza el dicho, y es cierto, lo que sucede es que hace algunos años no era fanatico de lo que ahora se conoce como el Data Access Application Block de Enterprise Library, tenia una clase pequeña que hacia las veces de ese bloque de aplicacion, trataba claro que use las mejores practicas y todo, no se cuando sucedio pero tenia yo dentro de esta clase dos metodos que hacian commit o rollback a la transaccion, y se veian algo asi:


public static void CommitTran(SqlTransaction psqlTran)
{
psqlTran.Commit();
psqlTran.Connection.Close();
}

Pues resulta que nunca supe, aunque dedia suponerlo, que cuando uno usa el metodo Commit o Rollback de un Objeto SQLTransaction la conexion que usa se CIERRA!! y Claro en la segunda instruccion quiere cerrar la conexion que esta cerrada y ese es el origen del error!!
Que ciego!! Pase un buen tiempo luchando con esto por que tengo que agregar que no siempre se daba este error, lo cual es realmente extraño, pero como les digo solo hace falta el commit o el rollback, nada mas!! Entonces debe quedarles algo asi:


public static void CommitTran(SqlTransaction psqlTran)
{
psqlTran.Commit();
}

O mejor aun, usen el Enterprise Library con el Data Access Aplication Block, asi no cometeran errores como el mio!!!

Ojala les sirva!!

Alternativa a AutoCAD MAP??

|

Como en algunos posts mios pasados se ha notado, he luchado con el AutoCAD MAP 3D 2008 con algunos problemas, como por ejemplo que no funciona bien con Windows Vista hasta que le pones un Service Pack de AutoCAD via la actualizacion automatica, y claro la inmensa falta de soporte que se afronta, no hay un tutorial o algo que te ayude a iniciarte con el AutoCAD MAP y C#, quiero escribir un articulo sobre eso para que la gente se oriente espero terminarlo en estos meses, pero la verdad a ratos ha sido muy frustrante trabajar con los datos geoespaciales y todo...
En esas investigaciones de una alternativa el año pasado me encontre con algo interesante unos controles de ThinkGeo, pero en ese entonces no soportaban el acceso a una base geoespacial como Oracle Spatial, solo soportaban shapefiles lo cual en aplicaciones profesionales realmente no es practico, es decir 300 clientes sobre un solo archivo no es saludable, pero en estos dias he recibido una noticia muy alentadora, en la nueva version de los componentes de ThinkGeo ya se soporta el acceso a bases geoespaciales!! Y de verdad es muy sencillo usarlo, y que mas ventajas uno espera de esto? Simple, los costos pueden recortarse de una manera expectacular!! El costo de una liciencia de AutoCAD MAP 3D puede reemplazar la licencia de los componentes para un servidor web y dar servicio a muchos clientes con la funcionalidad que necesitan(cambiar los datos, mover los shapes, crear nuevos, etc.) y solo pones AutoCAD MAP 3D cuando de verdad lo necesitas!!

Creanme es de verdad una opcion genial esto, quieren una probada?

http://gis.thinkgeo.com/Products/MapSuite30Roadmap/tabid/636/Default.aspx

Ojala les sirva!!