使用ASPNET的工作流程4:并发和状态检查

时间:2011-03-15 16:04:55

标签: workflow-foundation-4

我正在尝试为请求提交/批准/完成方案建模。我正在使用WorkflowServiceHost在控制台应用程序中托管作为服务的流程图工作流程。工作流具有对IIS中托管的WCF服务的服务引用,第二个服务与应用程序数据库交互。我有一个aspnet前端,其中包含对托管工作流服务的服务引用,并从代理客户端调用其方法。

工作流使用的是我使用提供的脚本创建的持久性数据库。

场景是用户提出服务请求。该请求必须由特定的人批准一次(我在一个分支中使用一个延迟的提示,如果没有决定到达则提醒该人,另一个分支是接收决定)。对于某些服务,请求必须具有第二个批准,可以由批准者池中的任何一个批准。一旦批准全部完成,请求将转到另一个人群中完成。

我有它工作,但有3个问题:

  1. 在aspnet主页中,我有一个请求列表,其中包含指向要批准/完成的页面的链接,并在代理上调用方法,之后它们重定向,但因为它全部是异步的,我不得不手动刷新主页查看更改后的列表。我是否坚持强迫页面每x秒刷新一次以解决这个问题,或者有没有办法让它同步/检查工作流状态/等待消息回来?只是点击按钮并且不知道动作是否成功,它不是非常互动。
  2. 有没有办法在游泳池中的其他人批准之后阻止某人批准请求?目前第二个人按下按钮时没有任何反应(这很好)。在工作流持久性数据库中,我可以看到阻塞书签是下一个活动(可能是由首先到达那里的人设置的),所以看起来好像第二次接收不会发生。我在WCF数据服务中有并发检查代码,但这从未触发,因为没有尝试更新数据库。我希望能够警告第二个人,其他用户首先到达那里。
  3. 我在Web应用程序中的主页列表是通过查询应用程序数据库构建的,但是是否可以查询工作流程以查找每个项目的状态,传递项目的ID(我使用id作为关联句柄) ?这样做是正常的还是人们通常只是查询应用程序数据库?

1 个答案:

答案 0 :(得分:0)

  1. 我想你可以创建一个Ajax调用来检查是否发生任何状态变化,只有在这种情况下才刷新页面。
  2. 如果您发送的WCF请求不再有效,则应收到错误,除非您使用单向消息传递,因为没有消息要发回错误。请注意,由于WF4中的错误,该消息可能在60秒后超时。没有真正的方法可以避免此问题,因为您将工作流状态检查为持久状态,并让用户根据该状态执行操作。即使您查询状态,工作流程本可以恢复但尚未保存。
  3. 要么可以工作,但我通常会查询工作流实例存储,因为它最接近实际的工作流状态。