asp.net - route - El control del visor de informes(web) muestra un informe en blanco
asp route tag helper (4)
Tengo un formulario web que contiene un control ReportViewer, un elemento DIV para que pueda ver que la página realmente rinde. Veo que mi página se carga correctamente, veo el acceso al servicio de informes en Fiddler, pero nunca aparece nada.
En este momento, 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 HttpHandlers según se requiera:
<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 utilizando la versión del visor de SQL Server 2012, ya que estamos en el proceso de actualizar nuestros entornos hasta 2012.
He verificado en repetidas ocasiones que el informe es accesible desde ReportManager, sin ningún tipo de problema.
He estado intentando acceder a esto en IE9, habiendo visto varios problemas 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 ReportServerService, y no he encontrado nada extraño.
ACTUALIZACIÓN: Parece que cuando cambie AsyncRendering a falso y me asegure de no intentar "Establecer parámetros" con una colección vacía, esto se aclarará principalmente:
this.ReportViewer1.AsyncRendering = false;
¿Qué me falta en la configuración / código aquí?
Mi informe también estaba en blanco. Jugué con las propiedades y finalmente apareció.
Cambiar la propiedad ProcessingMode en el control ReportViewer en la página aspx funcionó 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>
Mi solución a este problema estaba relacionada con tratar de 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.
Tenía exactamente el mismo síntoma: se presentó 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 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 mirando 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.
Esta entrada de blog en MSDN trata sobre cómo funciona la representación asincrónica.
Además, menciona que (como se dijo en los comentarios) la representación sincrónica incorpora 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 el artículo 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.
Supongo 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 podría desaparecer.