当前位置: 首页 > news >正文

Web Service概述

什么是WebService?
WebService用于解决什么问题?
1. 不同语言编写的系统之间需要交互
WebService如何解决这些问题?
1. 使用XML,信息的表示和服务的表示都使用XML
2. 使用HTTP,HTTP协议可以跨过多个防火墙
3. 使用SOAP消息,SOAP消息使用XML语言,独立于具体的编程语言
4. 使用WSDL描述服务,XML格式的文档,独立于特定的语言
5. 使用UDDI,用于发布和发现服务

什么是WSDL(Web Service Description Language),用于描述服务提供者能够提供的服务以及如何访问这些服务,如何解析服务提供者返回的执行结果。

WSDL文档结构:
1. 类型定义,定义方法调用时候参数和返回值的类型
2. 消息定义,定义请求和响应时候的消息结构
3. 端口类型定义,端口中包含多个操作,每个操作包括请求信息和响应信息格式
4. 绑定定义,把操作与具体的SOAP消息格式关联起来
5. 服务定义,把服务的地址与绑定关联起来
<?xml version="1.0" encoding="UTF-8"?>
<definions. ..>
<type>
...
</types>
<message name="add">
...
</message>
<portType name="CalculationDelegate">
...
</portType>
<binding name="CalculationPortBinding" type="tns:CalculatorDelegate">
...
</binding>
<service name="CalculatorService">
...
</service>
</definitions>

类型定义:定义各种操作中使用的参数和返回值。使用types元素,types元素中可以定义多个类型。
<xs:complexType name="add">
    <xs:sequence>
        <xs:element name="arg0" type="xs:int"/>
        <xs:element name="arg1" type="xs:int"/>
    </xs:sequence>
</xs:complexType>
<xs:element name="add" type="tns:add"/>

message定义:message定义了消息的数据结构。message元素包含了一组Part元素。<part>元素的类型可以是XSD基本类型,也可以是SOAP定义类型、WSDL定义类型(WSDL)或是Types中定义的类型。
<message name="add">
    <part element="tns:add" name="parameters"/>
</message>

定义端口类型
一个PortType可以包含若干个Operation
operation是对服务中所支持的操作的抽象描述,描述了请求和响应信息的格式。
<portType name="CalculatorDelegate">
    <operation name="add">
        <input message="tns:add"/>
        <output message="tns:addResponse">
    </operation>
    ...
</portType>

定义绑定
绑定部分定义了端口类型与具体的网络传输协议或消息交互协议的绑定,以及具体的数据格式规范。
绑定使用bindings元素定义,可以有零个、一个或者多个<binding>元素。
每个<operation>描述输入通过网络调用和响应
<binding name="CalculatorPortBinding" type="tns:CalculatorDelegate">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<!-- 具体操作 -->
<operation name="add">
    <soap:operation soapAction=""/>
    <input>
        <soap:body use="literal"/>
    </input>
    <output>
        <soap:body use="literal"/>
    </output>
</operation>
...
</binding>

定义Service
服务部分描述的是具体的被部署的Web服务所提供的所有访问入口的部署细节,一个Service往往有多个服务访问入口(Port)。Port描述的是一个服务访问入口的部署细节。
<service name="CalculatorService">
    <port binding="tns:CalculatorPortBinding" name="CalculatorPort">
        <soap:address location="http://localhost:7001/webServiceP/CalculatorPort"/>
    </port>
</service>

SOAP
什么是SOAP(Simple Object Access Protocol)定义了一种消息格式。
通信双方可以根据该格式封装消息和交换信息。
SOAP基于XML语言,使用XML作为SOAP消息的基础使得任何实现基本的Internet通信服务的系统都能处理和传送这类消息。
SOAP协议只是定义了一种消息格式,它并没有为交换消息而强加某种特定的传送协议,因此可采用HTTP、FTP和SMTP等协议来传送消息。

SOAP消息实例
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelop/" xmlns:q0="http://service/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" mlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<q0:add>
    <arg0>22</arg0>
    <arg1>111</arg1>
</q0:add>
</soapenv:Body>
</soapenv:Envelop>


为什么使用SOAP
SOAP可以很好的与HTTP协议结合
SOAP提供了一种标准的方法,它使用XML文档封装请求信息和响应信息,使得允许在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。

SOAP消息组成
一条SOAP消息就是一个普通的XML文档,包含下列元素:
必需的Envelop元素,可把此XML文档标识为一条SOAP消息
可选的Header元素,包含头部信息
必需的Body元素,包含所有的调用和响应信息
可选的Fault元素,提供有关在处理此消息所发生错误的信息

