Especificar las conexiones y las credenciales del control de servidor web ReportViewer

Para especificar una conexión del control ReportViewer con el servidor de informes, es aconsejable conocer las condiciones bajo las que se hacen las conexiones.

  • Cuando en un primer momento se carga la página web que contiene el control ReportViewer, éste se conecta con el servidor de informes para establecer la sesión de informe, obtener o establecer las propiedades de los parámetros del informe y recuperar la lista de extensiones de presentación disponibles en el servidor.

  • Si el control se está ejecutando con AsyncRendering=true, el HTML para el informe lo recupera de forma asincrónica un objeto IFrame una vez presentada la página.

  • Si el informe hace referencia a una imagen externa, el control ReportViewer recupera las imágenes mediante solicitudes independientes utilizando el controlador HTTP de ReportViewer, donde cada una de las solicitudes se efectúa en su propia conexión.

  • Una vez presentado el informe, se pueden producir conexiones adicionales si se exporta un informe presentado a un formato distinto.Desde el explorador se envía una solicitud de exportación al servidor de informes utilizando una conexión independiente.

El éxito de todas estas operaciones depende de que el control ReportViewer tenga una información de conexión válida con el servidor de informes.La forma de especificar la información de conexión variará dependiendo de factores como: si se está utilizando la autenticación de formularios, la autenticación de Windows, las credenciales del usuario actual o una sesión ASP.NET.

Cómo especificar las conexiones

Para conectarse con el servidor, puede establecer propiedades en el objeto ServerReport o implementar interfaces que establezcan la conexión y, a continuación, especificar la implementación en el archivo web.config.El control ReportViewer siempre lee primero el archivo web.config y utiliza los valores de conexión si los hay.

Si se habilita el estado de sesión, podrá elegir si desea establecer propiedades en el objeto ServerReport o especificar la información de conexión en el archivo Web.config.Si especifica la información de conexión en web.config, no establezca propiedades en el objeto ServerReport.

Si se deshabilita el estado de sesión, deberá implementar IReportServerConnection o IReportServerConnection2 y especificar la implementación en el archivo web.config.

[!NOTA]

La cuenta de usuario en la que se realiza la conexión debe tener una asignación de roles válida en el servidor de informes.Para crear un conjunto completo de permisos se utilizan asignaciones de roles tanto en el nivel de sistema como en el nivel de elemento.Si no está familiarizado con las asignaciones de roles del servidor de informes, utilice un tutorial para conocer los aspectos básicos de la asignación de roles.Para obtener más información, vea Tutorial: Setting Permissions in Reporting Services en MSDN.

Establecer propiedades en el objeto ServerReport

Puede establecer las propiedades de la dirección URL y del tiempo de espera del servidor de informes en el objeto ServerReport al arrastrar el control a un formulario web en tiempo de diseño.

De forma predeterminada, el control de servidor web ReportViewer se conecta con el servidor de informes como el usuario del subproceso ASP.NET.

Para conectarse como un usuario distinto (por ejemplo, si desea que todos los usuarios se conecten con un servidor de informes bajo una única cuenta de usuario), implemente IReportServerCredentials en un objeto serializable y pase una instancia de dicho objeto a ReportViewer.ServerReport.ReportServerCredentials.Puesto que el control ReportViewer puede conectarse al servidor de informes después de que la página ASP.NET haya terminado el procesamiento, el objeto debe ser serializable para su almacenamiento si la sesión de ASP.NET se almacena fuera del proceso (por ejemplo, en una base de datos de SQL Server).

Tenga en cuenta que el establecimiento directo de la propiedad ReportViewer.ServerReport.ReportServerCredentials trae consigo dos desventajas:

  • La sesión ASP.NET debe estar habilitada.

  • La sesión ASP.NET puede llegar a ser demasiado grande debido a que el control ReportViewer sitúa una instancia del objeto en la sesión para cada usuario que esté visualizando la página.

