Microsoft Indigo 简介(1)

来源:互联网 发布:濮阳市网络公务员 编辑:程序博客网 时间:2024/05/01 09:01

一、什么是 Indigo?

为构建软件选择最佳的抽象方式是一个仍在不断演变的过程。对象是目前构建应用程序业务逻辑的主流方法,但使用对象构建应用程序与应用程序之间的通信模型却没有达到同样的成功。一种较好的方法是将软件的各个独立块之间的交互显式地构建为“服务”。对于构建面向对象的应用程序,已经存在大量的支持,但将服务作为基本软件构造块来考虑,则还是一种比较新的观念。因此,专门用于创建面向服务的应用程序的技术还没有得到广泛应用。

Microsoft 用于构建面向服务应用程序的代号为 Indigo 的框架,正好改变了这一状况。Indigo 允许目前创建面向对象应用程序的开发人员采用 .NET Framework 以相似的方式来创建面向服务的应用程序。同时为了让这些应用程序能够与运行在 Windows 和其他平台上的软件有效地进行交互,Indigo 还实现了 SOAP 和其他 Web 服务技术,这样开发人员就可以创建可靠、安全且能够与运行在任何系统上的软件实现互操作的事务型服务。

上图显示了 Indigo 客户端和服务的简单视图。Indigo 提供了创建由客户端访问的服务的基础,这一基础主要由一组运行于公共语言运行库 (CLR) 上的类来实现。客户端与服务通过 Indigo 的内置协议 SOAP 进行交互,因此虽然图中显示两个部分均基于 Indigo 构建,但这显然并不是必需的。

Indigo 基于 .NET Framework 2.0 并对其进行了扩展,该版本计划于 2005 年发布。Indigo 本身会包含在计划于 2006 年发布的代号为 Longhorn 的 Windows 版本,同时也会在 Windows XP 和 Windows Server 2003 上提供。本文的介绍基于 Indigo 的第一个社区技术预览的预发布版本。请注意,在最终版本发布之前,可能会(实际上几乎肯定会)有一些变化。

二、Indigo 有哪些特性

在 Microsoft,有许多人已投入数年时间来创建 Indigo。如果其解决的问题很简单,或者其解决方案很明显的话,就不会需要这样的努力程度。因此,Indigo 是一种极为重要的技术。然而,作为 Indigo 最重要的方面,Indigo 有三项突出的特性:与多种现有 Microsoft 技术的统一性,对跨供应商互操作性的支持,以及显式的面向服务特性。本节对逐一探讨这三项特性。

与 Microsoft 分布式计算技术的统一性

.NET Framework 的最初版本中包含多种不同的技术,用于创建分布式应用程序。下图列出了每种技术与开发人员采用该技术的主要理由。例如,要构建基本的可互操作的 Web 服务,最佳选择是 ASP.NET Web 服务,即通常所说的 ASMX。要连接两个基于 .NET Framework 的应用程序,有时应当选择 .NET Remoting。如果应用程序需要分布式事务和其他更高级的服务,其创建者一般会使用企业服务,即 .NET Framework 推出的 COM+ 的继任者。要了解最新的 Web 服务规范,如 WS-Addressing 和 WS-Security,开发人员可以构建采用 Web 服务增强(缩写为 WSE,是 Microsoft 对这些新兴规范的初始实现)的应用程序。而要创建基于消息的排队式应用程序,基于 Windows 的开发人员则应使用 Microsoft 消息队列 (MSMQ)。

  ASMX .NET Remoting 企业服务 WSE MSMQ Indigo

可互操作 Web 服务

X

       

X

.NET - .NET 通信

 

X

     

X

分布式事务等。

   

X

   

X

WS-* 规范支持

     

X

 

X

队列消息传输

       

X

X

所有这些选择都有其存在价值,但其多样性也会让开发人员感到迷惑。为什么要有这么多选择?好的解决方案应当是一种技术就能解决所有问题。随着 Indigo 的到来,这种技术出现了。Indigo 不再强迫开发人员从多种可能当中做出选择,而是允许他们创建能够解决所有问题的分布式应用程序,各种问题由 Indigo 所包含的技术负责解决。尽管 Microsoft 将继续支持这些早期的技术,但大多数以前可能会采用这些技术来实现的新应用程序都将基于 Indigo 来构建。

