2017-11-29 30 views
0

RDLCレポートを持つASP.NETアプリケーションがあります。この魔法は、私がメインのASPアプリケーションで参照する別のアセンブリで起こります。このアセンブリでは、RDLCレポートシステムによってシリアル化され、デシリアライズされた後、オブジェクトで参照する静的データがいくつかあります。RDLCはアセンブリ内の静的データを再初期化します

私が見つけたのは、RDLCレポートの実行中に静的フィールドが再初期化され、おそらくRDLCがアセンブリの新しいコピーをロードしていることです。したがって、私のオブジェクトは、以前に設定されたデータを期待している静的データに対してヌルのリファレンスを打つことになります。

ここでは何が起こっていますか?アセンブリのコピーが1つだけロードされるようにする方法はありますか?

答えて

0

理由は、RDLC ReportViewerが別のAppDomain内で動作しているため、メインアプリケーションとメモリを共有していないようです。

私はDBクラスをリファクタリングして、RDLCの利点のために、シリアル化してデシリアライズできるようにしましたが、デシリアライズ後に正しいDBプロバイダを割り当てることができなかったRDLCは異なるAppDomainで実行されているため、RDLCが見ることができない静的なクラスに置かれていました。

これは、私が問題に光を当てるこれらの関連の質問を検索することができませんでした私は本当にのAppDomainについて聞いた最初のものである:

(私はしばらくの間しようとした)廃止されており、CASを有効にする必要があり、現在のAppDomainで実行するようにレポートを強制的に、私は、これは私のプロジェクトで動作させることができなかったのIPS:

は最後に、私は、正しい解決策は私のデータで動作するようにレポートビューアーをだましてコード体操を行うにはないことを決定しました複雑な依存関係はありません。

これは、DBオブジェクトがシンプルで簡単にシリアライズ可能で、ビジネスロジックがDBオブジェクトの上に別のオブジェクト/ラッパーである必要がある理由です。私のこれらの複雑な "神の物"は、しばらくの間私を襲ってきました!