从工作流Activity访问当前的HttpContext?

时间:2012-04-05 16:23:40

标签: c# asp.net-mvc workflow-foundation-4

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

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

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

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

基本上,问题可以概括为“在asp.net应用程序中运行的后台进程中获取对象的相同实例”(无论此后台任务是由WF活动还是其他任务引发都无关紧要背景任务的方式,例如使用任务< T>)

3 个答案:

答案 0 :(得分:2)

与你的问题没有关系,但在asp.net应用程序中执行后台任务很糟糕,我从经验中说。

The Dangers of Implementing Recurring Background Tasks In ASP.NET

答案 1 :(得分:1)

由于您的对象需要跨越进程和内存空间,我将创建一个WCF服务,将您的工厂作为单例实例托管。这样,MVC应用程序可以调用它,WF应用程序可以调用它。

答案 2 :(得分:0)

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

HttpContext.Current is null when checked on interceptor

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