c++ web service(一)

web service

1.简介

  web service 可以为应用程序提供web接口,利用web service ,可以让你的程序通过互联网远程调用和控制,非常有用。不同系统,不同机器之间的程序,无须通过第三方,利用web service 即可进行交换数据。例如,支付宝并没有你银行卡具体的信息,但通过银行提供的接口,支付宝就能获得数据。天气预报,汇率转换等服务都是通过web  service 实现不同系统,不同机器上获取。

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

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

    2.消息传递。

  Web service 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web来调用这个应用程序。我们把调用这个Web service 的应用程序叫做客户。

2.构成

  web service三大核心技术

  2.1 XML

    XML和HTML在形式上是一样的,但本质上确实不同的,XML是用来传输数据的,HTML是用来显示数据的。HTML的标签是预定义,而XML标签是自己定义的。

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

    

<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don‘t forget me this weekend!</body>
</note>

    XML的特性:1.具有自我描述性。2.可以在不中断应用程序的情况下进行扩展。

    

  2.2SOAP

    简易对象访问协议。SOAP是一种简单的基于XML的协议,它使应用程序通过HTTP来交换信息。用于应用程序之间的通信,独立于平台。可以绕过防火墙来进行通信。

    一条SOAP消息就是一个普通的XML文档。所有构成元素均被声明于针对 SOAP 封装的默认命名空间中:

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

    以及针对 SOAP 编码和数据类型的默认命名空间:

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

    包含下列元素:

      2.2.1.Envelope元素,把XML文档标识为一条SOAP消息。

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

          2.2.1.1 xlmns:soap。命名空间。这个属性值必须是 "http://www.w3.org/2001/12/soap-envelope"。因为SOAP必须拥有与此命名空间相关联的一个Envelope元素。

          2.2.1.2 encodingStyle。用于定义在文档中使用的数据类型。此属性可出现在任何 SOAP 元素中,并会被应用到元素的内容及元素的所有子元素上。SOAP 消息没有默认的编码方式。

      2.2.2.Header元素。包含头部信息。

        这个元素是可选的,包含一些头部信息。包含有关 SOAP 消息的应用程序专用信息(比如认证、支付等)。如果 Header 元素被提供,则它必须是 Envelope 元素的第一个子元素。

        有三个重要的属性:

          2.2.2.1: mustUnderstand 。SOAP 的 mustUnderstand 属性可用于标识标题项对于要对其进行处理的接收者来说是强制的还是可选的。假如您向 Header 元素的某个子元素添加了 "mustUnderstand="1",则它可指示处理此头部的接收者必须认可此元素。假如此接收者无法认可此元素,则在处理此头部时必须失效。

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

          2.2.2.3:encodingStyle。

      2.2.3.Body元素,包含所有调用和响应信息。

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

      2.2.4.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> 

  SOAP 是一个基于类对象的传输协议。主要包含以下四个部分:

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

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

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

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

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

  2.3 WSDL

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

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

    2.3.1 portType 。web service执行的操作。类比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" 的参数。

  

    2.3.2 message。 web service使用的消息。类比函数调用的参数。它由一个或者多个 part 组成。Part:消息参数

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

    2.3.4 binding。 web service 使用的通信协议。一个实例如下:

<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 元素有两个属性 - name 属性和 type 属性。name 属性定义 binding 的名称,而 type 属性指向用于 binding 的端口,在这个例子中是 "glossaryTerms" 端口。

    soap:binding 元素有两个属性 - style 属性和 transport 属性。style 属性可取值 "rpc" 或 "document"。在这个例子中我们使用 document。transport 属性定义了要使用的 SOAP 协议。在这个例子中我们使用 HTTP。

    2.3.5  WSDL UDDI

      UDDI是一种目录服务,企业可以使用它对web service 进行注册和搜索。UDDI,英文为 "Universal Description, Discovery and Integration",可译为"通用描述、发现与集成服务"。

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

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

      例子:假如行业发布了一个用于航班比率检测和预订的 UDDI 标准,航空公司就可以把它们的服务注册到一个 UDDI 目录中。然后旅行社就能够搜索这个 UDDI 目录以找到航空公司预订界面。当此界面被找到后,旅行社就能够立即与此服务进行通信。

