关于COM+事件系统的问题

Marksman 2000-03-26 07:19:00
加精
怎样使得COM+的事件订阅者是一个活动的COM组件呢?
也就是说如何让一个已经被创建的订阅者收到事件,因为我看见每当Fire事件时COM+总是
启动一个新的事件订阅者组件的实例。
是不是让活跃的订阅者收事件是一种错误的编程方式?
另外订阅者和事件类采用何种线程模式最适合呢?
...全文
694 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
fatty 2001-09-27
  • 打赏
  • 举报
回复
《Understanding COM+》--我两年都看过这本书了,清华出的,潘爱民译的!
Marksman 2000-04-03
  • 打赏
  • 举报
回复
什么时候出《Understanding COM+》呀!!!
国外的这类书要是国内有影印版就好了,可以快一点和便宜一点。
《COM原理与应用》性价比很高。不过里面还是有一点遗憾,就是例子不够详尽。
大概是应为内容太多的缘故。祝出更多的书,造福全人类。
Marksman 2000-04-03
  • 打赏
  • 举报
回复
我已明了。但是使一个运行期间组件接收COM+事件感觉意义不大。
另外,看了MSJ的一篇关于COM+事件系统的文章,里面好像提到现有的COM+版本不支持订阅的跨机器边界的能力。
另外一点,IEventSubscription不是从COMAdminCatalog取得,而是从IEventSystem取得。COMAdminCatalog中注册的仍然是永久订阅。
Marksman 2000-04-01
  • 打赏
  • 举报
回复
谢谢,我尽量试试吧。如果有了环境,别忘了马上告诉我:marksman@chinaren.com
sunjump@263.net。
现在我想解决如下问题:
1。如何创建临时订阅者在运行期间接收COM+事件系统的事件?
2。如何订阅另一台机器上的事件呢?
COM+真是神奇呀。
pam 2000-03-31
  • 打赏
  • 举报
回复
COM Catalog提供了一套对象库,树根对象的CLSID为COMAdmin.COMAdminCatalog,你可以用GetObject或者CreateObject获得树根对象,然后根据层次关系一直找到你要的那个发布者,把你的对象加到订阅表中。IEventSubstription接口的属性SubscriberInterface就是你要设置的对象指针。
要完成这项工作,你必须熟悉对象库的用法,特别要弄清楚COM Catalog对象树的结构,现在除了我前面提到的MSDN中的资料,没有其他的信息可供使用。我建议你可以参考MMC程序的Component Service add-on的对象层次结构,它也是用COM Catalog对象库实现的,但只是一个子集。
在Windows2000中,类似这样的技术还有很多,最典型的是活动目录的管理,你可以通过ADSI管理所有的网络资源。所以掌握这项技术对于以后在Windows平台上开展工作非常有帮助。
另外,我觉得MSMQ不需要活动目录的支持,但需要相应的服务。
我现在没有环境,可能帮不上忙了,你试一试吧。如果不行,也不用沮丧,毕竟不是你的错,是MS的问题,是正常现象。
Marksman 2000-03-30
  • 打赏
  • 举报
回复
另外,你说的例子里关于COM+事件系统的例子只是一个简单的永久订阅者。并不是你说的使用IEventSubstription临时订阅者的方式。
如果有空的话,请帮帮我吧。教我怎么使用IEventSubstription来做一个临时订阅。
十万分感激。
Marksman 2000-03-30
  • 打赏
  • 举报
回复
例子我已找到,正在看。但是QC需要MSMQ的支持,而要用到MSMQ的更多功能需要Active
Dirtory服务器,看来不适用于一些简单的无服务器的对等机器间的异步事件。
但我看见Windows2000还有一个AsynCall,是否是你所说的异步机制。
pam 2000-03-30
  • 打赏
  • 举报
回复
例子:http://mspress.microsoft.com/mspress/products/3282/
Marksman 2000-03-30
  • 打赏
  • 举报
