收藏 分享(赏)

com-+-应用程序设计-08.ppt

上传人:无敌 文档编号:311573 上传时间:2018-03-27 格式:PPT 页数:34 大小:635.50KB
下载 相关 举报
com-+-应用程序设计-08.ppt_第1页
第1页 / 共34页
com-+-应用程序设计-08.ppt_第2页
第2页 / 共34页
com-+-应用程序设计-08.ppt_第3页
第3页 / 共34页
com-+-应用程序设计-08.ppt_第4页
第4页 / 共34页
com-+-应用程序设计-08.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

1、第1章 COM+ 服务介绍第2章 配置实时激活与同步第3章 使用 ADO.NET 处理数据第4章 事务服务 第5章 保证企业应用程序的安全 第6章 状态管理,组件应用程序设计 COM+ 应用程序设计,第7章 补偿资源管理器第8章 松耦合事件第9章 队列组件第10章 调试 COM+ 应用程序第11章 部署和管理 COM+ 应用程序第12章 COM+ 1.5 的增强,第8章 松耦合事件,8.1 事件模型与处理机制8.2 COM+的松耦合事件8.3 使用松耦合事件,8.1 事件模型与处理机制,一、事件模型的分类二、事件的处理机制,一、事件模型的分类,Windows 操作系统的事件的分为两种基本模型1

2、. 拉模型应用程序轮询或主动地监控资源或测试条件,当满足条件时激发事件2. 推模型应用程序首先指示对哪些条件感兴趣,然后订阅事件(到中介处),之后当事件发生时接到通知并执行事件处理程序。推模型事件也称订阅代理型事件,二、事件的处理机制,1. 轮询机制事件接收器定期轮询事件源以确定是否发生了某事件缺点:浪费系统资源2. 回调函数首先事件源负责定义事件函数的原型,事件接收器负责实现该函数,当事件发生时,事件源使用所提供的函数指针调用该函数(因此称为回调函数)3. .NET Framework 事件委托+回调函数(首先定义回调函数,然后以回调函数名为实参构造委托实例,再把委托对象传递给事件源)4.

3、COM 连接点事件接口+回调函数(首先事件源定义事件接口,事件接收器实现接口。在运行期间,客户端查询可连接对象相应的连接点,之后把事件接口指针传递给事件源。当事件发生时,就调用该事件处理程序),第8章 松耦合事件,8.1 松耦合事件介绍8.2 COM+ 的松耦合事件8.3 使用松耦合事件,8.2 COM+的松耦合事件,一、松耦合事件的必要性二、事件类三、订阅者四、发布者五、事件传递机制六、使用松耦合事件的方案,一、松耦合事件的必要性,1. 紧耦合事件紧耦合表示在应用程序运行期间,事件提交是点对点的,事件源产生事件和事件接收器响应事件。其本质上属于函数调用与被调用的关系。紧耦合事件不适合分布式应

4、用系统2. 松耦合事件(Loosely Coupled Events,LCE)基本思想:首先创建EventClass组件(定义事件接口),并注册到COM+目录中;然后创建订阅者(从COM+目录订阅事件接口并实现相应的事件处理程序);最后创建发布者(通过COM+目录调用由订阅者实现的事件处理程序),松耦合事件系统图解,发布者,COM+ 事件,IOrderEvents,EventClass 自动生成,IOrderEvents 的实现,COM+ 目录,发布者“激发” 事件,NewOrderReceivedBeginApprovalCancelApproval,Subscriber1,订阅者提供的 I

5、OrderEvents实现,Subscriber2,订阅者提供的 IOrderEvents实现,IOrderEvents,IOrderEvents,订阅者接收并 处理事件,订阅列表,二、事件类 EventClass,1. 事件类作用:定义事件接口应用:在COM+应用程序中辅助实现事务、事件队列和安全性。2. 事件接口是发布者能够激活的事件的集合(即由若干个事件函数组成)注意,在EventClass中,只描述事件函数的格式(包括函数的返回值类型、函数名、参数列表),三、订阅者 subscriber,1. 订阅者作用:从COM+目录中订阅事件,并根据事件接口的规定实现事件处理程序订阅者可全部或部分

