第一部分:一些概念的介绍(gunandrose翻译自Jbuilder)
 
  
WEBSERVICE是一个通过网络特别是INTERNET调用,执行断序或连续任务的软件模型。 
开发者能创建一个客户端应用调用一系列通过RPC或者消息服务来提供一些或大多数应用逻辑的WEB服务。开发者可以  定位一个发布的WEB服务,根据需要来使用它。 
一个例子就是一个公司能提供WEB服务给它的顾客,让顾客在发定单之前检查产品的库存量。另一个例子就是顾客能用联邦快递提供的WEB服务来跟踪他们的快递。 
WEB服务用SOAP(简单对象访问协议),用如HTTP的传输协议来交换SOAP消息。SOAP消息是事实上就是个XML文档,在WEB服务和调用中传递。 
WEB服务能用任何语言编写 ,在任何平台上运行。WEB服务的客户端能用任意语言写,也能在任意平台上运行。例如,一个在WINDOWS平台上运行,用DEPHI编写的WEB服务能被在LINUX平台上JAVA编写的服务调用。 
  
WEB服务架构
  
WEB服务架构允许服务的开发者暴露所有级别的业务功能,换句话说,一个WEB服务可以是非常简单的,如返回目前的温度,也可以是一个复杂的应用。架构也允许多个服务结合一个新的功能应用。 
WEB服务有三个独立的角色,服务提供者,服务请求者,服务代理者。服务提供者创建服务,并提供给客户应用。服务请求者也可能是多个服务的客户。代理者,就是提供一个方式如服务注册,让服务提供者和服务请求者能够对服务进行交互。 
  
三个角色通过服务的发布,查找,绑定进行交互。服务提供者通过用代理者的发布接口让客户能访问服务来通知代理者服务存在。发布信息描述了服务并说明服务定位在哪儿。服务请求者询问代理者服务的定位。根据从代理者获得的服务信息,请求者可以绑定或者调用这个服务。下面的图总结了三者如何交互。 
  
  
WEB服务标准
  
WEB服务开发基于的标准包括一些技术。主要的是SOAP,WSDL(WEB服务描述语言),UDDI(通用描述,发现,集成)和WSIL(WEB服务检查语言)。 
  
SOAP
Soap是一个独立传输消息协议。每一个SOAP消息就是一个XML文档。SOAP用单程消息,虽然它可能被合成请求回复的队列。SOAP规范定义了XML消息的格式,规范了它容易HTTP协议路由,但没有规范它的内容和它事实上是如何传递。 
  
  
每一个SOAP文档有一个根<Envelope>元素。这个根元素,文档里的第一个元素,包含文档内所有的其它元素。在<Envelope>内有两个部分:消息头和消息体。消息头包含路由或者内容数据,可能为空。消息体包括实际消息,也可能为空。 
下面是一个简单的SOAP消息例子,通过HTTP传输的目前BORLAND股价。 
POST /StockQuote HTTP/1.1 
Host: www.stockquoteserver.com 
Content-Type: text/xml; charset="utf-8" 
Content-Length: nnnn 
SOAPAction: "urn:stock-quote-services" 
  
<SOAP-ENV:Envelope 
        xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
        SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
    <SOAP-ENV:Body> 
        <m:GetLastTradePrice xmlns:m="Some-URI"> 
            <symbol>BORL</symbol> 
        </m:GetLastTradePrice> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 
关于SOAP更多信息请看下面URL的SOAP文档:http://www.w3.org/2002/ws/,http://xml.apache.org/soap/ 
  
WEB服务描述语言(WSDL)
  
如果一个WEB服务不能为发现和调用,那么这个WEB服务没有任何意义。开发者必须知道WEB服务的足够的信息才能写出一个客户程序调用它。WSDL是基于XML的,它被用来定义WEB服务说明如何访问它。特别是它说明了WEB服务约定的消息和数据。通过检查一个WEB服务的WSDL,什么方法能调用,及如何用合适的参数调用。 
  
