首页 理论教育SOA与SOAP:MVC开发实战

SOA与SOAP:MVC开发实战

【摘要】:SOA组件之间进行通信时,使用SOAP协议进行传递。此外,SOAP不仅支持HTTP还支持SMTP、MIME等多种成熟的网络传输协议,也就是说使用SOAP协议可以代替HTTP、SMTP等受支持的协议。图12-1 SOAP通信过程如图12-1所示,读者也许会感觉到整个流程与普通的XML通信过程并无区别,事实上Web Service整个开发框架核心在SOAP协议。但要是在支持SOAP访问协议的容器中访问WSDL文件时,将会得到SOAP服务,并能够发现被注册的公开服务。

SOA是一套服务组件模型,它完整地描述了分布式开发所需要的数据格式、数据契约。SOA不属于任何厂商,它是独立于第三方的。虽然实现分布式开发的不仅只有SOA,但SOA是一种国际化标准,常见的ASMX、WSDL、CORBA(Common Object Request Broker Architecture)等主流分布式开发技术都是基于SOA规范的。

SOA组件之间进行通信时,使用SOAP协议进行传递。它最先由微软公司于1999年发布并整合到.NET Framework 1.0中,2001年被W3C正式定义为一种轻量的、简单的、基于XML的通信协议。经过十多年的发展,微软公司基于SOAP 1.2通信协议发展和完善了分布式开发技术,最新的演进技术为WCF(Windows Communication Foundation)。

SOAP类似于HTTP,在通信时使用HTTP发送XML格式数据,使用RPC调用远程结果,所以简单理解就是HTTP和XML两种通信协议的结合。此外,SOAP不仅支持HTTP还支持SMTP、MIME等多种成熟的网络传输协议,也就是说使用SOAP协议可以代替HTTP、SMTP等受支持的协议。

网络上各种Web服务器都可以作为SOAP的平台,各服务器平台只需要生成或创建符合SOAP协议的服务,即可在各种客户端间相互调用。比如客户端调用服务方的服务,只需要在这些Web服务器上创建服务,然后公开SOAP规范接口,就能够进行调用。

Web Service平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,Web Service平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。

Web Service就是使用SOAP协议,实现各服务间互相调用的平台。客户端调用Web Service只需要生成一个代理,然后声明需要调用的服务公开方法,最后使用异步通信返回请求的数据(即服务结果),如图12-1所示。

PHP 5.X内置了SOAP扩展,能够同时支持客户端访问模式及远程服务模式。其中在客户端访问模式下,PHP使用SoapClient初始化连接;在服务模式时,PHP使用SoapServer初始化SOAP。无论处于哪种模式,PHP都是使用WSDL数据格式进行通信的。

978-7-111-42852-7-Part02-675.jpg(www.chuimin.cn)

图12-1 SOAP通信过程

如图12-1所示,读者也许会感觉到整个流程与普通的XML通信过程并无区别,事实上Web Service整个开发框架核心在SOAP协议。假设以传统的HTTP访问WSDL,尽管WSDL就是一个XML文件,那么浏览器也不会得到运算结果(以源代码显示)。但要是在支持SOAP访问协议的容器中访问WSDL文件时,将会得到SOAP服务,并能够发现被注册的公开服务。WSDL中定义的XML节点,并不是访问就会被触发的,需要在应用程序中使用UDDI(Universal Description,Discovery and Integration,提供基于Web服务的注册和发现机制)登记所需要请求的服务节点。

这也就是说,客户端能不能加入Web Service分布式开发,关键是看客户端支不支持SOAP通信协议。对于服务端而言,支不支持分布式开发服务,关键是看解释引擎有没有提供SOA生成模块。SOA虽然是一套W3C规范,但是并不意味着各种解释引擎都能够完美支持,这也就造成各种开发技术的功能实现不尽相同。

例如在C#、Java中,对SOA的支持是最强大和最完整的,不仅支持动态生成,而且支持数据流通信、长文本等。而在PHP中只支持静态定义而且不支持数据流,在PHP 5.4以上版本支持得比较好。

对于开发者而言,XML需要开发人员自己手动编写处理过程,根据XML解释器的差异,处理的手段也不一样,过程也相对比较复杂。而使用SOAP时,开发人员不需要手动处理解释过程,因为SOAP解释器已经自动完成所有的数据解释工作,需要做的就是调用WSDL文档中的服务(即节点,通常一个节点对应一个类成员方法),而且无论使用什么技术,过程都是统一的,不会造成差异。在开发形式上与本地调用功能类并无区别,所以开发效率上无疑比XML更高。

与HTTP一样,无论在哪种语言技术中,SOAP都是异步通信的,所以能够很好地解决性能问题,尤其像手机一类的内存受限的终端应用开发,使用SOAP非常可靠。Web Service开发虽然有很多优点,但缺点也非常明显,尤其在PHP中。下面将结合PHP技术,全面介绍在PHP中的支持情况,然后再详细介绍WSDL文档。