Para evitar las desventajas mencionadas anteriormente, especifique una implementación de IReportServerConnection2 en el archivo web.config.

Para obtener recomendaciones sobre cómo especificar credenciales si el estado de la sesión está deshabilitado, vea Instrucciones para almacenar credenciales si la sesión ASP.NET está deshabilitada en este mismo tema.

Especificar una conexión con el servidor de informes en web.config

Al implementar IReportServerConnection o IReportServerConnection2, debe especificar la implementación en el archivo web.config de la aplicación.Este archivo proporciona el tipo de objeto que contiene la información de conexión y de credenciales.

[!NOTA]

Debe especificar una implementación de IReportServerConnection2 o de IReportServerConnection, y no IReportServerCredentials en el archivo Web.config.IReportServerConnection2 se deriva de IReportServerCredentials y agrega propiedades adicionales para especificar una dirección URL del servidor de informes, el valor de tiempo de espera y las cookies o los encabezados HTTP personalizados que desee usar.

Aunque se requiere IReportServerConnection2 si la sesión ASP.NET está deshabilitada, puede utilizarlo con una sesión ASP.NET habilitada si desea evitar el almacenamiento de objetos en la sesión.Para obtener más información y un ejemplo de código, vea el tema de referencia de programación para IReportServerConnection2.Para obtener más información sobre cómo agregar claves en web.config, vea Configuración de web.config para ReportViewer.

La tabla siguiente resume las interfaces que proporcionan credenciales e información de conexión.

Interfaz

Descripción

IReportServerCredentials

Puede utilizar esta interfaz para especificar las credenciales que utiliza el objeto ServerReport para conectarse con el servidor de informes si no desea conectarse como el usuario actual.

De forma predeterminada, el control ReportViewer se conecta con el servidor de informes como el usuario del subproceso ASP.NET.

Puede especificar un usuario diferente estableciendo ReportViewer.ServerReport.ReportServerCredentials en una instancia de su propia implementación de IReportServerCredentials.

IReportServerConnection

Esta interfaz se hereda de IReportServerCredentials y proporciona miembros adicionales para especificar las propiedades de dirección URL y de tiempo de espera del servidor de informes.

IReportServerConnection2

Esta interfaz se hereda de IReportServerConnection y proporciona miembros adicionales para especificar cookies o encabezados personalizados, lo que resulta muy útil si está usando un producto de inicio de sesión único con el servidor de informes.

Instrucciones para almacenar credenciales si la sesión ASP.NET está deshabilitada

Cuando implemente IReportServerConnection2, no almacene las credenciales del usuario en la clase.Si almacena las credenciales en un objeto serializable, el nombre del usuario y la contraseña se serializarán en la sesión ASP.NET y se almacenarán en una base de datos de SQL Server o en otro servidor de estado.Aunque la serialización de las credenciales no es necesariamente un riesgo para la seguridad, incrementa la vulnerabilidad al almacenar las credenciales como datos de la sesión.

Los enfoques siguientes son ejemplos de cómo evitar el almacenamiento de las credenciales junto con otros datos de la sesión:

  • Lea las credenciales almacenadas desde un archivo de configuración u otro almacén de configuración.Para obtener más información y un ejemplo de código, vea el tema de referencia de programación para IReportServerCredentials.

  • Lea una cookie HTTP desde la solicitud de ASP.NET para proporcionar credenciales que variarán dependiendo del cliente.

[!NOTA]

Aunque tiene flexibilidad a la hora de elegir cómo almacenar las credenciales fuera de la clase, debe asegurarse de que se devuelven las mismas credenciales para las solicitudes posteriores en la misma sesión de informe.

Vea también

Referencia

IReportServerCredentials

IReportServerConnection2

Conceptos

Configuración de web.config para ReportViewer

Configurar ReportViewer para presentación asincrónica

Consideraciones de implementación para informes de servidor

Configurar ReportViewer para el procesamiento remoto

Agregar y configurar los controles ReportViewer