Microsoft SOAP Toolkit 2.0介绍

**_ 写作本文的目的: _ ** _ 近期看到 _ _ CSDN _ _ 上有很多介绍 _ _ Dephi 6.0 _ _ 对于 _ _ Web Service _ _ 强力支持的文章,而 _ _ Microsoft Soap Toolkit 2.0 _ _ 的介绍相对较少。大家讨论的,基本还停留在用 _ _ Visual Studio .NET _ _ 开发一个简单的 _ _ Web Service _ _ 的水平上。而我认为,全面使用 _ _ .NET _ _ 开发似乎还不太现实,广大的 _ _ VC/VB _ _ 程序员要开发 _ _ SOAP _ _ 应用,看来还是需要使用 _ _ Microsoft SOAP Toollkit _ _ 。所以,笔者希望能以此文为引与诸君一起探讨,谬误之处请不吝赐教。 _ _ _




** Microsoft SOAP Toolkit 2.0 ** ** 介绍 ** ** **

虽然关于 SOAP 的实现目前有很多种,但是我认为对于 VC/VB 程序员来说,选择 Microsoft 的实现是最好的。先撇开 .NET 的 WebServices 的底层库不谈 ( 因为还不熟悉 L ) ,我们现在要讨论的是 Microsoft Soap Toolkit 2.0 。

Microsoft Soap Toolkit 2.0 提供了一整套的 COM 对象来处理与 SOAP 相关的所有数据,可以让你在不了解 SOAP 和 XML 的情况下 ( 当然最好还是了解的啦 ) ,也可以很容易和方便的使用任何一种编程语言来编写 SOAP 应用。你看到的,就是一个个的 COM 对象(符合微软的风格,符合一般程序员的编程习惯)。

** 一 ** ** . ** ** 功能简介: ** ** **

1. 提供了客户端的组件,可以让你指定 WSDL ,然后轻松调用对应的 Web Service 。

2. 提供了服务端的组件,可以让你指定 WSDL 、 WSML 和 COM 对象,自动为你生成 Web Service 。

3. 还提供了底层的处理组件,可以让你操纵 SOAP 消息的具体创建、处理和传输的过程。

** 二 ** ** . ** ** 几个概念: ** ** **

WSDL(Web Services Description Language) : 用于描述服务端所提供服务的 XML 格式。 WSDL 文件里,描述了服务端提供的服务,提供的调用方法,以及调用时所要遵循的格式,比如调用参数和返回值的格式等等。 WSDL 很像 COM 编程里的 IDL(Interface Description Language) ,是服务器与客户端之间的契约,双方必须按契约严格行事才能实现功能。

WSML(Web Services Meta Language): ** ** 用于描述 WSDL 里提供的方法与实现该方法的 COM 对象之间的映射关系。该文件是 Microsoft 的实现中特有的,不是 SOAP 标准的一部分。一般情况下,该文件只在服务端存在。

SOAP 消息: 客户端和服务端之间的方法调用请求和结果返回值都放在这些消息里,是 XML 格式的数据。

** 三 ** ** . Web Service ** ** 调用过程: ** ** **

客户端: 取得服务端的服务描述文件 WSDL ,解析该文件的内容,了解服务端的服务信息,以及调用方式。根据需要,生成恰当的 SOAP 请求消息(指定调用的方法,已经调用的参数),发往服务端。等待服务端返回的 SOAP 回应消息,解析得到返回值。

服务端: 生成服务描述文件,以供客户端获取。接收客户端发来的 SOAP 请求消息,解析其中的方法调用和参数格式。根据 WSDL 和 WSML 的描述,调用相应的 COM 对象来完成指定功能,并把返回值放入 SOAP 回应消息返回给用户。

** 四 ** ** . ** ** 编程的两种模式 ** **

**

** 高层接口 ** ** **

使用高层接口,你不需要知道 SOAP 和 XML 的任何信息,就可以生成和使用一个 WebService 。 Soap Toolkit 2.0 通过提供两个 COM 对象―― SoapClient 和 SoapServer ,来完成这些功能。

在客户端, 你只需要生成一个 SoapClient 实例,并用 WSDL 作为参数来调用其中的 mssoapinit 方法。 SoapClient 对象会自动解析 WSDL 文件,并在内部生成所有 Web Service 的方法和参数信息。之后,你就可以像调用 IDispatch 接口里的方法一样,调用里面所有的方法。在 VB 或是脚本语言里,你甚至可以直接在 SoapClient 对象名后面直接加上 . 方法 ( 参数 …) 进行调用。

