WF-Activities之EventDrivenActivity ListenActivity
2010-08-19 22:06
387 查看
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
- Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities
- 在说wf HadleExternalEventActivity
- 在说wf HadleExternalEventActivity
- Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities
- wf HandleExternalEventActivity
- wf HandleExternalEventActivity
- WF handleExternalEventActivity 说明
- 通过AEC解读WF的核心原理(九)实现IEventActivity
- Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities
- HandleExternalEventActivity
- WF中的自定义Activity(Custom Activities)(1)
- 窥探contiki的event-driven模型
- Activity实现上下左右滑动监听onTouchEvent()方法
- Android EventLine框架制作过程 三 Activity和Fragment之间的相互通信
- C++ SDL教程翻译 Lesson 03 Event Driven Programming
- Fragment如何调用所在Activity的dispatchTouchEvent(MotionEvent ev)函数
- [导入]WF中的常用Activity
- 坚持学习WF(5):自定义活动(CustomActivity)
- Activity与Service通信之EventBus