deployment de aplicaciones Web ASP.NET… pero en mi PC funcionaba

“pero en mi pc funcionaba”…. es lo único que te queda decir si estas en una presentación con tus jefes y nos probado previamente que el sitio este funcionando correctamente en el Servidor Web.

Vayamos al tema, tengo mi aplicación web y mi jefe me pidió una pequeña presentación del avance. Como sabemos con Visual Studio 2005, tenemos la herramienta Publish Web Site, Luis tiene una entrada también, con la cual podemos hacer esta tarea fácilmente. Y como en tu PC todo funciona bien, dices: -deme 5 minutos, lo subo al servidor Web y lo vemos desde su oficina.

Contento y tranquilo, compilas, todo bien, publicas al Servidor Web desde Visual Studio, y te salió el mensajito “Publish succ…”. Vas a la oficina y tienes la siguiente pantalla:

Imagen a: CustomErrors, en mode=On.

Y te dicen: -Y qué paso?. Tu respondes: -Pero en mi PC funcionaba. Pides 10 minutos más, 5 te la pasas buscando en Google, por ahí lees una sugerencia de cambiar algo en el web.config, de mode On, a mode Off. Lo haces y vas nuevamente a la oficina del Jefe, -Puede probar de nuevo?:

Imagen b: CustomErrors, en mode=Off.

Ahora cambio el error, y dependiendo del humor de tu jefe, lo que te diga puede variar :D. Y dejas la oficina repitiendo en tu mente, pero en mi PC funcionaba.

Vamos analizar la situación. La Imagen a, es un error clásico y que siempre se ve por lo foros, y se tiende a confundir el problema, ya que algunas veces se plantea como solución poner a CustomErrors en mode=Off, y en sí, el problema no depende del elemento CustomErrors del archivo web.config. El problema es de nuestra aplicación Web, pero al ver el error de la Imagen a, podemos tener el alivio de que nuestra servidor Web tiene la configuración básica para funcionar, ya que si tuviéramos un Server Application Unavailble en el navegador, tendrías un problema con el IIS, y específicamente con el Application Pool. Otro problema que podemos tener, y que suceda antes de que el request llegue a la aplicación web, es que nuestra Aplicación Web tenga una asignada una versión distinta de .NET Framework a la que usa. Como decíamos, si tienes el error de la Imagen a, alégrense por que el error es su Aplicación Web, y sobretodo porque hoy vamos a aprender algo nuevo :).

El error puede ser por muchas cosas, no hay conexión el servidor de base datos, hay un objeto que no se instanció, el usuario que estamos usando no tiene permisos en la base de datos, no tenemos permisos para escribir en el disco duro, o por ahí alguien dejo un bugsito :).

El elmento CustomErrors del archivo web.config, nos ayuda a mejorar el manejo de errores en nuestra Aplicación Web ASP.NET. Por eso al poner CustomErrors en modo On, lo que estamos haciendo es ocultar la información del error al usuario final. Si lo ponemos en modo Off, lo que haremos es mostrar las errores tal y como son, y dependiendo del error, puedes decirle al usuario: error for login “tuLogin” al conectarse al servidor “tuServidor”. Por cuestiones de seguridad y por apariencia del sitio Web, se tiende a no mostrar directamente el error al usuario final.

CustomErrors, podemos configurarlo desde el archivo web.config, o través del Snap-in de ASP.NET para el IIS:

Imagen c: Habilitar los errores personalizados sólo usuarios remotos, y los vamos a direccionar a la página Error.aspx.

 Ahora cada vez que haya un error, y un usuario acceda al Sitio Web, verá esta página:

Imagen d: Sitio Web con un mensaje de error personalizado.

Aunque se puede mejorar el mensaje de error, lo importante es que podemos hacerlo. Este redireccionamiento se puede personalizar aún más, pero eso lo veremos en otra entrada. Para poder redireccionar a una página de error puede ser en los modos On o Remote Only, en modo On, todos los pedidos serán redireccionados a la página de error, pero en modo “Remote Only”, todos a excepción de los pedidos que se realicen desde del Servidor Web. Es decir que en modo Remote Only, vamos asegurarnos que todos los usuarios que visitan la página web verán nuestro error personalizado, pero si vemos la Aplicación Web desde el Servidor Web, y hay algún errorcillo, vamos a ver la descripción del error como en la Imagen b.

El error puede ser tan sencillo como iniciar el servicio de SQL en el servidor de Base de datos, habilitar las conexión remotas, o sólo cambiar las cadena de conexión, y el sitio Web estará funcionando en el Servidor Web, al igual que en tu PC :D:

Imagen e: Ahora ya no funciona sólo en tu PC, si no también en el Servidor Web.

P.D.: Una vez que encuentren el error, recuerden que la peor opción es ponernos a depurar la aplicación Web usando Visual Studio, existen herramientas como SQL Profiler que nos permiten dar un diagnostico sin depurar. Por ejemplo puede ser sólo que nos olvidamos de agregar un campo a la base de datos de pruebas, que si tiene la base de datos de desarrollo, y por eso tu decías: pero en mi PC funcionaba… y continuará xD!

Saludos,

Post cruzado

7 comentarios sobre “deployment de aplicaciones Web ASP.NET… pero en mi PC funcionaba”

  1. este errorcito, es tipico cuando hacemos el cambio de nuestra maquina al server de produccion, y basicamente se produce cuando al momento de hacer el cambio, no nos fijamos en la cadena de conexion de la db, el usuario de la db de asp.net y otras cosillas por hay.

    por eso es mejor tener habilitado la pagina de error el web.config, por lo menos hace presentable el error.

  2. jajaja pero no os preocupeis, cada vez más los implantes de pelo estan evolucionando mucho xD!

    Dejando la broma, a veces vale la pena perder un poco de pelo, para ganar experiencia xD, tanto así que da ganas de quedarse calvo 😀

    Saludos,

  3. Ya le cambié el modo del tag a “Off” en el web.config pero no aparece el error real. Por el contrario me sigue apareciendo el mismo error. Ya he leído 100 mil blogs pero nadie dice los pasos específicos, en orden y bien explicados para arreglar el problema.

  4. Otro problema que me ocurrio a mi son las referencias que estan en el web.config
    cuando uno desarrolla en el pc local puede incluir alguna referencia al proyecto y si ese
    assembly no existe en el server se cae de inmediato la aplicacion, porque lo primero que hace IIS es leer el web.config

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *