一、soap简介
SOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。
- SOAP 指简易对象访问协议
- SOAP 是一种通信协议
- SOAP 用于应用程序之间的通信
- SOAP 是一种用于发送消息的格式
- SOAP 被设计用来通过因特网进行通信
- SOAP 独立于平台
- SOAP 独立于语言
- SOAP 基于 XML
- SOAP 很简单并可扩展
- SOAP 允许您绕过防火墙
- SOAP 将被作为 W3C 标准来发展
1. 为什么使用soap?
对于应用程序开发来说,使程序之间进行因特网通信是很重要的。
目前的应用程序通过使用远程过程调用(RPC)在诸如 DCOM 与 CORBA 等对象之间进行通信,但是 HTTP 不是为此设计的。RPC
会产生兼容性以及安全问题;防火墙和代理服务器通常会阻止此类流量。通过 HTTP 在应用程序间通信是更好的方法,因为 HTTP 得到了所有的因特网浏览器及服务器的支持。SOAP
就是被创造出来完成这个任务的。SOAP 提供了一种标准的方法,使得运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。
2. soap与http的区别与联系
http是标准超文本传输协议。使用对参数进行编码并将参数作为键值对传递,还使用关联的请求语义。每个协议都包含一系列HTTP请求标头及其他一些信息,定义客户端向服务器请求哪些内容,服务器用一系列HTTP响应标头和所请求的数据进行响应。HTTP-GET
使用 MIME 类型application/x-www-form-urlencoded(将追加到处理请求的服务器的 URL 中)以 URL
编码文本的形式传递其参数。 URL 编码是一种字符编码形式,可确保传递的参数中包含一致性文本,例如将空格编码为
%20,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISOLatin-1)值。
追加的参数也称为查询字符串;HTTP-POST参数也是 URL 编码的,但是,键/值对是在实际的 HTTP 请求消息内部传递的,而不是作为
URL 的一部分进行传递。
SOAP(Simple Object AccessProtocol)简单对象访问协议。它是轻型协议,用于分散的、分布式计算环境中交换信息。SOAP有助于以独立于平台的方式访问对象、服务和服务器。它借助于XML,提供了HTTP所需的扩展。
SOAP协议规范由4个主要的部分组成
- 第一部分:SOAP封装(Envelop)定义了一个的框架(描述消息的内容多少、谁发送、谁应当接受、处理,以及如何处理它们)。
- 第二部分:SOAP编码规则(Encoding Rules)定义了可选数据编码规则,用于表示应用程序定义的数据类型和直接图表,以及一个用于序列化非语法数据模型统一标准。
- 第三部分:SOAP RPC表示(RPC Representation)定义一个远程调用风格(请求/响应)信息交换的模式。
- 第四部分:SOAP绑定(Binding)定义了SOAP和HTTP之间的绑定和使用底层协议的交换。
SOAP:简单对象访问协议,简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。SOAP协议可以简单地理解为:SOAP=RPC+HTTP+XML,即采用HTTP作为通信协议,RPC(Remote Procedure Call Protocol 远程过程调用协议)作为一致性的调用途径,XML作为数据传送的格式,从而允许服务提供者和服务客户经过防火墙在Internet上进行通信交互。
SOAP与HTTP的区别
- 都是底层的通信协议,请求包的格式不同,soap包是XML格式,http纯文本格式
- soap 的 可以传递结构化的 数据,http只能传输纯文本数据;
- SOAP:简单对象访问协议 http是标准超文本传输协议
- SOAP相对http(post/get)由于要进行xml解析,速度可能会有所降低。
二、 C++编写soap服务端客户端
目的:利用gSOAP自带的Calc例子 仿写一个 网络中使用计算器客户端通过http发送xml格式的数据请求,服务端计算完之后,将结果以xml格式返回给客户端。编写之后 我们的服务端可独立使用。像在安装了IIS或者用Apache配置的Web服务器。
1. 服务端开发
- gSoap版本 2.8.8
编译环境为 winXP+VC6
soapcpp2.exe和wsdl2h.exe两个目录是
SOAP\ClientCalc\wsdl_tool - 生成服务端文件命令 soapcpp2.exe -S -i -T calc.h
生成客户端文件命令 soapcpp2.exe -C -i calc.h
-S的含义是生成服务端代码
-C 的含义是生成客户端代码
-T 生成一个测试例子,我们可以仿照这个例子编写自己的程序
-i从SOAP结构生成服务代理和继承的对象
执行命令后生成的目录
calc.h