我在WCF中托管了一个.Net 4.0 Workflow应用程序,它接受处理某些信息的请求。此信息通过Web服务传递到辅助系统,并返回一个bool,指示其将处理该信息。
我的工作流程然后循环,休眠5分钟,然后查询辅助系统以查看信息处理是否完成。
完成后,工作流程结束。
我在SQL中坚持这一点,并且它完美无缺。
我的问题是如何以这样一种方式检索持久工作流的列表,以便将它们绑定回原始请求?我希望我的UI能够在网格中列出正在运行的工作流程,并记录它们已经运行的时间。
我已经考虑过将工作流GUID存储在我的主数据库中并以这种方式生成列表,但我真正喜欢的是能够协调我认为正在运行的内容以及持久性商店认为正在运行的内容。
我还希望能够选择一个正在运行的工作流程并将其终止或完全重新启动它,如果用户确定它已经搞砸了。
答案 0 :(得分:3)
您可以使用SqlWorkflowInstanceStore从工作流中promote获取数据。结果是它们使用InstancePromotedPropertiesTable与InstancesTable中的工作流数据一起存储。使用InstancePromotedProperties视图是查询数据的最简单方法。
This博文将向您展示您需要的代码。
答案 1 :(得分:0)
另一个选项,使用WorkflowRuntime GetAllServices()。 然后你可以遍历每一个来提取你需要的数据。我会缓存结果,因为这可能是一项昂贵的操作。如果您只有100个或更少的正在运行的工作流程,并且页面上只有少数用户,请不要打扰缓存。
这样您就不必创建DAL或Repo图层。特别是如果你使用sql进行持久化。
http://msdn.microsoft.com/en-us/library/ms594874(v=vs.100).aspx