我可以依靠ASMX Web服务应用程序中的线程关联吗?

时间:2013-04-01 23:22:18

标签: c# asp.net web-services thread-safety asmx

我有一个“企业”项目,它有很多层。 WinForms客户端连接到Web服务,该服务调用业务层,该业务层从另一个系统调用转换层,该系统又调用多个包装器以最终更新值。不是开玩笑 - 这就是12年的持续发展。

我现在必须将ID从客户端一直传递到数据库层。该ID必须与每个请求一起旅行。我最初的想法是一直探索它,但这将是非常耗费时间并且几乎不可能(大量的静态疯狂几乎一直在下降)。

所以我想在ASP.NET Web服务应用的ThreadLocalStorage中将此ID分配给Application_BeginRequest。然后,与数据库通信的最后一个库可以读取该值并将其传递给DB。

我的问题是:我可以计算从Application_BeginRequest一直到链中最后一个库的线程亲和力吗?

1 个答案:

答案 0 :(得分:4)

最好使用HttpContext.Items

如果您决定使用异步页面HttpContext(包含项目)将正确移动到新线程,但正常TLS不会。

请注意,如果您不依赖于ASP.Net线程管理(即创建自己的线程/使用线程池/或任何方法,如.ParallelFor),则需要确保正确地将上下文传递给新线程(即在新线程的操作初期分配HttpContex.Current。如果您希望多个线程同时处理单个请求,我建议您不要使用HttpContext.Items