6、订阅事件接口2. 订阅记录 subscription为了保证发布者能激发事件,订阅者从COM+目录订阅事件时,将生成订阅记录,以记录订阅者的身份(类标识符-CLSID),3. 订阅记录内容订阅记录保存在COM+目录的订阅列表中,4. 订阅的类型订阅记录可以是永久的、临时的、或者每用户的 (1) 永久订阅一直存在于 COM+ 目录中重新启动的时候就调入一般和程序的安装、卸载过程同步(2) 临时订阅订阅者用程序加入到 COM+ 目录中不永久存在在目录里重启后消失(3)每用户订阅永久和临时的订阅都可以是每用户(Per user) 的当用户登录到发布者时才启动事件传递,一旦退出,订阅被禁用。,四、发布

7、者Publisher,1. 发布者作用:激发事件(调用事件接口中的事件)2. 发布者记录 通常,订阅者对发布者不感兴趣,因此不要求发布者在COM+目录中注册如果订阅者要知道事件发布者的标识号,就是必需的3.访问发布者记录通过EventSystem 1.0类型库的IEventPublisher接口访问并操作发布者记录。4. 发布者记录字段包括PublisherID、PublisherName、PublisherType、OwnerSID、Description等,五、事件传递机制,1. 事件传递过程首先创建事件类、订阅者、发布者,并在COM+目录中注册事件类和订阅者,为订阅者创建订阅记录。在客户

8、端应用程序运行过程中,发布者访问COM+目录,激发事件。事件类对象随后把事件从发布者转发给订阅者。最后订阅者响应事件,并把事件处理程序的运行结果返回给订阅者。2. COM+事件系统 的作用控制事件传递支持多线程传递事件给订阅者负责激活订阅者3. 发布者过滤器当发布者过滤器控件可用的时候,发布者可以控制事件传递,六、使用松耦合事件的方案,LCE的使用场合在订阅者只关心事件,而不关心发布者的时候在订阅者没有启动,但仍然要激活订阅者的时候在订阅者必须过滤所有事件的时候LCE的应用方案同步方式当订阅者需要尽快收到事件时异步方式把事件类配置为 Queued Component (队列组件)时,第8章 松

9、耦合事件,8.1 松耦合事件介绍8.2 COM+ 事件8.3 使用松耦合事件,8.3 使用松耦合事件,一、实现 EventClass 对象二、注册 EventClass 对象三、创建订阅者四、配置订阅五、创建发布者六、持久和瞬态订阅七、配置订阅者筛选,操作演示,1. 简单的松耦合事件案例案例test8-1 , 设计步骤:S1:新建类库(创建事件类和订阅者组件)S2:注册COM+组件(使用REGSVCS工具)S3:在COM+目录中新建订阅记录S4:创建发布者(客户端)来测试事件,一、实现 EventClass 对象,1. 定义事件接口 注意:事件方法只能包含输入变量,不能有返回值和输出型变量2.

10、 定义实现事件接口的类注意,实现事件接口的类只是最终进行事件调用的实际事件对象的模板,因此在该类中的事件方法只能是空函数。3. 事件类的配置属性EventClass(FireInParallel=true) 允许并发调用的事件类Guid(“”) 事件对象的IDProgID(“”) 所属的COM+应用程序IDTransaction(TransactionOption.Disabled)禁用事务处理ObjectPooling(MinPoolSize=2, MaxPoolSize=100, CreationTimeout=1000) 配置对象池EventTrackingEnabled 启用事件跟踪,

11、二、注册 EventClass 对象,方法1:使用“组件服务”管理器 P229-P230方法2:使用 System.EnterpriseServices.RegistrationHelper方法3:使用 Regsvcs.exe 方法4:对非托管的 EventClass 对象使用 EventSystem 1.0 类型库(略)操作演示一个简单的组件注册程序 test8-1,三、创建订阅者,1. 订阅者的分类非托管的(未配置的订阅者)托管的(已配置的订阅者)2. 创建托管的订阅者的步骤S1:添加新类库;S2:对事件添加引用: System.EnterpriseServices、EventCalssS

12、3:声明从ServicedComponent 和事件接口继承的订阅者类S4:实现事件接口中声明的事件方法S5:生成组成并注册到COM+目录注意: 因为订阅者所实现的事件方法不是直接被发布者调用, 而是通过中介“事件类”对象调用的,因此订阅者组件可省略诸如安全性、事务等配置。另外,事件类对象是通过遍历订阅者列表为发布者传递事件通知的,因此必须在订阅者组件中添加订阅记录。,四、配置订阅,1. 为什么需要配置订阅发布者通过事件接口调用事件方法,而事件方法最终是订阅者实现并执行,通过配置订阅生成订阅记录,以保存事件接口与订阅者事件方法的映射关系2. 配置订阅的方法 方法1:使用 Component S