原文地址:https://www.cnblogs.com/meikon/p/10004519.html

时间: 2024-10-10 09:44:49

c++ web service(一)的相关文章

在GlassFish应用服务器上创建并运行你的第一个Restful Web Service【翻译】

前言 本人一直开发Android应用,目前Android就业形势恶劣,甚至会一路下滑,因此决定学习服务器开发.采用的语言是java,IDE是Intellij,在下载Intellij的同时看到官网很多优秀的guide文章,于是按照guide成功完成了一个RESTful的demo.官方文档非常简洁,给我带来了很大的帮助,于是翻译之,希望对其他不愿意看原文的人有所帮助.由于水平有限,读者发现错误请指正,谢谢. 原文地址: https://www.jetbrains.com/help/idea/2016

Axis实现 web service接口开发 + 客户端调用

看到网上挺多人找webservice axis开发案例,但是网上较多的都是有点乱,初学者不太容易看得懂,所以最近看到自己终于有了点空闲时间,就上传了一份比较简单的webservice axis的完整案例. 只适用于初学者. 一.新建一个web项目 导入lib包. 2.配置 web.xml <!-- axis 配置 -->   <servlet>         <display-name>Apache-Axis Servlet</display-name>

Axis2实现 web service接口开发 + 客户端调用

一. 新建一个web项目, 1.打开axis2.war包,将conf,lib,modules三个文件夹复制到项目的WEB-INF文件夹下,再在WEB-INF目录下新建一个services文件夹,然后在services文件下新建一个文件夹(任意取名): 再新建META-INF文件夹,最后再新增services.xml,接口信息就写在这里面. 具体路径:WEB-INF/services/myservice/META-INF/services.xml 2.配置 web.xml .加载axis2 和 a

VB.NET,C#.NET调用Web Service,利用visual studio 的实现方法

在VB.NET调用Web Service提供的服务 技术qq交流群:JavaDream:251572072 下面是一篇文章比较详细,其实具体操作很简单,把Web Service服务地址,利用工具(VS2010),通过添加引用的形式,添加到项目中来就可以应用了. 大家如果这个地方不会操场的话,可以问问我QQ:1606841559 当Web Service已经处于对外提供服务状态,VB.NET就可以通过HTTP"调用"来使用这些服务了.当然前提是要了解Web Service对外提供服务所对

asp.net ajax客户端框架如何调用Web Service

1:Web Service类添加 [System.Web.Script.Services.ScriptService]特性2:需要异步调用的方法需要添加[WebMethod]特性 3,页面必须添加ScriptManager控件(有且唯一)4: ScriptManager添加对相应的Web Service的ServiceReference5:在客户端使用如下格式调用: [NameSpace].[ClassName].[MethodName](parm1,parm2,...,callbackFunc

zzWCF实现RESTFul Web Service

http://www.cnblogs.com/KeithWang/archive/2012/02/14/2351826.html http://blog.csdn.net/qq_26054303/article/details/48655985 http://www.cnblogs.com/LNCLSH/p/3781572.html 共同学习了前面一些概念,终于开始正题了哈.RESTful的Web Service调用直观,返回的内容容易解析.这里先会描述一个简单的场景--Web Service提

Web Service和WCF的到底有什么区别

[1]Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键).微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互.WSDL来实现服务接口相关的描述.此外Web services 可以注册到UDDI中心.供其客户查找使用.  

Web Service简介

1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册. XML:(Extensible Markup Language)扩展型可标记语言.面向短期的临时数据处理.面向万维网络,是Soap的基础. Soap:(Simple Object A

Web Service学习之六:CXF解决无法处理的数据类型

CXF不能够处理像Map复杂的数据类型,需要单独转换处理. 总体思路:创建一个转换器和一个对应的可以处理的数据结构类型,将不能处理的类型转换成可以处理的类型: 步骤: 一.创建一个可以处理的类型 举例:要转换Map<String,User> package ws; import java.util.List; public class StringUser { public static class Entry { private String key; private User value;

Web Service 和WCF

Web Service 的工作原理 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册.WebService可用基于XML的SOAP来表示数据和调用请求,并且通过HTTP协议来传输这些XML格式的数据. webservice最大优点就是实现异构平台间的互通,这也是使用WebS