17

Ho un modulo Web contenente un controllo ReportViewer, un elemento DIV in modo che possa vedere che la pagina effettivamente esegue il rendering. Vedo che la mia pagina viene caricata correttamente, vedo che il servizio di report è accessibile in Fiddler, ma non viene mai visualizzato nulla.Controllo visualizzatore report (Web) Mostra report vuoto

Allo stato attuale, sto utilizzando un rapporto con testo statico, senza query su di esso, al fine di garantire che isolare il problema.

mia pagina è il seguente:

<%@ 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> 

Il codice per visualizzare il report è:

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(); 
} 

mio file web.config è configurato con i gestori HTTP come richiesto:

<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> 

E:

<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> 

Il server esegue Windows 2008 e SQL Server 2008 R2.

Sto usando la versione di SQL Server 2012 dello spettatore, come siamo nel processo di aggiornamento nostri ambienti al 2012.

ho più volte verificato che la relazione è accessibile dal ReportManager, senza problemi di sorta .

Ho tentato di accedere a questo in IE9, dopo aver visto vari problemi dichiarati con altri browser.

Attualmente sono (solo per il test) passare le credenziali come credenziali del server di report. Sono un amministratore di Reporting Services e un membro del gruppo di amministratori di server sul server.

Ho controllato sia il registro eventi che il registro ReportServerService e non ho trovato nulla di sbagliato.

UPDATE: sembra quando cambiare l'AsyncRendering false, e far sì che io non cercare di "SetParameters" con un insieme vuoto, questo viene in gran parte chiarito:

this.ReportViewer1.AsyncRendering = false; 

Che cosa sono io manca nella configurazione/codice qui?

+0

Solo un assurdo check/domanda: hai controllato questo con un nuovo, semplice (ad esempio solo una casella di testo con testo hardcoded) rapporto pure? Inoltre, puoi aggiungere quale versione dei controlli di ReportViewer stai usando? – Jeroen

+0

Sì, al momento, sto usando una semplice pagina con testo statico su di esso, solo per assicurarmi di poter isolare il problema. – reallyJim

+1

Hai ancora un problema o il tuo aggiornamento significa che l'hai risolto? –

risposta

1

Su MSDN c'è this blog entry che illustra come funziona il rendering asincrono.

Inoltre, si afferma che (come è stato detto nei commenti) il rendering sincrono incorpora il contenuto nella pagina, mentre il rendering asincrono rende il contenuto in una cornice. La dimensione del frame è "difficile ... da calcolare" e la proprietà SizeToReportContent viene ignorata.

Poiché il report non verrà visualizzato a meno che non sia reso in modo sincrono, il problema deve essere nell'uso dei frame.

In the article menzionato nei commenti, il rendering in modo asincrono del report comprime l'altezza di controllo a zero pixel se viene utilizzata un'altezza relativa. Questo potrebbe spiegare perché non viene visualizzato nulla. Potresti provare a specificare un'altezza per il controllo. Ci sono anche altri suggerimenti in quell'articolo.

Supponendo che il problema sia nella versione SSRS di SQL Server 2008 R2, che credo provenga da VS 2008. SQL Server 2012 SSRS Penso che disegni su VS 2010, che non dovrebbe avere questi problemi, quindi quando si terminare l'aggiornamento, questo problema potrebbe andare via.

1

Ho avuto esattamente lo stesso sintomo: un report è stato visualizzato con una pagina completamente vuota. Per me è stato il caso della produzione, ma ha funzionato nell'ambiente di sviluppo.

Il rapporto aveva due parametri e nel RDL entrambi senza avere i valori predefiniti specificati. Quando ho chiamato il report nel codice aspx, ho accidentalmente passato solo un parametro. Il secondo parametro aveva un valore predefinito impostato sul server di report del computer di sviluppo ma non in produzione. (Sì, il server di report consente di specificare i valori predefiniti dei parametri indipendentemente dalle impostazioni predefinite nel file RDL). Di conseguenza, il report è stato reso in sviluppo ma non in produzione.

Ho trovato questo osservando la risposta XML con Fiddler. Conteneva un elemento che mi diceva che il valore di un parametro non era valido. Sfortunatamente il visualizzatore di report non mostra alcun messaggio di errore sul parametro mancante e mostra solo una pagina vuota, il che rende difficile trovare la radice del problema.

+0

Come visualizzare il codice XML della risposta? Il modo in cui è stato impostato il mio progetto, non c'è spazio per inserire un punto di interruzione nel codice sorgente per vedere la risposta. C'è un modo per regolare la registrazione, o cosa? –

+0

Grazie. Questo ha risolto il mio problema. Ho avuto un parametro non utilizzato che non ha un valore predefinito. Una volta cancellato, il mio rapporto ha mostrato correttamente. – user3340627

+0

Utilizzare invece Fiddler, è possibile inserire un punto di interruzione subito dopo aver assegnato i parametri del report (qualcosa come "ReportViewer1.LocalReport.SetParameters (lst)'), quindi, in Finestra immediata, assegnare i parametri a qualsiasi variabile arbitraria come "var r = reportViewer1. LocalReport.GetParameters() ', quindi esplora il contenuto di ciascun parametro in" r "con QuickWatch. È possibile identificare facilmente il parametro del valore problematico. –

0

Anche il mio rapporto era vuoto. Ho giocato con le proprietà e alla fine è arrivato.

La modifica della proprietà ProcessingMode sul controllo ReportViewer nella pagina aspx ha lavorato per me:

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

Questo è quello che ho:

<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

La mia soluzione a questo problema era relativa al tentativo di impostare l'altezza del visualizzatore del report al 100%. Ciò ha comportato la mancata visualizzazione di report. Cambiare l'altezza in un valore px (ad es. 900px) ha fatto funzionare il reportviewer.

0

Ci sono diversi problemi quando si ottiene rapporti vuote:

  1. IIS Pipeline; IIS 6 vs IIS7 e soprattutto Assicurarsi di avere HttpHandler correttamente Registerd

impostazioni IIS7

<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

Se perdere la corretta registrazione si può provare a cambiare pool di applicazioni IIS in Modalità Classic Managed Pipeline Mode

Se la registrazione è Ok si dovrebbe essere in grado di utilizzare la modalità Integrated

  1. un altro gestore interferisce con ReportViewer

Nel mio caso è stato Glimpse.Glimpse è uno strumento molto potente e funziona perfettamente con ReporViewer sul computer degli sviluppatori, ma ha problemi con il server del cliente. La soluzione è stata facile, jst rimuovi tutte le impostazioni di glimse da web.config