从appfabric查询工作流实例及其状态

时间:2015-03-04 19:01:27

标签: wcf workflow-foundation-4 workflow-foundation appfabric workflowservice

我正在研究WF4,工作流服务,使用Appfabric& amp;和大型系统实现业务逻辑。 IIS / WAS用于托管。

考虑信用审批工作流程:

  1. 客户服务代表(CSR)将信用申请输入 系统。
  2. 信贷经理将执行信用检查,并批准或拒绝该申请。
  3. 因此,工作流服务会在“批准”或“拒绝”WCF操作中等待输入,为每个操作创建一个书签。
  4. 我的问题:如何查询哪些工作流服务实例正在等待哪些书签,以便我可以通知用户?我需要能够显示与用户相关的工作流实例列表,以及它们所处的状态,例如:

      
        
    • 信用申请#434:John Smith [Approve] [Deny]
    •   
    • 订单#1234:可能的地址问题 [验证地址]
    •   

    我是否可以查询中央运行时或管理器对象以检索对工作流实例的WorkflowApplication引用?

    到目前为止,我已经找到了解决这个问题的方法:

    • 保留对每个WorkflowApplication的引用,并致电GetAllBookmarks()以获取有效书签列表。但在这种情况下,Appfabric正在启动/恢复我的工作流程 - 所以我没有提到WorkflowApplication。如果我被迫手动启动或恢复每个工作流实例,这会使Appfabric变得毫无意义。

    • 直接在SQL Server中查询Appfabric持久性表。因此,如果架构发生变化,则可能会破坏此代码。还意味着我必须同时处理2个数据库,并带来所有延迟问题。

    • 推荐方法:使用自定义跟踪参与者。据我所知,没有发出的TrackingRecord个对象会告诉你何时设置了书签。 TrackingRecord活动中有StateMachine个对象发出状态更改,但这会产生两个影响:1。所有等待输入都必须在StateMachine内发生(不是showstopper) ,但非常有限制),2。拥有多个等待状态会变得复杂。

1 个答案:

答案 0 :(得分:1)

对于任何感兴趣的人:我选择的解决方案是在我自己的数据库中使用一组完全独立的表来跟踪哪些业务操作正在等待哪些用户。

但它没有听起来那么糟糕。我创建了一组自定义Activity类/控件,其中包含此功能。

因此,我使用自己的Receive/Send而不是标准的Receive/Send活动,在等待接收之前,在表格中创建一个条目来表示"嘿我' m等待用户A,B,C采取行动X"。然后当它收到某些内容时,它会删除该工作流的条目。

真的很烦,不得不去解决这个问题。微软几乎把WF带到终点然后才停止。