与非 Microsoft 应用程序的互操作性

通过统一各种独立技术使 Windows 开发人员的生活更加轻松是一件好事。但通过 Web 服务供应商之间的通用协议,长期存在的应用程序互操作性问题也可以解决。由于 Indigo 的基本通信机制是 SOAP,因此 Indigo 应用程序可与大量运行于各种上下文环境的其他软件进行通信。如下图所示,基于 Indigo 构建的应用程序可与下列所有程序进行交互:

运行于同一 Windows 计算机上不同进程中的 Indigo 应用程序。

运行于另一 Windows 计算机上的 Indigo 应用程序。

基于其他技术构建的应用程序,如基于 Java 2 企业版 (J2EE) 构建的、支持标准 Web 服务的应用程序服务器。这些应用程序可以运行在 Windows 计算机上,也可以运行在采用其他操作系统(如 Sun Solaris、IBM 的 z/OS 或 Linux)的计算机上。

Indigo 应用程序还可以与基于 Indigo 以前的 .NET Framework 技术(如后面讲到的 ASMX)构建的应用程序进行互操作。

为了实现基本通信以外的功能,Indigo 采用了一些更新的 Web 服务技术,这些技术统称为 WS-* 规范。这些文档定义了用于添加可靠消息传输、安全性、事务以及更多基于 SOAP 的 Web 服务的多供应商方式。所有这些规范最初均是由 Microsoft、IBM 及其他供应商共同制定的。随着它们日渐稳定,所有权通常会转移到一些标准机构,如结构化信息标准促进组织 (OASIS)。Indigo 第一版中支持的 Web 服务规范包括 WS-Addressing、WS-Policy、WS-MetadataExchange、WS-ReliableMessaging、WS-Security、WS-Trust、WS-SecureConversation、WS-Coordination、WS-AtomicTransaction 和 SOAP 消息传输优化机制 (MTOM)。

当一个 Indigo 应用程序与运行在非 Windows 系统上的应用程序进行通信时,采用的协议为标准 SOAP(可能具有某些 WS-* 扩展),传输时以基于普通文本的 XML 编码形式表示。然而,当一个基于 Indigo 的应用程序与另一个基于 Indigo 的应用程序进行通信时,就非常有必要优化这种通信。与前者相比,所有的功能都相同,包括可靠消息传输、安全性和事务,但采用的传输编码则是 SOAP 的一种优化二进制版本。消息仍遵循 SOAP 消息的数据结构,称为“信息集”,但其编码采用了信息集的二进制表示,而不是标准尖括号加文本的 XML 格式。

对面向服务开发的显式支持

把应用程序看作提供和使用服务并不是什么新观念。新颖之处在于明确将服务作为与对象截然不同的东西来看待。为此,Indigo 创建者们在设计此项技术的过程中始终牢记四项基本原则:

共享架构,而不是类:与旧的分布式对象技术不同,服务仅通过精心定义的 XML 接口与其客户端进行交互。跨越服务边界传递完整的类、方法及全部之类的行为被禁止。

服务具有自主性:服务及其客户端同意它们之间的接口,但相互独立。它们可以采用不同的语言编写,可以使用不同的运行时环境(如 CLR 和 Java 虚拟机),可以运行在不同操作系统上,还可以存在其他方面的不同。

边界是显式的:分布式对象技术 [如分布式 COM (DCOM)] 的目标之一是使远程对象尽可能看上去像本地对象一样。虽然这种方法通过提供一种通用编程模型在某些方面简化了开发,但也同时隐藏了本地对象与远程对象之间不可避免的区别。服务通过使服务与其客户端之间的交互更明显而避免了这一问题。隐藏分布式特性并非目的。

采用基于策略的兼容性:如果可能,决定在系统之间使用哪些选项应取决于基于 WS-Policy 的机制。

面向服务是一个广泛的领域,它包含面向服务应用程序和更广泛的面向服务体系结构 (SOA) 的概念。Indigo 将成为基于 Windows 的面向服务应用程序的基础,因而对许多组织的 SOA 工作都将非常重要。