在服务端, 有两种处理模式。一种是生成 ASP 文件;另一种是直接使用 ISAPI 扩展,让 Soap Toolkit 提供的 DLL 来处理对 WSDL 的请求。

在第一种模式中,你需要在 ASP 文件里创建 SoapServer 对象,并用 WSDL 和 WSML 作为参数来调用 Init 方法, SoapServer 在内部会自动建立相关的映射关系。然后,用 ASP 的 Request 和 Response 对象作为参数调用 SoapInvoke 方法。 SoapServer 会自动从 Request 里取得用户的 SOAP 请求消息,并解析,调用相应的 COM 完成功能,把返回值封装成 SOAP 回应消息,通过 Response 对象返回。

在第二种模式中, Soap Toolkit 提供的 ISAPI 扩展会自动完成以上 ASP 模式的全部操作。

两种模式的比较是,第一种比较灵活,但是速度比较慢。而第二种虽然灵活性没有了,但是性能却很高。所以,如果没有特殊都请使用 ISAPI 模式。

** 低层接口 ** ** **

要使用低层接口,你必须对 SOAP 和 XML 有所了解。你可以对 SOAP 的处理过程进行控制,特别是要做特殊处理的时候。


在客户端, 首先要创建一个 ** HttpConnector ** 对象,负责 HTTP 连接。设定 Connector 的一些头部信息,比如 EndPoinURL 和 SoapAction 等。如果网络连接需要使用代理服务器,那也要在这里设定相关的信息。接着创建 ** SoapSerializer ** 对象,用于生成 Soap 消息。按照 WSDL 里定义,把所有参数按顺序序列化,得到一个完整的 SOAP 请求消息。该 Soap 消息,作为 Payload 通过 HttpConnector 被发送到服务端。最后,生成一个 ** SoapReader ** 对象,负责读取服务端返回的 SOAP 消息,取得其中的返回值。

在服务端, 首先通过 ASP 里的 Request 和 Response 对象取得 HTTP 连接的输入与输出。接着创建 ** SoapReader ** 对象,读取 ** Request ** 对象里的 Soap 请求消息,解析出要调用的方法和调用的参数, 执行实际的调用,并取得执行结果。最后,生成一个 ** SoapSerializer ** 对象,按照 WSDL 的描述,序列化执行结果,生成 ** Soap ** 回应消息,通过 Response 对象返回给客户端。 ** **


** 五 ** ** . ** ** 疑问与解答 ** ** **

为什么要有 WSML?

答:因为 SOAP 本身只是对象访问的协议,至于实现的方式并没有指定。一般来说,使用 SOAP 就是把现有系统的功能以标准的方式对外公开,让外部能够访问。而在微软的平台上,为了模块的互用性,功能的实现一般是以 COM 的方式提供的。而如何能够把 WSDL 里描述的方法,映射到 COM 的接口方法上,这就是 WSML 所要做的。现在你可以看到,使用 WSML ,你不需要做太多工作,就可以把现有的应用很快的变成 Web Service 应用。在服务端,你完全保留了 Microsoft 的 COM/COM+ 应用模式。(当然, WSML 也不是必须的,如果你不需要使用 COM 的方法映射。如果你不使用 Soap Toolkit 的高层接口,而使用底层接口。那就没有必要了。)

如何处理复杂的数据类型?

答:你可以自己实现一个自定义的类型映射 COM 对象 (Custom Type Mapper) ,并在 WSML 里进行指定。这样, Soap Toolkit 在处理过程当中,会调用这个 Mapper 对 SOAP 消息里的消息进行处理。比如要返回一个复杂数据,在服务端, Toolkit 要懂得如何把一个复杂数据类型序列化为 XML 节点。而在客户端, Toolkit 要懂得如何把 XML 节点重新表示为一个复杂的数据结构。

需要说明的是,这个映射对象 (Mapper) 并不是必须的,只是为了使用的方便而使用。也就是说,双方只要严格遵循 WSDL 里描述的规范,就一定能够达到调用成功。而不管你客户和服务端是如何映射这个复杂数据类型的,是一个 C 结构体也好,是一个 COM 对象也好,或是一个 Java 的类也好,都是无关紧要的。

** 六 ** ** . ** ** 关于 ** ** Soap Toolkit ** ** 的例子 ** ** **

Toolkit 自带的例子已经非常全面,解释了使用这个 Toolkit 需要了解的各种调用方式。通过看微软提供的代码,并亲自运行一遍,就会对该 Soap Toolkit <SPAN lang=ZH-CN style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体

Published At
Categories with Web编程
Tagged with
comments powered by Disqus