none
ReportViewer+SSRS のレポートを IE で互換表示すると高確率でフリーズする RRS feed

  • 質問

  • いつもお世話になっております、おのでらです。
    調査しても原因が不明であったため、対処法があればお伺いしたいと思います。
    文章だけですと状況がつかみづらいかもしれませんがご了承ください。(確認できる環境を用意すればよかったのですが、環境が特殊であるため断念いたしました)

    【環境】

    ❏サーバー
     Windows Server 2008 R2 Standard (SPなし)
     IIS 7.5
     ASP.NET MVC 3
     ReportViewer コントロール バージョン 10.0.0.0 (.NET Runtime 2.0.50727)
     SQL Server 2008 R2 (SPなし)

    ❏クライアント
     OS : Windows XP, Vista
           Windows Server 2008 R2
     ブラウザ:IE8, 9

    ❏ネットワーク
     イントラネットワーク

    【内容】

    ASP.NET MVC 3 フレームワークに ASPX ファイルを追加して ReportViewer コントロールを配置しています。そのコントロールに Reporting Services のレポート(.rdl)をバインドさせています。

    このコントロールを配置しているページに対して IE で接続し、IE の互換表示をクリックして再度ページを表示させようとすると高い確率で IE がフリーズして強制終了せざるを得ない状態になります。特に、ウインドウサイズを枠のドラッグで小さくしていき ReportViewer コントロールのサイズを小さくするとほぼ確実にフリーズします。

    ReportViewer コントロールに表示しているレポートは以下の項目を表示させています。

    ・複数個のフィルター (レポート上部の選択項目)
    ・標準のツールバー
    ・見出しマップあり
    ・レポート内容にはグラフとマトリックスといくつかのテキスト

    フリーズの起こるレポートの種類ですが見出しマップがあるとフリーズしてしまうようです。

    ブラウザについては IE 8,9 を互換表示させるとフリーズし、互換表示でない場合はフリーズしません。また、ほかのブラウザ「FileFox」「Google Chrome」「Opera」ではフリーズしませんでした。

    OS の種類は特に関係ありません。

    ReportViewer を使わず Reorting Services のレポートマネージャーからレポートを開いた場合はフリーズすることはありませんでした。

    ちなみに ReportViewer コントロールは以下のように配置しています。特に例外的な設定は行っていないと思います。

    <%@ Page Language="C#"
        AutoEventWireup="true"
        CodeBehind="ReportSample.aspx.cs"
        Inherits="XXXXXXXXXX.Reports.ReportSample" %>
    
    <%@ Register
        assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" namespace="Microsoft.Reporting.WebForms"
        tagprefix="rsweb" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" style="height:100%; padding:0px;">
    <head runat="server">
        <title></title>
    </head>
    <body style="height:100%; padding:0px; margin:0px;">
        <form id="form1" runat="server" style="height:100%; padding:0px;">
        <div>
            <asp:ScriptManager ID="ScriptManager1" runat="server">
            </asp:ScriptManager>
        </div>
        <rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana" 
            Font-Size="8pt" Height="100%" InteractiveDeviceInfos="(コレクション)" 
            ProcessingMode="Remote" WaitMessageFont-Names="Verdana" 
            WaitMessageFont-Size="14pt" Width="100%" ShowPrintButton="False">
            <ServerReport ReportPath="/フォルダ名/レポート名" 
              ReportServerUrl="http://<server-name>/reportserver" />
        </rsweb:ReportViewer>
        </form>
    </body>
    </html>

    これらの現象について Web で調べてみたのですがまったく情報が見つからなかったため、なんらかの対処法があればご助言いただきたいと思っております。

    1.IE を互換表示させてもフリーズしないようにする方法があるのか
     ⇒利用者が不特定であるため、互換表示しないで、というのは難しい
     ⇒ASP.NET 側のプログラム変更で対応可能か
     ⇒Windows Server, IIS の設定で回避可能か

    2.1番が不可能な場合、IE で絶対に互換表示させない方法があるのか
     ⇒(HTML のメタ情報でなにか投げる?)

    3.フリーズする原因はなんなのか

    以上よろしくお願いします。


    おのでら (http://sorceryforce.com/)



    2012年2月21日 6:16

回答

  • 現象を回避する方法を見つけましたので報告いたします。

    下記のリンク先の情報とは現象が若干異なるのですが、DOCTYPE 宣言を変更することによって回避することができました。

    【情報先リンク】
    IE9 Crash when Report Viewer Control V9 Scrolled to end of report with scrolling header

    【修正内容】
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      ↓↓↓↓↓
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">


    DOCTYPE 宣言で「XHTML 1.0 Transitional」を「HTML 4.01 Transitional」に変更することで ReportViewer コントロールを小さいサイズにしても IE 互換表示で固まることは無くなりました。

    しかし、今度は逆に互換表示ではない IE で画面レイアウトが崩れてしまうという新たな不具合が発生してしまいました。(これまた IE だけで他のブラウザは問題ない)

    とりあえず互換表示かどうかで DOCTYPE を切り替えれば対処できそうだったので以下のように HTML を書き換えて今は問題なく動作しております。(若干動きが微妙なところはありますが…)

    <!--[if gte IE 8]>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <![endif]-->
    <!--[if lt IE 8]>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <![endif]-->
    <![if !IE]>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <![endif]>

    いろいろ調べてくださった方々ありがとうございました。


    おのでら (http://sorceryforce.com/)

    2012年2月23日 5:13

すべての返信

  • こんにちは。

    ※まったくの感で、回答ということではないのですが。

    フォントサイズが影響している可能性はないでしょうか。Verdana の縦横比計算の延長でフリーズしている・・・みたいな事がないかなぁ…

    8pt : Verdana を Times New Roman  にするとか、12ptにするとかやってみると、もしかしたら…

    2012年2月22日 0:22
  • Keiichi Oumi さん回答ありがとうございます。

    フォントサイズが影響している可能性はないでしょうか。Verdana の縦横比計算の延長でフリーズしている・・・みたいな事がないかなぁ…

    8pt : Verdana を Times New Roman  にするとか、12ptにするとかやってみると、もしかしたら…

    フォントの種類、サイズを変更でどうかということなのですが、残念ながら見出しマップではフォントの指定ができないため、デフォルトで Verdana の 8pt になってしまいます。(F12 開発者ツールで直接変更したり戻したりしていましたがフリーズするときとしないときがあってどこが原因かは正確にはわかっておりません。)


    おのでら (http://sorceryforce.com/)

    2012年2月22日 6:36
  • すみません、レポート側のフォントではなくて ReportViewer コントロール側のフォント設定で変更できました。(見出しマップだけではなく全体に影響しますが)

    ただ、教えていただいたフォントで設定しても状況は変わりませんでした。もう少しフォントの設定をいじってみたいと思います。


    おのでら (http://sorceryforce.com/)

    2012年2月22日 7:31
  • 現象を回避する方法を見つけましたので報告いたします。

    下記のリンク先の情報とは現象が若干異なるのですが、DOCTYPE 宣言を変更することによって回避することができました。

    【情報先リンク】
    IE9 Crash when Report Viewer Control V9 Scrolled to end of report with scrolling header

    【修正内容】
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      ↓↓↓↓↓
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">


    DOCTYPE 宣言で「XHTML 1.0 Transitional」を「HTML 4.01 Transitional」に変更することで ReportViewer コントロールを小さいサイズにしても IE 互換表示で固まることは無くなりました。

    しかし、今度は逆に互換表示ではない IE で画面レイアウトが崩れてしまうという新たな不具合が発生してしまいました。(これまた IE だけで他のブラウザは問題ない)

    とりあえず互換表示かどうかで DOCTYPE を切り替えれば対処できそうだったので以下のように HTML を書き換えて今は問題なく動作しております。(若干動きが微妙なところはありますが…)

    <!--[if gte IE 8]>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <![endif]-->
    <!--[if lt IE 8]>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <![endif]-->
    <![if !IE]>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <![endif]>

    いろいろ調べてくださった方々ありがとうございました。


    おのでら (http://sorceryforce.com/)

    2012年2月23日 5:13