SOAP Envelope元素
SOAP的Envelope元素是SOAP消息的根元素。
xmlns:soap的命名空间为http://www.w3.org/2001/12/soap-envelope
SOAP的encodingStyle属性用于定义在文档中使用的数据类型。此属性可出现在任何SOAP元素中,并会被应用到元素的内容及元素的所有子元素上。SOAP消息没有默认的编码方式。
<?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:Envelope>

SOAP Header元素
SOAP Header元素封装了应用程序专用信息(比如认证、支付等),如果没有特殊要求可以不用Header元素,如果有Header元素,则它必须是Envelope元素的第一个子元素。
<soap:Header>
<m:Trans xmlns:m = "http://www.w3school.com.cn/transaction/" soap:mustUnderstand="1">234</Trans>
</soap:Header>

SOAP Body元素
负责指定要执行的方法名以及所有传递给方法的参数。
在Web服务者接受、翻译并处理完了这个方法调用之后,它就会发送一个响应或错误消息。
<soapenv:Body>
    <q0:add>
        <arg0>22</arg0>
        <arg1>111</arg1>
    </q0:add>
</soapenv>

SOAP Fault:用于在SOAP消息中传输错误或状态信息。如果SOAP消息需要包含SOAP Fault元素的话,它必须作为一个Body条目出现,并且最多只能出现一次。
fault元素包含如下子元素:
1. faultcode,必须在SOAP Fault中出现,表示错误代码,SOAP定义了一个小的错误集合,用于定义基本的SOAP错误。
2. faultstring,错误代码的描述信息
3. faultlactor,用于指示错误源,属性的值是一个标识该错误源的URI
4. detail,添加用户自定义的错误,包括错误消息和错误号

UDDI是一种使贸易伙伴彼此发现对方和查询对方的规范。
最终用户通过搜索企业列表、企业分类或者实际Web服务的可编程描述
UDDI不仅是一个简易的搜索引擎,它也包含了如何通过编程来和这些Web服务进行交互。

UDDI数据表
UDDI的数据分为白页、黄页和绿叶:
1. 白页信息:包含了基本的企业信息,例如企业名称、描述信息以及联系方式
2. 黄页信息:按分类法对企业信息进行分类
3. 绿叶信息:包含了如何与企业进行电子交互的信息,包含交易过程、服务描述以及解释如何调用具体Web服务的捆绑信息


UDDI程序员的API规范,由两部分组成:
1. Inquiry API,用于查询和浏览UDDI注册表来发现最终用户需要访问的企业和服务
2. Publisher API,用于添加、更新和删除UDDI注册表中的企业和服务信息

相关文章:

  • ORACLE PL/SQL编程之 触发器
  • Android开发历程_9(Frame Animation的使用)
  • HTML5与XML的区别
  • 《JavaScript高级程序设计》笔记
  • cocos2d-lua .csb文件动画播放
  • 统计程序总距离
  • Ubuntu批量修改文件后缀名
  • 如何更改silverlight datagrid header的背景
  • 关于使用AJAX获取数据时,由于IE缓存而导致数据不更新,串数据的问题!
  • 定制自己的Unity脚本模板
  • allegro查看线宽的方法
  • 对表的连接的总结
  • 所有版本chrome、chromedriver、firefox下载链接
  • 哈工大发明“电子体毛”,让机器人学会“敏感”
  • AR增强现实将重塑出版行业的未来
  • 深入了解以太坊
  • 【391天】每日项目总结系列128(2018.03.03)
  • 2017-09-12 前端日报
  • Angular 响应式表单之下拉框
  • Brief introduction of how to 'Call, Apply and Bind'
  • canvas绘制圆角头像
  • ECMAScript入门(七)--Module语法
  • js
  • k个最大的数及变种小结
  • Map集合、散列表、红黑树介绍
  • PaddlePaddle-GitHub的正确打开姿势
  • PHP 的 SAPI 是个什么东西
  • SpringBoot几种定时任务的实现方式
  • 给Prometheus造假数据的方法
  • 基于遗传算法的优化问题求解
  • 目录与文件属性:编写ls
  • 前端_面试
  • 小程序开发中的那些坑
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 一些css基础学习笔记
  • puppet连载22:define用法
  • 湖北分布式智能数据采集方法有哪些?
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #1015 : KMP算法
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (独孤九剑)--文件系统
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (一)UDP基本编程步骤
  • (转)http协议
  • (转)Oracle存储过程编写经验和优化措施
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • *p++,*(p++),*++p,(*p)++区别?