SOAP协议应用
- 格式:docx
- 大小:147.84 KB
- 文档页数:6
.net webservice 返回soap格式.NET Web服务是基于标准Web服务的一种技术。
Web服务是一种基于Web的技术,在它的基础上发展起来,形成了.NET Web服务技术。
所谓Web服务,就是指利用标准的Web 协议,如HTTP、XML、SOAP、WSDL等,通过Internet进行软件应用之间的交互。
在.NET平台下,使用.NET Web服务技术构建的Web服务,可以被各种平台的应用程序调用,实现系统的跨平台开发。
在.NET Web服务中,返回格式一般为SOAP格式。
SOAP是指简单对象访问协议(Simple Object Access Protocol),是一种基于XML的协议,在应用程序之间进行信息交换。
SOAP 协议支持一些基本的数据类型和数据结构,如字符串、整数、结构体等,同时SOAP协议可以使用任何应用层协议进行传输,如HTTP、SMTP、FTP等。
SOAP协议是基于标准的XML、HTTP和URI等网络技术的开放标准,已经广泛应用于各种类型的Web服务中。
在.NET Web服务中,如何返回SOAP格式的中文?下面我们以一个具体的示例来说明:假设我们在.NET Web服务中定义了一个简单的方法,用于返回一条消息。
代码如下:[WebMethod]public string GetMessage(){return "Hello, World!";}在默认情况下,该方法会以普通的字符串形式返回一条消息"Hello, World!"。
但是,如果我们想要以SOAP格式返回中文消息,该怎么办呢?下面是一种方法:1、首先,需要设置.NET Web服务的语言环境。
在Web.config文件中,添加如下配置:<configuration><system.web>requestEncoding="utf-8"culture="zh-CN"上述代码中,设置了请求和响应的编码为utf-8,同时将.NET Web服务的语言环境设置为中文(中国)。
C++中gSOAP的使⽤详解⽬录SOAP简介gSOAP准备⼯作头⽂件构建客户端应⽤程序⽣成soap源码建⽴客户端项⽬构建服务端应⽤程序⽣成SOAP源码建⽴服务端项⽬打印报⽂SOAP测试项⽬源码总结本⽂主要介绍C++中gSOAP的使⽤⽅法,附带介绍SOAP协议的基础知识,适⽤于第⼀次使⽤gSOAP的开发⼈员。
gSOAP官⽹上的⽰例代码存在⼀些错误,对初次接触的⼈不太友好,本⽂是在官⽅⽰例的基础上进⾏了⼀些补充、改动。
SOAP简介SOAP 是⼀种简单的基于 XML 的协议,它使应⽤程序通过 HTTP 来交换信息,具体内容可以参考教程。
SOAP的本质是通过HTTP协议以XML格式进⾏数据交互,只不过这个XML格式的定义是⼤家公认的。
使⽤SOAP时需注意,SOAP的XML命名空间由于版本的不同可能存在差异(如soapevn、SOAP-ENV),在调⽤SOAP服务前最好确认服务器的XML格式。
gSOAPgSOAP 有商业版、开源版两个版本,开源版使⽤GPLv2开源协议,⽀持多个操作系统,具体内容参考或者。
gSOAP提供了⼀组编译⼯具(可以认为是代码⽣成器)和⼀些库⽂件,简化C/C++语⾔开发web服务或客户端程序的⼯作,开发⼈员可以专注于实现应⽤程序的逻辑:编译⼯具提供了⼀个SOAP/XML 关于C/C++ 语⾔的实现,能够⾃动完成本地C或C++数据类型和XML数据结构之间的转换。
库⽂件提供了SOAP报⽂⽣成、HTTP协议通讯的实现,及相关的配套设施,⽤于最终的SOAP报⽂的⽣成、传输。
本⽂使⽤的库⽂件主要是以下⼏个:stdsoap2.h、stdsoap2.cpp:HTTP协议的实现、最终的SOAP报⽂⽣成,如果是C语⾔则使⽤stdsoap2.h、stdsoap2.ctypemap.dat: wsdl2h⼯具根据wsdl⽂件⽣成头⽂件时需要此⽂件,可以更改项⽬的xml命名空间(后⾯再细说)threads.h:实现⾼性能的多线程服务器需要的⽂件,可以并发处理请求,并且在服务操作变得耗时时不会阻塞其他客户端请求准备⼯作先进⼊官⽹的,然后选择开源版本:将下载的压缩包解压(本⽂使⽤的是gsoap_2.8.117.zip),解压后的⽂件放到⾃⼰习惯的位置(推荐放到C盘)。
在本文中,我将深入探讨soapxml报文入参的格式,并提供全面的评估和深度的理解。
在文章中,我会从简单到复杂、由浅入深地分析这一主题,以便您能更深入地理解。
让我们来了解一下soapxml报文的基本结构。
SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于在web服务之间进行交互。
SOAP消息是以XML格式编写的,具有统一的结构和内容,包括envelope、header和body等部分。
1. Envelope:SOAP消息的根元素,包含了整个消息。
2. Header:可选的部分,包含与消息相关的头部信息。
3. Body:包含实际的调用信息。
了解了SOAP消息的基本结构之后,让我们深入探讨soapxml报文的入参格式。
在SOAP消息中,入参通常包含在body部分,并且需要按照特定的格式进行编写。
在SOAP消息的body部分,入参的格式可以根据具体的需求来定义。
常见的入参格式包括但不限于以下几种:1. 单个参数的入参格式:```xml<soap:Body><GetStockPrice xmlns=""><StockName>IBM</StockName></GetStockPrice></soap:Body>```2. 多个参数的入参格式:```xml<soap:Body><AddUser xmlns=""><UserName>JohnDoe</UserName><Password>123456</Password></AddUser></soap:Body>```无论是单个参数还是多个参数的入参格式,都需要严格遵循XML的语法规则,并按照约定的命名空间来定义元素和属性。
Java WebService几种调用方式一、介绍Java WebService是一种基于SOAP协议的远程方法调用技术,可以实现跨评台、跨语言的通信。
在实际应用中,我们可以使用多种方式来调用Web服务,本文将介绍Java WebService几种常见的调用方式。
二、基于JAX-WS的调用方式JAX-WS(Java API for XML Web Services)是一种用于创建和调用Web服务的Java标准。
通过使用JAX-WS,我们可以方便地创建客户端和服务端,并进行方法调用。
在客户端,我们可以通过使用wsimport命令生成客户端的Java代码,并使用Java代码来调用Web服务的方法。
在服务端,我们可以通过使用@WebService注解来发布服务,并使用Java代码实现方法的具体逻辑。
三、基于Axis的调用方式Apache Axis是一个流行的开源Java Web服务框架,它支持SOAP协议,可以用于创建和调用Web服务。
在基于Axis的调用方式中,我们可以使用WSDL2Java工具生成客户端的Java代码,然后使用Java代码来调用Web服务的方法。
在服务端,我们可以使用Java代码实现方法的逻辑,并使用Axis框架来发布服务。
四、基于CXF的调用方式Apache CXF是另一个流行的开源Java Web服务框架,它也支持SOAP协议,并提供了丰富的特性和扩展性。
在基于CXF的调用方式中,我们可以使用wsdl2java工具生成客户端的Java代码,然后使用Java代码来调用Web服务的方法。
在服务端,我们可以使用Java代码实现方法的逻辑,并使用CXF框架来发布服务。
五、总结在本文中,我们介绍了Java WebService几种常见的调用方式,包括基于JAX-WS、Axis和CXF。
通过这些调用方式,我们可以方便地创建和调用Web服务,实现跨评台、跨语言的通信。
个人观点和理解作为Java开发人员,我认为Java WebService是一种非常重要的技术,它可以帮助我们实现分布式系统之间的通信,为企业级应用的开发提供了很大的便利。
SOAP日志1. 简介SOAP(Simple Object Access Protocol)是一种基于XML的通信协议,常用于在网络上进行应用程序间的通信。
在使用SOAP协议时,通常会记录一些关键的信息和事件,这些记录被称为SOAP 日志。
2. SOAP日志的重要性SOAP日志记录了通信双方的请求和响应的详细信息,包括发送的数据、返回的数据、错误信息等。
它对于调试和故障排除非常有帮助,能够帮助开发人员定位问题并进行相应的修复。
同时,SOAP日志也具有审计和安全性方面的作用,能够追踪和记录每个请求和响应的详细内容,确保通信的可靠性和安全性。
3. SOAP日志的内容SOAP日志的内容可以根据实际需求进行定制,但通常包括以下信息:- 请求信息:包括请求的URL、请求的方法(POST、GET 等)、请求的头部信息(如Content-Type)等。
- 请求数据:包括请求中发送的XML数据或其他格式的数据。
- 响应信息:包括响应的状态码、响应的头部信息、响应的时间等。
- 响应数据:包括响应中返回的XML数据或其他格式的数据。
- 错误信息:如果发生错误,记录错误的相关信息,如错误码、错误描述等。
4. SOAP日志的记录方式SOAP日志可以通过不同的方式进行记录,常见的方法有:- 在应用程序中直接输出到控制台或日志文件:在服务端或客户端的代码中,通过打印或记录相关信息到控制台或日志文件来实现日志记录。
- 使用SOAP框架提供的日志功能:一些SOAP框架(如Apache CXF、Spring Web Services等)提供了日志模块,可以方便地开启和配置SOAP日志记录。
- 使用独立的日志库:可以使用独立的日志库(如Log4j、Logback等)来记录SOAP日志,通过配置和调整日志级别,灵活地控制日志的输出。
5. SOAP日志的应用SOAP日志在实际应用中有着广泛的应用场景,主要包括:- 调试和故障排除:当SOAP通信发生问题时,通过查看SOAP日志可以了解请求和响应的详细信息,帮助开发人员进行调试和故障排除。
数据及接口标准
数据及接口标准是指在不同系统、应用程序或设备之间进行数据交换和通信时所遵循的一系列规范和协议。
以下是一些常见的数据及接口标准:
1. HTTP(超文本传输协议):用于在客户端和服务器之间传输超文本数据的应用层协议,是万维网的基础。
2. HTTPS(安全超文本传输协议):基于HTTP 的安全加密版本,用于在客户端和服务器之间进行安全的数据传输。
3. TCP(传输控制协议):一种网络通信协议,用于可靠地传输数据。
4. UDP(用户数据报协议):一种网络通信协议,用于不保证可靠传输的数据传输。
5. SOAP(简单对象访问协议):一种基于XML 的用于在不同应用程序之间进行数据交换的协议。
6. REST(表述性状态转移):一种基于HTTP 的架构风格,用于设计和实现Web 服务。
7. JSON(JavaScript 对象表示法):一种轻量级的数据交换格式,常用于Web 应用程序之间的数据传输。
8. XML(可扩展标记语言):一种用于定义数据结构和语义的标记语言,常用于数据交换和配置文件。
这些标准和协议的存在使得不同的系统和应用程序能够相互通信和协
作,促进了信息技术的发展和应用。
一、概述在软件开发领域,接口调用是不可或缺的一部分,它是不同系统之间进行数据交换和通信的桥梁。
而在Web开发中,SOAP(Simple Object Access Protocol)是一种用于发送和接收XML消息的协议,它可以使不同的应用程序在不同的操作系统,使用不同的编程语言编写的代码相互通信。
本文将重点介绍在PHP中如何使用SOAP接口进行调用。
二、SOAP接口调用方式在PHP中,我们可以使用内置的SoapClient类来调用SOAP接口。
下面是一个简单的示例:```php<?php// 创建SoapClient对象$soapClient = new SoapClient('xxx// 调用SOAP接口中的方法$response = $soapClient->methodName($param1, $param2);// 处理返回结果echo $response;>```以上代码首先创建了一个SoapClient对象,传入了一个WSDL文件的URL(Web Services Description Language),WSDL文件用于描述SOAP接口的信息,包括可用的方法、参数等。
然后通过SoapClient对象调用了一个名为methodName的SOAP接口方法,并传入了两个参数$param1和$param2。
最后处理并输出了接口调用的返回结果。
三、SOAP接口调用的注意事项1. WSDL文件的获取:在使用SoapClient调用SOAP接口之前,需要先获取到对应的WSDL文件。
通常情况下,服务提供商会提供这个文件的URL位置区域,通过该位置区域即可获取到WSDL文件。
2. 参数的传递:根据具体的SOAP接口方法,需要传递对应的参数。
在调用接口时,需要按照接口方法规定的参数数量和顺序传递参数。
3. 错误处理:在调用SOAP接口时,可能会出现各种错误,比如网络连接失败、接口方法不存在、参数错误等。
SOAP教程[转]SOAP教程SOAP是⼀个简单的基于XML的协议,它让应⽤程序跨HTTP进⾏信息交换。
在我们的SOAP教程,你将了解什么是SOAP,以及它是怎样利⽤XML来让程序间的信息进⾏交换的内容⽬录This chapter explains what SOAP is and why SOAP is useful.介绍了什么是SOAP以及它的⽤处This chapter describes the building blocks of SOAP and SOAP syntax rules.这章介绍了如何建⽴SOAP块结构和SOAP的语法规则This chapter describes the SOAP Envelope element.SOAP的封套元素This chapter describes the SOAP Header element.这章介绍了SOAP的Header[报头]元素This chapter describes the SOAP Body element.这章介绍了SOAP的Body元素This chapter describes the SOAP Fault element.这章介绍了SOAP的默认元素This chapter is an introduction to the SOAP HTTP binding.介绍有关SOAP HTTP 绑定This chapter describes a SOAP example.⼀个SOAP的举例SOAP 介绍 / 2006-09-19SOAP is a simple XML based protocol to let applications exchange information over HTTP.SOAP是⼀个简单的基于XML的协议,它让应⽤程序跨HTTP进⾏信息交换。
Or more simply: SOAP is a protocol for accessing a Web Service.或者更简单的:SOAP是⽤于访问⽹络服务的协议。
gsoap使⽤总结WebService、soap、gsoap基本概念WebService服务基本概念:就是⼀个应⽤程序,它向外界暴露出⼀个可以通过web进⾏调⽤的API,是分布式的服务组件。
本质上就是要以标准的形式实现企业内外各个不同服务系统之间的互调和集成。
soap概念:简单对象访问协议,是⼀种轻量的、简单的、基于 XML 的协议,它被设计成在WEB 上交换结构化的和固化的信息。
从这⾥的概念可以看得出来,soap是⼀个基于xml格式的web交互协议,⽽webservice是⼀种使⽤web⽅式实现的功能。
就好像是⽹络视频服务器和http的关系,就是这⾥的webservice服务器和soap的关系。
其实从历史上来说,先有的soap这种协议,然后微软⽤基于这种协议制作了webservice这种服务。
gsoap概念:是⼀种能够把C/C++语⾔的接⼝转换成基于soap协议的webservice服务的⼯具。
gSOAP简介gSOAP是⼀个开发SOAP和XML应⽤(它们组成了webservice)的⼯具,在英⽂中叫toolkit。
它是跨平台的,webservice的客户端和服务器端,都可以⽤它来辅助开发。
它主要的功能(特征)如下:C/C++数据绑定⼯具,⽀持XML-RPCfrom/to JSON from/to C/C++ serialization⽀持WSDL 1.1,2.0, SOAP 1.1, 1.2⽀持REST HTTP(S) 1.0/1.1 operations (GET,PUT,POST etc) for XML, JSON,etc⽀持MIME and MTOM 附件⽀持IPv4,IPv6, TCP 和UDP⽀持CGI,FastCGI⽀持嵌⼊到Apache,IIS中发布⾃带了⼀个Web server (multithreaded, SSL, compression)⽤于发布可适⽤于WinCE, Palm, Symbian, VxWorks, Andriod, iPhone等⼩设备...(拣主要的,其余忽略)gsoap下载地址gSOAP结构⽬前gSOAP的版本是2.8.12,作者认为,gSOAP的组织结构以及使⽤的⽅便性,在开源项⽬中是⽐较好的。
笑笑小白归类自己需要的资料,慢慢爬行TCP/IP,HTTP,SOAP等协议之区别术语TCP/IP代表传输控制协议/网际协议,指的是一系列协议。
“IP”代表网际协议,TCP和UDP使用该协议从一个网络传送数据包到另一个网络。
把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。
TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP,文件传输协议FTP这样的协议等。
你应该能理解,TCP和UDP是FTP,HTTP和SMTP之类使用的传输层协议。
虽然TCP和UDP 都是用来传输其他协议的,它们却有一个显著的不同:TCP提供有保证的数据传输,而UDP不提供。
这意味着TCP有一个特殊的机制来确保数据安全的不出错的从一个端点传到另一个端点,而UDP不提供任何这样的保证。
HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。
客户端使用Web浏览器发起HTTP请求给Web服务器,Web服务器发送被请求的信息给客户端。
SOAP(Simple Object Access Protocal,简单对象访问协议) 技术有助于实现大量异构程序和平台之间的互操作性,根据我有限的了解,SOAP是把成熟的基于HTTP的WEB技术与XML的灵活性和可扩展性组合在了一起。
比如我们.NET中的WEB服务,就是基于SOAP。
记住,需要IP协议来连接网络;TCP是一种允许我们安全传输数据的机制,使用TCP协议来传输数据的HTTP是Web服务器和客户端使用的特殊协议。
下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置:7 应用层例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP6 表示层例如XDR、ASN.1、SMB、AFP、NCP5 会话层例如ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets4 传输层例如TCP、UDP、RTP、SCTP、SPX、ATP、IL3 网络层例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、X.252 数据链路层例如以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP 1 物理层例如线路、无线电、光纤、信鸽笑笑小白归类自己需要的资料,慢慢爬行TCP,IP,HTTP,SOCKET区别和联系网络由下往上分为: 对应物理层--数据链路层--网络层-- IP协议传输层-- TCP协议会话层--表示层和应用层-- HTTP协议socket则是对TCP/IP协议的封装和应用(程序员层面上)。
SOAP与RESTful服务区别比较在现代软件开发中,使用不同的技术和协议来实现服务之间的通信是很常见的。
SOAP(Simple Object Access Protocol)和RESTful (Representational State Transfer)是两种常用的web服务通信协议,它们在设计理念和实现方式上存在一些明显的区别。
本文将对SOAP和RESTful服务进行比较,分析它们之间的异同点。
1. 协议设计理念SOAP是一种基于XML的消息传输协议,它的主要目标是提供一种标准化的、统一的、松散耦合的通信方式。
SOAP通过在服务之间交换XML消息来实现远程过程调用(RPC),并且可以使用不同的传输协议,如HTTP、SMTP等。
RESTful是一种基于HTTP协议的架构风格,它强调使用标准的HTTP方法和状态码来操作和表示资源。
RESTful服务将应用程序的功能抽象为资源,并通过URI(统一资源标识符)来标识和访问资源,使用HTTP方法(GET、POST、PUT、DELETE等)对资源进行操作。
2. 数据传输格式SOAP的数据传输格式是XML,它使用SOAP Envelope、Header和Body来封装请求和响应信息。
SOAP通过XML Schema定义数据结构和消息格式,并支持多种数据编码方式,如XML、JSON等。
RESTful的数据传输格式可以是多种多样的,如XML、JSON、HTML等。
在实践中,JSON是RESTful服务最常用的数据交换格式,因为它更简洁、可读性更好,并且JSON的解析和生成速度比XML快。
3. 接口风格SOAP接口具有强大的功能和扩展性,可以定义复杂的操作和消息结构。
它使用WSDL(Web Services Description Language)来描述服务接口和消息格式,并使用SOAP协议交换消息。
RESTful接口则更加简洁和直观,主要通过HTTP的GET、POST、PUT和DELETE方法来实现对资源的操作。
SOAPUI原理解析1. SOAPUI概述SOAPUI是一个用于测试、仿真和构建Web服务的开源工具。
它提供了一种简单而强大的方式来创建、部署、管理和测试Web服务。
SOAPUI支持SOAP(简单对象访问协议)和REST(表述性状态转移)两种主要的Web服务协议,并且可以与多种其他技术和工具进行集成。
2. SOAPUI基本原理SOAPUI的基本原理涉及到以下几个方面:2.1 Web服务Web服务是一种通过网络进行通信的软件系统,它使用标准的HTTP协议来提供对应用程序的访问。
Web服务通常使用SOAP协议来传输数据,并使用WSDL(Web服务描述语言)来定义服务的接口和操作。
SOAPUI的基本原理就是通过模拟Web服务的请求和响应来测试和验证服务的功能和性能。
2.2 SOAP协议SOAP是一种基于XML的协议,用于在Web服务之间进行通信。
SOAP消息由一个包含操作和参数的XML请求和一个包含结果的XML响应组成。
SOAPUI通过构建和解析SOAP消息来模拟Web服务的请求和响应。
2.3 WSDLWSDL是一种用于描述Web服务的接口和操作的XML文档。
它定义了服务的地址、消息的格式和传输协议等信息。
SOAPUI使用WSDL来生成测试用例,并根据WSDL 中定义的规范来构建和解析SOAP消息。
2.4 测试用例测试用例是用于验证Web服务的功能和性能的一组测试步骤。
SOAPUI使用WSDL中的信息来生成测试用例,并提供了一个图形化界面来创建和编辑测试用例。
测试用例可以包括多个测试步骤,每个步骤都可以发送一个SOAP请求并验证响应。
2.5 项目和工程SOAPUI使用项目和工程的概念来组织和管理测试用例。
一个项目可以包含多个工程,每个工程对应一个Web服务。
工程包含了Web服务的相关信息,如URL、认证方式和代理设置等。
SOAPUI通过项目和工程的组织结构来管理和执行测试用例。
2.6 测试执行SOAPUI提供了多种方式来执行测试用例。
soap参数范文SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于在不同的网络应用程序之间进行通信和交换数据。
它使得分布式环境中的应用程序能够通过互联网进行相互通信,允许不同的应用程序在不同的操作系统上运行,使用不同的编程语言进行开发,并且能够相互交互。
SOAP的参数是用于描述和定义SOAP消息的一组属性和元素。
下面是常用的SOAP参数:1. Envelope(信封):SOAP消息的根元素,用于表示整个消息和标识消息的开始和结束。
2. Header(头部):可选的元素,用于传递与消息相关的一些附加信息,如身份验证凭据、安全性等。
3. Body(消息体):必需的元素,用于传递实际的请求或响应数据。
4. Fault(错误):可选的元素,用于在发生错误时传递错误的详细信息,包括错误代码、错误消息等。
5. Method(方法):在SOAP消息中指定要调用的远程方法。
它通常包含方法名和命名空间,以指定要在远程应用程序上调用的方法。
6. Parameter(参数):在SOAP消息中传递方法调用所需的参数。
参数可以是任意数据类型,包括基本类型、复杂类型和用户定义类型。
7. Type(类型):用于指定参数的数据类型。
SOAP使用XML Schema定义数据类型,并使用类型属性来指定参数的类型。
8. Encoding(编码):用于指定参数的编码方式。
SOAP支持多种编码方式,包括XML、JSON、Base64等。
9. Transport(传输):用于指定SOAP消息的传输协议。
SOAP可以使用多种传输协议,如HTTP、SMTP、FTP等。
10. Binding(绑定):用于指定SOAP消息的传输和编码方式。
SOAP 支持多种绑定方式,如SOAP-over-HTTP、SOAP-over-JMS等。
SOAP的参数使用XML语法进行描述和定义,可以通过XSD(XML Schema Definition)或WSDL(Web Services Description Language)来定义SOAP消息的结构和规范。
1、SOAP简介SOAP(SOAP:Simple Object Access Protocol):简单对象访问协议,简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。
SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。
它还支持从消息系统到远程过程调用(RPC)等大量的应用程序SOAP包括的3部分:soap 封装结构定义了一个整体框架用来表示消息中包含什么内容,谁来处理这些内容以及这些内容是可选的或是必需的。
SOAP 编码规则定义了用以交换应用程序定义的数据类型的实例的一系列机制。
SOAP RPC 表示定义了一个用来表示远程过程调用和应答的协定。
虽然这三个部分都作为SOAP 的一部分一起描述,但它们在功能上是相交的。
特别的,封装和编码规则是在不同的名域中定义的,这种模块性的定义方法增加了简单性在SOAP 封装,SOAP 编码规则和SOAPRPC 协定之外,这个规范还定义了两个协议的绑定,描述了在有或没有HTTP 扩展框架[6]的情况下,SOAP 消息如何包含在HTTP 消息[5]中被传送。
2、SOAP的优势个人认为,作为新一代的分布式技术,SOAP很大的价值在于它可以很好得解决异构系统之间的连接问题。
SOAP是基于XML的一种简单协议,而XML已经成为计算机工业的一个标准。
就象一个中国人和一个德国人不太好交流,但是如果双方都会英语的话,那么事情就好办了。
XML就是异构系统之间的英语!这就是为什么我们在拥有DCOM,RMI,EJB等众多分布技术后,还需要SOAP的一个原因。
在SOAP中,所有的请求和响应都是XML文件格式的,而各种语言的相应开发包都具备把这些请求和响应中包含的数据解析出来并转换成为自己的数据类型,而且这种转化是在暗中进行的,通常是不需要开发者关心的。
当然,说回来,SOAP也不是解决这一问题的唯一方案,它的发展还在起步阶段。
另外一个常被提到的优点是,SOAP建立在HTTP上进行通信,因此它可以通过绝大部分的防火墙。
3、SOAP基本的语法SOAP 构建模块一条SOAP 消息就是一个普通的XML 文档,包含下列元素:∙必需的Envelope 元素,可把此XML 文档标识为一条SOAP 消息∙可选的Header 元素,包含头部信息∙必需的Body 元素,包含所有的调用和响应信息∙可选的Fault 元素,提供有关在处理此消息所发生错误的信息所有以上的元素均被声明于针对SOAP 封装的默认命名空间中:/2001/12/soap-envelope以及针对SOAP 编码和数据类型的默认命名空间:/2001/12/soap-encoding语法规则这里是一些重要的语法规则:∙SOAP 消息必须用XML 来编码∙SOAP 消息必须使用SOAP Envelope 命名空间∙SOAP 消息必须使用SOAP Encoding 命名空间∙SOAP 消息不能包含DTD 引用SOAP 消息不能包含XML 处理指令1)Envelope元素必需的SOAP 的Envelope 元素是SOAP 消息的根元素。
它可把XML 文档定义为SOAP 消息。
请注意xmlns:soap 命名空间的使用。
它的值应当始终是:/2001/12/soap-envelopeSOAP 的encodingStyle 属性用于定义在文档中使用的数据类型。
此属性可出现在任何SOAP 元素中,并会被应用到元素的内容及元素的所有子元素上。
SOAP 消息没有默认的编码方式。
2)SOAP Header 元素可选的SOAP Header 元素包含头部信息,如果Header 元素被提供,则它必须是Envelope 元素的第一个子元素。
SOAP 在默认的命名空间中("/2001/12/soap-envelope") 定义了三个属性。
这三个属性是:actor、mustUnderstand以及encodingStyle。
这些被定义在SOAP 头部的属性可定义容器如何对SOAP 消息进行处理。
actor 属性通过沿着消息路径经过不同的端点,SOAP 消息可从某个发送者传播到某个接收者。
并非SOAP 消息的所有部分均打算传送到SOAP 消息的最终端点,不过,另一个方面,也许打算传送给消息路径上的一个或多个端点。
SOAP 的actor 属性可被用于将Header 元素寻址到一个特定的端点。
mustUnderstand 属性SOAP 的mustUnderstand 属性可用于标识标题项对于要对其进行处理的接收者来说是强制的还是可选的。
假如您向Header 元素的某个子元素添加了"mustUnderstand="1",则它可指示处理此头部的接收者必须认可此元素。
假如此接收者无法认可此元素,则在处理此头部时必须失效3)SOAP Body 元素必需的SOAP Body 元素可包含打算传送到消息最终端点的实际SOAP 消息。
SOAP Body 元素的直接子元素可以是合格的命名空间。
4)SOAP Fault 元素可选的SOAP Fault 元素用于存留SOAP 消息的错误和状态信息。
如果已提供了Fault 元素,则它必须是Body 元素的子元素。
在一条SOAP 消息中,Fault 元素只能出现一次。
SOAP 的Fault 元素用于下列子元素:在下面定义的faultcode 值必须用于描述故障时的faultcode 元素中:SOAP消息的基本架构如下所示:<?xml version="1.0"?><soap:Envelope>xmlns:soap="/2001/12/soap-envelope"soap:encodingStyle="/2001/12/soap-encoding"><soap:Header>......</soap:Header><soap:Body>......<soap:Fault>......</soap:Fault></soap:Body></soap:Envelope>4、SOAP的消息传递的模式从根本上讲,soap消息是一个从发送方到接收方的单向传送如图(1),但是,soap消息经常以强求/响应方式实现如图(2),当然SOAP 允许使用任何数量的消息交换模式(MEP),请求/响应只是其中一种。
其他示例包括要求/响应(与请求/响应相对)、通知和长期运行的点对点对话等如图(3)soap没有提供路由机制,但是soap知道soap消息从初始发送者到最终接收者的途中要经过0个或多个中间节点。
接收到soap消息的soap节点必须按照处理模型执行处理,并且,如果适当的话,还会产生soap错误和soap响应消息,以及发送额外的soap消息。
soap处理模型描述了一个节点上的soap处理器在接收到一条soap消息时所采取的动作。
必须按照以下顺序处理soap消息:(1)确定节点的角色,这可以使用soap封装中的内容来确定。
(2)识别所有定向到该节点的强制报头条目。
(3)如果上一步中识别的一个或多个报头条目不被该节点所理解,则产生一个soapMustUnderstand错误,并取消所有后续的处理。
与报体相关的错误不能在这一步里产生。
(4)处理所有定向到该节点的报头条目,并且如果该节点是最终接收者,则还要处理报体。
soap节点必须处理所有定向到它的报头条目,但是可以选择忽略那些定向到它的非强制报头条目的处理。
(5)在中间节点的情况下,删除所有定向到该节点的报头条目(不管报头条目是被处理还是被忽略,都必须删除),并可以插入新的报头条目。
如果处理过程失败,节点只能产生一条错误消息。
与报头相关的错误(不包括mustUnderstand错误)必须是SOAPSender或DataEncodingUnknown错误,并且必须符合对应报头条目的局部名和命名空间名所确定的规范。
与报体相关的错误必须是SOAPSender或DataEncodingUnknown错误。
在处理一个条目时,soap节点可以应用soap封装中的任何信息,例如,如果需要的话,缓冲功能可以缓冲整个soap消息。
特定报头条目的处理可以控制或决定其他报头条目和/或报体的处理顺序。
例如,可以创建一个报头条目来强制其他的报头条目按照字典顺序进行处理。
如果没有这样的控制条目,报头和报体的处理顺序由soap节点自己确定,报头可以采用优先级顺序、任意顺序、交叉顺序或在报体之后处理。
例如,"begin transaction"报头条目通常会优先处理,"commit transaction"则随后处理,而"logging"则与报体并行处理。
如果soap节点是一个中间节点,则soap消息的模式和处理结果可能需要soap消息沿着消息路径继续向前发送。
这种中继的soap消息必须包含初始soap消息的所有报头条目(除去那些被中间节点删除的条目)和报体,并且具有与初始soap消息相同的顺序,另外,中间节点也可能插入一些新的报头条目。
请求/响应方式的消息交换可以具有两种风格:文档(document)风格和RPC风格。
大部分的请求/响应消息交换都是文档风格,在这种情况下,交换的信息直接编码成Body的子元素,并且这些元素符合应用程序定义的架构。
RPC风格的消息交换使用SOAP规范定义的标准表示吧RPC调用和响应以结构的形式编码在Body元素中,并且这个结构的名称与过程的名称相同,其中包含对英语过程参数和返回值的子元素。
DataEncodingUnknown错误五、SOAP协议绑定SOAP 允许通过多种底层协议进行消息交换。
由于SOAP 消息处理框架独立于底层协议,每个中间节点可以选择使用不同的通信协议而不会影响SOAP 消息。
然而,为了确保各种SOAP 应用程序和基础结构之间高级别的互操作性,标准的协议绑定是必要的如图(3)。
一种具体的协议绑定准确地定义了应该如何利用给定的协议来传输SOAP 消息。
换言之,它详细定义了SOAP 如何适用于另一协议的范围,该协议很可能具有自己的消息处理框架以及多种标头。
协议绑定实际所定义的内容很大程度上取决于该协议的功能和选项。
例如,针对TCP 的协议绑定应很大程度不同于针对MSMQ 或针对SMTP 的协议绑定。
SOAP 1.1 规范仅规范化了一种用于HTTP 的协议绑定(由于HTTP 的广泛使用)。