`

WebService学习

阅读更多
//概述
1. What is web service
Web Service技术是基于Web的分布式组件对象模型
分布式组件对象模型:分布式对象技术是在面向对象技术的基础上发展起来的,它要解决的主要问题是位于不同进程中的对象之间的调用问题。
传统的分布式技术主要包括CORBA(OMG), DCOM(微软), EJB.

Web Service是在互联网上,通过基于标准的互联网协议(例如HTTP、SMTP)访问的一段业务逻辑。或者叫Web服务组件。
Web Service承诺在一个分布式环境中,不同的平台的,不同语言的应用和应用组件之间能够互操作。

技术上来说,Web Service也是一种远程方法调用,思考一些问题:
1异构应用系统之间如何集成
2不同公司之间的系统如何集成(B2B)
3需要集成的系统之间有防火墙
4代码重用的问题(如EJB)

2. Web Service解决的问题
   1)异构应用系统之间如何集成
异构程序定位:使用URI标志软件程序
传输协议:HTTP、FTP、SMTP等公共协议
数据格式:XML(SOAP)
接口描述:XML(WSDL)
   2)不同公司之间的系统如何集成
公共的互联网协议HTTP、FTP、SMTP
   3)需要集成的系统之间有防火墙
使用公共的网络协议HTTP、FTP、SMTP
区别于web应用
web application: 人(浏览器)与应用的交互
web service: 应用与应用的交互


   4)代码重用的问题
使用HTTP等服务,无需下载或安装服务程序的代码


//SOAP协议

1. What is SOAP(Simple Object Access Protocol)
SOAP是一种,可在各种分布的环境中进行数据交换的轻量级协议
SOAP使用XML技术定义了一个可扩展的消息框架,底层可以通过各种协议进行数据交换(主要HTTP、FTP、SMTP)
SOAP定义为与特定的编程模型和实现语言无关


2. SOAP信封
一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:
必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息
可选的 Header 元素,包含头部信息
必需的 Body 元素,包含所有的调用和响应信息
包含可选的 Fault 元素,提供有关在处理此消息所发生错误的信息

所有以上的元素均被声明于针对 SOAP 封装的默认命名空间中:
http://www.w3.org/2001/12/soap-envelope
以及针对 SOAP 编码和数据类型的encodingStyle属性:
http://www.w3.org/2001/12/soap-encoding


SOAP 消息的基本结构
<?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 Header
可选的,用于扩展SOAP消息,例如:
    路由信息
指明路由的下一个中介节点
    调用的上下文
目前的应用模式基本上停留在远程过程/对象的调用上,基于多次协调调用或者遵循上下文的调用模式尚很少使用,这其实是受简单的SOAP消息的制约
    安全认证
保存用户标识及密码信息或者其他鉴定证书
    事务控制
利用SOAP Header条目进行事务控制


4. SOAP Body
必须的,包含传递给最终的节点的实际信息
  <soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
  </soap:Body>

5. SOAP Fault
可选的,元素用于存留 SOAP 消息的错误和状态信息。必须出现在SOAP Body中
<soap:Body xmlns:m="http://www.example.org/stock">
<soap:Fault>
<faultcode>MustUnderstand</faultcode>
<faultstring>
一个或多个必须的soap头未被理解
</faultstring>
</soap:Fault
</soap:Body>

<faultcode> 供识别故障的代码
<faultstring> 可供人阅读的有关故障的说明


//WSDL

1. What is WSDL(Web Service Description Language)
是一个用来描述Web服务和说明如何与Web服务通信的XML语言
WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应Web service的代码

2. WSDL文档结构
<definitions>

<types>
   definition of types........
</types>

<message>
   definition of a message....
</message>

<portType>
   definition of a port.......
</portType>

<binding>
   definition of a binding....
</binding>

<service>
   service of a binding....
</service>

</definitions>

总体上可以分为两大部分:
    1)抽象定义
        定义要交换的数据格式(数据类型/参数/返回值/方法声明)
types
定义数据类型,使用XML Schema作为类型系统typing system

messages
定义要交换的数据,数据类型是types中定义的数据类型。对应方法的参数
包括若干个part,每个part 都对应types中定义一个元素。对应方法的一个参数

porttype(接口) 都包含若干 operation
定义一个服务,对应Java的接口
包含一些operation,operation对应Java的方法
operation 包含一个input 和 output 消息(messages中定义)

    2)具体描述
    定义要采用的互操作协议(soap、http)、传输协议(http,ftp,smtp 等)、声明服务的访问地址

binding :针对 porttype 定义协议绑定和数据格式的细节:
首先是定义操作风格(style) 和 传输协议(transport)
然后是对操作的参数使用的类型系统(use)
service 包含若干 port
port 定义了一个通信端点,代表 binding(不同协议)到 address 的映射



SOAP的两种操作风格Operation Style
style=[document|rpc]

1. RPC (Remote Proceduce Call): 客户端使用远程过程调用约定. 优点: 对开发人员更加简单.
SOAP请求消息的Body中, sub-element必須与operation同名
SOAP响应消息的Body中,sub-element则命名为operation-name + "Response"

<SOAP:Body>
<sayHello>
<message-part-1><!-- mapped to a parameter-- >
<message-part-2><!-- mapped to a parameter-- >
</sayHello>
</SOAP:Body>


document:
客户端使用 XML 模式调用约定;优点:更松散的客户端和服务器端耦合性,跨平台互操作性更好

<SOAP:Body>
  <message-part-1> ...
  <message-part-2> ...
</SOAP:Body>

document分两种:
bared (裸露)
wrapped,模拟rpc(包装的)


binding的传输协议
transport="http://schemas.xmlsoap.org/soap/http"
transport="http://schemas.xmlsoap.org/soap/smtp"

binding中消息格式Message format
user=[literal|encoded]
literal: 使用types定义的数据类型
encoded: 使用soap定义好的数据类型,不能使用自定义数据类型
http://schemas.xmlsoap.org/soap/encoding/

一般web服务平台支持的style/user组合
1. style="rpc" and use="encoded"
2. style="rpc" and use="literal"
3. style="document" and use="literal"

其中2、3是Web服务标准的格式。即要实现异构平台的互操作,use必须是literal



//开发Web Service
XFire动态客户端
    第一步:引入 XFire相关的类库
Core Libraries
JAXB Libraries
HTTP Client Libraries

    第二步:
Client client = new Client( new URL("WSDL文档URL")); //创建一个动态客户端
Object[] results = client.invoke("test", new Object[] { "Juliet" }); //调用方法
System.out.println( results[0]);

查看wsdl
http://localhost:8088/HelloS/services

//UDDI

What is UDDI (Universal Description Discovery and Integration)
即统一描述、发现和集成协议。UDDI一种发布和查找Web服务的方式。UDDI使贸易伙伴彼此发现对方和查询对方。

预想的结构:发布者--注册服务--使用者
不是必须的,公共的注册服务目前还没有被广泛接受
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics