質問

X-Masの休日の最後の数日間、私はASP.NETアプリケーションを通じてリモート共有でXMLファイルを読み取ろうとするとき、IHTTPasynChandlerの実装を使用してIREQUIRESSESTIONSTATEで長い間読み込もうとしています。

頭痛が多く、ハンドラーの外側のコードが完璧に動作し(アクセス許可を参照)、スレッドの問題であると思ったので、iHttpasynchandlerをihttphandlerに変更し、問題が消えました。

ここで私を悩ませているのは、テストの目的で、ihttpasynchandlerの実装が実際に使用しなかったことです(したがって、beginprocessRequestとendprocessRequestを使用しませんでした。

誰かが手元の問題を説明しようとすることができますか?

ハンドラーを非同期に使用する際には、いくつかの有益な問題があります。アプリケーションの後半で配信される値を事前にキャッシュできますが、そのためには、ihttpasynchandlerを実装するときにのみ明示されるように見えるセキュリティの問題に合格する必要があります。 。

よろしくお願いします。

役に立ちましたか?

解決

ASP.NETインフラストラクチャは、非同期ハンドラーを異なる方法で呼び出します(ImpLが本当に非同期であるかどうかに関係なく)。ネットワークリソースにアクセスするためになりすましに頼っていた可能性はありますか?私の推測では、必要なWindowsIdentityが実際にリクエストを処理したThreadPoolスレッドに流れなかったと思います(私はImpersonation + Asyncハンドラーを使用しようとしたことはありませんが、過去に他のスレッド状態のフローの問題に釘付けになったのです)。

とにかく、真の非同期ハンドラーは正しく実装するのに費用がかかります。他の多くのAsyncインフラストラクチャ(Async File I/O、Async DBクライアントなど)の上に構築されていない限り、それはあなたに良いことではありません(実際、最良の場合でも、非同期ハンドラーは生を傷つけますパフォーマンス)。パフォーマンスが必要なのは、非同期ハンドラーの余分な手間とオーバーヘッドを本当に正当化するかどうかを確認します(たとえば、プロセスのスレッドよりも多くの同時リクエストをサービスする必要があります)。

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