2013-10-22 13 views
6

Ho un front-end ASP.NET MVC che elenca i report conservati su SQL Azure Reporting Services. L'utente sceglie un report da eseguire e quel report viene caricato in un'altra finestra del browser. Il problema è che quando il report viene eseguito su alcuni browser (IE10 su Win7, per esempio) tutto ciò che viene visualizzato è il seguente messaggio:SQL Server Reporting Services: errore durante l'esecuzione di un report (problema di distribuzione del sito Web di Azure?)

Method not found: 'Boolean Microsoft.ReportingServices.Common.DateTimeUtil.TryParseDateTime(System.String, System.IFormatProvider, System.DateTimeOffset ByRef, Boolean ByRef)'. 

Utilizzando Chrome su Win7 il rapporto 'mezze opere' - ho la barra superiore con una casella datetime e un altro elenco a discesa e quando faccio clic sul pulsante Esegui, ottengo la barra di navigazione del report ma non il corpo del report. Non ho ricevuto il messaggio sopra.

Il sito Web viene pubblicato su un sito Web di Azure. Ho fatto riferimento le seguenti DLL e impostare CopyLocal true:

Microsoft.ReportViewer.Common 
Microsoft.ReportViewer.WebForms 
Microsoft.ReportViewer.DataVisualization 
Microsoft.ReportViewer.ProcessingObjectModel 

La relazione pubblicata funziona bene sulla mia macchina dev, dove ho il ReportViewer 2012 ridistribuibile installata (versione 11 del controllo).

Quindi, domande:

Quali altri ridistribuibile DLL che mi manca dal mio sito pubblicato? Che cos'è Microsoft.ReportingServices.Common? Il "ByRef" sembra implicare che questo è VB - si tratta di un componente script client? C'è qualcosa che devo installare sui computer client per visualizzare i report?

risposta

0

Questo ha risolto il problema per me, anche se devo ammettere che non so perché ...

basta aggiungere il SizeToReportContent = attributo "vero" al tag nella pagina aspx, ad esempio:

<rsweb:ReportViewer ID="ReportViewer1" runat="server" SizeToReportContent="true" Font-Names="Verdana" Font-Size="8pt" Height="100%" ProcessingMode="Remote" WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt" Width="100%"> 
    <ServerReport /> 
</rsweb:ReportViewer> 

Magicamente, tutto sembra funzionare.

7

Lo stesso problema si è verificato quando un metodo non ha rilevato un errore su IE e Firefox dopo l'installazione, mentre nell'esecuzione locale tutto ha funzionato correttamente.

Method not found: 'Boolean Microsoft.ReportingServices.Common.DateTimeUtil.TryParseDateTime(System.String, System.IFormatProvider, System.DateTimeOffset ByRef, Boolean ByRef)'. 

quello che stava accadendo è che nel nostro file bin locale c'è una nuova versione delle DLL Microsoft.ReportViewer rispetto al server di distribuzione. Quando il server di distribuzione ha aggiunto la DLL, ha selezionato una versione diversa dalla GAC ​​piuttosto che essere utilizzata localmente. La versione 11.0.2 invece di 11.0.33 causa la corrispondenza mancata. Dopo aver aggiornato la DLL alla stessa versione sul computer locale ha risolto il problema. c'è la possibilità che dopo aver ridistribuito la dll corretta è stato utilizzato, risolvendo il problema.

Per verificare la versione delle DLL nella cartella bin e nella cartella di distribuzione, è sufficiente utilizzare uno script di power shell semplice dopo aver navigato nella cartella contenente le DLL.

dir *.dll | %{ $_.VersionInfo } 
+0

+1 per la PowerShell – BozoJoe

+0

+1 per l'identificazione è il differenze sottili * * nella parte di "RELEASE" della i numeri di versione che possono causare il problema. Avevo due diverse versioni di versione di "11.x" e ora sono tutte "11.0.3452.0", la distribuzione dell'ambiente di test funziona ancora. Ho estratto le quattro DLL dal GAC usando il suggerimento di @ AaronSieb e le ho aggiunte nel progetto web e ho forzato il riferimento a "COPY LOCAL" – Dib

0

Abbiamo avuto lo stesso problema. Voglio aggiungere che è necessario copiare tutte e 4 le DLL sul server:

Microsoft.ReportViewer.Common.dll 
Microsoft.ReportViewer.WebForms.dll 
Microsoft.ReportViewer.DataVisualization.dll 
Microsoft.ReportViewer.ProcessingObjectModel.dll 
+0

E assicurandomi che fossero ESATTAMENTE la stessa versione ... "Major.Minor.Release.Build " Ho una differenza nel" Rilascio "in due DLL" Microsoft.ReportViewer.DataVisualization "e" Microsoft.ReportViewer.ProcessingObjectModel "e ho riscontrato questo problema. – Dib

4

crackhaus's answer mi ha indirizzato nella giusta direzione.

Ecco la completa sequenza di passi che ho seguito:

  1. Utilizzato il seguente comando PowerShell per verificare i numeri di versione dei assembly nella cartella bin:

    dir *.dll | %{ $_.VersionInfo } 
    
  2. scoperto che uno degli assembly ReportViewer aveva un numero di versione diverso dagli altri due.

  3. Ho controllato il numero di versione per quella DLL nel mio GAC locale e ho trovato che la DLL di GAC corrispondeva alle versioni con le altre due DLL nella mia cartella bin.

    ho usato Option 2 described here per accedere al GAC (in pratica: PowerShell per c: \ WINDOWS \ assembly \ GAC_MSIL \ < Nome assembly > \ < Assembly versione principale >), e il comando qui sopra per verificare i numeri di versione.

  4. Utilizzando il comando PowerShell (copy-item), ho estratto la DLL e l'ho inserita nella cartella BIN del sito.

0

ho deciso di installare Tipi CLR Microsoft System per Microsoft SQL Server 2012 eMicrosoft Report Viewer 2012 Runtime al server secondo il MSDN article. Successivamente ho rimosso gli assembly errati dalla directory bin bin.

1

Vai a Nuget ed installare, da lì ottenere Micorsoft.ReportViewer runtime 2012 e ReportViewer.Common 10,0

Problemi correlati