2

これに関する情報を見つけるのに苦労しているため、何か間違ったことをしていると思います。ログインしたユーザーに保護されたイメージを提供する ashx を作成しました。問題は、Sql Profiler トレースが、このメカニズムを介して提供されるすべてのイメージに対して、TempResetTimeout がセッション状態 DB で呼び出されていることを明らかにすることです。この ashx は、同じことを行っていた aspx を置き換えるために構築されましたが、多くの画像と Web ガーデンの使用により、多くのセッション状態データベースのデッドロックを引き起こしていました, yada, yada. セッション状態データベースへの "Read Committed" 呼び出しが 1 つ減ったため、これは間違いなく改善されていますが、更新があるという事実は、まだデッドロックが発生する可能性があることを意味します。基本的に、この ashx の使用によるセッションの相互作用はまったく必要ありませんが、それは起こっていないようです。

私は確かに IRequiresSessionState インターフェイスを実装していないので、私の ashx は決して Session に触れるべきではないと信じるようになりました。ただし、発生するたびに Global.asax がヒットし、コードの一部で Global.asax がセッションを参照していることがわかります。これにより、web.config の次の方法で、この特定のページをあらゆる種類の認証から除外しようとしました...

<location path="ImageHandler.ashx">
<system.web>
    <authentication mode="None" />
</system.web>
</location>

...しかし、これによりashxがまったく起動しなくなります(画像が表示されず、ProcessRequestでブレークポイントがヒットしません)。なぜそれが起こっているのかわかりません。

ashx ImageHandler がセッションにまったく触れないようにするにはどうすればよいですか?

4

1 に答える 1

3

SessionState はアプリケーション レベルで設定されるため、ASP.NET 要求のセッションを無効にする唯一の方法、IIS の独自のアプリケーションにセッションを配置し、セッション状態をオフにすることです。

<system.web>
    <sessionState mode="Off" />
</system.web>

http://msdn.microsoft.com/en-us/library/h6bb9cz9.aspx

独自のセッション状態モジュールを作成することもできますが (おそらく既存のものをラップしようとします)、別のフォルダーをアプリケーションとして設定するか、ルート アプリケーションでそれを置き換えるために IIS 構成が必要になります。

http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatemodule.aspx

ただし、IIS でアプリケーションとして構成されている 1 つのサブフォルダーに対してオフにするよりも、はるかに手間がかかるように思えます。

于 2009-08-31T15:11:08.687 に答える