学习<>之 WF程序队列(摘录)

1.任何需要外部实体输入的活动,都必须解决两方面问题

    第一:必须要让外部实体知道该活动需要输入消息

    第二:当消息到达时,接收通知

 这种简单的方式是片段式执行的核心,要支持这种方式,最基本的要求是活动必须能接收输入,即使是在WF程序实例处在空闲状态,甚至是存储在类似SQL Server数据库这样的持久化存储设备中时,也要能够接收输入.当外部输入到达时,WF程序实例必须能够恢复执行

2.尽管各种通信技术(比如:WCF,ASMX)可以构建在WF之上,但是如果要将数据发送到已经钝化的WF程序实例,必须使用WorkflowQueuingService

3.WF程序队列本质上是一个具有名称的占位符,无论活动所在的WF程序实例是否在内存中,活动都可以从这里接收数据,WF程序队列不同于WF程序实例的调度器队列,后者是由运行时管理的,可以把WF程序队列看成一个数据结构,这个数据结构保存了显示创建的书签的负载(这个负载将会传递到书签的物理恢复点).WF程序队列是一个可以寻址的占位点,外部实体可以将数据发送到这里.

4.在多个WF程序实例中,可能使用了相同的WF程序队列名称,我们可以执行任意数量的WF程序实例,而不会有任何问题,因为数据总是通过WorkflowInstance.EnqueueItem方法将数据发送到指定的实例中,所以不会造成任何歧义,也就是说,WF程序队列不在WF程序实例间共享,这使我们可以把WF程序队列的逻辑地址当成WorkflowInstance.InstanceId,  后者标出WF程序实例.

5.WF程序队列扮演着外部实体和WF程序实例中活动之间通信管道的角色,WF程序实例的外部代码可以通过EnqueueItem方法,将数据送入WF程序队列中.当一个队列项进入WF程序队列时,就会触发QueueItemAvailable事件,如果活动订阅这个事件时,WF程序队列中已经存在队列项,就会立即触发QueueItemAvailable事件

测试WF程序队列的实例,可以点击这里下载 (开发工具vs2008)

运行结果:

原文地址:https://www.cnblogs.com/goyier/p/1312696.html