セッションが切断されると、ターミナルサービス接続エラーで実行される.Net Crystal Report印刷アプリケーション

StackOverflow https://stackoverflow.com/questions/602295

質問

レポートの要求を取得し、要求されたレポートを印刷するApp Server上で実行する.Netアプリケーションを作成しました。

C#アプリケーションは、Crystal Reportsを使用してレポートをロードし、その後印刷します。

アプリケーションは、特定のユーザーアカウント(古いアプリに必要)でリモートデスクトップ接続を介して接続されているサーバーで実行されます。リモートセッションから切断すると、アプリケーションは次のような例外の発生を開始します。

メッセージ:CrystalDecisions.Shared.CrystalReportsException:レポートの読み込みに失敗しました

リモートセッションがアクティブな場合、このタイプのエラーは発生しません。アプリを実行しているサーバーはWindows Server 2003を実行しています。接続を作成するボックスはWindows XPです。

これはかなりおかしいと思いますが、作成したアプリケーションの展開に問題は見られません。

誰がこの問題の原因を知っていますか?

編集:弾丸をかみ、アプリケーションをWindowsサービスとして作成しました。明らかにこれには時間がかかりません。とにかくそうではない!!!

また、print関数を非同期に呼び出していたマルチスレッドコードを削除しようとしました。これは、単にアプリを作成し、失敗する可能性のある理由を絞り込むために行いました。とにかく、これは状況を改善しませんでした!

編集:表示される2つのエラーは次のとおりです。

  

System.Runtime.InteropServices.COMException   (0x80000201):無効なプリンター   指定された。で   CrystalDecisions.ReportAppServer.Controllers.PrintOutputControllerClass.ModifyPrinterName(String   newVal)at   CrystalDecisions.CrystalReports.Engine.PrintOptions.set_PrinterName(String   値)at   Dsa.PrintServer.Service.Service.PrintCrystalReport(Report   レポート)

プリンターは無効ではありません。これは60秒後に時刻が確認され、レポートが正常に印刷されるときに確認されます。

そして

  

リクエストを送信できませんでした   バックグラウンド処理。で   CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.GetLastPageNumber(RequestContext   pRequestContext)at   CrystalDecisions.ReportSource.EromReportSourceBase.GetLastPageNumber(ReportPageRequestContext   reqContext)---インナーの終わり   例外スタックトレース--- at   CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception   e)で   CrystalDecisions.ReportSource.EromReportSourceBase.GetLastPageNumber(ReportPageRequestContext   reqContext)at   CrystalDecisions.CrystalReports.Engine.FormatEngine.PrintToPrinter(Int32   nCopies、ブール照合、Int32   startPageN、Int32 endPageN)で   CrystalDecisions.CrystalReports.Engine.ReportDocument.PrintToPrinter(Int32   nCopies、ブール照合、Int32   startPageN、Int32 endPageN)で   Dsa.PrintServer.Service.Service.PrintCrystalReport(Report   レポート)

編集:

filemonを実行して、アクセスの問題があるかどうかを確認しました。エラーが発生した時点で、ファイルmonレポート

リクエスト:OPEN |パス:C:\ windows \ assembly \ gac_msil \ system \ 2.0.0.0__b77a5c561934e089 \ ws2_32.dll |結果:見つかりません|その他:属性エラー

役に立ちましたか?

解決

特定の問題は解決されました。基本的に、レポートの作成時には、プリンターに関する情報とともに保存されていました。基本的に、特定のプリンターがレポート用に設定され、保存されていました。

このプリンターはもう存在しないため、レポートが失敗し始めました。基本的に、レポートデザイナーを開いて、レポート内のプリンターとの関連付けを削除する必要がありました。

他のヒント

過去数年間に、これらのエラーに何度か遭遇しました。多くの場合、より具体的なエラーメッセージを希望しました。

最初に、複数のCrystal Reportsバージョンがインストールされていないことを確認します。私たちの経験では、Crystal Reports 9.0は10ではうまく動作しないようです。バージョン9をアンインストールすることは、一部のお客様に役立つようです。両方がインストールされている場合は、両方をアンインストールしてから、Crystal Reports 10を再インストールすることを強くお勧めします。

Crystal Reportsの最も初期のエラーの1つは、「バックグラウンド処理のためにリクエストを送信できませんでした」という恐ろしいエラーでした。レポートはしばらくの間正常に機能し、その後突然停止します。コードを見て、ReportDocumentを破棄していない場所を見つけました。このドキュメントを正しく破棄することで問題が修正されました。

