IHttpAsyncHandler导致UnathorizedAccessException

时间:2009-12-23 01:46:02

标签: iis-7 ihttphandler ihttpasynchandler

在我的X-mas假期的最后几天,当我尝试通过我的ASP.NET应用程序使用IHttpAsyncHandler的实现来读取远程共享上的XML文件时,我一直在努力解决UnathorizedAccessException问题。 IRequiresSessionState。

经过一番头痛,并得出结论,处理程序的代码OUTSIDE完美无缺(参见:访问授权),我认为这可能是一些线程问题,所以我将IHttpAsyncHandler更改为IHttpHandler,问题就消失了。

令我感到困扰的是,出于测试目的,我实际上没有使用IHttpAsyncHandler实现(因此,我没有使用BeginProcessRequest和EndProcessRequest - 只有sync。版本,ProcessRequest。

有人可以尝试解释手头的问题吗?

在异步使用处理程序时有一些有益的事情,因为我可以预先缓存稍后要在应用程序中传递的值,但为了实现这一点,我必须通过似乎只在实现IHttpAsyncHandler。

提前感谢您的帮助 - 祝节日快乐: - )

1 个答案:

答案 0 :(得分:1)

ASP.NET基础结构以不同方式调用异步处理程序(无论impl是否真的是异步)。您是否可能依靠模拟来访问网络资源?我的猜测是必要的WindowsIdentity没有流到实际处理请求的线程池线程(我从未尝试使用模拟+异步处理程序,但我已经在过去使用其他线程状态流问题)。

无论如何,真正的异步处理程序正确实现起来很昂贵。除非您构建在许多其他异步基础架构(异步文件i / o,异步数据库客户端等)之上,否则它对您没有任何好处(事实上,即使在最好的情况下,异步处理程序也会损害原始性能)。我想看看你的性能需求是否真的证明了异步处理程序的额外麻烦和开销(例如,你需要提供比进程中的线程更多的并发请求等)。