2012-10-11 135 views
17

Tengo un formulario web que contiene un control ReportViewer, un elemento DIV para que pueda ver que la página realmente se renderiza. Veo que mi página se carga correctamente, veo el acceso al servicio de informes en Fiddler, pero nunca aparece nada.Control del visor de informes (web) Muestra el informe en blanco

Actualmente, estoy usando un informe con texto estático, sin consultas, para asegurarme de que puedo aislar el problema.

Mi página es la siguiente:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReportViewer.aspx.cs" Inherits="PeopleNet.Web.Views.Reports.ReportViewer" %> 

<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" 
    Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %> 

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server"> 
      <Scripts> 
       <asp:ScriptReference Path="~/scripts/jquery-1.7.2.js" /> 
       <asp:ScriptReference Path="~/scripts/fixReportViewer.js" /> 
      </Scripts> 
     </asp:ScriptManager> 

     <div> 
      This is the report viewer page... 
     </div> 
     <rsweb:ReportViewer ID="ReportViewer1" runat="server"></rsweb:ReportViewer> 
    </form> 
</body> 
</html> 

El código para mostrar el informe es:

protected void Page_Load(object sender, EventArgs e) 
{ 
    this.ReportViewer1.ServerReport.ReportServerUrl = ConfigurationFacade.ReportServerUri; 
    this.ReportViewer1.ServerReport.ReportPath = { path to report name }; 
    this.ReportViewer1.ServerReport.ReportServerCredentials = new ReportServerCredentials(); // custom class implementing IReportServerCredentials as described in various places around the web, including SO 
    this.ReportViewer1.ServerReport.Refresh(); 
} 

Mi archivo web.config se configura con los HttpHandlers según sea necesario:

<system.web> 
    <!-- abbreviated... --> 
    <httpHandlers> 
     <add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" validate="false" /> 
    </httpHandlers> 
</system.web> 

Y:

<system.webServer> 
    <!-- abbreviated... --> 
    <handlers> 
     <add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" /> 
    </handlers> 
</system.webServer> 

El servidor ejecuta Windows 2008 y SQL Server 2008 R2.

estoy usando la versión de SQL Server 2012 del espectador, ya que estamos en el proceso de actualización de los entornos de 2012.

he comprobado en varias ocasiones que el informe es accesible desde el ReportManager, sin problemas de ningún tipo .

He estado intentando acceder a esto en IE9, después de haber visto varios problemas planteados con otros navegadores.

Actualmente estoy (solo para pruebas) pasando mis credenciales como las credenciales del servidor de informes. Soy un administrador de Reporting Services, así como un miembro del grupo de administradores del servidor en el servidor.

He comprobado tanto el registro de eventos como el registro de ReportServerService, y no he encontrado nada extraño.

ACTUALIZACIÓN: Parece que cuando cambie el AsyncRendering a falso, y asegurarse de que no tratan de "SetParameters" con una colección vacía, sobre todo esto se aclare:

this.ReportViewer1.AsyncRendering = false; 

¿Qué soy yo falta en la configuración/código aquí?

+0

Solo una pregunta/pregunta tonta: ¿ha comprobado esto con un informe nuevo y básico (por ejemplo, solo un cuadro de texto con texto codificado)? Además, ¿puede agregar qué versión de los controles ReportViewer está utilizando? – Jeroen

+0

Sí, en este momento estoy usando una página simple con texto estático, solo para asegurarme de que puedo aislar el problema. – reallyJim

+1

¿Todavía tiene un problema o su actualización significa que lo ha resuelto? –

Respuesta

1

Hay this blog entry en MSDN que explica cómo funciona la representación asincrónica.

Además, menciona que (como se dijo en los comentarios) la representación síncrona incrusta el contenido en la página, mientras que la representación asíncrona representa el contenido en un marco. El tamaño del marco es "difícil ... calcular" y la propiedad SizeToReportContent se ignora.

Dado que su informe no se mostrará a menos que se represente sincrónicamente, el problema debe ser el uso de marcos.

En the article mencionado en los comentarios, la representación asincrónica del informe colapsará la altura del control a cero píxeles si se usa una altura relativa. Esto podría explicar por qué no se muestra nada. Puede intentar especificar una altura para el control. Hay otras sugerencias en ese artículo también.

Suponiendo que su problema está en la versión SQL Server 2008 R2 SSRS, que creo que se basa en VS 2008. SQL Server 2012 SSRS Creo que se basa en VS 2010, que se supone que no tiene esos problemas, por lo que cuando termine su actualización, este problema puede desaparecer.

1

