我有一个ASP.NET站点,我一直在做一些重构代码试图从实际的http请求中删除一些长时间运行的进程(大约一小时),创建一个BackgroundWorker并将工作发送到处理.这在剪切测试中运行良好但是当我将逻辑应用于实际代码时,我发现从后台工作器中运行的代码访问Session变量时出现问题.似乎传递的HttpContext对象有一个空会话,如果我要求HttpContext.Current我得到null.
我假设这是因为它们在不同的线程中,并且会话和HttpContext.Current都依赖于在同一个线程中.有什么方法可以让我从后台工作者访问Session,或者我一直在寻找会话中需要的所有变量并将它们置于可用的数据结构中,然后将它们放回会话中(如果合适的话)?如果我需要这样做,这显然会使重构变得复杂,所以我宁愿不这样做.
感谢您的任何想法.除了BackgroundWorker流程(我在另一个问题中向我建议)之外,我对其他如何做到这一点的建议持开放态度.
最佳答案 我不确定您的所有要求,但如果您不是在寻找与单个用户请求相关联的漫长过程,那么您可以使用应用程序缓存而不是会话.
如果是这样,我会尝试将您对Session的使用换成:
HttpRuntime.Cache.Set("CacheKeyName");
HttpRuntime.Cache.Get("CacheKeyName");