0

MS 2008およびIIS 7で実行されるVS.Net 2010および組み込みCRを使用してWebアプリを開発しています。機能の1つは、データベースレコード(〜20-50)を更新し、Crystalレポートをネットワークプリンターに印刷することです。 for ループ内の各レコード。(ビジネス上の必要性から、レポートは 1 つずつ印刷する必要があります) 私のマシンでは機能は正常に動作します。レポートが PDF プリンターに印刷される場合、サーバー上でも機能します。

ただし、物理ネットワーク プリンターに印刷された場合は、数回ループした後、キャプション付きのエラー メッセージがイベント ビューアーに表示されます。ページで例外が返されず、ある時点で停止し、タイムアウトになるまでページが読み込まれます。

プログラムにロギングを追加したところ、どこでもループが停止することがわかりました。つまり、新しい Crystal レポートの作成、レポート データ ソースの設定、プリンタ名の割り当て、レコードの更新などです。

以下は、レポートを印刷する際のコードの一部で、非常に単純です。

rptDoc.PrintOptions.PrinterName = strPrinterName;

rptDoc.PrintToPrinter(intPrintCopy, false, 0, 0);

上記のコードがコメント化されている場合、エラーは発生しなくなり、for ループはレコード数に関係なく毎回完了することができます。

障害のあるモジュールは、ntdll.dll (ほとんど)、crpe32.dll、kernel32.dll、MSVCR80.dll などです。以下は、キャプチャされたエラー メッセージの一部です。

  • エラーが発生しているアプリケーション w3wp.exe、バージョン 7.0.6001.18000、タイム スタンプ 0x47919ed8、エラーが発生しているモジュール ntdll.dll、バージョン 6.0.6001.18538、タイム スタンプ 0x4cb73957、例外コード 0xc0000005、エラー オフセット 0x0000000000046ef0、プロセス ID 0x%9、アプリケーション開始時刻.

  • 障害が発生しているアプリケーション w3wp.exe、バージョン 7.0.6001.18000、タイム スタンプ 0x47919ed8、障害が発生しているモジュール kernel32.dll、バージョン 6.0.6001.18631、タイム スタンプ 0x4da46d09、例外コード 0xe0434352、障害オフセット 0x0000000000025efd、プロセス ID 0x9c04c02.04fcc0d9b9d04 アプリケーション開始時刻

  • 障害のあるアプリケーション w3wp.exe、バージョン 7.0.6001.18000、タイム スタンプ 0x47919ed8、障害のあるモジュール crpe32.dll、バージョン 13.0.2.469、タイム スタンプ 0x4eb91936、例外コード 0xc0000005、障害オフセット 0x00000000002948ea、プロセス ID 0x%9、アプリケーション開始時刻 0x%1 .

私はサーバーと IIS に精通していませんが、コンピューター上で正常に動作するため、プログラミングの問題ではないようです。誰でも私にアイデアを与えることができますか?

どうもありがとう!

4

1 に答える 1

0

テストとテストの後、これは実際にはコーディングの問題であることがわかりました。レコード情報に基づいてレポート ドキュメント オブジェクト (データソース セット付き) を開始して返す汎用関数が作成されます。これはループで使用されるため、おそらくレポート ドキュメント オブジェクトが多すぎて開始され、IIS プロセスがクラッシュします。これは、Crystal Reports の別のエラー「Maximum report processing jobs limit」の可能性があります。ただし、プログラムはこのエラーをスローしませんでした。イベント ビューアのエラーも気になりました。

ここで、この問題を解決するために、ループの前にレポート ドキュメントを開始し、ループ内でそのデータ ソースを更新して、ループの後に破棄します。

于 2012-02-02T03:01:32.253 に答える