第I部分 关键技术
第1章 了解分布式体系结构
1.1 什么是分布式应用程序
1.2 客户端/服务器体系结构
1.2.1 客户端/服务器体系结构存在的问题
1.3 分布式体系结构
1.3.1 分布式体系结构的优点.
1.3.2 DCOM和分布式应用程序的历史
1.3.3.NET分布式技术
1.4 小结
第2章 .NET组件
2.1 什么是组件
2.2 组件在分布式系统中的角色
2.2.1 服务提供者
2.2.2 信息包
2.3 示例组件剖析
2.4 IComponent接口
2.4.1 在设计时使用组件
2.4.2 资源与可使用类
2.5 连接字符串和配置文件
2.5.1 Visual Studio.NET中的配置文件
2.6 部署程序集
2.6.1 共享程序集
2.6.2 搜索私有程序集
2.7 程序集的版本
2.7.1 共享程序集以及GAC
2.7.2 延迟签名
2.8 使用配置文件和共享程序集
2.8.1 强名称程序集的版本策略
2.8.2 共享程序集的代码基础
2.8.3 关于程序集绑定的决定性内容
2.9 小结
第3章 无连接数据:通用语言
3.1 分布式系统中ADO.NET的角色
3.2 ADO.NET对象族
3.2.1 数据对象
3.2.2 直接数据源交互
3.2.3 直接杏询和数据读取对象
3.2.4 存储过程
3.2.5 不知道提供者的ADO.NET代码
3.2.6 事务
3.3 DataSet
3.3.1 创建DataSet
3.3.2 DataSet间接列映射
3.3.3 浏览DataSet
3.3.4 关系
3.3.5 从DataSet更新
3.3.6 更新的问题
3.3.7 处理错误
3.4 XML 与平台问的数据交换
3.5 小结
第4章 .NET远程处理:更持久 的DCOM
4.1 分布式系统中.NET远程处理的作用
4.2 .NET远程处理基本知识
4.2.1 可序列化的类
4.2.2 可远程调用的类
4.2.3 远程组件宿主
4.3 关键的.NET远程处理设计决策
4.3.1 激活模式
4.3.2 对象生存期
4.3.3 服务器和客户端激活
4.3.4 通信
4.4 简单的远程处理服务器
4.4.1 远程对象
4.4.2 组件宿主程序
4.4.3 客户端应用程序
4.4.4 具有用户接口的远程组件
4.4.5 使用Visual Studio.NET进行测试
4.4.6 使用一个不同的格式化器
4.4.7 使用多信道
4.5 单独调用对象
4.6 单独对象
4.7 双向通信
4.7.1 使用事件
4.7.2 使用委托
4.8 配置对象生存期
4.8.1 修改生存期
4.8.2 使用租约发起者
4.9 常见的远程处理异常
4.10 小结
第5章 XML Web服务(RPC便捷之路)
5.1 XML Web服务在分布式系统中的作用
5.2 .NET远程处理与XML Web服务
5.3 XML Web服务管道
5.3.1 IIS的作用
5.3.2 新建虚拟目录
5.3.3 XML Web服务文件格式
5.4 创建XML Web服务
5.4.1 数据序列化
5.5 测试XML Web服务
5.5.1 WSDL文档
5.6 使用XML Web服务
5.6.1 检测代理类
5.6.2 使用代理类
5.6.3 调试Web服务
5.7 ASP.NET平台服务
5.7.1 SOAP头与SOAP扩展.
5.8 发布XML Web服务
5.9 跨平台XML Web服务
5.10 小结
第6章 线程化客户端(响应界面)
6.1 什么是多线程?
6.2 分布式系统中线程客户端的角色
6.3 .NET线程
6.4 异步委托
6.4.1 异步远程调用
6.4.2异步Web服务调用
6.5 等待句柄
6.6 回调
6.7 异步I/O
6.8 定制线程
6.8.1 线程优先级
6.8.2 线程管理
6.8.3 线程调试
6.9 加锁
6.9.1 竞争条件
6.9.2 死锁
6.9.3 使用Monitor类的高级锁
6.10 定制线程对象
6.10.1 线程和用户界面
6.10.2 使用回调和加锁
6.10.3 向线程发送指令
6.11 小结
第7章 线程池与服务(可缩放编程)
7.1 分布式系统中线程处理的角色
7.2 单独的基础
7.2.1 跟踪客户端
7.2.2 管理任务与清除任务
7.2.3 Ticket系统
7.2.4 加锁
7.3 一个单独的XML Web服务
7.3.1 线程池
7.4 Windows服务
7.4.1 创建Windows服务
7.4.2 安装Windows服务
7.4.3 调试Windows服务
7.4.4 控制Windows服务
7.4.5 为组件宿主使用Windows服务
7.5 小结
第8章 消息(轻量通信)
8.1 分布式系统中消息的角色
8.2 发送与忽略通信
8.3 Message Queuing介绍
8.3.1 Message Queuing服务器
8.3.2 从属客户端
8.3.3 独立客户端
8.4 Message Queuing基本知识
8.4.1 消息队列类型
8.4.2 消息队列服务
8.4.3 配置消息队列
8.4.4 消息解析
8.5 在.NET中操作队列
8.5.1 选择队列
8.5.2 搜索队列
8.5.3 创建队列
8.6 发送消息
8.6.1 发送对象消息
8.6.2 高级消息配置
8.6.3 接收消息
8.6.4 浏览消息
8.6.5 向应和回执消息
8.7 分布式应用程序中的消息队列
8.7.1 COM+队列组件
8.8 小结
第9章 COM+(组件服务)
9.1 分布式系统中COM+的角色
9.2 COM和互用
9.3 COM+注册基础
9.3.1 给程序集一个强名称
9.3.2 动态注册
9.3.3 手工注册
9.3.4 COM+与声明模型
9.3.5 COM+版本控制
9.3.6 使用COM+组件
9.4 对象池
9.4.1 理想的缓冲池组件
9.4.2 缓冲池与状态
9.4.3 缓冲池组件例程
9.4.4 建立缓冲池
9.4.5 激活、停用和条件缓冲池
9.4.6 缓冲池和数据提供者
9.4.7 对象缓冲与连接缓冲
9.5 实时激活
9.5.1 JIT与对象池
9.5.2 JIT激活与.NET
9.6 自动事务处理
9.6.1 对象与事务处理
9.6.2 滚动自定义事务处理
9.6.3 隔离级别
9.6.4 Web方法的事务处理
9.7 较少使用的COM+服务
9.7.1 排队组件
9.7.2 基于角色的安全设置
9.7.3 同步
9.7.4 松耦合事件
9.7.5 对象构造字符串
9.7.6 SOAP服务(只限于COM+1.5)
9.8 小结
第II部分 体系结构开发
第10章 企业应用程序模型
10.1 分布式组件的关键考虑事项
10.1.1 进程间和计算机间的通信
10.1.2 状态问题
10.1.3 远程对象是真实的对象吗?
10.2 性能与可缩放性
10.2.1 内容学习
10.3 分层设计
10.3.1 业务对象
10.3.2 规则
10.4 分布式设计模式
10.4.1 接口
10.4.2 Factory
10.4.3 Facade
10.4.4 Facade和监听
10.4.5 Facade和XML Web服务
10.4.6 Facade和事务处理
10.5 选择正确的.NET技术
10.5.1 内部和外部系统
10.5.2 混合的内部/外部系统
10.5.3 通用的后端
10.5.4 部分离线的系统
10.5.5 COM升级
10.6 物理结构
10.6.1 缩放比例
10.6.2 负载平衡
10.7 小结
第11章 高级远程技术
11.1 考虑应用.NET远程处理进行开发
11.1.1 ByRef和ByVal参数
11.1.2 异常的传播
11.1.3 静态成员变量
11.1.4 私有方法
11.1.5 公共成员变量
11.1.6 版本控制
11.1.7 基于接口的编程
11.1.8 基于接口的远程处理的问题
11.2 再论.NET远程处理和XML Web服务
11.2.1 Soapsuds和WSDL描述
11.2.2 ASP.NET宿主
11.3 程序化的注册
11.4 动态发布
11.4.1 使用XML Web服务记录连接信息
11.4.2 关注ObiRef
11.5 小结
第12章 优化数据层
12.1 连接池
12.1.1 连接和应用域
12.1.2 测试连接池
12.2 制定一个数据传递计划
12.2.1 批处理更新
12.3 缓存
12.3.1 输出(响应)缓存
12.3.2 输出缓存需要考虑的事项
12.3.3 数据缓存
12.3.4 确定缓存策略
12.4 优化数据库
12.4.1 存储过程
12.4.2 索引
12.4.3 整理
12.4.4 分割大的数据表
12.4.5 数据层编码
12.4.6 规范
12.5 小结
第13章 实现安全性
13.1 身份验证和授权
13.2 Windows身份验证
13.2.1 IIS身份验证设置
13.2.2 通过XML Web服务客户端设置身份验证信息
13.2.3 通过.NET远程客户端设置身份验证信息
13.2.4 能获得的用户信息
13.2.5 模拟
13.3 自定义基于角色的身份验证
13.3.1 Ticket系统
13.3.2 自动通过Ticket
13.4 加密
13.5 SSL
13.5.1 SSL和证书
13.5.2 SSL通信
13.6 .NET加密类
13.6.1 选择性的非对称加密
13.6.2 选择性的对称加密
13.6.3 在.NET远程处理中的选择性加密
13.6.4 使用自定义类包装加密
13.6.5 对加密类使用.NET序列化
13.6.6 代码访问安全
13.6.7 安全性和Stack Walk
13.6.8 安全要求
13.6.9 安全声明、拒绝和只允许
13.7 小结
第14章 监视、日志和分析
14.1 服务器端的日志记录
14.1.1 使用Facade与反射进行日志记录
14.1.2 Windows事件日志
14.1.3 直接邮件通知
14.2 客户端目志
14.2.1 使用跟踪机制
14.2.2 获取未处理的错误
14.3 性能计数器分析
14.3.1 基本的性能计数器
14.3.2 自定义性能计数器
14.4 小结
第15章 部署策略
15.1 传统的部署问题和.NET解决方案
15.2 应用程序的启动程序
15.2.1 在升级XML Web服务时的安全漏洞
15.2.2 其他关于应用程序启动程序的增强功能
15.3 应用程序浏览器
15.3.1 应用程序浏览器XML Web服务
15.3.2 应用程序浏览器模块
15.3.3 应用程序浏览器
15.3.4 代码访问安全性
15.3.5 在应用程序浏览器中加强交流
15.3.6 更加动态的应用程序浏览器
15.4 小结
第III部分 案例研究
第16章 InVOicer.NET流动推销
16.1 问题的定义
16.1.1 关键点分析
16.1.2 评价不同的方法
16.2 定义解决方案
16.3 数据层
16.3.1 存储过程
16.3.2 Excel电子表格
16.3.3 数据组件
16.3.4 CustomersDB类
16.3.5 OrdersDB类
16.3.6 InvoicerTables类
16.3.7 ExcelTranslator类
16.4 后端OrderProcessor服务
16.5 Web前端
16.6 XML Web服务层
16.7 移植策略
16.7.1 增加安全性
16.7.2 增加早期验证
16.7.3 使用惟一的文件名
16.7.4 Excel难题和专用的Windows客户端
16.8 小结
第17章 Transact.NET订单履行
17.1 问题的定义
17.1.1 关键点分析
17.2 定义解决方案
17.3 数据层
17.3.1 存储过程
17.3.2 数据组件
17.3.3 ProductDB类
17.3.4 OrderDB类
17.3.5 TransactTables类
17.4 订单提交XML Web服务
17.5 订单客户端
17.6 内部OrderFill客户端
17.6.1 队列监控
17.7 未来的方向
17.7.1 增加安全性
17.7.2 添加确认GUID
17.7.3 支持多订单填写的客户端
17.8 小结
第18章 SuperCompute.NET工作需求
18.1 问题的定义
18.1.1 关键点分析
18.2 定义解决方案
18.3 数据层
18.3.1 存储过程
18.3.2 数据组件
18.3.3 UserDB类
18.3.4 SessionDB类
18.3.5 TaskDB类
18.3.6 SuperComputeTables类
18.4 呈现Web服务
18.4.1 RenderService认证
18.4.2 RenderService功能
18.5 客户端
18.6 任务处理器
18.6.1 TaskProcessor组件
18.6.2 任务处理器前端
18.6.3 下载被渲染的文件
18.7 未来的方向
18.7.1 增加ticket缓存
18.7.2 提高客户端错误清理能力
18.7.3 添加消息队列
18.7.4 添加负载平衡
18.8 小结
第19章 微软实例学习
19.1 IBuySpy商店
19.2 IBuySpy入口
19.3 Duwamish 7
19.4 .NET Pet Shop
19.5 Fitch&Mather Stocks 7
19.6 Nile Books
19.7 ColdStorage
19.8 Jaggle
19.9 Favorjtes Service