【问题标题】:Accessing the current HttpContext from a workflow Activity?从工作流 Activity 访问当前的 HttpContext?
【发布时间】:2012-04-05 16:23:40
【问题描述】:

我有一个 .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 和 D 将在同一个线程上调用。我也尝试过 CallContext,但我经历过,我并不总是检索同一个实例,所以显然 CallContext 也不是解决方案。

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

【问题讨论】:

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


    【解决方案1】:

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

    The Dangers of Implementing Recurring Background Tasks In ASP.NET

    【讨论】:

    • 那么正确的解决方案是(如果我对文章的理解正确的话)作为 Windows 服务托管的 WCF 服务?我可以使用同样的 Windows 服务来托管工作流主机吗?
    • msdn.microsoft.com/en-us/library/ms733069.aspx - 看起来有可能。我没做过
    【解决方案2】:

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

    【讨论】:

    • WCF 服务中的单例将不起作用,因为每个调用都会收到相同的 dao 工厂实例。并且一个 dao 工厂与一个事务相关联,因此不同的 wcf 调用会干扰彼此的事务。所以在 WCF 服务中,我必须使用 CallContext?
    【解决方案3】:

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

    HttpContext.Current is null when checked on interceptor

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多