3.5フレームワークのWebフォームサイトに、レポートを表示するページがあります。レポートビューア10.0.0.0を使用しています。レポートは、IE11以外のすべてのブラウザーで表示されます。情報をドキュメントタイプ形式で表示するレポートのみがHTMLテーブルとしてレンダリングされ、.rdlファイルに保存されます。パラメータボックスが読み込まれますが、レポートを選択して実行すると、読み込みgifが表示され、タイムアウトします。私はIE11開発ツールでトラブルシューティングを試みましたが、開くとタイムアウトし、ここでは完璧な嵐です。 VS2012でローカルにWebサイトを実行している別の情報と、IE11ではIIS7サーバー上ではレンダリングされません。
IE10をエミュレートするためのカスタム.browserファイルを試してみましたが、うまくいきませんでした。どんな助けも明記されるか、多分 私だけではないことを知っているだけ 。
更新:サーバーログに例外が見つかりました。 HttpHandlerInputException、不足しているURLパラメーター:IterationId。
前もって感謝します。
コメントに記載されているURLで見つかりました。マイクロソフトが新しいブラウザーを発表したときに、私たちが行っているようにテストを行わないのは、これがどれほど不愉快なことか信じられません。
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"));
}
}
@vikingbenの回答も私の回答の基礎でしたが、global.asaxを簡単に変更できない私たちのために、IIS書き換えルールを利用するソリューションを提供したいと考えています。 cqアプリケーションの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 10とIE11にも問題がありました。
ReportViewer 11(Sql Server 2012)にアップグレードすると問題が解決しました。
Microsoft®REPORT VIEWER 2012ランタイムをダウンロードしてインストールします: http://www.Microsoft.com/en-us/download/confirmation.aspx?id=35747
GACフォルダーに移動します:C:\ Windows\Assembly\gac_msil
インストールしたばかりのMicrosoft.ReportViewer dllを見つけます。
Microsoft.ReportViewer.Common.dllおよびMicrosoft.ReportViewer.webForms.dllをローカルWebフォルダーにコピーします。
ソリューション参照で、古いReportViewerバージョンへのすべての古い参照を削除し、web.configおよびその他のファイルの参照を削除して、ToolBoxからコントロールを削除します。
新しい(共通およびWebフォーム)dll参照を追加します。
プロパティをローカルにコピー(binフォルダーにコピー)に設定します。
ツールボックスを右クリックして、ReportViewer 11コントロールを追加します(Microsoft.ReportViewer.webForms.dll参照を追加します)
コントロールをページにドロップします。
これにより、Web構成ファイルとページファイルに参照が追加されます。アセンブリ:
<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"/>
また、web.configファイルに次の2つのエントリを追加する必要があります。
構成の下で、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メソッドに何も追加しなくても機能しました。また、互換性メタタグの有無にかかわらず、両方の方法で機能しました。
同じ問題がありました。解決策は、サイトをInternet Explorerの互換表示サイトリストに追加することでした。次に、ページは問題なくレンダリングされます。
IE設定に移動し、互換表示設定に移動して、[このWebサイトを追加]オプションでプロジェクトのWebサイトを追加します。
IE11/SQL2012/WinServer2012を使用して同じ問題が発生しました。レポートビューアのバージョン10、11、12のどちらを使用しても違いはありませんでした。レポートを呼び出すvb.netコードを次のようなifステートメントに入れることで解決しました。
if not IsPostBack then
// code to call report goes here
end if
トレースログから、レポートコードが2回以上呼び出されることがあることに気付き、レポートビューアの例のどこかでポストバック条件が使用されていることを思い出しました。レポートは完全にロードされました。