一篇文章掌握WebService服务、工作原理、核心组件、主流框架

这篇具有很好参考价值的文章主要介绍了一篇文章掌握WebService服务、工作原理、核心组件、主流框架。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、WebService定义

解决问题:

2、WebService的工作原理

2.1 实现一个完整的Web服务包括以下步骤

2.2 调用方式

3、Web Service的核心组件

3.1 XML

3.2 SOAP

3.3 WSDL

3.4 UDDI

4、主流框架

4.1 AXIS(已淘汰)

4.2 XFire

4.3 CXF

5、Soap协议详解

1.Soap协议是什么

2.认识Soap

3.结论

4.SOAP小总结

6、WSDL详解

1.types

2.message

3.portType

4.binding

7、UDDI详解


1、WebService定义

Web Service是一个SOA(面向服务架构)的应用程序,它是不依赖于语言,不依赖于平台,可以

实现不同的语言(通过xml 描述)间的相互调用,通过Internet进行基于Http协议的网络应用间的

交互

通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。

简单可以理解成:WebService是一种跨编程语言和跨操作系统平台的远程调用技术

从表面上看,WebService就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的

API

这就是说,你能够用编程的方法通过Web调用来实现某个功能的应用程序。

从深层次上看,Web Service是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应

用,可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。

解决问题:

  1. 不同系统、不同平台、不同语言之间的通信访问和调用。

  2. 应用程序的集成,不同业务的整合

WebService实质就是实现应用程序之间通信,有两种应用程序通信的方法

  1. RPC 远程调用

    在客户端,RPC的通常方式是:实例化一个远程对象,并调用其方法和属性。

  2. 消息传递

WebService就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,

你能够用编程的方法通过Web来调用这个应用程序。我们把调用这个WebService 的应用程序叫做

客户。

2、WebService的工作原理

Web服务有两层含义:

1、它是指封装成单个实体并发布到网络上的功能集合体

2、它是指功能集合体被调用后所提供的服务

简单地讲,Web服务是一个URL资源,客户端可以通过编程方式请求得到它的服务,而不需要知

道所请求的服务是怎样实现的,这一点与传统的分布式组件对象模型不同。

Web服务的体系结构是基于Web服务提供者Web服务请求者Web服务中介者三个角色和发

发现绑定三个动作构建的。

简单地说,Web服务提供者就是Web服务的拥有者,它耐心等待为其他服务和用户提供自己已有

的功能。

Web服务请求者就是Web服务功能的使用者,它利用SOAP消息向Web服务提供者发送请求以获得

服务。

Web服务中介者的作用是把一个Web服务请求者与合适的Web服务提供者联系在一起,它充当管

理者的角色,一般是UDDI。

这三个角色是根据逻辑关系划分的,在实际应用中,角色之间很可能有交叉:一个Web服务既可以

是Web服务提供者,也可以是Web服务请求者,或者二者兼而有之。

显示了Web服务角色之间的关系:其中,“发布”是为了让用户或其他服务知道某个Web服务的存在

和相关信息;“查找(发现)”是为了找到合适的Web服务;“绑定”则是在提供者与请求者之间建立

某种联系。