Tenía exactamente el mismo síntoma: se hizo un informe con una página completamente en blanco. Para mí, ese fue el caso en la producción, pero funcionó en el entorno de desarrollo.

El informe tenía dos parámetros y en la RDL ambos sin tener los valores predeterminados especificados. Cuando llamé al informe en el código aspx detrás, accidentalmente solo pasé un parámetro. El segundo parámetro tenía un valor predeterminado establecido en el servidor de informes de la máquina de desarrollo, pero no en producción. (Sí, el servidor de informes permite especificar valores predeterminados de parámetros independientemente de la configuración predeterminada en el archivo RDL.) Como resultado, el informe se procesa en desarrollo pero no en producción.

Encontré esto al mirar el XML de respuesta con Fiddler. Contenía un elemento que me decía que el valor de un parámetro no era válido. Lamentablemente, el Visor de informes no muestra ningún mensaje de error sobre el parámetro que falta y solo muestra una página en blanco, lo que hace que el origen del problema sea difícil de encontrar.

+0

¿Cómo veo el XML de respuesta? La forma en que se configura mi proyecto, no hay lugar para poner un punto de interrupción en el código fuente para ver la respuesta. ¿Hay alguna manera de ajustar la tala, o qué? –

+0

Gracias. Esto resolvió mi problema. Tenía un parámetro no utilizado que no tenía un valor predeterminado. Una vez que lo borré, mi informe se mostró correctamente. – user3340627

+0

En lugar de usar Fiddler, puede poner un punto de interrupción justo después de asignar los parámetros del informe (algo como 'ReportViewer1.LocalReport.SetParameters (lst)'), luego, en la ventana Inmediato asignar los parámetros a cualquier variable arbitraria como 'var r = reportViewer1. LocalReport.GetParameters() ', luego explore los contenidos de cada parámetro en" r "con un QuickWatch. Puede identificar fácilmente el parámetro de valor problemático. –

0

Mi informe también aparecía en blanco. Jugué con las propiedades y finalmente apareció.

cambio de la propiedad ProcessingMode en el control ReportViewer en la página aspx trabajó para mí:

<rsweb:ReportViewer ID="ReportViewer1" runat="server" 
    Width="100%" ProcessingMode="Remote"> 
</rsweb:ReportViewer> 

Esto es lo que tengo:

<rsweb:ReportViewer ID="ReportViewer1" runat="server" ZoomMode="PageWidth" 
    Font-Names="Verdana" Font-Size="8pt" Width="100%" ProcessingMode="Remote" 
    ShowParameterPrompts="False" ShowToolBar="True" ShowCredentialPrompts="False" 
    ShowFindControls="False" ShowZoomControl="False" CssClass="ReportViewer"> 
</rsweb:ReportViewer> 

web.config:

<configuration> 
    <connectionStrings> 
    <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/> 
    </connectionStrings> 
    <system.web> 

    <httpHandlers> 
     <add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false" /> 
    </httpHandlers> 

    <compilation debug="true" targetFramework="4.0"> 
     <assemblies> 
     <add assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/> 
     <add assembly="Microsoft.ReportViewer.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/> 
     <add assembly="Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/> 
     <add assembly="System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/> 
     </assemblies> 
    </compilation> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login.aspx" timeout="2880"/> 
    </authentication> 
    <membership> 
     <providers> 
... 
     </providers> 
    </roleManager> 
    </system.web> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <handlers> 
     <add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    </handlers> 
    </system.webServer> 
</configuration> 
3

Mi solución a este problema estaba relacionada con intentar establecer la altura del visor de informes al 100%. Esto no dio como resultado ningún informe. Cambiar la altura a un valor de px (es decir, 900px) hizo que el reportero trabajara.

0

Hay varios problemas al obtener reportes en blanco:

  1. IIS Pipeline; IIS 6 vs IIS7 y por encima de Asegúrate de que tienes HttpHandler correctamente Registerd

configuración de IIS 7

<system.webServer> 
    <handlers> 
     <add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" /> 
    </handlers> 

More details

Si se perdió el registro correcto se puede tratar de cambiar IIS grupo de aplicaciones en Classic modo Managed Pipeline Mode

Si su registro está bien que debería ser capaz de utilizar el modo Integrated

  1. Otra Handler interfiere con ReportViewer

En mi caso fue Glimpse.Glimpse es una herramienta muy poderosa y funciona bien junto con ReporViewer en la máquina del desarrollador, pero tiene problemas en el servidor del cliente implementado. La solución fue fácil, elimine todas las configuraciones de glimse de web.config

Cuestiones relacionadas