代码改变世界

《WF编程》系列之29 - 本地通信事件:HandleExternalEventActivity & 活动生成器

2007-08-07 22:12  Windie Chai  阅读(3860)  评论(1编辑  收藏  举报

4.2.2 HandleExternalEventActivity

像CallExternalMethod活动一样,HandleExternalEvent活动也有一个必须设置的InterfaceType属性.当我设置这个属性之后,我们就可以设置EventName属性了:


如果从本地服务而来的事件一直没有到达HandleExternalEvent的话,它就不会完成.假如事件有可能永远不会到达,或者事件需要过一段时间之后才会到达,那么最好把这个活动置于Listen活动内部.我在之前介绍过,Listen活动可以有多条分支,我们可以把Delay活动放到其中一条分支中来模拟超时.
Roles属性可以绑定到WorkflowRoleCollection对象并且允许Runtime执行基于角色的授权检查. WorkflowRoleCollection对象是一个集合,它的成员都派生自WorkflowRole抽象类,WF提供了两个WorkflowRole的实现:ActiveDirectoryRole类和WebWorkflowRole类,分别对应于AD和ASP.NET 2.0角色提供程序.Runtime会用集合中的角色来验证传入的用户标识,如果验证失败,Runtime会抛出WorkflowAuthorizationException异常.

4.2.3 活动生成器

Windows Workflow包含了一个命令行工具来执行Windows Workflow Communications活动生成器:wca.exe.
我们可以向wca.exe传递.NET程序集(.dll或.exe)的路径,这个工具会在程序集中寻找有ExternalDataExchange标识的接口.找到之后,它就会生成专门的自定义活动,可以执行接口中的方法和处理接口中的事件.

将wca.exe生成的代码作为Workflow ActivityLibrary项目的一部分进行编译之后,添加到工具箱里,我们就可以像使用其它基本活动一样使用wca.exe生成的活动了.
自定义活动不仅包含InterfaceType以及EventName或MethodName属性,还包含所有通信所需的参数.