第1章 COM+:一次变革 1
1.1 COM+和说明性模型 2
1.1.1 COM与COM+之间的差别 3
1.1.2 COM和COM+的基本原理 4
1.1.3 使用接口的理论理由 8
1.1.4 使用接口的实际理由 10
1.2 RPC:COM接口的起源? 10
1.2.1 接口定义语言 12
1.2.2 COM和RPC的关系 14
1.3.1 在Visual C++中实现COM对象 16
1.3 IDL:开始或者结束? 16
1.3.2 Visual Basic 23
1.3.3 寻找注册的类型库 26
1.4 本章小结 33
第2章 COM基础知识 35
2.1 IUnknown的作用 35
2.1.1 Release() 37
2.1.2 AddRef() 40
2.1.3 QueryInterface() 41
2.2 COM存在于何处? 46
2.2.1 动态连接库(DLL) 46
2.2.2 一个COM+变化——代理进程 52
2.3 本章小结 54
3.1 虚函数表(vtables)、抽象基类和多态 55
3.1.1 作为抽象基类的接口 55
第3章 COM内幕 55
3.1.2 实际中的多态 56
3.1.3 虚函数表(Vtable)的内部结构 59
3.1.4 将RPC、DLL、类型库和虚函数表放在一起 65
3.2 COMCalc C++例子 66
3.2.1 在代码中指定GUID 71
3.2.2 从IUnknown继承 71
3.2.4 多重继承 72
3.2.5 QueryInterface()的实现 72
3.2.3 STDMETHOD、STDMETHOD-IMP和方法 72
3.2.6 类厂 73
3.3 本章小结 77
第4章 线程和套间模型 78
4.1 线程和进程 78
4.1.1 对线程和进程的理解 78
4.1.2 竞争状态和线程问题 79
4.2 套间(Apartmnents) 83
4.2.1 作为同步帮助的消息队列 84
4.2.2 线程和对象 87
4.3 列集接口 95
4.3.1 全局接口表(GIT)列集 98
4.3.2 进程之间移动接口 100
4.3.3 列集接口的艰难方法 101
4.4 声明套间 102
4.4.1 自由线程列集器(FTM) 103
4.4.2 线程中性套间(TNA) 107
4.5 本章小结 109
第5章 方法调用和列集 110
5.1 类型库列集 110
5.2 后关联 113
5.2.1 后关联的体系结构 114
5.2.2 调用参数和列集 115
5.2.3 后关联、类型库和IDispatch的故事 123
5.3 后关联、列集和oleautomation标记 128
5.3.1 J++和双接口 129
5.3.2 在J++中支持双接口或者自定义接口 133
5.3.3 检查包装器 135
5.4 本章小结 136
第6章 COM+目录 137
6.1 从INI文件到注册表再到目录 137
6.1.1 配置的组件和COM+应用程序 138
6.1.2 MMC 138
6.2 普通的COM+应用程序 139
6.2.1 安装或创建一个新的应用程序 142
6.2.2 应用程序标识 144
6.2.3 输入组件与安装组件对比 146
6.3 自动配置 149
6.3.1 COM+管理对象属性 149
6.3.2 介绍COM+管理对象 152
6.3.3 使用管理对象 153
6.4 一个快速的浏览:预先安装的COM+应用程序 156
6.4.1 COM+QC死信队列监听器 157
6.4.2 COM+实用程序 157
6.4.3 IIS进程内应用程序和IIS进程外缓存的应用程序 157
6.4.4 IIS实用程序 158
6.4.5 系统应用程序 159
6.5 CPC:一个探听的最好朋友 166
6.4.6 Visual Studio APE包 166
6.6 本章小结 167
第7章 环境 168
7.1 IObjectContext简介 168
7.2 COM和MTS集成 171
7.3 环境:两个不同的定义 173
7.4 COM环境实现 181
7.4.1 截取 188
7.4.2 环境、套间和自由线程列集器 189
7.5 理解和使用环境接口 191
7.5.1 IObjectContextInfo 191
7.5.2 ISecurityCallContext 193
7.5.3 IGetContextProperties 194
7.6 本章小结 196
第8章 事务 198
8.1 回退和提交 199
8.2 经典的事务和传统的数据库 199
8.3 一个事务情景 201
8.3.1 BEGIN TRANSACTION和COMMIT TRANSACTION命令 202
8.3.2 分布式事务 202
8.4 DTC 203
8.4.1 Escrow和两阶段提交 203
8.4.2 两阶段提交协议 204
8.4.3 系统失败和调和 204
8.5.1 使用未加工的DTC跨越多数据库协调事务 205
8.5 微软的DTC:真实性 205
8.5.2 事务征集中的不同 207
8.5.3 分布式事务和DTC小结 210
8.6 COM+事务 210
8.6.1 COM+事务说明性设置 211
8.6.2 RD:第一次看 214
8.6.3 COM+事务行为:表决 215
8.6.4 使用IContextState的出色的精细控制 221
8.7 事务、ASP页和IIS 222
8.8 本章小结 223
9.1 资源管理器 224
第9章 补偿资源管理器 224
9.2.1 Worker 226
9.2 CRM的组件 226
9.2.2 CRMClerk 227
9.2.3 Compensato 237
9.3 终止事务 241
9.4 处理恢复 242
9.5 当怀疑时 243
9.6 完成Compensator 244
9.7 CRM和隔离 251
9.8 本章小结 252
10.1 挂起消息发布的秘密 254
第10章 队列组件 254
10.2 介绍微软消息队列 256
10.2.1 作为中间件的MSMQ 256
10.2.2 MSMQ发送器实现 256
10.2.3 MSMQ接收器实现 259
10.3 从MSMQ到COM+队列组件 260
10.3.1 使用队列组件的异步方法调用 260
10.3.2 队列组件抽象:介绍播放器、监听器和记录器 263
10.3.3 QC内幕 269
10.3.4 事务的和非事务的队列 273
10.3.5 不同的队列类型:私有的和公有的 274
10.3.6 MSMQ和QC之间的互用性 275
10.3.7 持续性:通过消息传递对象 279
10.3.8 通知和回调 285
10.3.9 用于QC的某一微妙需求:需要发送器和接收器的并行应用程序配置 289
10.4 异步COM 290
10.4.1 异步COM实现 290
10.4.2 异步COM的不足 292
10.5 本章小结 293
第11章 事件 294
11.1 传统的COM事件 294
11.2.1 事件类 297
11.2 COM+事件模型:发行者和订阅者 297
11.2.2 创建一个事件类 298
11.2.3 编写和安装一个事件类 298
11.2.4 订阅 300
11.2.5 激发同步和异步事件 304
11.2.6 队列事件类与队列订阅者对比 304
11.3 事件过滤 305
11.3.1 发行者过滤器 307
11.3.2 实现发行者过滤器 311
11.3.3 发行者策略 315
11.4 本章小结 318
12.1 说明性安全 319
12.1.1 在一个角色中输入用户 319
第12章 安全 319
12.1.2 给一个角色授予权限 320
12.1.3 配置和编程安全 322
12.2 编程性安全 325
12.2.1 ISecurityCallContext 325
12.2.2 应用程序标识 326
12.3 安全边界 327
12.3.1 扮演 330
12.3.2 委托 333
12.3.3 掩盖 334
12.3.4 验证 336
12.3.5 配置扮演、委托和验证 337
12.4 更低级别安全 338
12.4.1 CoInitializeSecurity函数 338
12.4.2 CoSetProxyBlanket()函数 339
12.5 更低级别安全、角色和掩盖:把三者集合起来 339
12.6 本章小结 350
附录 351
附录A ADO和OLE-DB 351
附录B 通过活动的COM+同步 355
附录C 对象池 358
附录D 传送块数据,SAFE-ARRAY 360
附录E 队列别名参数 363
附录F 应用程序代理 370