更深入了解请看WSDL1。1规范:http://www.w3.org/TR/wsdl 
  
  
通用描述,发现和集成(UDDI)
UDDI是个发展中的标准,用来描述,发布和发现业务开发者的WEB服务。它是一个WEB服务的分布式注册信息的规范。一旦一个WEB服务开发,一个WSDL描述它的文档将建,就有必要让想用它描述的WEB服务的用户获得这个WSDL信息。当一个WEB服务通过UDDI注册发布,潜在的用户有一个方式来解析和学习关于这个WEB服务的存在。 
UDDI注册的内容接近电话路径。在注册白页项里是诸如名字,地址,和业务的电话号码的信息。提供给一个或多个WEB服务。在黄页项里区分业务类型和业务分类。在绿页项里提供关于业务提供WEB服务的数据。 
  
  
更多信息请看http://www.uddi.org 
  
  
WEB服务检查语言(WSIL)
WSIL象UDDI那样,提供了一个发现WEB服务的方法。与UDDI集中式模型不同的是,WSIL用的是一种离散,分布模型,WSIL文档允许WEB服务的顾客在网站上浏览可用的WEB服务。 
WSIL规范提供了用XML格式文档来检查一个WEB服务站点和一系列规则为这些信息是否可用标准。在一个文档里一个WSIL文档搜集了多个参考为预先存的服务描述文档。WSIL文档是驻留在服务提供者的服务里,以便于顾客能查处相关可用的服务。 
  
  
  
更多关于WSIL,请看 
http://www-106.ibm.com/developerworks/webservices/library/ws-wsilspec.html. 
  
  
Java APIs for XML-based Remote Procedure Call (JAX-RPC)
  
JAX-RPC定义了JAVA开发者在他们的开发和应用WEB服务的应用中用到的JAVA应用接口。一个JAVA客户端能应用在INTERNET上的一个远程服务器上的一个WEB服务,即使这个服务在另一种平台,用另一语言编写。一个JAX-RPC服务也能被非JAVA客户端应用。 
  
JAX-RPC用一种XML消息协议,诸如SOAP,通过网络来传递一个远程过程调用。例如,一个返回股票查询的WEB服务将收到一个 包括客户端的方法调用的SOAP HTTP请求。用JXA-RPC,服务将从SOAP消息里解开方法调用,把它转换成方法调用,接着调用它。接着服务用JAX-RPC把回复方法转换成SOAP,把结果返回客户端。客户端收到SOAP消息,用JAX-RPC转换成一个回复。 
JAX-RPC运行时生成允许客户和服务通讯的STUBS和TIES。一个STUB在客户端,代表一个远程服务,作为一个服务的代理。一个TIE,在服务器端,作为服务器端的代理。 
  
 
 
  
  
第二部分:一个简单的例子服务端(lele改写自duckur例子) 
(1)       我的机器目前是JBuilder2005+Jboss3.2.5的开发环境。对于开发或事例性的内容建议多参  考Jbuilder的自带的说明文档,说明的比较详细。 
(2)       以一个银行取存款为例;首先我们新建一个工程Bank,然后生成一个服务端的类(LxAccout)在com.bank包下面。 
(3)       右键点击此类选择Export as web service; 令WebModeule名为bankweb; 
(4)       编译整个项目,此时其自动生成generate包以及wsdl文件;当编译没有错误,把生成的bankweb.war包部署到JBoss应用服务器上; 
(5)       在IE中输入http://localhost:8080/bankweb/index.html.看见Apache-Axis的页面,(我们使用的Apache Axis用来实现SOAP)点击View连接我们能看到LxAccount (wsdl)以及我们服务端类的方法名。说明部署成功。
  
   
第三部分:客户端的调用 
  新建一个工程,并生成一个类;在此类中调用服务端提供的服务;以一个Swing的小对话框来实现的。 
  
总结:初学Webservice的一点总结,希望对初学的朋友有所帮助。 
  
参考资料:Jbuilder2005的帮助文档。 
          各位Csdn网友的帖子。 
          http://www-900.ibm.com/developerWorks/cn/webservices/index.shtml。 
源码:    Email to:[email protected] 
  
                                                              
                                                                       lele 
                                                                     2004-12-13  
 
  |