C# 如何保持执行线程';在ASP.Net中调用QueueUserWorkItem期间的上下文?
我们有一个ASP.NET应用程序,它使用C# 如何保持执行线程';在ASP.Net中调用QueueUserWorkItem期间的上下文?,c#,asp.net,.net,vb.net,threadpool,C#,Asp.net,.net,Vb.net,Threadpool,我们有一个ASP.NET应用程序,它使用System.Threading.ThreadPool.QueueUserWorkItem将一些长期运行的操作(例如,生成报告)排入ThreadPool 这种方法有两个问题: 我们使用特定的域服务帐户运行ASP.Net应用程序池,以便它可以访问远程资源,包括文件和数据库。当在线程池中开始执行时,线程的用户标识被设置为网络服务,这不允许我们访问远程资源 不同国家的用户可以同时访问web应用程序,我们提供给每个用户的数据格式基于他们的区域性设置(使用web.
System.Threading.ThreadPool.QueueUserWorkItem
将一些长期运行的操作(例如,生成报告)排入ThreadPool
这种方法有两个问题:
web.config
中的全球化设置:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="auto" enableClientBasedCulture="true" uiCulture="auto"></globalization>
此方法签名:
public static bool QueueUserWorkItem(
WaitCallback callBack,
Object state
)
接受状态对象。这可以是一个类的实例,该类包含用户的区域性以及需要持久化的任何其他项。此信息被传播回回调方法,您可以将其转换回类的实例。
您应该首先考虑的是从ASP.NET没有长时间运行的过程。事实上,您应该尝试将任何长时间运行的进程卸载到它所属的服务。Windows服务、WCF等
System.Threading.ThreadPool.QueueUserWorkItem(测试地址,新对象())
这可能是文化相关信息的问题。您必须将标识传递给回调方法。也许您可以发布一些关于如何进行区域性设置的代码?@Bryan Crosby:刚刚更新了关于区域性设置的详细信息。此外,可能还有一段关于您对线程池的调用的代码?这有帮助吗@布莱恩·克罗斯比:好的,增加了复制所需的最低限度的代码。