[英]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 应用程序中执行后台任务很糟糕,我是根据经验说的。
由于您的 object 需要跨进程和 memory 空间,因此我将创建一个 WCF 服务,将您的工厂托管为 singleton 实例。 这样,MVC 应用程序可以调入它,而 WF 应用程序可以调入它。
我知道这很旧,但我认为这也会有所帮助。
HttpContext.Current 在拦截器上检查时为 null
它在运行工作流服务 (.xamlx) 时,您希望将 OperationContext 与您的实体 object 一起使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.