微软事务服务器
微软事务服务器(英语:Microsoft Transaction Server,缩写MTS)是为组件对象模型 (COM) 软件组件提供服务的软件,可以更轻松地创建大型分布式应用程序。
MTS 提供的主要服务是自动事务管理、实例管理(或即时激活)和基于角色的安全性。 MTS 被认为是第一个实现面向方面编程的主要软件。
MTS 最初是在 Windows NT 4.0 可选包中提供的。在 Windows 2000 中,MTS 更名为COM+。COM+ 在 MTS 的特性基础上,添加了对象池、松散耦合事件和用户定义的简单事务(补偿资源管理器)等新特性,并能够更好地与操作系统和 COM 集成。
COM+ 仍然随 Windows Server 2003 和 Windows Server 2008 一起提供,并且 Microsoft .NET Framework 在 EnterpriseServices 命名空间中为 COM+ 提供了一个包装器。 Windows Communication Foundation (WCF) 提供了一种使用 Web 服务调用 COM+ 应用程序的方法。但是,COM+ 是基于 COM 的,微软的战略软件架构现在是 Web 服务和 .NET,而不是 COM。 COM+ 提供的许多功能都有纯基于 .NET 的替代方案,从长远来看,COM+ 很可能会被淘汰。
架构
编辑一个基本的 MTS 架构包括:
MTS 在实际的 MTS 对象与其客户端之间插入了一个工厂包装对象和一个对象包装器,这一过程称为拦截。每当客户端调用 MTS 组件时,包装器(工厂和对象)都会拦截这些调用,并将它们的实例管理算法,即即时激活 (JITA),注入到调用中。随后,包装器会将调用转发给实际的 MTS 组件。由于当时缺乏可扩展的元数据,拦截被认为是一个相对困难的过程。
此外,根据来自组件部署属性的信息,事务逻辑和安全检查也在这些包装对象中进行。
每个 MTS 托管的对象都存在一个实现了 IObjectContext 接口的上下文对象。上下文对象维护着与该对象相关的特定信息,例如事务信息、安全信息和部署信息。MTS 组件中的方法通过 IObjectContext 接口调用这个上下文对象。
在来自客户端的调用到达容器之前,MTS 不会创建实际的中间层 MTS 对象。由于对象并非一直在运行,因此它不会占用大量系统资源(即使对象的对象包装器和骨架确实存在)。
一旦来自客户端的调用到达,MTS 包装器进程会激活其称为 JITA 的实例管理算法。实际的 MTS 对象会“及时”创建,以便响应来自包装器的请求。当请求处理完成并将回复发送回客户端时,组件会调用 SetComplete()/SetAbort(),或者在其事务结束时,或者客户端在对对象的引用上调用 Release(),从而销毁实际的 MTS 对象。简而言之,MTS 采用无状态组件模型。
通常,当客户端向典型的 MTS 组件请求服务时,服务器上会执行下述工作:
- 获取数据库连接
- 从共享属性管理器或已存在的对象或客户端读取组件的状态
- 执行业务逻辑
- 如果有,将组件的更改状态写回数据库
- 关闭并释放数据库连接
- 对事务结果进行评估。 MTS 组件不直接提交事务,而是将它们的成功或失败传达给 MTS。
因此,可以将高延迟资源实现为异步资源池,这应利用中间件服务器提供的无状态即时激活。