WEB开发网
开发学院软件开发C语言 《WF编程》系列之47 第八章 工作流中的通信 阅读

《WF编程》系列之47 第八章 工作流中的通信

 2010-10-01 08:20:45 来源:WEB开发网   
核心提示:独立存在的工作流并不是很多,大多数工作流还是需要和本地或远程的服务通信来完成它们的工作,《WF编程》系列之47 第八章 工作流中的通信,在前面的章节中,我们已经看到了在WF中的一些基本的构造块,如果有人居住在这里,我们就能完全肯定我们已经把包裹寄送给了预定接收者,这些构造块包括了诸如HandleExternalEven

独立存在的工作流并不是很多。大多数工作流还是需要和本地或远程的服务通信来完成它们的工作。在前面的章节中,我们已经看到了在WF中的一些基本的构造块。这些构造块包括了诸如HandleExternalEvent和WebServiceInput这样的活动。

本地通信服务回顾

我们知道,本地通信服务允许工作流和它们的宿主进程交换数据。在第3章,我们定义了一个服务来触发BugAdded事件到正在运行的工作流,这将依次调用服务的AssignBug方法。该服务通过事件发送数据到工作流,而工作流则通过调用方法发送数据到服务。

《WF编程》系列之47 第八章 工作流中的通信

上面的截图展示了工作流运行时是如何扮演本地通信服务和工作流实例之间的那道屏障的。运行时从本地服务截取事件,并沿着这些事件跳转到恰当的工作流实例上。这种交互是必须的,因为等待事件的工作流实例可能已经从内存中被卸载了,并持久化到数据库表中。运行时可以在发送事件的时候要求持久化服务重新加载工作流,但它首先会需要一个工作流实例ID。即使工作流仍然在内存中,运行时还是需要一个实例ID来定位合适的工作流。运行时所使用的这个实例ID,是ExternalDataEventArgs对象在事件传递期间所需要的。

在许多方面,我们可以把实例ID认为是在寄送包裹上的街道地址。给出一个街道地址,我们就可以将包裹寄送到正确的房子。如果有人居住在这里,我们就能完全肯定我们已经把包裹寄送给了预定接收者。然而一旦街道地址把我们带到了一件办公楼又如何是好呢?我们并没有充足的信息来把包裹与它的预定接收者联系起来。

1 2 3 4 5 6  下一页

Tags:WF 编程 系列

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接