c# - 采用 WF 的 Web 应用程序的最佳设计是什么?

标签 c# wcf workflow-foundation-4

我们目前正在构建一个使用非简单审批流程的应用程序,其中涉及多个级别的审批、返回、审核、通知等。

由于上述要求,我们被要求使用工作流框架来提高流程透明度。

在原型(prototype)上,我们已经成功地整合了工作流程并且运行良好。但是,我们无法确定应该对用户可用的操作。例如,我有以下接收操作:create()、managerApprove()、RAApprove()、ORMApprove().. 现在,如果我按顺序调用它们,使用正确的用户名,它们就会工作。显然,如果我没有按顺序调用它们,那么它将抛出 FaultException,因为它不处于正确的状态。问题是,我如何知道可以在 UI 中公开哪些功能 - 比如说,如果它当前正在等待经理批准,那么只需为经理显示一个批准按钮...

作为解决方法,我创建了另一个 WCF 服务,它从数据库中检索相同的数据,然后确定正确的 UI 状态(用户可以执行哪些操作)。我认为这是逻辑上的重复,因为 WF 中已经假定了这一点。

此外,如果 WF 发生变化,那么我单独的 WCF 服务可能会中断。例如,如果我在工作流中切换审批顺序,那么我还需要更新 WCF 服务中的逻辑。否则,它会显示无效的页面状态并且单击批准将调用错误的方法并导致 FaultException。

任何帮助将不胜感激......我真的是 WF4 的新手。

更新:

我的同事是这样提出我的问题的:

采用 WF 的 Web 应用程序的最佳设计是什么?

考虑WF的主要原因 - 涉及的工作流程是长期运行的 - 工作流程是人类的工作流程——它们需要协调真人的行动 - 过程透明

此外,工作流应该如何与 UI 集成? - UI 如何知道应该处于什么状态以及向哪些用户显示哪些页面?

最佳答案

工作流本身并不直接公开信息。它在那里,因为每个挂起的 Receive 都是一个命名的书签,书签名称包含它支持的 SOAP 操作以及服务契约和 namespace 。最简单的方法是将 SqlWorkflowInstanceStore 添加到 WorkflowServiceHost 并检查带有挂起书签的列。它并不完美,因为它会为您提供上次保留的信息,这不一定是当前状态,但它在许多应用程序中对我有用。只需确保将 TimeToPersist 设置为相当低的值并在战略位置添加一些 Persist 事件即可。

关于c# - 采用 WF 的 Web 应用程序的最佳设计是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6118773/

相关文章:

C# 有无循环方式来写数组吗?

c# - WCF REST 服务和状态轮询

c# wcf - 在代理类上调用 open() 时抛出异常

c# - 如何处理 WCF 服务中的事务

.net-4.0 - 重新托管 Workflow 4 Designer 将 foreach 事件添加到工具箱

c# - 特定于语言的资源 dll 的 WF 4 错误

c# - 无法从 'method group' 转换为 'Func<string, string, bool>'

c# - netstandard20 中的 System.Data.Linq

c# - 允许 'pasting data' 进入 WPF 文本框

c# - 调试编码的 WorkflowServiceHost