会社で、後輩が、私が開発した、asp.net のプログラムを使用していた時の事。
急に、エラーが発生して動かなくなったとの事。
直前にどんな事をやっていたか聞いてみると、商品ごとに集計を行っていたのだか、それを連続して、数十回やっていたとのこと。
表示されるメッセージを見ても詳細はわからないので、Webサーバーのイベントビューワーでログを見てみると、以下のようなメッセージが記録されている。
システム管理者が設定したレポート処理ジョブの最大数に達しました。
場所 CrystalDecisions.ReportAppServer.ClientDoc.ReportClientDocumentClass.Open(Object& DocumentPath, Int32 Options)
場所 CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.Open(Object& DocumentPath, Int32 Options)
場所 CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened()
このプログラムはCrystalReportsを使って集計と表示をしているので、どうも CrystalReports絡みのエラーのようである。
そこで、いろいろ調べて見ると、どうもCrystalReportsを使ったあとで、ちゃんと Close とか Dispose とかで、ちゃんと後始末をしなくてはいけないらしい。
そこで、以下のように Unload のイベントで、Close の処理を追加した。
そこで、以下のように Unload のイベントで、Close の処理を追加した。
Partial Public Class WebFrmHoge
Inherits System.Web.UI.Page
Dim Rpt As New CR_Hoge ' ← CrystalReports のファイル名
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
' Load イベントの処理
End Sub
' その他のイベントでの処理
' 以下、追加した Unload イベントでの処理
Private Sub Page_Unload(sender As Object, e As EventArgs) Handles Me.Unload
Rpt.Close()
End Sub
上記の変更をした後、商品毎の集計を120回くらいやってみたけれど、とりあえずエラーにはならず表示するようにはなった。
上記の変更をした後、商品毎の集計を120回くらいやってみたけれど、とりあえずエラーにはならず表示するようにはなった。
コメント
コメントを投稿