zoukankan      html  css  js  c++  java
  • webservice(草稿)

    1.  概述

    WebService是一种跨编程语言和跨操作系统平台的远程调用技术。

    Webservice是被定义用来使不同应用之间通过网络传输数据的一种标准,此标准和具体的语言无关,至于哪种语言提供接口,哪种语言来调用要看项目的需要。

    2.  工作原理

    1.XML

    XML是用来标记数据的(对于XML标签详细介绍,可以参考W3C),因为上面我们说过,webservice不依赖于某一门特定的编程语言。而不同的系统可能是使用不同的编程语言来开发,(如上:项目A使用PHP开发,项目B使用Java开发)所以说就需要一种方式来交换数据,这种方式同样不依赖于某种编程语言,大多数软件都集成了XML标签,因此使用XML格式的数据来实现数据的交换。

    2.SOAP

    SOAP是一种特殊的协议,用来传输数据。当调用方一旦发现提供Webservice接口的地址,它将会使用SOAP协议和提供Webservice的系统进行连接。

    3.WSDL

    WSDL用来描述客户端可以调用的接口的规则,所有这些规则定义在WSDL文件中,当有客户端发起调用的时候,Webservice提供方会参考这个WSDL规则来验证数据请求的合法性。

    4.UDDI

    UDDI列出了那些服务是可以被访问的。当一个系统需要数据的时候,首先它会先查找UDDI,找出从除了自己之外的那些可以获取到自己需要的数据的服务,然后进行链接获取数据。这一点有点类似于DNS的功能。

    以上分别介绍了这四项技术在整个Webservice架构中的角色,下面我们将这四项连起来,看一下整个Webservice的架构是如何实现的。

    首先,Webservice的提供方会在WSDL文件中新建一些接口的规则,然后将WSDL文件发送给UDDI进行报道注册。服务请求方(也就是调用Webservice接口的一方)会先连接UDDI来查询哪一个提供方有自己需要的数据,找到以后然后连接这个服务提供方,此时和提供方使用SOAP协议进行交互。当服务方收到请求以后,首先会对这个请求进行验证,验证的依据就是先前新建的WSDL规则。验证通过以后服务方会向请求方发送XML格式的数据,此时同样是使用SOAP协议进行交互。当请求方收到XML数据以后,请求方会使用XSD来验证此XML数据的合法性。验证通过以后再进行数据的处理。

    整个过程可以用下图反映:

    3.  框架选择

    Apache CXF是CodehausXFire的第二代产品,目前在不同框架中性能最佳,应该是开发者不错的选择,这与它本身的架构设计不无关系。相比其他框架,CXF具有几个突出的特性:支持JAX-WS、Spring集成、Aegi数据绑定、支持RESTful services、支持WS-*、Apache协议、代码实现简洁。

    Apache Axis2是Apache Axis1的第二代产品,架构上也非常不错,关键特性:支持多语言(C/C++)、支持各种规范、可插拔模块化设计、支持热部署等。与CXF相比性能也非常优异。

    RESTEasy也许也是个不错的框架!

    4.   测试

    访问:http://localhost:8080/wstest?wsdl

    This XML file does not appear to have any style information associated with it. The document tree is shown below.

    <!--

     Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.4-b01.

    -->

    <!--

     Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.4-b01.

    -->

    <definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ws.pers.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://ws.pers.com/" name="Hello">

    <types>

    <xsd:schema>

    <xsd:import namespace="http://ws.pers.com/" schemaLocation="http://localhost:8080/wstest?xsd=1"/>

    </xsd:schema>

    </types>

    <message name="sayHi">

    <part name="parameters" element="tns:sayHi"/>

    </message>

    <message name="sayHiResponse">

    <part name="parameters" element="tns:sayHiResponse"/>

    </message>

    <message name="sayHiToUser">

    <part name="parameters" element="tns:sayHiToUser"/>

    </message>

    <message name="sayHiToUserResponse">

    <part name="parameters" element="tns:sayHiToUserResponse"/>

    </message>

    <message name="SayHiToUserList">

    <part name="parameters" element="tns:SayHiToUserList"/>

    </message>

    <message name="SayHiToUserListResponse">

    <part name="parameters" element="tns:SayHiToUserListResponse"/>

    </message>

    <portType name="Hello">

    <operation name="sayHi">

    <input wsam:Action="http://ws.pers.com/Hello/sayHiRequest" message="tns:sayHi"/>

    <output wsam:Action="http://ws.pers.com/Hello/sayHiResponse" message="tns:sayHiResponse"/>

    </operation>

    <operation name="sayHiToUser">

    <input wsam:Action="http://ws.pers.com/Hello/sayHiToUserRequest" message="tns:sayHiToUser"/>

    <output wsam:Action="http://ws.pers.com/Hello/sayHiToUserResponse" message="tns:sayHiToUserResponse"/>

    </operation>

    <operation name="SayHiToUserList">

    <input wsam:Action="http://ws.pers.com/Hello/SayHiToUserListRequest" message="tns:SayHiToUserList"/>

    <output wsam:Action="http://ws.pers.com/Hello/SayHiToUserListResponse" message="tns:SayHiToUserListResponse"/>

    </operation>

    </portType>

    <binding name="HelloImplPortBinding" type="tns:Hello">

    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>

    <operation name="sayHi">

    <soap:operation soapAction=""/>

    <input>

    <soap:body use="literal"/>

    </input>

    <output>

    <soap:body use="literal"/>

    </output>

    </operation>

    <operation name="sayHiToUser">

    <soap:operation soapAction=""/>

    <input>

    <soap:body use="literal"/>

    </input>

    <output>

    <soap:body use="literal"/>

    </output>

    </operation>

    <operation name="SayHiToUserList">

    <soap:operation soapAction=""/>

    <input>

    <soap:body use="literal"/>

    </input>

    <output>

    <soap:body use="literal"/>

    </output>

    </operation>

    </binding>

    <service name="Hello">

    <port name="HelloImplPort" binding="tns:HelloImplPortBinding">

    <soap:address location="http://localhost:8080/wstest"/>

    </port>

    </service>

    </definitions>

  • 相关阅读:
    Redhat as 版本下启用 Telnet 和 FTP 服务
    Eclipse中设置编码的方式
    rhel3上安装Oracle(来自Oracle网站)
    home/end的快捷键~
    Red Hat Linux 9中文本模式与图形模式的切换
    Highcharts:非常漂亮的图表API
    Linux裸设备总结(ZT)
    Red Hat Linux操作系统下从文本模式切换到图形模式的方法
    pear
    Java中的asList
  • 原文地址:https://www.cnblogs.com/yadongliang/p/8643871.html
Copyright © 2011-2022 走看看