【问题标题】:Windows Workflow Foundation WF4 - Workflow hostingWindows Workflow Foundation WF4 - 工作流托管
【发布时间】:2011-03-11 15:00:39
【问题描述】:

对于客户,我们正在创建的系统必须支持以下内容:
- 必须可以运行多个工作流,以及具有不同上下文(不同数据/业务对象)的相同工作流的多个实例。
- 一些工作流程将长期运行,涉及多个用户/客户端会话并等待外部用户输入。因此,工作流必须能够持久化并响应来自客户端应用程序的某些信号。这也意味着工作流的执行必须在服务器应用程序上完成(对吗?)。
- 我希望能够在服务器应用程序上运行各种工作流,并且我不想在工作流更改时重新部署服务器应用程序。

我的第一个想法是工作流服务。经过大量研究后,我得出结论认为这不是正确的路径,因为工作流服务基本上提供了从客户端应用程序中启动的工作流在远程位置执行活动的可能性。它是否正确?或者我可以将工作流服务用于上述场景吗?大多数示例和/或教程基本上都是 ReceiveSignal/Send 组合,两者之间有一些逻辑。

基本上,我想(从客户端应用程序)启动具有特定上下文(在工作流服务器应用程序中)的工作流。

最好的方法是什么?

非常感谢任何帮助!

【问题讨论】:

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


    【解决方案1】:

    至于你的要求:

    必须可以运行多个工作流,以及具有不同上下文(不同数据/业务对象)的相同工作流的多个实例。

    WF 没有问题。

    一些工作流程会长时间运行, 涉及多个用户/客户端会话 并等待外部用户输入。 所以工作流必须能够 坚持并响应一些信号 从客户端应用程序。这也意味着 工作流的执行必须 在服务器应用程序上完成(对吗?)。

    WF 专为可以与外部影响交互的长时间运行的任务而设计。但是,这并不容易实现。没有可以挂钩的通用解决方案。您可能必须设计与 Workflow Extensions 交互的自定义​​活动,以处理将用户输入移动到工作流中。将工作流暴露给外部也是如此,尽管 WF4 确实带有许多 WCF 活动,可用于完成此任务。

    我希望能够运行各种 服务器应用程序上的工作流程,我做 不想重新部署 工作流更改时的服务器应用程序。

    这更难实现。您必须至少将工作流与服务器代码分开。最简单的方法是将您的工作流存储为 xaml 和 load it at runtime,例如来自数据库。

    其他选项是使用某种在运行时加载工作流程序集的依赖注入框架(例如 Structure Map 或 Unity)。如果工作流程发生变化,您可以将新程序集放在服务器上,更改配置并重新启动。或者,您可以将工作流程序集隔离在它们自己的 AppDomain 中,在运行时加载它们,并在必须重新加载新版本时丢弃域。你做哪一个取决于你的要求;我实际上是在做第三种选择,因为我必须在运行时加载许多不同版本的工作流程序集,同时运行它们,而且它们通常具有嵌入式资源,因此阻止了我走 XAML 路线。

    我的第一个想法是工作流程 服务。经过大量研究我 断定这是不对的 自工作流服务以来的路径基本上 提供执行的可能性 远程活动 工作流在客户端应用程序中开始。是 这个对吗?

    我在标准 Windows 服务应用程序中托管我的工作流。我必须管理和维护客户端用来与我的工作流交互的 WCF 前端。据我所知,如果我理解正确的话,工作流服务似乎是稳定工作流的可行选择。在 AppFabric 中托管应用程序也是一个不错的选择,我相信它比使用 Windows 服务更简单。但无论主机是什么,您都有两种选择 - 您的工作流定义您的服务合同,或者您必须定义服务合同并处理所有执行和与您管理的工作流的通信。

    第一个是具有简单外观的稳定工作流的不错选择。这对您来说似乎不是一个好选择,因为您必须在工作流发生变化时动态加载它们;这需要工作流之外的逻辑来处理来自客户端的通信(“这是工作流 X 的新版本!”),还需要管理工作流的生命周期。

    您似乎必须找到某种主机应用程序(IIS WebService 应用程序、Windows 服务、AppFabric、Azure),定义您的 WCF 服务并将其联机,处理来自客户端的调用,将这些调用传达给您正在运行的工作流代码,然后必须加载并执行这些调用,并将结果返回到链上。

    我不禁注意到,您似乎对等待您的旅程准备不足。我强烈建议创建一个原型,该原型可以巧妙地切入您需求的最核心部分。带有 WCF 前端的托管应用程序(我建议使用 AppFabric),该前端加载基于 XAML 的工作流来处理客户端调用。一旦确定了简单版本,您就可以扩大范围以涵盖您的所有要求。

    【讨论】:

    • 非常感谢您的回答。它证实了我的怀疑:-)
    • 抱歉,我早就应该将您的答案标记为已接受。
    • 您好,我已经完成了 WCF Xamx WF 服务并将其托管在 IIS 中。我也启用了 sql 持久性。我编写了一个简单的客户端来调用 Web 服务并执行工作流。但我一次只能连接一个客户端。当我在连接第一个客户端时连接第二个客户端时,它会出错。
    • @KasunKoswattha 好吧,那太糟糕了。祝你好运。
    • @你会遇到这种情况吗?或者我们是否需要做任何配置或安装任何东西来同时运行多个瞬间?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多