2008年12月18日 星期四

Print Job Limit 報表次數的限制

第一次使用 Crystal Report ,但在壓力測試時發生了問題。

在每經一段時間後,Web Server 就再也無法吃報表的需求了。

clip_image002

錯誤原因是:載入報表失敗

clip_image004

查到一個 resource http://blog.csdn.net/daisylh/archive/2006/12/12/1439312.aspx ,說明 ReportDocument 記得要 Close(), 所以我就改成如下的程式

      ReportDocument customerReport = new ReportDocument();
      customerReport.Load(reportFilePath);
      customerReport.SetDataSource(rs);
      ExportOptions exportOpts = new ExportOptions();
      PdfRtfWordFormatOptions pdfOpts = ExportOptions.CreatePdfRtfWordFormatOptions();
      exportOpts.ExportFormatType = ExportFormatType.PortableDocFormat;
      exportOpts.ExportFormatOptions = pdfOpts;
      response.Clear();
      response.Buffer = true;
      response.ContentType = "application/pdf";
      customerReport.ExportToHttpResponse(ExportFormatType.PortableDocFormat,
        response, false, "aaa.pdf");
      customerReport.Close();
      customerReport.Dispose();
可惜,沒有用。我發現 ExportToHttpResponse 執行完後,網頁就結束了。下面兩行的 Close() 與 Dispose() 是不會執行的。 改成如下的 using block,就可以了,
      using (ReportDocument customerReport = new ReportDocument()) {
      customerReport.Load(reportFilePath);
      customerReport.SetDataSource(rs);
      ExportOptions exportOpts = new ExportOptions();
      PdfRtfWordFormatOptions pdfOpts = ExportOptions.CreatePdfRtfWordFormatOptions();
      exportOpts.ExportFormatType = ExportFormatType.PortableDocFormat;
      exportOpts.ExportFormatOptions = pdfOpts;
      response.Clear();
      response.Buffer = true;
      response.ContentType = "application/pdf";
      customerReport.ExportToHttpResponse(ExportFormatType.PortableDocFormat,
        response, false, "aaa.pdf");
      }

沒有留言:

Share with Facebook