ReportViewer IE 11
У меня есть страница на моем веб-сайте веб-форм 3.5, в котором отображаются отчеты.
Он использует средство просмотра отчетов 10.0.0.0. Отчеты отображаются для каждого браузера, но IE11.
Только отчеты, отображающие информацию в формате типа документа, отображаются как таблица html и хранятся в файле .rdl. Поле param загружается, но когда отчет выбран и запускается, я просто загружаю gif и время истекает. Я попытался устранить неисправность с помощью инструментов IE11 dev, и они тайм-аут, открыв здесь идеальный шторм. Еще один бит информации Я запускаю сайт локально в VS2012, а в IE11 он отображается не на сервере IIS7.
Я пробовал пользовательский файл .browser для эмуляции IE10. Любая помощь будет указана или, может быть, просто зная, что я не единственный.
Обновление: я обнаружил исключение в журналах сервера. HttpHandlerInputException, Отсутствует параметр URL: IterationId.
Спасибо заранее.
Ответы
Ответ 1
Нашел его по адресу, указанному в комментариях. Я не могу поверить, насколько хромой это то, что когда Microsoft выпускает новый браузер, они не тестируются, как мы.
void Application_BeginRequest(object sender, EventArgs e)
{
// Bug fix for MS SSRS Blank.gif 500 server error missing parameter IterationId
// https://connect.microsoft.com/VisualStudio/feedback/details/556989/
if (HttpContext.Current.Request.Url.PathAndQuery.StartsWith("/Reserved.ReportViewerWebControl.axd") &&
!String.IsNullOrEmpty(HttpContext.Current.Request.QueryString["ResourceStreamID"]) &&
HttpContext.Current.Request.QueryString["ResourceStreamID"].ToLower().Equals("blank.gif"))
{
Context.RewritePath(String.Concat(HttpContext.Current.Request.Url.PathAndQuery, "&IterationId=0"));
}
}
Ответ 2
У меня была проблема с ReportViewer 10 и IE11.
Обновление до ReportViewer 11 (Sql Server 2012) решило мою проблему.
-
Загрузить и установить MICROSOFT® REPORT VIEWER 2012 RUNTIME:
http://www.microsoft.com/en-us/download/confirmation.aspx?id=35747
-
Перейдите в папку GAC:
C:\Windows\сборка\gac_msil
-
Найдите только что установленные DLL Microsoft.ReportViewer.
-
Скопируйте файл Microsoft.ReportViewer.Common.dll и Microsoft.ReportViewer.webForms.dll в локальную веб-папку.
-
В ссылках на решение удалите все старые ссылки на старую версию ReportViewer, удалите ссылки в файле web.config и других файлах и удалите элемент управления из ToolBox.
-
Добавьте новые (общие и веб-формы) ссылки dll.
-
Задайте свои свойства Copy Local (копировать в папку bin).
-
Щелкните правой кнопкой мыши на панели инструментов и добавьте элемент управления ReportViewer 11 (добавьте ссылку Microsoft.ReportViewer.webForms.dll)
-
Отбросьте элемент управления на своей странице.
-
Это добавит ссылки на файл веб-конфигурации и файл.
В сборках:
<add assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91"/>
<add assembly="Microsoft.ReportViewer.Common, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91"/>
-
Вам также нужно добавить 2 дополнительных файла в файл web.config:
В конфигурации, system.web, httphandlers:
<add verb="*" path="Reserved.ReportViewerWebControl.axd" type = "Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
В конфигурации, system.webserver, обработчики:
<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" />
Примечание:
Это работало для меня, не добавляя ничего в метод Application_BeginRequest.
Кроме того, я пытался использовать метатег совместимости и без него, и он работал в обоих направлениях.
Ответ 3
Ответ от @vikingben был также основанием для моего ответа, но я хочу предложить решение, в котором используются правила перезаписи IIS, для тех из нас, кто не может легко изменить global.asax c.q. приложение BeginRequest. Здесь мое правило:
<system.webServer>
<rewrite>
<rules>
<rule name="ReportViewerFix" patternSyntax="ECMAScript" stopProcessing="true">
<match url="(.*)Reserved\.ReportViewerWebControl\.axd(.*)" ignoreCase="true" />
<action type="Redirect"
redirectType="Temporary"
url="{R:1}/Reserved.ReportViewerWebControl.axd?IterationId=0"
appendQueryString="true" />
<conditions>
<add input="{QUERY_STRING}" pattern="ResourceStreamID=Blank.gif" />
<add input="{QUERY_STRING}" pattern="IterationId=0" negate="true" />
</conditions>
</rule>
</rules>
</rewrite>
</system.webServer>
Вот что он делает. Он находит все URL-адреса:
- Соответствие некоторому регулярному выражению, ищущему ReportViewer axd; а также
- строка запроса содержит "ResourceStreamID = Blank.gif"; а также
- строка запроса не содержит "IterationId = 0".
Для любых совпадений браузер перенаправляется ( "Временно", но вы также можете использовать другие коды состояния):
- Тот же самый axd url; с
- Добавлен "IterationId = 0"; и
- Исходный запрос также прилагается.
Ответ 4
У меня была такая же проблема. Решение заключалось в том, чтобы добавить сайт в список просмотра совместимости обозревателя Internet Explorer. Затем страница отображается без проблем.
Ответ 5
У меня была такая же проблема, используя IE11/SQL2012/WinServer2012. Не имело значения, использовал ли я версию 10, 11 или 12 средства просмотра отчетов. Я решил это, поставив свой код vb.net, который вызвал отчет в инструкции if следующим образом:
if not IsPostBack then
// code to call report goes here
end if
Я заметил из своих журналов трассировки, что код отчета иногда вызывался более одного раза, и я вспомнил, что видел условие обратной передачи, которое использовалось где-то на примере средства просмотра отчетов и помещало его. Отчет загружался отлично.
Ответ 6
Перейдите в настройку IE, затем установите режим просмотра совместимости, затем добавьте свой веб-сайт проекта в опции "Добавить этот сайт".