首页 > 开发 > 综合 > 正文

典型的Web Service结构

2024-07-21 02:21:43
字体:
来源:转载
供稿:网友
  • 网站运营seo文章大全
  • 提供全面的站长运营经验及seo技术!
  • 典型的web service结构
    (可乐 2001年11月01日 18:35)

    典型的web service结构。

    不管你的web service是用什么工具,什么语言写出来的,只要你用soap协议通过http来调用它,总体结构都应如下图所示。通常,你用你自己喜欢的语言(如vb 6或者vb.net)来构建你的web service,然后用soap toolkit或者.net的内建支持来把它暴露给web客户。于是,任何语言,任何平台上的客户都可以阅读其wsdl文档,以调用这个web service。客户根据wsdl描述文档,会生成一个soap请求消息。web service都是放在web服务器 (如iis) 后面的,客户生成的soap请求会被嵌入在一个http post请求中,发送到web服务器来。web服务器再把这些请求转发给web service请求处理器。对vb 6程序来说,web service请求处理器是一个与soap toolkit组件协同工作的asp页面或isapi extension。而对vb.net程序来说,web service请求处理器则是一个.net framework自带的isapi extension。请求处理器的作用在于,解析收到的soap请求,调用web service,然后再生成相应的soap应答。web服务器得到soap应答后,会再通过http应答的方式把它送回到客户端。

    典型的web service结构,点击小图放大

    远程过程调用(rpc)与消息传递
    web service本身实际是在实现应用程序间的通信。我们现在有两种应用程序通信的方法:rpc(远程过程调用)和消息传递。使用rpc的时候,客户端的概念是调用服务器上的远程过程,通常方式为实例化一个远程对象并调用其方法和属性。rpc强调的是远程对象和它的界面,即属性、方法和调用时的参数。dcom和.net远程访问都是rpc的例子。
    消息传递一般是在耦合度更低的系统中。消息传递的概念是,客户端向服务器发送消息,然后等待服务器的回应。消息传递系统强调的是消息的发送和回应,而不是远程对象的界面。由于是基于消息的系统,客户端和服务器之间的耦合度比rpc方法更低。
    rpc系统试图达到一种位置上的透明性:服务器暴露出远程对象的接口,而客户端就好像在使用本地使用的这些对象的接口一样,这样就隐藏了底层的信息,客户端也就根本不需要知道对象是在哪台机器上。例如,你在vb 6中通过dcom调用一个远程对象,你的代码看起来就与调用本地对象一样。而消息传递则不同,它强调传递的东西是什么,但不管消息传递过去后干什么。客户不需要知道服务器是怎么实现的,以及消息是怎么被处理的。
    我们已经说过,你可以建立一个消息服务器,根据收到的消息来调用对象。这是通过消息传递方式有效的实现了rpc。如果客户仍然以消息的思维方式来进行操作,那么你可以把它叫做消息传递。但如果客户以远程对象的思维方式来进行操作,那么你就应该把它叫做rpc。
    如果你想实现一个基于xml的消息传递系统,大量的工作将集中在处理xml请求和应答消息上。虽然vb 6和vb.net中,帮助你建立web service的工具已经做了许多对xml消息进行处理的工作,但毕竟所有的数据都是用xml的形式收发的,许多情况下你还是需要对消息进行一些自己的处理。深入理解xml和xml schema对于有效地实现xml消息系统是至关重要的。


    建立web service
    我知道你现在已经很心急的想要写点代码,看看web service到底是什么样的了。那么我们现在就介绍怎样用vb 6和vb.net实际做出一个web service来。本节的目的只是向你展示一下这些工具的功能,而不是深入地讲解web service的工作原理。本书后面的章节会向你慢慢说明web service以及microsoft soap toolkit和.net等工具的内部原理的。

    使用soap toolkit
    microsoft的soap toolkit v2帮助你把com组件变成web service。这套工具分为三大主要部分:soapclient是一个用于调用web service的com组件;soapserver 是一个处理soap请求和返回soap应答的组件;还有一个wsdl向导,它可以把你的type library转换成wsdl文档,以暴露给web service的客户。
    假设你有一个com组件,暴露出一个gettemperature方法:
    public function gettemperature(byval zipcode as string, _
    byval celsius as boolean) as single

    要把这个组件变成一个web service,你可以使用wsdl向导。给出你要转换的组件后,向导会要你选择你想暴露出的方法,指出生成的web service所在的url(如http://localhost/temperature/),以及你希望用asp还是isapi做你的请求处理器(如图1-2)。然后向导还会问你生成的wsdl和asp文件应该放在那个目录下。

    使用soap toolkit向导来转换com组件,点击小图放大

    现在该调用这个web service了。方法是在vb或其他任何可以使用com的语言里调用soapclient组件。下面这段代码演示了怎样调用webservice中的gettemperature方法:
    dim soap as mssoaplib.soapclient
    set soap = new mssoaplib.soapclient
    soap.mssoapinit _
    "http://localhost/temperature/temperature.wsdl"
    msgbox ("气温是: " & _
    soap.gettemperature("20171", false))
    首先调用mssoapinit,把wsdl文档的url传给soapclient。wsdl文档的url就是你在wsdl向导中给出的url加上〈service名字.wsdl〉。一旦初始化完成,soapclient就得到了web service的所有方法,你就可以直接调用这些方法了。
    发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表