2.1 实现一个完整的Web服务包括以下步骤

  1. Web服务提供者设计实现Web服务,并将调试正确后的Web服务通过Web服务中介者发布,并在UDDI注册中心注册; (发布

  2. Web服务请求者向Web服务中介者请求特定的服务,中介者根据请求查询UDDI注册中心,为请求者寻找满足请求的服务; (发现

  3. Web服务中介者向Web服务请求者返回满足条件的Web服务描述信息,该描述信息用WSDL写成,各种支持Web服务的机器都能阅读;(发现

  4. 利用从Web服务中介者返回的描述信息生成相应的SOAP消息,发送给Web服务提供者,以实现Web服务的调用;(绑定

  5. Web服务提供者按SOAP消息执行相应的Web服务,并将服务结果返回给Web服务请求者。(绑定

2.2 调用方式

webservice 的调用有3种方式:

  • httpget

  • httppost

  • httpsoap

soap的优点是可以传递结构化的数据,而前两种不行。

btw, soap 最终也是使用 HTTP 传送 XML

3、Web Service的核心组件

3.1 XML

XML:(Extensible Markup Language) :扩展型可标记语言和HTTP

面向短期的临时数据处理、面向万维网络,是Soap的基础。

XML和HTML在形式上是一样的,但本质上确实不同的,XML是用来传输数据的HTML是用来显

示数据的

HTML的标签是预定义,而XML标签是自己定义的

XML主要的构成是根元素子元素。且必须前后对应,属性值必须用双引号或者单引号括起来。

形式如下:

<?xml version="1.0" encoding="UTF-8"?>
 <root>
     <header>响应头信息</header>
     <body>响应结果信息</body>
 </root>

XML的特性:

1.具有自我描述性。

2.可以在不中断应用程序的情况下进行扩展

3.2 SOAP

SOAP(Simple Object Access Protocol) :简单对象访问协议

WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封

,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和

XML内容格式就是SOAP协议。

SOAP协议 = HTTP协议 + XML数据格式

SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD

的,XML是SOAP的数据编码方式。

3.3 WSDL

WSDL(Web Service Description Language) :WebService描述语言

WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息,即:说明当前的

服务在哪,有哪些接口可以调用,分别是什么方法,什么参数等信息。一个web service对应一个

唯一的wsdl文档。

3.4 UDDI

UDDI(UnviversalDescription ,Discovery,andIntegration) :统一描述发现和集成协议。

UDDI是一种目录服务,企业可以使用它对WebServices进行注册和搜索。

4、主流框架

4.1 AXIS(已淘汰)

Axis (Apache extensible lnteraction System):阿帕奇可扩展交互系统

它是一款开源的webService运行引擎,本质上就是一个SOAP引擎提供创建服务器端、客户端和

网关SOAP操作的基本框架

Axis分为1.x系列和2系列,两个系列体系结构和使用上有较大的区别,相对而言,Axis1.x更加稳

定,文档也比较齐全。

官网: Apache Axis

4.2 XFire

XFire是下一代的java SOAP框架。XFire提供了非常方便的API,使用这些API可以开发面向服务

(SOA)的程序。它支持各种标准,性能优良(基于低内存的STAX模型)。

官网:http://xfire.codehaus.org/

4.3 CXF

Apache CXF = Celtix+ XFire

Apache CXF的前身叫Apache Celtixfire,现在已经正式更名为Apache CXF了,以下简称为CXF。

CXF继承了celtix和XFire两大开源项目的精华,提供了对JAX-WS全面的支持,并且提供了多种

Binding、DataBinding、Transport以及各种Format的支持,并且可以根据实际项目的需要,采用

代码优先(Code First)或者WSDL优先(WSDL First)来轻松地实现web Services的发布和使

用。

Apache CXF已经是一个正式的Apache顶级项目。

官网: Apache CXF -- Index

5、Soap协议详解

1.Soap协议是什么

简单对象访问协议(Simple Object AccessProtocol,SOAP)是一种轻量的、简单的、基于XML的

协议,它被设计成在WEB上交换结构化的和固化的信息。

SOAP是基于XML的简易协议可使应用程序在HTTP之上进行信息交换

2.认识Soap

一条SOAP消息就是一个普通的XML文档

所有构成元素均被声明于针对 SOAP 封装的默认命名空间中:

http://www.w3.org/2001/12/soap-envelope

以及针对 SOAP 编码和数据类型的默认命名空间:http://www.w3.org/2001/12/soap-encoding

一条SOAP消息就是一个普通的XML文档,包含下列元素

  • 必需的Envelope元素,可把此XML文档标识为一条SOAP消息

必须要有的元素,是SOAP 消息的根元素。包含两个属性:

1 xlmns:soap。命名空间。这个属性值必须是 "http://www.w3.org/2001/12/soap-envelope"。

因为SOAP必须拥有与此命名空间相关联的一个Envelope元素。

2 encodingStyle。用于定义在文档中使用的数据类型。此属性可出现在任何 SOAP 元素中,并会

被应用到元素的内容及元素的所有子元素上。SOAP 消息没有默认的编码方式。

  • 可选的Header元素,包含头部信息

这个元素是可选的,包含一些头部信息。包含有关 SOAP 消息的应用程序专用信息(比如认证、

支付等)。

如果Header元素被提供,则它必须是 Envelope 元素的第一个子元素

有三个重要的属性:

1、mustUnderstand 。SOAP 的 mustUnderstand 属性可用于标识标题项对于要对其进行处理的接

收者来说是强制的还是可选的。假如您向 Header 元素的某个子元素添加了

"mustUnderstand="1",则它可指示

处理此头部的接收者必须认可此元素。假如此接收者无法认可此元素,则在处理此头部时必须失

效。

2、actor。用于将 Header 元素寻址到一个特定的端点。

3、encodingStyle。

  • 必需的Body元素,包含所有的调用和响应信息。

必须要有的元素,包含实际的SOAP消息。

  • 可选的Fault元素,提供有关在处理此消息所发生错误的信息

可选的元素,用于存留SOAP消息的错误和状态信息。如果已提供了 Fault 元素,则它必须是 Body

元素的子元素。

在一条 SOAP 消息中,Fault 元素只能出现一次

 <?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:Header>
 ...
 </soap:Header>
 ​
 <soap:Body>
 ...
   <soap:Fault>
   ...
   </soap:Fault>
 </soap:Body>
 ​
 </soap:Envelope>

3.结论

SOAP是用于访问网络服务的协议

一次WebService的调用,不是方法的调用 而是soap消息(xml格式规范的文档片段)之间的输入输出。

4.SOAP小总结

1.客户端到UUDI上寻找Service目录。

2.客户端获得WSDL文件。

3.客户端根据WSDL文件的约束和规范,创建SOAP客户端。

4.客户端根据SOAP访问Service。

SOAP 是一个基于类对象的传输协议

主要包含以下四个部分:

1.封装。它定义了一个框架 , 该框架描述了消息中的内容是什么,谁应当处理它以及它是可选的还

是必须的。

2.编码规则。它定义了一种序列化的机制,用于交换应用程序所定义的数据类型的实例。

序列化:序列化是指将数据从有结构清晰的语言定义的数据形式转化为二进制字符串,反序列化则

是序列化的逆操作。

3.RPC 表示。它定义了用于表示远程过程调用和应答的协定。

4.绑定。定义了一种使用底层传输协议来完成在节点间交换SOAP封装的约定。

6、WSDL详解

网络服务描述语言,基于XML。用于描述WebService以及如何对它们进行访问

WSDL文档是利用这些主要的元素来描述某个WebService的:

1.types

WebService使用的数据类型。为了实现平台无关性,使用 XML Schema语法来定义数据类型。

2.message

WebService使用的消息。类比函数调用的参数。它由一个或者多个 part 组成

Part:消息参数

 <message name="getTermRequest">
     <part name="term" type="xs:string"/>
 </message>

3.portType

WebService执行的操作。类比c++一个函数库。它是WSDL 端口。特定端口类型的具体协议和数

据格式规范。

有四种操作类型。

One-way 此操作可接受消息,但不会返回响应。
Request-response 此操作可接受一个请求并会返回一个响应
Solicit-response 此操作可发送一个请求,并会等待一个响应。
Notification 此操作可发送一条消息,但不会等待响应。

一个 request-response 操作的例子:

 <message name="getTermRequest">
     <part name="term" type="xs:string"/>
 </message>
 ​
 <message name="getTermResponse">
     <part name="value" type="xs:string"/>
 </message>
 ​
 <portType name="glossaryTerms">
     <operation name="getTerm">
         <input message="getTermRequest"/>
         <output message="getTermResponse"/>
     </operation>
 </portType>

portType中name属性:定义了一个端口

operation元素定义了每个端口提供的操作符。name属性定义一个操作。

具体意义如下:定义了一个名为“getTerm”的操作。"getTerm" 操作会请求一个名为 "getTermRequest" 的输入消

息,此消息带有一个名为 "term" 的参数,并将返回一个名为 "getTermResponse" 的输出消息,此消息带有一个名为 "value" 的参数。

4.binding

WebService使用的通信协议

一个实例如下:

 <message name="getTermRequest">
       <part name="term" type="xs:string"/>
 </message>
 ​
 <message name="getTermResponse">
       <part name="value" type="xs:string"/>
 </message>
 ​
 <portType name="glossaryTerms">
       <operation name="getTerm">
       <input message="getTermRequest"/>
       <output message="getTermResponse"/>
       </operation>
 </portType>
 ​
 <binding type="glossaryTerms" name="b1">
      <soap:binding style="document"
      transport="http://schemas.xmlsoap.org/soap/http" />
      <operation>
        <soap:operation soapAction="http://example.com/getTerm"/>
        <input><soap:body use="literal"/></input>
        <output><soap:body use="literal"/></output>
     </operation>
 </binding>

binding 元素有两个属性

  • type 属性: 指向用于 binding 的端口,在这个例子中是 "glossaryTerms" 端口。

  • name 属性:定义 binding 的名称。

soap:binding 元素有两个属性

  • style 属性:可取值 "rpc" 或 "document"。在这个例子中我们使用 document。

  • transport 属性:定义了要使用的 SOAP 协议。在这个例子中我们使用 HTTP。

xmlns:xml namespace

7、UDDI详解

UDDI是一种目录服务,企业可以使用它对WebService 进行注册和搜索。

UDDI,英文为 "Universal Description, Discovery and Integration",可译为"通用描述、发现与集成服务"。

UDDI是一种目录,这个目录用于存储有关 WebService 信息

例子:假如行业发布了一个用于航班比率检测和预订的 UDDI 标准,航空公司就可以把它们的服务

注册到一个UDDI 目录中。然后旅行社就能够搜索这个 UDDI 目录以找到航空公司预订界面。当此

界面被找到后,旅行社就能够立即与此服务进行通信。文章来源地址https://www.toymoban.com/news/detail-799938.html

到了这里,关于一篇文章掌握WebService服务、工作原理、核心组件、主流框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++算法图解专栏】一篇文章带你掌握差分算法

    ✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343 📣专栏定位:为 0 基础刚入门数据结构与算法的小伙伴提供详细的讲解,也欢迎大佬们一起交流~ 📚专栏地址:https://blog.csdn.net/Newin2020/article/details/126445229 ❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创

    2024年04月11日
    浏览(44)
  • C++初阶之一篇文章让你掌握vector(模拟实现)

    模拟实现vector是为了深入理解和学习C++标准库中vector容器的工作原理和实现细节。 vector是C++标准库中最常用的容器之一,它提供了动态数组的功能,并且具有自动扩容和内存管理的特性,使得在使用时非常方便。 模拟实现vector有以下几个优点: 学习数据结构与算法 :实现

    2024年02月14日
    浏览(46)
  • C++初阶之一篇文章让你掌握string类(模拟实现)

    模拟实现 std::string 是一个有挑战性的练习,它可以带来多方面的收益,尤其对于学习 C++ 和深入了解字符串操作以及动态内存管理的机制。以下是模拟实现 std::string 的一些好处和重要意义: 学习 C++ 内存管理 :std::string 是一个动态分配内存的容器,模拟实现需要手动处理内

    2024年02月15日
    浏览(39)
  • C++初阶之一篇文章让你掌握vector(理解和使用)

    在C++中,std::vector是标准模板库(STL)中的一种动态数组容器,它可以存储任意类型的元素,并且能够自动调整大小。std::vector提供了许多方便的成员函数,使得对数组的操作更加简单和高效。 vector声明 : template class T, class Alloc = allocatorT ; 这是 std::vector 的一般模板定义。它

    2024年02月14日
    浏览(50)
  • 一篇文章让你完全掌握使用Git推送代码到新版GitCode

    GitCode是一款基于Git的在线代码托管和协作工具,提供代码版本控制、代码托管、代码评审、项目管理等功能。它支持多种编程语言,包括 Java 、 Python 、 C++ 等,可帮助开发者高效协作,提高代码质量和开发效率。GitCode还提供丰富的 API 接口,支持与其他系统集成,方便开发

    2024年03月25日
    浏览(43)
  • C++初阶之一篇文章让你掌握string类(了解和使用)

    学习 string 类是在 C++ 中非常重要的一步,string 类是 C++ 标准库提供的用于处理字符串的类,它相比 C 语言中的字符串处理函数更为高级、灵活和安全。以下是学习 string 类的一些重要理由: 功能强大 :string 类提供了丰富的成员函数和操作符,用于处理字符串的拼接、查找、

    2024年02月15日
    浏览(42)
  • Go For Web:一篇文章带你用 Go 搭建一个最简单的 Web 服务、了解 Golang 运行 web 的原理

    本文作为解决如何通过 Golang 来编写 Web 应用这个问题的前瞻,对 Golang 中的 Web 基础部分进行一个简单的介绍。目前 Go 拥有成熟的 Http 处理包,所以我们去编写一个做任何事情的动态 Web 程序应该是很轻松的,接下来我们就去学习了解一些关于 Web 的相关基础,了解一些概念,

    2023年04月14日
    浏览(51)
  • Python和PyTorch深入实现线性回归模型:一篇文章全面掌握基础机器学习技术

    线性回归是一种统计学中的预测分析,该方法用于建立两种或两种以上变量间的关系模型。线性回归使用最佳的拟合直线(也称为回归线)在独立(输入)变量和因变量(输出)之间建立一种直观的关系。简单线性回归是输入变量和输出变量之间的线性关系,而多元线性回归

    2024年02月15日
    浏览(53)
  • 谁说配置难?这篇文章让你轻松掌握xilinx 7系列FPGA配置技巧

      本文旨在通过讲解不同模式的原理图连接方式,进而配置用到引脚的含义(手册上相关引脚含义有四、五页,通过本文理解基本上能够记住所有引脚含义以及使用场景),熟悉xilinx 7系列配置流程,以及设计原理图时需要注意的一些事项,比如flash与FPGA的上电时序。   x

    2024年02月06日
    浏览(70)
  • 干货|工作中要使用Git,看这篇文章就够了

    本文将从 Git 入门到进阶、由浅入深,从常用命令、分支管理、提交规范、vim 基本操作、进阶命令、冲突预防、冲突处理等多方面展开,足以轻松应对工作中遇到的各种疑难杂症,如果觉得有所帮助,还望看官高抬贵手给个赞呗,感谢! 虽说现在工作中使用 Git 都会用一些图

    2023年04月25日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包