我无法找到关于此的任何信息,这让我觉得我做错了什么。我已经制作了一个ashx,为我们的登录用户提供安全的图像。问题是Sql Profiler跟踪显示在我们的会话状态DB中为通过此机制提供的每个图像调用TempResetTimeout。这个ashx是为了取代曾经做同样事情的aspx而导致的,因为许多图像和网络花园使用,yada,yada导致许多会话状态db死锁。这肯定是一种改进,因为对会话状态db的一次“Read Committed”调用较少,但是有一个更新的事实意味着我们仍然可以有一些死锁。基本上,我们希望通过使用这个ashx完全没有会话交互,但这似乎并没有发生。
我当然没有实现IRequiresSessionState接口,因此我认为我的ashx不应该以任何方式触及Session。我看到Global.asax会在每次出现时都出现问题,而Global.asax会在其某些代码中引用session。这导致我尝试通过web.config中的以下内容从任何类型的身份验证中排除此特定页面。
<location path="ImageHandler.ashx">
<system.web>
<authentication mode="None" />
</system.web>
</location>
...但是这会导致ashx根本不会触发(在ProcessRequest中没有显示图像并且没有命中断点)。我不确定为什么会这样。
如何让我的ashx ImageHandler不接触会话?
答案 0 :(得分: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中配置为应用程序的子文件夹的工作要多得多。