微软事务服务器

微软事务服务器(英语:Microsoft Transaction Server,缩写MTS)是为组件对象模型 (COM) 软件组件提供服务的软件,可以更轻松地创建大型分布式应用程序

MTS 提供的主要服务是自动事务管理、实例管理(或即时激活)和基于角色的安全性。 MTS 被认为是第一个实现面向方面编程的主要软件。

MTS 最初是在 Windows NT 4.0 可选包中提供的。在 Windows 2000 中,MTS 更名为COM+COM+ 在 MTS 的特性基础上,添加了对象池、松散耦合事件和用户定义的简单事务(补偿资源管理器)等新特性,并能够更好地与操作系统和 COM 集成。

COM+ 仍然随 Windows Server 2003Windows Server 2008 一起提供,并且 Microsoft .NET Framework 在 EnterpriseServices 命名空间中为 COM+ 提供了一个包装器。 Windows Communication Foundation (WCF) 提供了一种使用 Web 服务调用 COM+ 应用程序的方法。但是,COM+ 是基于 COM 的,微软的战略软件架构现在是 Web 服务.NET,而不是 COMCOM+ 提供的许多功能都有纯基于 .NET 的替代方案,从长远来看,COM+ 很可能会被淘汰。

架构

一个基本的 MTS 架构包括:

  • MTS 执行器 (mtxex.dll)
  • 每个组件的工厂包装器和上下文包装器
  • MTS 服务器组件
  • MTS 客户端
  • 辅助功能,例如:
    • COM 运行时服务
    • 服务控制管理器 (SCM)
    • Microsoft 分布式事务协调器 (MS-DTC)
    • 消息队列 (MSMQ)
    • COM 事务集成器 (COM-TI)
    • 其它

MTS 在实际的 MTS 对象与其客户端之间插入了一个工厂包装对象和一个对象包装器,这一过程称为拦截。每当客户端调用 MTS 组件时,包装器(工厂和对象)都会拦截这些调用,并将它们的实例管理算法,即即时激活 (JITA),注入到调用中。随后,包装器会将调用转发给实际的 MTS 组件。由于当时缺乏可扩展的元数据,拦截被认为是一个相对困难的过程。

此外,根据来自组件部署属性的信息,事务逻辑和安全检查也在这些包装对象中进行。

每个 MTS 托管的对象都存在一个实现了 IObjectContext 接口的上下文对象。上下文对象维护着与该对象相关的特定信息,例如事务信息、安全信息和部署信息。MTS 组件中的方法通过 IObjectContext 接口调用这个上下文对象。

在来自客户端的调用到达容器之前,MTS 不会创建实际的中间层 MTS 对象。由于对象并非一直在运行,因此它不会占用大量系统资源(即使对象的对象包装器和骨架确实存在)。

一旦来自客户端的调用到达,MTS 包装器进程会激活其称为 JITA 的实例管理算法。实际的 MTS 对象会“及时”创建,以便响应来自包装器的请求。当请求处理完成并将回复发送回客户端时,组件会调用 SetComplete()/SetAbort(),或者在其事务结束时,或者客户端在对对象的引用上调用 Release(),从而销毁实际的 MTS 对象。简而言之,MTS 采用无状态组件模型。

通常,当客户端向典型的 MTS 组件请求服务时,服务器上会执行下述工作:

  1. 获取数据库连接
  2. 从共享属性管理器或已存在的对象客户端读取组件的状态
  3. 执行业务逻辑
  4. 如果有,将组件的更改状态写回数据库
  5. 关闭并释放数据库连接
  6. 对事务结果进行评估。 MTS 组件不直接提交事务,而是将它们的成功或失败传达给 MTS。

因此,可以将高延迟资源实现为异步资源池,这应利用中间件服务器提供的无状态即时激活。

外部链接