2

我无法找到有关此的任何信息,这让我觉得我做错了什么。我制作了一个 ashx,它为我们的登录用户提供安全图像。问题是 Sql Profiler 跟踪显示在我们的会话状态数据库中为通过此机制提供的每个图像调用了 TempResetTimeout。构建这个 ashx 是为了替换一个曾经做同样事情但由于许多图像和网络花园的使用导致许多会话状态数据库死锁的 aspx,yada,yada。这绝对是一种改进,因为对会话状态数据库的“已提交读”调用减少了,但有更新的事实意味着我们仍然会遇到一些死锁。基本上,我们完全不希望使用这个 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 中配置为应用程序的子文件夹关闭它要付出更多的努力。

于 2009-08-31T15:11:08.687 回答