在我圣诞节假期的最后几天,当我试图通过我的ASP.NET应用程序读取远程共享上的XML文件时,我一直在为UnathorizedAccessException而苦苦挣扎。
在经历了许多令人头疼的事情之后,并得出结论认为处理程序外部的代码可以完美地工作(参见:授予访问权限),我认为这可能是一些线程问题,所以我将IHttpAsyncHandler更改为IHttpHandler,然后问题就消失了。
这里让我困扰的是,出于测试目的,我实际上没有使用IHttpAsyncHandler实现(因此,我没有使用BeginProcessRequest和EndProcessRequest -只使用了同步。版本,ProcessRequest。
有人能试着解释一下手头的问题吗?
异步使用处理程序有一些好处,因为我可以预缓存值,以便稍后在应用程序中传递,但为了让它起作用,我必须传递似乎只有在实现IHttpAsyncHandler时才会出现的安全问题。
提前感谢您的帮助-祝您节日快乐:-)
发布于 2009-12-23 11:52:27
ASP.NET基础设施以不同的方式调用异步处理程序(无论impl是否真正异步)。您是否可能依赖模拟来访问网络资源?我的猜测是,必要的WindowsIdentity不会流向实际处理请求的线程池线程(我从未尝试使用模拟+异步处理程序,但我在过去遇到过其他线程状态流问题)。
无论如何,正确地实现一个真正的异步处理程序是代价高昂的。除非你建立在许多其他异步基础设施之上(异步文件i/o、异步数据库客户端等),否则它不会给你带来任何好处(事实上,即使在最好的情况下,异步处理程序也会损害原始性能)。我想看看你的性能需求是否真的证明了异步处理程序的额外麻烦和开销是合理的(例如,你需要服务的并发请求比进程中的线程多得多,等等)。
https://stackoverflow.com/questions/1950253
复制相似问题