ASP.NET, IIS 7.0, y el error RSClientController is undefined
Hay veces en las que aparecen errores de esos que te ponen los pelos como escarpias, más que nada porque son errores incontrolados e incomprensibles.
De los que pasan solamente en entornos de prueba, pre-produción y producción, pero no dentro del entorno de desarrollo.
Uno de esos errores lo he sufrido recientemente, y por eso, me he decidido en escribir esta entrada, para que si alguien se encuentra con la misma situación, sepa resolver este problema en un par de minutos.
Por cubrir un poco los antecedentes de partida, estoy trabajando con una aplicación de ASP.NET que entre otras cosas, tira de un servidor de informes para mostrar el correspondiente informe con el control ReportViewer.
El servidor de informes funciona perfectamente y la url nos devuelve la consulta de acuerdo al informe.
Hasta aquí, nada anómalo o extraño. Lo normal y habitual.
El ambiente de desarrollo, Visual Studio 2008 SP1 con Windows XP SP3 y SQL Server 2005 SP2 en remoto.
Todo funcionando perfectamente sin ningún contratiempo.
En el ambiente de desarrollo, todo funciona a las mil maravillas, depuración, ejecución, pruebas, etc.
Ejecutamos la aplicación Web para repasar la funcionalidad y el informe se visualiza perfectamente.
Seguimos adelante… y es que ahora bien, lo primero que hacemos es implantar la solución en el servidor de aplicaciones que tenemos para hacer las pruebas de funcionalidad y ejecutamos nuestra aplicación.
Todo parece ir bien (búsquedas, inserciones y modificaciones de datos, eliminación de datos,…) hasta que llegamos a los fatídicos informes.
El navegador Web nos muestra la cabecera del control de informes con las imágenes sin cargar y una lista de errores dignos de ser recordados no por su claridad, sino por la extensión de los mismos.
Tropecientos errores script que asustan.
De todos ellos, me quedo con uno que puede resultarnos clarificador más que nada.
Un error de tipo «Error de JScript con RSClientController«.
Concretamente, el error apunta a «Microsoft JScript runtime error: RSClientController is undefined«.
Bien… uno ante esto y en ese instante piensa… a ver… que no cunda el pánico,… que se me ha pasado por alto…
Mmmmm… repaso todo una vez más, y finalmente se me ocurre pensar que a lo mejor es que el control de informes no se ha instalado adecuadamente, así que me voy a la Web de Microsoft y descargo e instalo nuevamente el control Microsoft Report Viewer 2008 SP1 Redistributable.
En la instalación selecciono reparar los componetnes por si acaso la instalación no ha ido correctamente y nunca mostró ningún mensaje de error.
Ejecuto nuevamente los informes y nada… lo mismo…
Ante esto… uno piensa que está haciendo algo mal, pero el problema es que no sabe que es lo que ocurre.
A mí este tipo de problemas los defino como el bug odd, ya que en sí, tiene pinta de bug, pero no es un bug, tiene pinta de error, pero tampoco es en sí un error, y lo peor, es que en el entorno de desarrollo, todo ha ido correctamente, mientras que en el servidor de pruebas, no ha ido bien.
(Qué importantes son las fases de pruebas, el servidor de pruebas, el servidor de pre-producción y el servidor de producción,… aunque muchas empresas piensen que no…).
Pero como digo, no, el repaso de todo nos indica que todo está bien, que todo es correcto, pero sin embargo… tenemos un bug odd por ahí en medio.
Partamos entonces del entorno que hemos elegido para implementar nuestra solución.
Veamos… servidor Windows Server 2008 de 32 bits con SP2 instalado… IIS 7.0 al canto… y todo en orden. .NET Framework, componentes, etc… todo instalado correctamente.
De verdad que uno en estas situaciones es fruto del pánico, pero aún y así, hay que ser positivos y pensar en que hay solución.
Y sí, hay solución y explicación «lógica» para entender porqué nos encontramos en esta situación extraña.
La solución la he encontrado en Internet (como siempre) y la pongo aquí por si a alguien le ha pasado esto o por si le pasa alguna vez.
El error tiene que ver con el uso de ReportViewer en IIS 7.0.
Una posible solución es utilizar el pool de aplicaciones clásico de .NET en lugar de usar el de IIS 7.0, pero sinceramente no es una solución que en mi caso me agrade mucho, ya que necesito y quiero usar IIS 7.0.
No he probado esta solución, pero la mayoría de la gente se ha decantado por ella y les ha funcionado.
Sin embargo, ya digo que no me parece la más sensata, pese a que dependiendo de las exigencias que tengamos pueda resultarnos más que útil.
Sin embargo, este error suele ocurrir cuando la extensión del fichero dentro de la solicitud de la URL hace referencia a un tipo MIME que no está configurado en el servidor.
Por lo tanto, aunque funcione el «truco» de poner la aplicación en el pool de aplicaciones clásico de .NET, la solución más «limpia» sería la de añadir el tipo MIME para la extensión solicitada dentro de un manejador o handler.
De hecho, el error que nos trae locos tiene su relación directa con Reserved.ReportViewerWebControl.axd.
Así que, vamos a hacer justamente esto último, agregar el manejador o handler en IIS 7.0 para que utilice el control ReportViewer sin problemas.
Para hacer esto, nos vamos a ir a las herramientas administrativas del servidor y en concreto, a la gestión de IIS 7.0.
Dentro del directorio de la aplicación virtual en IIS 7, realizaremos los siguientes pasos:
– Haremos doble clic sobre la sección IIS, y dentro de esta sección, en la opción Handler Mappings.
– Se abrirá la ventana de Handler Mappings.
– Dentro de la ventana de Handler Mappings, pulsaremos sobre la opción Add Managed Handler.
– En la ventana de Add Managed Handler, escribiremos los siguientes parámetros:
* Request path: Reserved.ReportViewerWebControl.axd
* Type: Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
* Name: Reserved.ReportViewerWebControl.axd
– Pulsaremos el botón OK.
Si accedemos a los informes, nuestra aplicación dejará de mostrar el mensaje de error y todo funcionará correctamente.
Espero que esto le ayude a más de uno.
Saludos.
Referencias
Microsoft Report Viewer 2008 SP1 Redistributable
Entrada sobre usar el pool de aplicaciones clásico de .NET en lugar de usar el de IIS 7.0
12 Responsesso far
Les agradezco infinitamente su ayuda para resolver el problema, personas como Usted hacen la vida más amable.
Mil y mil gracias.
GRACIAS por compartir la solucion de este error me he ahorrado mucho tiempo, DIOS te bendiga
Como han dicho anteriormente, Que Dios te bendiga!
Pues mira que hice todos y cada uno de los pasos que describes, pero de igual forma me genera un error del tipo «Error de servidor en la aplicación ‘/’.» no se que más hacerle.
Así da gusto!
Bien explicado y persiguiendo la solución óptima.
Teníamos el mismo problema y ya está solucionado.
Mil gracias.
Excelente, estuvo muy divertida la forma de resolverlo, Gracias de verdad
Guau, era lo que estaba buscando.
Muy buen tip y me quitaste un peso de encima.
Saludos
Alan
Verificar que el aplication pool este en modo integrated
Muchas gracias!!!!
Muy bien explicado y lo más importante el problema queda solucionado.
Muchas gracias, Funciona perfecto.
Muchas gracias, funciona a la perfección.
Me ocurrió lo mismo al migrar la aplicación a pruebas, ahora está solucionado.
Excelente! muchisimas gracias