我有一个“企业”项目,它有很多层。 WinForms客户端连接到Web服务,该服务调用业务层,该业务层从另一个系统调用转换层,该系统又调用多个包装器以最终更新值。不是开玩笑 - 这就是12年的持续发展。
我现在必须将ID从客户端一直传递到数据库层。该ID必须与每个请求一起旅行。我最初的想法是一直探索它,但这将是非常耗费时间并且几乎不可能(大量的静态疯狂几乎一直在下降)。
所以我想在ASP.NET Web服务应用的ThreadLocalStorage
中将此ID分配给Application_BeginRequest
。然后,与数据库通信的最后一个库可以读取该值并将其传递给DB。
我的问题是:我可以计算从Application_BeginRequest
一直到链中最后一个库的线程亲和力吗?
答案 0 :(得分:4)
最好使用HttpContext.Items。
如果您决定使用异步页面HttpContext
(包含项目)将正确移动到新线程,但正常TLS不会。
请注意,如果您不依赖于ASP.Net线程管理(即创建自己的线程/使用线程池/或任何方法,如.ParallelFor
),则需要确保正确地将上下文传递给新线程(即在新线程的操作初期分配HttpContex.Current。如果您希望多个线程同时处理单个请求,我建议您不要使用HttpContext.Items
。