在提出问题之前,在你们因为有几个类似的问题而生气之前,我想解释一下项目要求是什么。您会发现该问题与其他问题不同。
- 用户将使用 ReHosted WPF 应用程序创建工作流程,并将 xaml 文件上传到我们将提供的网络应用程序。
- 启动工作流程执行的入口点位于该 Web 应用程序中。他们可以在自己的应用程序中使用 UI 或使用 API 函数。
- 工作流程将长时间运行。
我知道托管的不同可能性。
最简单的方法是将其托管在ASP.NET Web 应用程序中,但由于我们不知道用户将上传哪种工作流,IIS AppDomain 回收可能会中断工作流线程执行。
WCF 工作流服务看起来不错,但事实上用户将上传自己的 xaml 工作流定义,这使得事情变得更加复杂。看起来我们必须创建类似核心工作流程的东西,公开为WCF服务,并且该工作流程将加载并执行内部工作流程(客户上传的xaml)。不确定在这种情况下参数如何传递到内部工作流程。
第三个选项,也是我认为最好的一个,是在 Windows 服务 中托管工作流执行。 Web应用程序和窗口服务之间的通信可以通过MSMQ进行。该解决方案的缺点可能是 boylerplate 代码,以确保 Web 应用程序和 win 服务之间的良好通信。
我缺少更好的解决方案吗?如果您需要更多详细信息,请发表评论。
最佳答案
我有类似的要求,并与“问题解决者”进行了长时间的讨论。
which one is better architecture for the WF4.0?
现在我的结论是将 Workflow 开发为托管在 IIS 上的工作流服务。
您可以遵循这两种方法。
- 将工作流需求划分为更小的事件,它们可以是独立的 XAML 事件,并在工作流服务 (xamlx) 上拖放这些事件来创建工作流。在需要时将这些内容与 InArgument 和 Outargument 以及关联上下文相关联。
- 在数据库中创建和存储工作流程并动态加载它们。 很棒的链接—— http://blogs.msdn.com/b/appfabric/archive/2011/06/16/how-to-load-wf4-workflow-services-from-a-database-with-iis-appfabric.aspx
关于Workflow Foundation 4,执行工作流程的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11124384/