最近、「バックグラウンド処理のためにリクエストを送信できませんでした」という大量のヒットが発生しました。および「無効なプリンター」エラー。ある顧客のサーバーには、IPアドレスで定義された複数のネットワークプリンターがありました。印刷はしばらくの間うまくいきましたが、突然 bam 、顧客は「無効なプリンター」を手に入れました。エラーが発生し、サポートに連絡しました。

仲間の開発者が「無効なプリンター」を修正しました;次のすべてを実行することで問題が発生します。

  1. Visual Studio 2005で.rptファイルを編集および保存します。CrystalReports 9と互換性のあるレポート形式を維持していました。以前のバージョンを使用している顧客に変更を配布できるようにしたかったためです。
  2. 「プリンタなし」でCrystal Reportsファイルを保存します。オプション。 Visual Studio 2005メニューから[Crystal Reports / Design / Printer Setup]を選択し、[プリンターなし]を選択します。チェックボックス。
  3. 「Page N of M」を表示する数式を変更しました。このような奇妙なものから:

"Page " + Left (CStr (PageNumber), Length (CStr (PageNumber)) - 3) +
" of " + Left (CStr (TotalPageCount), Length (CStr (TotalPageCount)) - 3)

これ:

"Page " + CStr(PageNumber,0) + " of " + CStr(TotalPageCount,0)

残念ながら、上記のアクションのどれ(またはすべて)がエラーを修正できるかはわかりません。 「知っている」と言うのは、私が知っている限り、ITネットワークの変更によりエラーが魔法のように消えたからです。

最後に、このホワイトペーパー?必ずしも問題を解決できるわけではありませんが、非常に興味深いものでした。

アプリケーションのウィンドウサービスラッパーを作成する場合、ログインしているユーザーに関係なく実行し続けることを意味します。自動的に起動するように設定することもできます。 Windowsサービスではなく、実際のアプリケーションを使用しているため、サーバー上のセッションからログアウトすると、実際には実行されていないと思います。

コードプロジェクトの例を次に示します。

http://www.codeproject.com/KB/system/WindowsService.aspx

「ログオフ」ではなく、リモートセッションを「切断」していることを確認してください。 ntサーバー2003へのセッションを常に切断し、すべてを正常に実行し続けます。一方、ログオフすると、そのセッションで実行中のアプリが強制終了されます。

o / sサーバーは何を実行していますか?

説明した問題を解決するには、問題の内容に集中する必要があります。

私は メッセージ:CrystalDecisions.Shared.CrystalReportsException:レポートの読み込みに失敗しました 何回も、それはあなたがレポートにアクセスできないという事実によるものです。存在しないか、状況によってはマシンに接続されていません。このエラーは、印刷関連のものではありません。

これは、Excelでの(衝撃的な)自動化問題であったことを除いて、これに似たあいまいな問題がありました。リモートデスクトップセッションを接続したときにアプリケーションが正常に機能することがわかりましたが、一度切断すると、デフォルトプリンターに関連する自動化エラーが発生します。

この問題は、リモートデスクトップに接続するときにデフォルトプリンターがどのように設定されるかに関係していると思います。リモートデスクトップセッションを開始するための.rdpファイルがあると仮定して、編集する場合は、「ローカルリソース」を選択します。タブでは、リモートセッションでローカルプリンターを共有しているかどうかを確認できます。

有効になっている場合、これは、接続時にローカルのデフォルトプリンターがリモートマシンのデフォルトプリンターになることを意味します。切断しても、アプリケーションのデフォルトプリンターは、ローカルマシンから現在使用できないデフォルトプリンターを参照している可能性があります。

「ローカルリソース」から「プリンタ」チェックボックスを選択解除して、ローカルプリンタを共有しないようにすることで、これを解決できるはずです。タブ。

より簡単な解決策は、「プリンタのリダイレクト」を無効にすることです。サーバー上。 https://serverfault.com/questions/5646/howを参照してください-do-i-disable-remote-printers-using-group-policy で詳細をご覧ください。

詳細を調べる方法

ブールフィールドのクリスタルレポートにチェックボックスを追加し、ブールフィールドがfalseの場合

チェックを外す、この記事のチェックボックスをオンにします

http://checkboxcrystalreport.blogspot .com / 2009/07 / printing-checkbox-in-crystal-report-for.html

長いグーグル検索の後、このリンクを見つけましたが、試しませんでした。他の無料サーバーはありません。

http://www.microsoft.com/technet/security /bulletin/ms04-017.mspx

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top