I have a page on my 3.5 framework webforms site that displays reports.
It is using report viewer 10.0.0.0. The reports render for every browser but IE11.
Only reports that display information in doc type format render as an html table and are stored in a .rdl file. The param box loads but when the report is selected and ran I just get the loading gif and it times out. I've tried to troubleshoot with the IE11 dev tools and they time out upon opening it's a perfect storm here. Another bit of info I run the website locally in VS2012 and in IE11 it renders just not on the IIS7 server.
I've tried a custom .browser file to emulate IE10 no luck there. Any help will be appriciated or maybe just knowing I'm not the only one.
Update: I found the exception on my server logs. HttpHandlerInputException, Missing URL parameter: IterationId.
Thanks in advance.
Found it on the url listed in the comments. I can't believe how lame this is that when microsoft puts out a new browser they do not test as we do.
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"));
}
}
The answer by @vikingben was the basis for my answer as well, but I want to offer a solution that utilizes IIS rewriting rules, for those of us who can't easily change the global.asax c.q. application's BeginRequest. Here's my rule:
<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>
Here's what it does. It finds all URLs:
- Matching a certain regex looking for the ReportViewer axd; and also
- the query string contains "ResourceStreamID=Blank.gif"; and also
- the query string does not contain "IterationId=0".
For any matches the browser is redirected ("Temporary", but you could as well use other status codes) to:
- The same axd url; with
- Appended "IterationId=0"; and
- The original query strign appended as well.
I had a problem with ReportViewer 10 and IE11 too.
Upgrading to ReportViewer 11 (Sql Server 2012) solved my problem.
Download and install MICROSOFT® REPORT VIEWER 2012 RUNTIME:
http://www.microsoft.com/en-us/download/confirmation.aspx?id=35747
Go to GAC folder:
C:\Windows\assembly\gac_msil
Find the Microsoft.ReportViewer dlls just installed.
Copy Microsoft.ReportViewer.Common.dll and Microsoft.ReportViewer.webForms.dll to a local web folder.
In your solution references, remove all old references to old ReportViewer version, delete references in web.config and other files, and remove control from ToolBox.
Add the new (common and webforms) dll references.
Set their properties to Copy Local (copy to bin folder).
Right click on Toolbox and add ReportViewer 11 control (add the Microsoft.ReportViewer.webForms.dll reference)
Drop the control on your page.
This will add the references on the web config file and page file.
In assemblies:
<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"/>
You will also need to add 2 extra entries in web.config file:
Under configuration, 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" />
Under configuration, system.webserver, handlers:
<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" />
Note:
This worked for me without adding anything in Application_BeginRequest method.
Also, I tried with and without compatibility meta tag, and it worked in both ways.
I had the same issue. The solution was to add the site to Internet Explorer's Compatibility View site list. Then the page renders without issue.
Go to IE setting then compatibility view setting then add your project website in "add this website" option.
I had the same issue, using IE11/SQL2012/WinServer2012. It made no difference whether I used version 10, 11, or 12 of the report viewer. I solved it by putting my vb.net code that called the report in an if statement like this:
if not IsPostBack then
// code to call report goes here
end if
I noticed from my trace logs that the report code was sometimes getting called more than once, and I remembered seeing the postback condition used somewhere on a report viewer example and put it in. The report loaded perfectly.