Migrando un sitio ASP .NET que funciona en IIS a Apache con MONO

|

Algunos se preguntaran? Y a este señor que le paso! Por que anda haicendo esos experimentos! Bueno, la verdad es que el mercado de mi país lo exige, tenemos un decreto del gobierno que indica que se debe propender a usar todo lo que sea Open Source sobre el software propietario en el sector público, y claro si no quieres morir pues tienes que adaptarte, entonces nosotros queremos seguir aprovechando la facilidad de desarrollo de las herramientas MS, y claro poder trabajar con infraestructura Open Source, por eso evaluando algunas alternativas la más viable la ofrece el proyecto Mono que es auspiciado por Novell, en definitiva es una implementación .NET para Linux/MacOs/Windows, algunas empresas como Linden (Second Live) han adoptado ya esta solución.

Me ha gustado además que a diferencia de muchos otros proyectos Open Source, este tiene un Road Map! Es decir si tienen un camino que intentan seguir, además Novell ha comenzado a dar soporte comercial si usas SUSE Linux en su versión Enterprise, claro esto tiene que se pagado, pero ya es algo mucho más serio que espera a que algún día se corrija un error que no te deja hacer algo o peor aún, adentrarse en un código que no tienes idea de como se hizo para intentar arreglarlo con todas sus posibles consecuencias.

Bueno después de la publicidad gratis, vamos un poco más a lo técnico, tengo un proyecto ASP .NET 2.0 que fue migrado desde ASP .NET 1.1, funcionando bien, y claro como todos necesitamos que esas cosas funcionen ya, simplemente comencé a investigar un poco del funcionamiento del famoso proyecto Mono, y encontré que hay una imagen en VMware de SUSE Linux (puedes encontrarla aqui), ya configurada para que uses tus proyectos .NET, de hecho es bastante fácil de usar, en las instrucciones dice que solo copies tu proyecto a un folder especifico, y voila! Puedes intentar abrirlo desde tu browser, y asi es funciona! Un momento salió un error, pero bueno ya corrió lo que quiere decir que si funciona, una parte, pero funciona, y que decía el error? Error: Failed to create shadow copy (CopyFile).
Y claro al más puro estilo de los servidores de aplicación o web open source, te da un stack que la verdad no te ayuda mucho, y de paso no cargaba y no cargaba y no cargaba y después de un tiempo de paso Apache empezaba a reusarse a funcionar por completo, y buscando si a alguien le había pasado lo mismo, pues encontré que sí, pero no había una luz de que sucedía, hablaban de un parche que no encontraba donde estaba ni nada, ya eran algunos días en los cuales cada vez se veía menos probable que este proyecto vaya bien por el camino Open Source, hasta ayer en la noche…

Yo estaba sospechando que por el error lanzado hacia falta algún assembly, y de hecho si era esa la razón del error, pero no era mi assembly, si no uno que por defecto referencia Visual Studio en sus proyectos, y de paso Mono aun no lo implementa, para mi buena suerte di a la primera, en el web.config quite la referencia al assembly System.Data.DataSetExtensions, busquen en su web.config esta línea específicamente:

<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

Si no están usando nada de ese assembly quítenlo y listo! Ahora si están usando algo de ese assembly (basicamente LinQ a DataSets) y necesitan hacerlo funcionar, la única solución es reemplazar esos métodos por métodos propios, y esperar y/o contribuir a que el proyecto Mono implemente esa parte de .NET, si no les funciona lo que les estoy sugiriendo, van a tener que seguir quitando referencias, de una en una a ver cuál es la que está molestando.
Se que se al parecer lo han reconocido como un Bug, y lo están arreglando, pero eso será hasta la versión 2.4.2, a veces uno no puede esperar tanto asi es que encuentra este tipo de soluciones.

Para mayor referencia el thread que leí es este:

http://www.nabble.com/Error%3A-Failed-to-create-shadow-copy-%28CopyFile%29.-td24091798ef1367.html

Ahí sugieren que puede ser la referencia al Entity Framework de MS, si tienen esa referencia y no la usan, entonces quítenla y a probar!

Bueno si tienen este tipo de problemas comenten por favor, así podemos intentar resolver estos problemas y de paso ayudar a madurar el proyecto Mono, es a mi forma de ver una muy buena alternativa para no perder los skills .NET y darle una opción a los clientes!

Ojala les sirva!