Windows Communication Foundation: No mas productos Next, Next, Next...

|

He estado desarrollando un proyecto desde el año pasado, tome la desicion de usar WCF (Windows Communication Foundation) basado en la facilidad con la que Edgar Sanchez (Un reconocido desarrollador ecuatoriano que tiene su empresa Logic Studio), realizo un demo en el Andean Developer Days, tambien tuve la suerte de ser speaker en ese evento, era realmente algo prometedor...

Pues bien la configuracion por default funciono bien para el ambiente de desarrollo, pero adivinen?? En una pequeña prueba de carga con apenas 10 conexiones concurrentes, se fue al piso y dejo de funcionar por completo!!

Empece a buscar la razon del problema, la base de datos, que es una Oracle 10g, estaba de maravilla, la red completamente libre, el codigo en pruebas unitarias estaba funcionando de maravilla, algunas pruebas mas y nada...

Cuando empece a reviasr un poco mas las configuraciones de WCF en el servidor y me encontre con algunas cosas...

La primera era que los Bindings(Conexiones de cualquier tipo que soporta WCF, Http, TCP, MSMQ, etc...) tenian un tamaño maximo de mensaje, habia olvidado que WCF funciona como un sistema de mensajeria y claro parametriza ese tipo de cosas, al aumentar ese tamaño se fueron algunas excepciones, pero tambien note que no eran tan claras las excepciones en los clientes... Si pensaron que WCF no pasa los detalles de las excepciones a menos que se le indica lo contrario, tienen toda la razon, tienes que en la configuracion del servicio agregar un comportamiento que le indica al servicio que te de detalles sobre la excepcion...

Extraño verdad?? "Normalmente este tipo de cosas en productos vienen listas para usar..." Asi pense, y dije bueno adelante!!

Despues encontre algo un tanto magico: la rzon por que a las 10 conexiones dejaba de funcionar, el binding Tcp tenia especificado que maximo acepta 10 conexiones!!
"Voila, lo cambio y asunto solucionado", aliviado pense asi, sabran que no, a las mismas 10 conexiones se caia, y es cuando comence a dar vueltas por la Web en busca de respuestas...
Encontre de todo la vedad pero para esto ya cambie a un binding Http, que de paso no tiene limite de conexiones teoricamente, pero encontre otro comportamiento de WCF que limitaba su funcionamiento, y era cuantas instancias de objetos de servicio podia crear, ademas de cuantas peticiones podia procesar simultaneamente y cuantas podia tener en cola mientras procesaba, despues de eso comenzaba a rechazar peticiones, bueno lo configure para las pruebas a un numero bastante mas grande de modo que no moleste, se resolvio el problema claro, pero note algo mas, los mensajes comenzaban a ser bastante grandes, claro necesitaba pasar de 16000 registros cada mensaje, tenian que ser grandes, y mis bindings estaban configurados por default excepto por lo que ya les mencione, nuevamente mis investigaciones me llevaron a determinar que la codificacion del mensaje no era la apropiada: estaba usando Texto Plano, ahi se me hizo claro, estaba poniendo un DataSet relativamente grande y serializado a XML, dentro de un mensaje XML, definitivamente tenia que ser grande!!
Bueno experimiente cambiando a una codificacion llamada MTOM, definitivamente mejoro mucho el tamaño ya era mas aceptable y claro esto hacia que los mesajes viajen mas rapido...

Estas y tantas otras experiencias me han resultado a ratos un poco tensionantes, y mas cuando tuve que poner en produccion el sistema, no es muy grande son 60 usuarios, pero a ratos son los 60 concurrentes y tienes como una salida de 25 mensajes por segundo que ya es respetable, y ahi tambien tuve que afinarlo un poco mas...

Estoy preparando un articulo sobre WCF para aclarar este tipo de cosas, espero que con eso menos gente pase lo que yo pase y se cambie tambien la idea de Microsoft tiene solo productos que se instalan y funcionan!!!

Windows Communication Foundation es muy conservador instalado por default, definitivamente tienes que afinarlo....

0 comments: