当前位置: 代码迷 >> Web前端 >> [WebService] 应用Axis2开发WebService-基本概念
  详细解决方案

[WebService] 应用Axis2开发WebService-基本概念

热度:243   发布时间:2012-10-07 17:28:51.0
[WebService] 使用Axis2开发WebService-基本概念

名词解释

EndPoint : 端点 http://www.bisoft.tl/services/HelloService
Operation : 操作 hello
NameSpace : 命名空间 http://www.bisoft.tl/ns
LocalName : 本地命名 hello
QName : 完全限定名 hello in http://www.bisoft.tl/ns

端点指位置,而命名空间与位置是不同概念。虽然命名空间也类似网址的形式,但实际这个网址只是作为唯一的ID用来区分名称相同的操作。

XML Schema basic data type : XML Schema 基本数据类型
LocalName  DataType
----------------------------------------------------
string     string  in http://www.w3.org/2001/XMLSchema
int        integer in http://www.w3.org/2001/XMLSchema

Parameters : 参数 msg:string
Return : 返回值 code:int

实际上,在WS中,我们把 input message 叫方法调用 ,而 part 代表参数, 而返回值叫 output message。

一个操作如下:
operation
---------------------
LocalName : hello
NameSpace : http://www.bisoft.tl/ns
Input Message:
    Part 1:
        Name : msg
        Type : string in http://www.w3.org/2001/XMLSchema
OutputMessage:
    Part 1:
        Name : code
        Type : int in http://www.w3.org/2001/XMLSchema   


调用方法的请求如下:
request to hello
------------------------
<foo:hello xmlns:foo="http://www.bisoft.tl/ns">
    <msg>hello world!</msg>
</foo:hello>

foo 代表命名空间的前缀。
实际上由于没有在任何SCHEMA中声明msg 类型,因此要显式声明。
<foo:hello xmlns:foo="http://www.bisoft.tl/ns" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-INSTANCE">
   <msg xsi:type="xsd:string">Hello World!</msg>
</foo:hello>

调用方法返回的响应如下:
response from hello
------------------------
<foo:hello xmlns:foo="http://www.bisoft.tl/ns">
    <code>1</code>
</foo:hello>


上面介绍的这种RPC STYLE叫RPC风格(样式)。
RPC : 远程方法调用。



RPC不是唯一设计WS的方法,下面介绍DOCUMENT STYLE文档风格(样式)。
上面的参数只能是简单的类型,其实可以创建复杂的类型。
下面使用XSD创建一个新的HelloRequest, HelloResponse元素。
<xsd:schema targetNameSpace="http://www.bisoft.tl/ns" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="HelloRequest">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="msg" type="xsd:string" />
        </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="HelloResponse">
    <xsd:complexType>
            <xsd:element name="code" type="xsd:int" />
    </xsd:complexType>
  </xsd:element>

</xsd:schema>

同时修改操作:
operation
---------------------
LocalName : hello
NameSpace : http://www.bisoft.tl/ns
Input Message:
    Part 1:
        Name : HelloRequest
        Element: HelloRequest in http://www.bisoft.tl/ns
OutputMessage:
    Part 1:
        Name : HelloReponse
        Element : HelloRequest in http://www.bisoft.tl/ns


调用请求:
<foo:HelloRequest xmlns:foo="http://www.bisoft.tl/ns">
    <msg>Hello World!</msg>
</foo:HelloRequest >

返回响应:
<foo:HelloReponsexmlns:foo="http://www.bisoft.tl/ns">
    <code>1</code>
</foo:HelloReponse>

这种文档风格的元素必须是定义良好的Well Defined。

两种风格的区别在于前者不能做Schema校验,而后者可以。因此后者渐渐成了主流。


PortType : 端口类型, WS没有直接包含所有操作,而是将操作分组成不同的端口类型。一个端口类型相当于Java中的类,而操作相当于一个静态方法。端口类型必须是唯一的,因些它也有完全限定名QName。

Binding : 绑定, 实际上一个端口类型支持不同的消息格式,如SOAP格式或文本格式。消息有多种方式传输Transported,如HTTP POST请求, SMTP邮件等。每种不同的组合起来叫绑定。
Binding
-----------------------
Name:binding1
PortType:stringutil
Format:SOAP
Transport:HTTP

Name:binding2
PortType:stringutil
Format:TEXT
Transport:SMTP

目前SOAP+HTTP比较常用。

SOAP : 简单对象访问协议。

Transported : 运送,传输。

PORT : 端口,绑定指定的PC端口及端点信息。可将WS部署到多台机器上,也可以部署到同一台机器的不同端口上。部署在同一台机器上的语言实现可以不同。如Java, C#。绑定方式也可以不同,如SOAP+HTTP, TEXT+HTTP。

TargetNameSpace : 目标命名空间。你也可能使用URN(Unique Resource Name)作为你的操作的命名空间。命名空间必须是一个URI,如URL,URN。
URN格式:
urn:object-type:object-id

示例:
urn:bisoft-tl:007

WSDL : WebService描述语言。包括SCHEMA, OPERATION, BINDING, PORT四大部分。

小结 :
WebService 跨平台,且语言无关。
一个WS包含一个或多个端口, 一个绑定部署指定消息格式与传输类型的端口类型到指定端点(网络地址)的端口上。一个端口类型包含一个或多个操作。一个操作包含两个消息。一个消息包含一个或多个参数。一个参数属于一个特定的Schema 基本类型或自定义类型。每个端口, 绑定, 端口类型, 操作都必须用 QName 来进行唯一性标识。
使用URN来唯一标识的话必须到 IANA(因特网编号管理局) 注册,防止对象类型冲突。



  相关解决方案