c# - 我可以指望 ASMX Web 服务应用程序中的线程关联吗?

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

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

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

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

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

最佳答案

你最好使用 HttpContext.Items .

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

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

关于c# - 我可以指望 ASMX Web 服务应用程序中的线程关联吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15753598/

相关文章:

asp.net - VB.NET-ASP.NET-不正确的用户名/密码(验证)

javascript - 鼠标悬停在图像上时的快速预览功能

java - 如何从 URL 调用 JAX-WS 方法

web-services - 将 asp.net 2.0 webmethod 设置为 GET 方法

c# - 展开异步操作,它是 TaskCompletionSource 中的异步回调

c# - 从另一个类或 c# 中的静态方法更改 wpf 元素/控件

c# - Silverlight 和一个表单应用程序

c# - 使用自定义 ImageListView 控件后出现表单收缩问题

c# - 在 ASP.NET 页面中加载 iframe

asp.net - 用于 Flex 4.6 前端的 ASP.NET 中没有 MVC 框架的 Web API