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

[color=white]
名词解释

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

端点指位置,而命名空间与位置是不同概念。虽然命名空间也类似网址的形式,但实际这个网址只是作为唯一的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">
[b] <msg xsi:type="xsd:string">Hello World!</msg>[/b]
</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(因特网编号管理局) 注册,防止对象类型冲突。


[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值