请求结束前触发Application_EndRequest?

lin*_*rro 4 asp.net asp.net-mvc asp.net-mvc-3

我有一些简单的类需要在请求结束时处理.

为此,我DisposeApplication_EndRequest事件中的那些对象上调用方法Global.asax.

这"在我的机器上工作正常"但在我的生产服务器上导致了一些问题我Cannot access a disposed object.在一些MVC助手中发生了这种情况.

在我看来,Application_EndRequest在请求结束时被触发.这不是这种情况吗?我应该用另一个事件处理我的物品吗?

Rob*_*nik 5

应用程序池问题 - 可能

我怀疑你的一次性对象不是请求而是应用范围(它可以根据请求实例化,但可能使用一些共享资源).只要您在开发环境中测试应用程序,它似乎就像预期的那样行事,但只要您将其投入生产就会出现问题.这表示您可能遇到应用程序池问题.

IIS Web应用程序池功能实际上HttpApplication为您的应用程序实例化多个实例,并且它们可能共享公共可用资源.如果您的一次性物品就是这种情况并且您正在共享它,则可能是它不是线程安全的.如果不将共享资源使用包装在线程安全操作中,情况也是如此.

这就是为什么当一个请求正在进行时,另一个请求开始并且第一个处理该对象而第二个进程仍在使用它时可能发生这种情况.

更多信息总是有帮助的

如果您解释一次性物体/资源的性质以及您在应用程序中如何使用它,我们可以更好地帮助您.但与此同时,您可以阅读我的博客文章,其中讨论了应用程序池并处理它们.这不是关于一次性物品本身,但您仍然可以发现所有信息非常有用和有用.