译-Web Service剖析: XML, SOAP 和WSDL 用于独立于平台的数据交换
本文是翻译内容,原文参见:
Anatomy of a Web Service: XML, SOAP and WSDL for Platform-independent Data Exchange
Web Services Description Language,简称WSDL,又称为网络服务描述语言。WebService是一种跨编程语言和跨操作系统平台的远程调用技术
大多数应用程序需要用户交互,用户通过界面输入数据,应用程序根据用户输入返回结果。Web service与此类似,只不过Web service是用于机器与机器,或者应用与应用之间通信的。通常没有直接的用户交互。Web service基本上是用于应用程序之间交换数据的开放协议的集合。采用开放的协议使得Web service是独立平台的。软件由不同程序语言编写,并运行在不同的系统平台上,这些软件都可以使用Web services通过网络来交换数据,比如Internet,Intranet。换句话说,Windows应用程序可以与PHP,Java和Perl等语言的应用程序进行通信,这在正常情况下是不可能的。
Web Service是如何工作的?
由于不同的应用程序使用不同的程序语言编写,往往不能互相通信。 Web Service能够使用多种开放协议和标准满足这种通信需求,主要是XML,SOAP和WSDL。 Web Service使用XML来标记数据,通过SOAP传输message,最终以WSDL的方式描述服务的可用性。下面来看看Web Service应用程序的三个主要组成部分。
简单对象访问协议(SOAP)
简单对象访问协议或SOAP是用于应用程序之间发送和接收消息的协议,它无需考虑不同平台的互操作性问题(互操作性意味着一个Web Service运行在什么平台上无关紧要)。具有类似功能的协议是HTTP,它被用于访问网页。 HTTP 协议不关心你所访问的网页搭建在Apache还是IIS上,也不关心网页是由ASP 还是HTML写的,只有符合HTTP协议,你都可以访问网页。因为SOAP既用于请求request又用于响应response,它的内容根据使用目的稍有不同。下面是SOAP请求和响应消息的一个例子:
SOAP Request:
POST /InStock HTTP/1.1
Host: www.bookshop.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.bookshop.org/prices">
<m:GetBookPrice>
<m:BookName>The Fleamarket</m:BookName>
</m:GetBookPrice>
</soap:Body>
</soap:Envelope>
SOAP Response
POST /InStock HTTP/1.1
Host: www.bookshop.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.bookshop.org/prices">
<m:GetBookPriceResponse>
<m: Price="">10.95</m:>
</m:GetBookPriceResponse>
</soap:Body>
</soap:Envelope>
上面这两个XML虽然看起来是一样的,但他们使用了不同的方法。例如通过上面的例子可以看到,请求消息使用GetBookPrice方法来获取图书价格。响应消息由getbookpriceResponse方法返回,响应消息可以被请求者看到。以上消息都由XML组成。
Web Services Description Language或者WSDL(网络服务描述语言)
你怎么知道Internet上提供的web Service都提供了什么方法?哈哈,这就是WSDL负责告诉你的。 WSDL是描述Web Service的文档,也告诉您如何访问和使用它的方法。来看看一个WSDL文件的样例:
<?xml version="1.0" encoding="utf-8"?>
<definitions name="DayOfWeek" targetNamespace="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" xmlns:tns="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/">
<message name="DayOfWeekInput">
<part name="date" type="xsd:date" />
</message>
<message name="DayOfWeekResponse">
<part name="dayOfWeek" type="xsd:string" />
</message>
<portType name="DayOfWeekPortType">
<operation name="GetDayOfWeek">
<input message="tns:DayOfWeekInput" />
<output message="tns:DayOfWeekResponse" />
</operation>
</portType>
<binding name="DayOfWeekBinding" type="tns:DayOfWeekPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="GetDayOfWeek">
<soap:operation soapAction="getdayofweek" />
<input>
<soap:body use="encoded" namespace="http://www.roguewave.com/soapworx/examples" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</input>
<output>
<soap:body use="encoded" namespace="http://www.roguewave.com/soapworx/examples" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</output>
</operation>
</binding>
<service name="DayOfWeekService">
<documentation>Returns the day-of-week name for a given date 40</documentation>41
<port name="DayOfWeekPort" binding="tns:DayOfWeekBinding">42
<soap:address location="http://localhost:8090/dayofweek/DayOfWeek" />43</port>44</service>45</definitions>
WSDL文件主要提供的内容包括:
- Web Service的描述
- Web Service使用的方法和它需要的参数
- 访问web Service的方法
译-Web Service剖析: XML, SOAP 和WSDL 用于独立于平台的数据交换的更多相关文章
- C++请求web service与xml解析
1. C++解析XML的开源库 在项目中XML的解析使用的是开源的第三方库,TinyXML:这个解析库的模型通过XML文件,然后再内存中生成DOM模型,从而让我们能够非常方便的遍历这颗XML树. DO ...
- 【转】基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)
转载:http://www.cnblogs.com/windwithlife/archive/2013/03/03/2942157.html 一,选择一个合适的,Web开发环境: 我选择的是Eclip ...
- 微软BI 之SSIS 系列 - 在 SSIS 中使用 Web Service 以及 XML 解析
开篇介绍 Web Service 的用途非常广几乎无处不在,像各大门户网站上的天气预报使用到的第三方 Web Service API,像手机客户端和服务器端的交互等都可以通过事先设计好的 Web Se ...
- iOS开发网络篇之Web Service和XML数据解析
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主.捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...
- web service 框架
WebService简介 Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据Web Service规范实施的应用之间, ...
- 翻译-使用Spring调用SOAP Web Service
原文链接: http://spring.io/guides/gs/consuming-web-service/ 调用SOAP web service 本指南将指导你使用Spring调用一个基于SOAP ...
- C# 开发XML Web Service与Java开发WebService
一.web service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量 ...
- Eclipse+Axis自动生成Web Service WSDL文件
JDK版本:1.5.0_22 Eclipse版本:Helios Service Release 2(3.6.2) 首先创建一个web工程,创建过程如下: 如果选择Apache Tomcat v5.5, ...
- 建立自己的Web service(SOAP篇)
1.简介 这篇文章主要介绍采用SOAP来建立以及访问Web service接口. Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用 ...
随机推荐
- sqlite ef6 踩坑
调试的时候配置写如下,这样写是没有问题的但是在实际环境中有问题,因为EF路径找不到.会提示错误:The underlying provider failed on open <connectio ...
- 在地铁上看了zabbix 的书发现 "报警执行远程命令"
在地铁上看了zabbix 的书发现 "报警执行远程命令" 远程命令整个过程: items -> triggers -> action -> remote com ...
- CSS属性:定位属性(图文详解)
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. CSS的定位属性有三种,分别是绝对定位.相对定位.固定定位. posit ...
- 移动web开发之touch事件
前面的话 iOS版Safari为了向开发人员传达一些特殊信息,新增了一些专有事件.因为iOS设备既没有鼠标也没有键盘,所以在为移动Safari开发交互性网页时,常规的鼠标和键盘事件根本不够用.随着An ...
- HashSet源码阅读
HashSet的实现基于HashMap 看几个简单的初始化方法 public HashSet() { map = new HashMap<>(); } public HashSet(Col ...
- LVS集群之工作原理和调度算法(2)
LVS的工作机制 LVS里Director本身不响应请求,只是接受转发请求到后方,Realservers才是后台真正响应请求. LVS 工作原理基本类似DNAT,又不完全相像,它是一种四层交换,默 ...
- java中的重载与重写
重载简述 在java语言中,同一个类中的两个或者两个以上的方法可以有同一个名字,只要他们的的参数声明不同即可,该方法被称为重载,这个过程称为方法的重载,它是实现java多态性的一种方式. 重载是友好的 ...
- 通俗的解释JAVA wait/notify机制
生活中,我们常遇到需要等待的场景,例如去银行办事,在没轮到自己之前需要一直等待,但是如果需要自己每隔几秒钟就去柜台前看看状况,那肯定是种非常低效和令人恼火的体验.而实际的情况是,接待员会让您拿个号,说 ...
- linux下的外网木马前期要的工具
这周看了demon哥的博客弄msf外网马,自己试了一下 首先去ngrok官网下载对应的系统版本,如果对应下载那个标签是绿色的(这里不支持windows) 下载好后在linux提取出来 让我们来看看他的 ...
- vijos 1557:bzoj:1413: [ZJOI2009]取石子游戏
Description 在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排.游戏由两个人进行,两人轮流操作,每次操作者都可以从 ...