0

在我圣诞节假期的最后几天,当我尝试通过我的 ASP.NET 应用程序使用 IHttpAsyncHandler 的实现和 IRequiresSessionState 来读取远程共享上的 XML 文件时,我一直在与 UnathorizedAccessException 作斗争。

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

在这里困扰我的是,出于测试目的,我实际上并没有使用 IHttpAsyncHandler 实现(因此,我没有使用 BeginProcessRequest 和 EndProcessRequest - 只有同步版本,ProcessRequest。

任何人都可以尝试解释手头的问题吗?

异步使用处理程序有一些好处,因为我可以预先缓存要稍后在应用程序中传递的值,但要让它工作,我必须通过似乎只在实现 IHttpAsyncHandler 时才出现的安全问题.

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

4

1 回答 1

1

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

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

于 2009-12-23T03:52:26.857 回答