繁体   English   中英

从工作流活动访问当前的 HttpContext?

[英]Accessing the current HttpContext from a workflow Activity?

我有一个 .NET 4.0 ASP.NET MVC 应用程序,它还托管一个 Workflow Foundation 4.0。 在此工作流中,一些自定义工作流活动将执行代码以使用 Linq 到 SQL 进行一些数据库更新。代码包括调用一个方法,该方法又调用一些其他方法等......我还有一个业务层,它有一个数据访问工厂,提供对包含数据库操作方法的所有数据访问对象的访问。

现在假设我的 WF 活动调用方法 A,后者又调用另一个 class 中的方法 B,后者又调用另一个 class 中的方法 C 结束 D。在这些方法中的每一个中,我都想检索我的数据访问工厂的相同实例,所以所有数据库操作都在同一个数据库事务上执行。 我将如何为我的数据访问工厂设计 singleton 模式? 请注意,方法 A、B、C 和 D 也可以从 Asp.Net MVC 控制器调用。

当从 asp.net mvc 控制器调用方法 A、B、C 和 D 时,很容易,我可以使用 HttpContext 来存储我的数据访问工厂 singleton,这样在一个 http 请求中我也可以获得我的数据访问工厂的相同实例。

但是当从 Workflow 活动调用这些方法时,当然没有 HttpContext。 我尝试了线程 static 变量,但在 web 应用程序中你不确定,方法 A、B、C en D 将在同一个线程上调用。 我也试过 CallContext,但我有经验,我并不总是检索同一个实例,所以显然 CallContext 也不是解决方案。

基本上,问题可以概括为“在 asp.net 应用程序中运行的后台进程中获取 object 的相同实例”(该后台任务是否被 WF 活动或后台任务的其他方式踢并不重要,例如使用任务 <T>)

与您的问题并没有真正相关,但是在 asp.net 应用程序中执行后台任务很糟糕,我是根据经验说的。

ASP.NET 中重复执行后台任务的危险

由于您的 object 需要跨进程和 memory 空间,因此我将创建一个 WCF 服务,将您的工厂托管为 singleton 实例。 这样,MVC 应用程序可以调入它,而 WF 应用程序可以调入它。

我知道这很旧,但我认为这也会有所帮助。

HttpContext.Current 在拦截器上检查时为 null

它在运行工作流服务 (.xamlx) 时,您希望将 OperationContext 与您的实体 object 一起使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM