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, затем установите режим просмотра совместимости, затем добавьте свой веб-сайт проекта в опции "Добавить этот сайт".