如何检索的HttpContext属性,当它返回null?
-
22-08-2019 - |
题
我使用做在一个单独的线程一些异步工作:
ThreadPool.QueueUserWorkItem()
和在该单独的线程,我需要调用HttpContext.Current
这样我可以访问:
HttpContext.Current.Cache
HttpContext.Current.Server
HttpContext.Current.Request
然而,当我创建这个单独的线程HttpContext.Current
为空。
问题
如何创建一个新的线程,这样HttpContext.Current
不为空?还是有另一种方法,我可以访问缓存,服务器,并请求对象?
解决方案
我想尝试不举行参照取决于像的HttpContext的ASP.NET栈上的对象。如果你需要做的在不同的线程一些工作,那是因为你不想在ASP.NET一个要等到你的任务就完成了。也许当你的线程不是请求/上下文/会话终止。
您应该通过与需要为您的线程数据的对象。
其他提示
您可以访问ASP.NET缓存中的 HttpRuntime.Cache ,即使你没有一个HttpContext的,可惜你不能访问服务器或请求。
如果你仔细想想,这是有意义的 - 你不投放任何网页,让你没有请求
在1-添加<system.serviceModel>
底部代码在Web.config文件:
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
2-名称空间后添加底代码在web服务文件:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
3-重建Web部件项目。 完成!
有关HttpContext.Server服务,您可以使用HttpServerUtility类。 对于高速缓存可以使用HttpRuntime.Cache,因为上面已经说了。 对于请求对象,你可以从请求到线程创建时传递数据。事情是这样的Request.QueryString或的Request.Form ...或什么的。
有一个线程池实现此处提供调用线程的HTTP上下文的传播。我还没有使用它,但是我打算。
不隶属于 StackOverflow