回复
我在组件服务管理工具中COM+应用下我的事件类的属性对话框中没有找到将其设置为QC的
地方,是否在别的地方,亦或组件需要满足什么条件呢?
要是pam大哥能够给我个VB或VC的例子说明如何让一个exe进程获得指定事件类的临时事件订阅能力就太感谢了。如果这里写不下,请给我发email:sunjump@263.net 或 marksman@chinaren.net 。例子呀!!!
如果你有时间的话,万分感激。
因为我对这些系统对象编程还没有入门,所以MSDN对我来说太不形象了。
pam 2000-03-29
  • 打赏
  • 举报
回复
缺省情况就是这样的,但是你可以改变这种行为:
(1)订阅事件时有一个“Fire In Parallel”标记可以使多个事件并行进行,COM+采用多线程实现,但不保证顺序。
(2)把COM+的事件机制和异步机制结合起来,把事件类标记成QC组件。
其实你用了(2)就可以不用(1)了。
看起来你的应用很先进,已经用上COM+了,而且还用到了这些新的特性。难得。
Marksman 2000-03-29
  • 打赏
  • 举报
回复
另外,我发现Fire事件后,事件的发起者总是同步地等到事件的订阅者完成后才返回,
多订阅者并行时要等到最后一个完成,这样如果一个订阅者阻塞会不会造成事件的发起者
阻塞?怎么解决呢?
因为我想需要做到这样:事件源异步地Fire事件,而不会因为订阅者僵死而阻塞,事件
在一定时间内未被处理应被系统抛弃。这样的话会需要一种事件缓冲的机制,不知道
COM+事件系统怎么解决呢?
Marksman 2000-03-29
  • 打赏
  • 举报
回复
我找找先,谢谢
pam 2000-03-29
  • 打赏
  • 举报
