1

ASP.NET Webアプリケーションには、「リクエストごとのインスタンス」として記述できるライフタイム/スコープを備えたサービスがあります。つまり、インスタンスはHttpContext.Current.Itemsコレクションに格納されます。

ASP.NETコントロールからの呼び出し中にHttpContext.Currentプロパティが存在するという、この断続的な問題が発生しました。ある場合とそうでない場合があります。ステージングWebサイトと開発マシンでは動作が異なる可能性があり、開発マシンによっても動作が異なります。nullReportViewernull

これにより、サービスを使用して例外をスローするレポートが発生します。

なぜHttpContext.Currentプロパティなのnullですか?

なぜ断続的なのですか?

4

1 に答える 1

2

問題の原因は、レポートビューアがスレッドプールスレッドを使用して、レポートで定義されたデータセットのデータを取得することがあることです。スレッドプールスレッドはHttpContext.Current、HTTPリクエストを処理するスレッドのインスタンスにアクセスできません(詳細については、このブログ投稿を参照してください)。

私のシナリオのレポートには、レポート定義にいくつかのデータセットがあり、それぞれObjectDataSourceがページで定義されたものに対応していました。広範囲にわたるデバッグの結果、レポートは、HTTPリクエストを処理する同じスレッドのレポート定義で宣言された最初のDataSetのデータを取得することがわかりました。後続のデータセットは、メインのHTTPリクエストスレッドまたはスレッドプールスレッドのいずれかで取得されます。これらの後続のデータセットは、それがnullであるという例外を断続的にスローします。HttpContext.Current

DataSetが最初のスレッドの後に取得されるスレッドを予測または制御する方法はないようです。

于 2013-02-17T23:40:45.683 に答える