none
VisualStudio2008付属のCrystalReportsでレポートのロード時にエラー RRS feed

  • 質問

  • 開発環境 WindowXp Professional SP2
           VisualStudo2008 Professional

    サーバー WIndows Server 2003 Standard Edition SP1 IIS6.0

     

     WEBアプリケーションで付属のCrystalReportsを使って、レポートのPDF出力を行っています。

    今までは順調に動いていたのですが、最近数時間連続で運用していると、「レポートが開けませんでした。」というエラーが発生するようになってしまいました。

     いろいろ調べたのですが原因がわからず、いったんエラーが発生するようになると、とサーバーを再起動するか、

    World Wide Web Publishing Service を再起動するしか解消方法がわからないのが現状です。


    タイミングとしてはVisualStudio2005で作成したWEBアプリなのですが、2週間ほど前にVIsualStudio2008に変換した頃から発生するようになったように思います。

    どなたか解決の手がかりご存知であればご教授願えませんでしょうか。

     

    以下がイベントビューアのエラー内容です

     

    イベント コード: 3005
    イベント メッセージ: ハンドルされていない例外が発生しました。
    イベント時間: 2008/06/04 8:48:26
    イベント時間 (UTC): 2008/06/03 23:48:26
    イベント ID: 9cd108da79a1430f985d95934832fb99
    イベント シーケンス: 372
    イベント発生: 23
    イベント詳細コード: 0
     
    アプリケーション情報:
        アプリケーション ドメイン: /LM/W3SVC/1/Root/webapli-1-128570073509301841
        信頼レベル: Full
        アプリケーションの仮想パス: /webapli
        アプリケーション パス: C:\Inetpub\wwwroot\webapli\
        コンピュータ名: Server01
     
    プロセス情報:
        プロセス ID: 3544
        プロセス名: w3wp.exe
        アカウント名: NT AUTHORITY\NETWORK SERVICE
     
    例外情報:
        例外の種類: Exception
        例外メッセージ: レポートのロードに失敗しました。
     
    要求情報:
        要求 URL: http://192.168.1.1/webapli/hoge.aspx
        要求パス: /webapli/hoge.aspx
        ユーザーのホスト アドレス: 192.168.0.101
        ユーザー: hogehoge\hoge
        認証済み: True
        認証の種類: Negotiate
        スレッド アカウント名: NT AUTHORITY\NETWORK SERVICE
     
    スレッド情報:
        スレッド ID: 12
        スレッド アカウント名: NT AUTHORITY\NETWORK SERVICE
        偽装: False
        スタック トレース:    場所 CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened()
       場所 CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename, OpenReportMethod openMethod, Int16 parentJob)
       場所 CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename)
       場所 hoge.Page_Load(Object sender, EventArgs e) 場所 C:\Inetpub\wwwroot\webapli\hoge.aspx.vb:行 27
       場所 System.Web.UI.Control.OnLoad(EventArgs e)
       場所 System.Web.UI.Control.LoadRecursive()
       場所 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

     


    以下がエラー発生部分のソースです


    Code Snippet

    Code SnippetCode SnippetDim CrExportOptions As ExportOptions
    Dim CrDiskFileDestinationOptions As New DiskFileDestinationOptions
    Dim CrFormatTypeOptions As New PdfRtfWordFormatOptions
    Dim Rp As New ReportDocument
    Rp.Load(MapPath("KOK1.rpt"))   '← ここでエラーが発生


     '~~~~~~~  略 ~~~~~~~~~~~~~

            Try
                '出力実行

                Rp.Export()
                Rp.Dispose()
                Rp.Close()
                '出力されたpdfファイルを読み込む
                PDFURL = PDF_DIR & "\" & strPdfFile
                Response.Redirect(PDFURL)
            Catch ENex As EngineException
                Me.Label1.Text = ENex.ErrorID & "----" & vbCrLf & ENex.Source & "----" & vbCrLf & ENex.Message
            Catch ex As Exception
                Me.Label2.Text = ex.Source & vbCrLf & ex.Message
            Finally
                Rp.Dispose()
                Rp.Close()
            End Try

     

     


    2008年6月4日 4:35

すべての返信

  •  るーしぇ さんからの引用


    Code Snippet

    Code SnippetCode SnippetDim CrExportOptions As ExportOptions
    Dim CrDiskFileDestinationOptions As New DiskFileDestinationOptions
    Dim CrFormatTypeOptions As New PdfRtfWordFormatOptions
    Dim Rp As New ReportDocument
    Rp.Load(MapPath("KOK1.rpt"))   '← ここでエラーが発生


     '~~~~~~~  略 ~~~~~~~~~~~~~

            Try
                '出力実行

                Rp.Export()
                Rp.Dispose()
                Rp.Close()
                '出力されたpdfファイルを読み込む
                PDFURL = PDF_DIR & "\" & strPdfFile
                Response.Redirect(PDFURL)
            Catch ENex As EngineException
                Me.Label1.Text = ENex.ErrorID & "----" & vbCrLf & ENex.Source & "----" & vbCrLf & ENex.Message
            Catch ex As Exception
                Me.Label2.Text = ex.Source & vbCrLf & ex.Message
            Finally
                Rp.Dispose()
                Rp.Close()
            End Try

     

     

     

    for VS2005 では CrystalReports XI R2 に更新すれば解消したりもしたのですが、VS2008 の内部バージョンは大丈夫かな。
    もし Hotfix が出ているようであれば、それを当ててみてください。

     

    ところで、Dispose メソッドと Close メソッドの順序が逆ですね。
    また、Finally にも書かれているので、正常系の場合は Dispose メソッドと Close メソッドがそれぞれ 2 回ずつ発生します。

     

    もしかすると Close メソッドが正しく呼ばれず居座っている可能性もあります。

    2008年6月4日 7:02
  • じゃんぬねっとさん、ご回答ありがとうございます。

     

    VS2008のCrystalReportsのHotfixについては最近のものは私が探した限りでは見つかりませんでした。

     

    お恥ずかしながら Close メソッドと Dispose メソッドが逆ということにはじめて気がつきまして、至急修正しました。

    これで解決しましたらまた追記します。

    2008年6月4日 7:53
  • 残念ながらClose Dispose メソッドを入れ替えただけでは、現象は変わりませんでした。

    特に今日は午前3時に再起動してから、午前8時過ぎに最初のレポート出力で発生しました。

    もういっかいHotfix等探してみます。

    2008年6月9日 8:38
  • 急病で10日ほど入院していたもので、書き込み遅くなって申し訳ありません。
    もう少し探してみたら KB946581のHotFixが見つかりましたので当ててみたのですが、症状変わりませんでした。
    特に最近は、午前3時の再起動の直後の使用でもエラーが発生しているようです。
    今のところ、World Wide Web Publishing Service の再起動でしのいでいる状況です・・・・。
    2008年6月25日 0:01