WF-Activities之EventDrivenActivity ListenActivity
2010-08-19 18:15
316 查看
EventDrivenActivity一个容器,该容器内的第一个结点必需是一个继承 IEventActivity接口的Activity(可以进入idle状态的Activity,如Delay或HandExternalEvent),后面所有的结点可以是任意Activity。 IEventActivity 阻塞一些没解决的状态,如一个时间状态或一个外部消息的到来。当event完成,IeventActivity 完成运行,后面所有的Activity将执行
EventDrivenActivity一般用在以下两个部分
一是做为状态机结点 ,但是做为状态机结点是,这个EventDrivenActvity会有一些限制。那就是在 EventDrivenActvity容器中HandleExternalEventActivity 必须是第一个结点。
二是在ListenActivity中作为分支容器
分析下面流程:
我们采用ListenActivity做为容器,在ListenActivity这一节中,我们说过ListenActivity有着以下的特点单线触发容器,使用EventDrivenActivity作为分支容器,当某条分支中的结点执行完成后,该ListenActivity结点就结束,继续向下执行,其他分支内的结点就不执行了
我们在程序中:
将第一分支中的delayActivity1的TimeoutDuration属性设为00:00:06,将第二分支中delayActivity2的属性设为00:00:05,而第三分支则用handleExternalEvent来监听对应的事件。
到这里,我们可以知道我们这样做的结果是:当你在00:00:05之前触发了handleExternalEvent监听的事件时,工作流进入第三分支,执行完codeActivity3中的程序,工作流就结束了;如果没有触发事件,那么工作流进入第二分支,执行完codeActivity2中的程序,工作流就结束了;也就是第一分支永远不会执行。
事实实现在程序确实达到了这个效果,但实现在发现的过程中发现了这样一个问题,当第二分支结束完,我再去触发第三分支的事件,这时工作流就出现了以下异常
“Event "SubmitedMethod" on interface type "TestLocalService.ITestLocalServeice" for instance id "c968093d-16f3-4b48-94f6-372fc48a6c4e" cannot be delivered”
出现这个问题有两个原因:
第一个原因就是我们在handleExternalEvent中提过的,参数没有序列化的原因。在"innerException "中如果看见了“EventArgs not serializable”,那就是这个原因了
第二个原因就是工作流实例快已经被执行完了,因为工作流运行时不知道这个工作流已经执行完了,这时候工作流运行时会从WorkflowPersistenceServices这里找这个工作流实例,但很明显后者不存在的。在“innerException”中如果看见了“The workflow hosting environment does not have a persistence service as required by an operation on the workflow instance "SomeId".”,那就是这个原因了
下载
EventDrivenActivity一般用在以下两个部分
一是做为状态机结点 ,但是做为状态机结点是,这个EventDrivenActvity会有一些限制。那就是在 EventDrivenActvity容器中HandleExternalEventActivity 必须是第一个结点。
二是在ListenActivity中作为分支容器
分析下面流程:
我们采用ListenActivity做为容器,在ListenActivity这一节中,我们说过ListenActivity有着以下的特点单线触发容器,使用EventDrivenActivity作为分支容器,当某条分支中的结点执行完成后,该ListenActivity结点就结束,继续向下执行,其他分支内的结点就不执行了
我们在程序中:
将第一分支中的delayActivity1的TimeoutDuration属性设为00:00:06,将第二分支中delayActivity2的属性设为00:00:05,而第三分支则用handleExternalEvent来监听对应的事件。
到这里,我们可以知道我们这样做的结果是:当你在00:00:05之前触发了handleExternalEvent监听的事件时,工作流进入第三分支,执行完codeActivity3中的程序,工作流就结束了;如果没有触发事件,那么工作流进入第二分支,执行完codeActivity2中的程序,工作流就结束了;也就是第一分支永远不会执行。
事实实现在程序确实达到了这个效果,但实现在发现的过程中发现了这样一个问题,当第二分支结束完,我再去触发第三分支的事件,这时工作流就出现了以下异常
“Event "SubmitedMethod" on interface type "TestLocalService.ITestLocalServeice" for instance id "c968093d-16f3-4b48-94f6-372fc48a6c4e" cannot be delivered”
出现这个问题有两个原因:
第一个原因就是我们在handleExternalEvent中提过的,参数没有序列化的原因。在"innerException "中如果看见了“EventArgs not serializable”,那就是这个原因了
第二个原因就是工作流实例快已经被执行完了,因为工作流运行时不知道这个工作流已经执行完了,这时候工作流运行时会从WorkflowPersistenceServices这里找这个工作流实例,但很明显后者不存在的。在“innerException”中如果看见了“The workflow hosting environment does not have a persistence service as required by an operation on the workflow instance "SomeId".”,那就是这个原因了
下载
相关文章推荐
- WF-Activities之EventDrivenActivity ListenActivity
- wf HandleExternalEventActivity
- wf HandleExternalEventActivity
- WF handleExternalEventActivity 说明
- 通过AEC解读WF的核心原理(九)实现IEventActivity
- Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities
- Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities
- 在说wf HadleExternalEventActivity
- Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities
- 在说wf HadleExternalEventActivity
- 坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty)
- 点击控件以外的区域使页面(activity)关闭,dispatchTouchEvent用法
- Fragment如何调用所在Activity的dispatchTouchEvent(MotionEvent ev)函数
- 0008-APP-Activity-Recorder-Activities
- WF单元测试系列1:测试基本的Activity
- 在做Event-Driven SOA架构时的一些记录
- Activity中重载的dispatchTouchEvent 和 onTouchEvent不被调用
- WF活动(Activity)
- 重写Activity的dispatchTouchEvent与百度地图MapView事件冲突
- 从子activity返回数据给父activity------------Starting Activities and Getting Results