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....

Tantas maravillas juntas!! Hacia donde vamos??

|

Cada vez y cuando estamos siendo invadidos con mas y mas tecnologia nueva en cuanto a software, es impresionante a la velocidad que estos cambios se dan, en todo sentido, esto claro me ha llevado a preguntarme: "Como desarrollaremos software dentro de 5 o 10 años??"
Pues bien, como va la tecnologia me atrevo a decir que en 5 o 10 años estaremos solo "dibujando" modelos de como queremos que el software se comporte, desde diferentes perspectivas claro, me atrevo a decir esto por las diversas tecnologias emergentes, tanto en el mundo .NET como en el mundo OpenSource...

En general mi afirmacion esta apoyada por lo que se conoce como Model Driven Development, este esta tomando fuerza ya en muchos paises y especial en la plataforma de Java, con sus IDEs y demas, la idea claro es usar diagramas basados en estandares para generar codigo, el gran problema ahi es que las representaciones universales como UML 2.0 no pueden representar por completo las reglas de negocio y claro como normalmente sucede en esa plataforma, hay tantos esfuerzos por separado y cada cual jalando para su lado, que hasta no tener algo como la recientemente formada Linux Foundation, no tendra una clara direccion...

Y Microsoft??

Pues la verdad si uno se pone a revisar, tiene muchas iniciativas para acelerar el desarrollo de aplicaciones, Windows WorkFlow Foundation es la mas recientemente liberada, asi como complementos a esta como son Windows Communication Foundation y Windows Presentation Foundation, es cierto tambien que persiguen no solo el objetivo de mejorar el tiempo de desarrollo de aplicaciones si no otros mas como llevar a un nivel de abstraccion mas alto las comunicaciones, etc...
Pero tambien hay otras iniciativas muy interesantes, LinQ por ejemplo (http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx), permite extraer datos de una forma natural para un desarrollador de C# o VB, es decir adios a SqlConnection y otros objetos ADO .NET, a muchos desarrolladores antiguos les resultara muy familiar poder utilizar un lenguaje de consulta dentro de su codigo, por ejemplo Fox lo tenia hace mucho tiempo, tambien tiene la base integrada a su entorno, pero LinQ no se limita a extraer datos de una manera natural de cualquier base de datos a la que se le configure, si no tambien puede extraerlos desde fuentes de datos XML, podria ser un Web Service, o incluso de un DataSet, lo cual realmente expande las posibilidades!!

A esta iniciativa le complementa ADO Entity Framework (http://msdn2.microsoft.com/en-us/library/aa697427(VS.80).aspx), este Framework genera todas las clases necesarias para tratar a la base de datos tal cual fuera un objeto, por detras claro hace toda la carpinteria de los conocidos DataProviders, y claro ya se imaginaran todo esto tendra sus Wizards y diseñadores incluidos, al momento como esta en beta funcionan bastante bien los wizards pero aun te toca cambiar en XML ciertas cosas...

Muy bien esto ayuda mucho, pero aun hay mas, han escuchado de la iniciativa de los Software Factories?? (http://msdn2.microsoft.com/en-us/teamsystem/aa718951.aspx) Estos son un conjunto de practicas probadas, de Microsoft Patterns and Practices, que se integran en tu IDE y a manera de Wizards "conversan" contigo para estructurar proyectos de diversas indoles, desde Sevicios Web o de Windows Communication Foundation, hasta SmartClients, ademas tienen "Recetas" para ejecutar algunas tareas muy comunes, nuevamente esto te ahorra mucho tiempo...

Hay otras mas como los DSL (Domain Specific Lenguages, http://compose.labri.fr/documentation/dsl/dsl_overview.php3) que pretender mejorar la definicion de las reglas de negocio, etc, etc, etc....

Claro tambien hay herramientas que cubren otros aspectos como Team System el asunto de colaboracion y metodologia de desarrollo, Project Portfolio Server (http://office.microsoft.com/en-us/portfolioserver/FX101674151033.aspx) el desarrollo de los proyectos, etc, etc, etc...

Para verlo mejor si les recomiendo que lean y experimenten con estos productos, tanto los de dearrollo como los de administracion, asi uno nota algo muy interesante: nada de esto esta desconectado entre si!! Eso es de verdad genial por que la iniciativa tiene metas claras y todas jalan para un mismo lado lo que permite que Microsoft avance rapido en el tema...

Como ven no se ha quedado muy atras Microsoft, en un fututo no muy lejano me atrevo a decir que no tendremos Visual Studio, tendremos algo asi como Visual Software Factory o algo por el estilo, asi es que posiblemente todos estemos un poco mas dedicados a resolver problemas a un nivel mas de procesos, antes de que lidiar con el lenguaje o las conexiones a la base de datos...

Hay empresas como Rational que tienen tambien suites muy aproximadas a lo que menciono aqui, claro esto es bastante caro por lo pronto y en consecuencia prohibitivo para muchos desarrolladores que no tienen la suerte de estar en una empresa que pueda utilizar estas herramientas, y tendran que esperar un poco a que la comunidad OpenSource se ponga de acuerdo con respecto al tema...

Por lo pronto yo espero ancioso la salida de LinQ y ADO Entity Framework, que dicen ustedes???