SSRS 2016: NullReferenceException и ReportServerException при загрузке отчета на сервер - PullRequest
0 голосов
/ 04 сентября 2018

Я использовал Microsoft ReportViewer в режиме Удаленный для просмотра отчетов, которые хранятся локально. Кажется, что код не может загрузить отчеты в SQL 2016 (при хорошей работе с SQL 2014) с NullReferenceException по команде ServerReport.LoadReportDefinition(...).

Есть ли в моем коде ошибка или ReportViewer ошибка? Какие-либо настройки пропущены?

Я знаю о Что такое исключение NullReferenceException и как его исправить? , но я получаю исключение из глубины кода Microsoft и ни один из объектов, к которым я могу получить доступ, не является нулевым .

Шаги для воспроизведения

  1. Создать новый проект winforms
  2. В Form1 добавить Reporting / ReportViever из панели инструментов (reportViewer1)
  3. Install-Package Microsoft.ReportingServices.ReportViewerControl.Winforms (установлена ​​версия 140.1000.523 октябрь 2017 г.)
  4. Вставьте (с изменением пути к отчету и имени сервера) следующий код в форму Form1:
    private void Form1_Load(object sender, EventArgs e)
        {
            reportViewer1.ProcessingMode = ProcessingMode.Remote;
            reportViewer1.ShowCredentialPrompts = true;
            reportViewer1.ServerReport.ReportServerUrl =new Uri("http://MyServer/ReportServer");
            using (var tr = System.IO.File.OpenText(@"c:\ ... \MyReport.rdl"))
            {
                reportViewer1.ServerReport.LoadReportDefinition(tr);
            }
            this.reportViewer1.RefreshReport();
        }

Когда MyServer является SQL Server 2014, отчет отображается в средстве просмотра, как и ожидалось. Когда сервером является SQL Server 2016 (или даже 2017), я получаю NullReferenceException и ReportServerException (один за другим после F5 ) в строке reportViewer1.ServerReport.LoadReportDefinition. Я считаю, что второе исключение является следствием первого.

Полное исключение:

Первый:

System.NullReferenceException was unhandled
HResult=-2147467261
Message=Object reference not set to an instance of an object.
Source=Microsoft.ReportViewer.WinForms
StackTrace:
 at Microsoft.Reporting.WinForms.SoapReportExecutionService.SoapExecutionInfoToParametersLayout(ParametersPaneLayout paramPaneLayout, ExecutionInfo3 soapExecInfo3, ReportParameterInfoCollection paramInfoCollection)
 at Microsoft.Reporting.WinForms.SoapReportExecutionService.FromSoapExecutionInfo(ExecutionInfo soapExecutionInfo)
 at Microsoft.Reporting.WinForms.SoapReportExecutionService.LoadReportDefinition(Byte[] definition)
 at Microsoft.Reporting.WinForms.ServerReport.LoadReportDefinition(TextReader report)
 at SSRSTestC.Form1.Form1_Load(Object sender, EventArgs e) in C:\MyDiskArea\LiveProgProjects\SSRSTestC\SSRSTestC\Form1.cs:line 24
 ...
InnerException: 
  null     

Второй

Microsoft.Reporting.WinForms.ReportServerException was unhandled
ErrorCode=rsInvalidReportDefinition
HResult=-2146233088
Message=The definition of this report is not valid or supported by this version of Reporting Services. The report definition may have been created with a later version of Reporting Services, or contain content that is not well-formed or not valid based on Reporting Services schemas. Details: Root element is missing. (rsInvalidReportDefinition)
Source=Microsoft.ReportViewer.WinForms
StackTrace:
 at Microsoft.Reporting.WinForms.SoapReportExecutionService.ServerReportSoapProxy.OnSoapException(SoapException e)
 at Microsoft.Reporting.WinForms.Internal.Soap.ReportingServices2005.Execution.RSExecutionConnection.ProxyMethodInvocation.Execute[TReturn](RSExecutionConnection connection, ProxyMethod`1 sql16Method, ProxyMethod`1 katmaiMethod, ProxyMethod`1 yukonMethod)
 at Microsoft.Reporting.WinForms.Internal.Soap.ReportingServices2005.Execution.RSExecutionConnection.LoadReportDefinition(Byte[] Definition, Warning[]& warnings)
 at Microsoft.Reporting.WinForms.SoapReportExecutionService.LoadReportDefinition(Byte[] definition)
 at Microsoft.Reporting.WinForms.ServerReport.LoadReportDefinition(TextReader report)
 at SSRSTestC.Form1.Form1_Load(Object sender, EventArgs e) in C:\MyDiskArea\LiveProgProjects\SSRSTestC\SSRSTestC\Form1.cs:line 24
  ...    
InnerException: 
  null

Отчет, открываемый в Report Builder 2014 , может без проблем отображаться на обоих серверах. Если отчет уже загружен на сервер (.ReportPath = заменяет .LoadReportDefinition(), элемент управления Report Viewer может отобразить его.
Редактировать

О проблеме теперь сообщается Сбой средства просмотра отчетов Microsoft SSRS при загрузке отчета в Report Sever 2016

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Теперь проблема исправлена ​​в Microsoft.ReportingServices.ReportViewerControl.Winforms 150.900.148 .

После сообщения о проблеме команде разработчиков меня попросили предоставить более подробную информацию, и проблема была подтверждена и исправлена. (Спасибо Брэду Сипуте - Microsoft ).

0 голосов
/ 06 сентября 2018

Я не знаком с API-интерфейсом LoadReportDefintion, но после просмотра стека вызовов вызов API-интерфейса LoadReportDefinition не проходит через путь обновления / понижения кода, который находится в пути публикации RDL.

Обновите отчет до схемы 2016 года, до последнего построителя отчетов или SSDT и повторите попытку.

...