1

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

我现在必须将一个 ID 从客户端一直传递到数据库层。ID 必须随每个请求一起移动。我最初的想法是一直探测它,但这将非常耗时并且几乎是不可能的(几乎一路下来都有大量的静态疯狂)。

所以我正在考虑在 ASP.NET Web 服务应用程序中分配这个ThreadLocalStorageID Application_BeginRequest。然后最后一个与数据库对话的库可以读取该值并将其传递给数据库。

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

4

1 回答 1

4

你最好使用HttpContext.Items

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

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

于 2013-04-01T23:32:52.803 回答