Ошибка SSRS2008 ASP.NET ServerReport в IE11 с OEM UserAgent

Я визуализирую SSRS ServerReport в PDF и в элементе управления WebForm ReportViewer в приложении ASP.NET 3.5 с помощью службы отчетов SQL Server 2008.

Некоторые люди, использующие Internet Explorer 11, сообщали, что не могут открывать сгенерированные PDF-файлы или что-либо видеть в средстве просмотра. Рендеринг завершается с ошибкой:

library!ReportServer_0-403!7c8!01/02/2014-11:07:37:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException: , Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException: Interner Fehler beim Berichtsserver. Weitere Informationen finden Sie im Fehlerprotokoll. ---> System.ArgumentNullException: Value cannot be null.
Parameter name: String
   at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   at System.Web.Configuration.HttpCapabilitiesBase.get_MajorVersion()
   at Microsoft.ReportingServices.Diagnostics.Utilities.BrowserDetectionUtility.GetBrowserInfoFromRequest(HttpRequest request)
   at Microsoft.ReportingServices.Diagnostics.RSRequestParameters.SetBrowserCapabilities(HttpRequest request)
   at Microsoft.ReportingServices.Library.RenderReportAction.SetBrowserCapabilities()
   at Microsoft.ReportingServices.Library.RenderReportAction.PerformExecution()
   at Microsoft.ReportingServices.Library.RenderReportAction.Render()
   --- End of inner exception stack trace ---;

Я мог отследить эти ошибки до OEM-строки, используемой в UserAgent IE11.

Примеры:

Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MALC; rv:11.0) like Gecko
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MATM; rv:11.0) like Gecko
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; NP06; rv:11.0) like Gecko

MALC, MATM и NP06 выглядят как OEM-строки и не являются частью обычного UserAgent IE11.
Удаление этих строк в IE-разработчике настройки пользовательского агента tools заставляют все работать нормально, но не являются решением для конечного пользователя.

Что я пробовал:

  • Переопределение UserAgent входящего запроса в приложении ASP.NET, но, похоже, оно никогда не менялось независимо от того, что я устанавливал. (Возможно, я сделал это неправильно, все, что я обнаружил, это то, что я не могу изменить это, поэтому я все равно попытался)
  • Переопределите заголовок в событии Begin-/EndRequest в Global.asax.
  • Добавление пользовательского файла .browser в каталог App_Browser самого приложения и в серверное приложение SSRS.

Что работает:

  • Перехват запроса и создание пользовательского запроса с использованием HttpWebRequest с другим UserAgent, копирование файлов cookie (идентификатор сеанса) и заголовков запроса/ответа туда и обратно.

Я чувствую, что это ужасное решение, и так делать не следует.

Как сделать так, чтобы SSRS не выдавал ошибку при синтаксическом анализе UserAgent IE11?
Есть ли способ отключить его или добавить пользовательское регулярное выражение для его синтаксического анализа вручную?


person elch    schedule 02.01.2014    source источник


Ответы (1)


Вы можете переопределить пользовательский агент для сервера отчетов, предоставив дополнительную информацию об устройстве.

Это можно сделать при вызове метода Render API SOAP, указав этот XML-фрагмент в качестве параметра.

<DeviceInfo>
    <UserAgent>custom_user_agent_here</UserAgent>
</DeviceInfo>

Или используя URL-адрес, подобный этому

http://<Server Name>/reportserver?/SampleReports/Sales Order Detail&rs:Command=Render&rs:Format=HTML4.0&rc:UserAgent=custom_user_agent_here

.

Рекомендации

person Andrej Hribernik    schedule 12.05.2014