2012-11-29 66 views
0

我正在开发一个使用asp.net mvc4来管理我们的一些数据的内部网站点。此网站的一个重要功能是触发导入/导出作业。这些工作可能需要5分钟到1小时之间的任何时间。该网站的用户需要能够确定当前正在运行的作业以及之前作业的状态。许多工作通常会包含有关重复数据的警告消息,并且这些警告需要在网站上可见。在asp.net中长时间运行的工作流程mvc

我的计划是将这些长时间运行的进程作为一个WCF工作流服务来实现,该服务将与asp.net网站进行交互。我有很多通过活动实现的业务逻辑,并使用简单的控制台应用程序对其进行了测试。我应该注意到我正在使用关联句柄,以便根据网站上特定的“项目”对服务进行分区。

我的问题是如何查询活动作业(如果存在)的状态以及以前作业的警告消息。我怀疑这样做的最好方法是使用AppFabric跟踪服务,并让我的asp.net查询SQL监视存储并报告当前状态。设置AppFabric并添加自定义跟踪消息后,我遇到了一些问题。我的第一个问题是我无法弄清楚如何过滤掉没有使用正确关联句柄的工作流实例,因为我只想显示特定项目的工作流。另一个问题是跟踪数据库可能会延迟很多,这会导致我试图确定工作流程当前是否正在运行。

另一种可能的解决方案可能是让工作流明确更新数据库及其当前状态和任何错误消息。我倾向于这个解决方案,但可以使用一些专家的建议。

TL; DR:我需要知道查询WCF工作流服务的执行状态和任何警告消息的最佳方法。

回答

0

即使在工作流程完成后,您仍想查询工作流程状态和消息,我将首先创建一个表格,您可以将客户端发送的相关值转换为相关的工作流程ID。我将创建一个自定义活动来完成此操作,并在创建工作流的接收之后立即删除它。

接下来,我将创建客户端应用程序用于查询状态的常规WCF服务。此WCF服务可以查询WF持久性存储以查看给定的工作流是否仍在运行。如果是,活动书签列将告诉您工作流当前正在等待什么SOAP消息。

就消息而言,您可以使用AppFabric跟踪基础架构来存储和检索它们,也可以创建自定义活动并将它们存储在自己的数据库中。这真的取决于你是否也对生成的标准WF跟踪消息感兴趣。

更新上cheking运行的工作流实例:

但有几个缺点,以添加IsRunning消息,您的工作流程。对于你需要确保一个分支不断循环并等待消息,但一旦其他真实工作流分支完成就停止。当然可能,但它使工作流程变得复杂,并且是错误的可能来源。由于它不属于业务问题,就我而言,它在工作流程中确实没有任何地位。这也意味着您将不得不从磁盘加载工作流程并将其保留下来,以告诉您它在那里。如果完成,您将需要等待故障以指示没有工作流程实例。这通常意味着你在默认60秒之后得到一个超时异常。为此添加限制,并且您的请求可能会排队,因为有太多其他工作流实例或SOAP请求正在处理中。所以超时可能意味着工作流实例存在但由于系统限制而无法访问。相反,我会选择简单的事情,并检查实例存储中的记录是否仍然可用。来自活动书签列的其他信息将告诉您工作流正在等待的内容,我过去曾使用的信息通过启用/禁用UI元素来动态更新UI。

+0

我在考虑坚持使用标准的AppFabric跟踪,因为它可以让我也包含任何在tracelevel中标记为警告或错误的跟踪事件。监控存储持续跟踪消息多长时间?他们在达到某个年龄后被清除了吗? 只要查询活动WF实例的状态,您是否会建议使用持久性存储而不是修改工作流以使其具有一个并行活动,其中1个分支执行实际工作而另一个分支仅收到“IsRunning”消息? – Salec

+0

查看关于检查运行的工作流实例的更新后的文章。 – Maurice

+0

非常感谢!这真是有用的信息! – Salec

相关问题