13、ervices 管理工具在订阅者组件中新建订阅,以创建持久性订阅方法2:使用 COM+ 1.0 管理库使用comadmin.dll提供的ICOMAdminCatalog接口编程完成配置方法:使用 EventSystem 1.0 类型库使用es.dll提供IEventSystem接口编写完成配置操作演示一个简单的能生成持久订阅记录的程序 test8-1,五、创建发布者,1. 发布者简述发布者的作用是激发事件,发布者可以客户端应用程序,也可以是一个组件。2. 创建发布者的步骤添加EventClass的引用创建一个 EventClass 的实例调用事件方法触发事件,六、持久和瞬态订阅,1. COM+

14、 目录集合SubscriptionsForComponent(持久订阅集)TransientSubscriptions(瞬态订阅集,即临时订阅)2. 枚举订阅集的方法(P240)通过ICOMAdminCatalog和ICatalogCollection进行3.托管瞬态订阅的方法创建实现事件的对象的实例(即订阅者)获得 TransientSubscriptions 集合设置 SubscriberInterface 属性并注册订阅操作演示一个简单的能生成瞬态订阅记录的程序 test8-1,七、配置订阅者筛选,可以用 组件服务管理工具或者用程序配置过滤标准串可以包含事件接口类型库中定义的参数名称标准

15、关系符号 (=, =, !, !=, , =,)嵌套圆括号逻辑连接词 AND、OR 和 NOT不是所有的数据类型都支持,(amt 500) AND (customerID != 42),八、操作演示,使用松耦合事件处理订单的批复问题实验8剖析,回顾,学习完本章后,将能够:了解为什么需要 LCE了解 LCE 系统的架构使用组件服务管理工具或以编程方式配置 LCE 系统实现发布者、订阅者和事件类,实验 使用松耦合事件,Contoso,Northwind账户,Lab Queued Order 应用程序,QueuedOrder.dll,Lab Purchasing Select 应用程序,Purcha

16、singSelect.dll,Lab Order Processing 应用程序,OrderProcessing.dll,Lab Order DocumentCRM 应用程序,OrderDocCRM.dll,Order ApprovalWin32 客户端,OrderApp Web站点客户端,Order1.xmlOrder2.xml,Dispatch 文件夹,COM+ 事件,Lab Contoso Web Dispatch 应用程序,WebDispatch.dll,Order Dispatch服务,Web Service调用,Lab Purchasing Update 应用程序,Purchasi

17、ngUpdate.dll,Northwind订单,OrderApprovalEvents.dll,随堂练习 1,下列事件处理机制中,哪些属于推模式。A. 轮询B. 回调函数C. .NET Framework 事件D. COM 连接点事件E. COM+ 事件,随堂练习 2,关于COM+ 事件类,下列说法哪些是正确的?A. 事件类必须参加到事务中B. 事件类中除了事件接口的方法外,不可以有其它方法C. 事件类中不能有字段D. 应给事件类明确地分配一个GUID E. 一个事件接口只能由一个事件类实现,随堂练习 3,为了将事件类OrderEvents 注册到COM+ 应用程序Order 下,我们选择使

18、用System.EnterpriseServices.RegistrationHelper 类注册事件类。在编写注册代码时,应为RegistrationHelper 对象提供什么参数以完成注册?A. 应用程序的名称“Order” B. 事件类OrderEvents 的类型库文件路径名C. 事件类OrderEvents 的程序集文件路径名D. 该事件类的订阅者列表,随堂练习 4,为了查阅COM+ 目录中的所有瞬态订阅信息,应使用以下哪个语句?A. ICOMAdminCatalog cat = new COMAdminCatalogClass() as ICOMAdminCatalog; ICat

19、alogCollection coll = cat.GetCollection(“TransientSubscriptions”) as ICatalogCollection; B. ICOMAdminCatalog cat = new COMAdminCatalogClass() as ICOMAdminCatalog; ICatalogCollection coll = cat.GetCollection(“SubscriptionsForComponent”) as ICatalogCollection; C. IEventSubscriptions cat = new EventSub

20、scriptions() as IEventSubscriptions; ICatalogCollection coll = cat.GetCollection(“TransientSubscriptions”) as ICatalogCollection; D. IEventSubscriptions cat = new EventSubscriptions() as IEventSubscriptions; ICatalogCollection coll = cat.GetCollection(“SubscriptionsForComponent”) as ICatalogCollection;,随堂练习 5,为COM+ 事件订阅添加筛选条件时,下列哪些符号可以出现在筛选条件字符串中?A. ANDB. + C. != D. *,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报