回复
关于COM Catalog的编程说明可以从比较新的MSDN-Library中查到,我可以确认在99年时月份的MSDN-Library以及MS的MSDN网站(http://msdn.microsoft.com/)上包括这些信息。
路径为:
MSDN-Library
Platform SDK
Component Services
Reference
pam 2000-03-29
  • 打赏
  • 举报
回复
三个问题的看法:
(1)将组件标记为QC应该不成问题,是否你没找对地方?现在版本的VC不能认QUEUEABLE,以后的版本应该可以。
(2)线程模型,为简单起见,建议使用Apartment模型;如果考虑效率,可采用COM+的native(?)模型。
(3)在 COM Catalog的层次目录中,从根对象COMAdminCatalog开始找到订阅对象为止,然后调用IEventSubscription的方法。
另外,IMDB和Load Balance Server在Windows 2000的Server版本中都被去掉了,但是在Advanced Server中保留了Load Balance Server。
我没有做过COM+的应用,只是凭理解和以前看过的技术资料回答你的问题。关键还需要你自己摸索。
Marksman 2000-03-29
  • 打赏
  • 举报
回复
如何将组件标记为QC呢?我在事件类接口声明中写了QUEUEABLE结果vc不认。
COM+组件管理中也没有找到如何将事件类标记为QC。
还有,事件类的线程模式采用何种最好呢?
另外,我还没有做成功这个:一个正在执行的exe进程使用一个订阅者组件接受事件。
也就是说IEventSubscription如何使用来实现以上目的呢?
三个问题盼复。再次感谢。
by the way,我没有找到IMDB的影子,是否被取消了?
Marksman 2000-03-28
  • 打赏
  • 举报
回复
能够说的详细点呢?谢谢
或者,除了MSDN以外,还有哪里可以找到这些系统接口的编程使用方法呢?
如果有,请给我EMAIL吧。感激涕零。 Marksman@Chinaren.com
pam 2000-03-27
  • 打赏
  • 举报
回复
COM+的事件订阅分两种:永久的和短暂的。
通过COM+管理程序增加的事件订阅属于前者,每次激发事件时要创建一个新的实例。
像你这种情况应该使用短暂型的事件订阅,通过COM+ Catalog的接口IEventSubscription增加订阅信息即可。
第一部分 了解COM 第1章 COM概述 何谓CoM COM术语 COM利与弊 COM的好处 COM的局限性 COM组件与接口 何谓接口 接口特征 接口类型 接口规则 接口设计 COM组件的实现规则 实现IUnknown规则 内存管理规则 引用计数规则 COM激活 COM类型 COM客户机 COM服务器 ActiveX控件 COM与面向对象技术 包装 抽象 多态 继承 COMTrader应用程序 小结 第2章 由VC++建立并使用COM服务器 IDL文件 建立第一个COM服务器 定义自定义接口 实现IUnknown和自定义接口 完成COM服务器 生成测试客户机 用ATL建立COM服务器 关于ATL 用ATL建立进程内COM服务器 用ATL建立进程外COM服务器 线程与COM服务器 Win32多线程应用 线程COM组件 自动化与IDispatch 用VC++实现IDispatch ATL与自动化 Automation数据类型 再谈类型库 C++自动化客户机 VB自动化客户机 小结 第3章 用VB建立并使用COM服务器 选择COM项目 设计接口 描述接口 浏览接口 生成对象 使用ClassBuilder 增加属性 增加方法 增加事件与枚举 使用ActiveXDataObject(ADO) 在服务器组件中使用Recordset对象 在客户机组件中使用ADOR 生成断开的Recodset 生成自己的RecodsctS 使用用户定义类型 错误处理 服务器客户机错误处理 使用VBErr.Raise机制 在VB中使用线程模型 设置线程模型 了解再入性与公寓 小结 第二部分 COM与Internet 第4章 在VC++中建立并使用ActiveX控件 ACtiveX控件概还 属性与方法 控件与容器通信 事件与连接点 建立第一个控件 生成控件 测试控件 增加方法 增加属性 增加事件 增加属性页 允许属性保持 使用控件 建立复合控件 增加复合控件 增加功能 增加事件 处理复合控件事件 处理错误 使用控件 小结 第5章 在VB中建立并使用ActiveX控件 VB控件简介 约束与无约束控件 控件生成技术 属性类型 方法 属性配置 过程属性 环境属性配置 运行时只读属性 只在运行时有效的属性 扩展属性 容器属性 合成控件属性 可关联属性 持续与属性包 属性包 使用ActiveX控件界面向导 了解控件寿命 生成ActiveX控件 生成无约束控件 生成设计时数据约束控件 生成运行数据约束控件 小结 第6章 用VC++建立InternetCOM组件 IEActiveX控件 轻量级控件 安全控件 持续属性 文档对象模型编程 活动服务器组件 活动服务器页面 ASP页面的COM组件 小结 第7章 用VB建立InternetCOM组件 无窗口控件 ActiveX控件容器的线程模型 ActiveX控件的安全性 Web页面访问 VBDHTML项目 DHTML项目基础 DHTML应用程序样本 VBIIS应用程序 WebClass 一个IIS应用程序样本 设计控件 设计控件与HTML文件 样本设计控件 小结 第三部分 了解DCOM 第8章 DCOM概述 何谓DCOM 为什么使用DCOM DCOM操作 DCOM组件位置 进程内或进程外组件 代理 RPC(RemoteProcedureCall,远程过程调用) 调动 数据传递 DCOM配置实用程序 DCOM应用程序的安全机制 验证 授权 加密 整性检查 小结 第9章 用VC++建立DCOM服务器 标准与自定义调动 标准调动 自定又调动 网络通伯 远程激活 AppID注册表项 可配置AppID注册表项参数 IUknown优化 DCOM与NT服务 NT服务解剖 基于NT服务的COM服务器 小结 第10章 用VB建立DCOM服务器 应用程序对象模型 何谓对象模型 如何生成对象模型 DCOM设计准则与技术 再论调动 按数值与按引用 DCOM进程外服务器 建立DCOM组件 增加测试客户机 IIS应用程序 增加WebClasses 使用模板 增加自定义Webltems 远程错误处理 小结 第四部分 了解COM++ 第11章 COM++概述 COM与WindowsDNA 用户界面层技术 中间层技术 数据库层技术 组件服务配置 事务处理 排队组件(QC) 实时结构的限制 事务性消息排队 排队组件结构 排队组件故障恢复 QC安全性 动态负荷平衡 对象地 小结 第12章 用VC++建立COM++组件 ADO编程 ADO与OLEDB VC++中的ADO VC++的ADO扩展 建立COM++应用程序 温习IObjectContext接口 用ATL建立COM++组件 编制基于角色的安全性 处理COM+事务 控制事务结果 指定事务属性 确定事务情境 传递接口指针 共享状态 建立事务性COM+组件 小结 第13章 用VB建立COM+组件 了解事务 事务与多层应用程序 COM+与事务 事务属性:ACID COM+系统简介 COM+运行环境 COM+ComponentServices COM+接口 资源分配器 应用程序组件 探索COM+编程模型 COM+组件作为COMDLL 基本COM+编程规则 COM+API 用VB编程COM+ 对象描述表 COM+组件的生命周期 ObjectControl接口 MTS活动 COM+中生成对象 安全引用 组件之间的参数传递 数据类型 使用分布式事务 分布式事务协调器(MSDTC) COM+事务的工作 事务与有状态对象 使用共享属性管理器(SPMSharedProperyManager) 小结 第14章 了解MSMQ 何谓MSMQ MSMQ的好处 MSMQ组件 队列 消息 MSMQ对象模型 MSMQ设置 MSMQ基础 消息发送 消息接收 MSMQ事件 MSMQ事务 小结 第五部分 高级COM与COM+ 第15章 VC++与VB中的COM+服务 了解COM+激活 描述表包装器 激活顺序 使用即时(JIT)激活 使用对象构造 中性公寓简介 了解同步域 表示事务状态 取得对象信息 使用对象地 对象池的好处 对象地要求 对象地配置 使用排队组件 QC限制 QC配置 QC调用 QC播放控件 使用负荷平衡 负荷平衡要求 负荷平衡配置 小结 第16章 COM与COM+安全性 何谓安全性 WindowsNT安全简介 NT验证 NT扮演 NT访问控制 COM安全结构 验证 访问控制 启动权限 标_ 扮演与掩盖 安全总括 COM+安全 COM+说明性安全 COM+角色 编程COM与COM+安全 整个进程安全 接口级安全 激活安全 服务器方安全 调用描述表安全信息 SecuntyProperty信息 安全性与数据库访问 小结 第17章 Windows2000中的新COM特性 同步机制 COM同步API COM同步接口 异步COM 异步接口构造 异步接口调用 关于异步服务器与客户机 让服务器进行异步处理 调用序列化与自动完成 COM管道 COM管道接口 异步管道与提前读取 调用对象与调用取消 调用取消请求 调用取消处理 轻量级处理器 标准LWH 自定义LWH 小结 第六部分 调试与部署COM和COM+应用程序 第18章 调试与剖析COM和COM+应用程序 调试VB组件 调试MTS组件 调试COM+组件 使用条件编译 调试VC++组件 用VisualStUdioAnalyzer剖析 小结 第19章 部署COM与COM+应用程序 DCOM应用程序部署 配置DCOM服务器 配置DCOM客户机 在Internet上部署 Internet上部署与包装 签名CAB文件 许可ActiveX控件 自动化COM+配置 使用COMAdmin接口与集合 配置COM+应用程序 配置组件 配置角色 部署COM+应用程序 小结

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