Web 服务产生的根源

多年以来,能够创建在局域网或者Internet上远程调用的组件一直是让Web开发人员头痛的事情。这期间出现过一些可以实现这一任务的技术。但是,大部分方法创建的组件只能运行于局域网内部的后端系统上,还没有哪个技术能够完全应对Internet环境。因为Internet过于宽大、复杂,甚至存在很多不可靠因素。尤为重要的是,运行于Internet上的计算机不可能像公司内部一样使用同一种操作系统和同一类硬件结构,而是各种平台和硬件混杂在一起。这就是web服务产生的根源

由于Internet的迅猛发展和无所不在,目前Web应用程序的设计和开发,几乎都会考虑到如何利用有效的结合与利用Internet技术,以便充分利用连接计算机所带来的好处。为了满足不同的用户需要,.NET Framework 提供了XML Web 服务支持。调用Web服务时,只需要通过一个HTTP协议发送一个XML即可。因为,基于Internet的设备都支持HTTP协议,而且几乎所有的编程语言事实上都具备XML解析器,对于可以使用Web服务的应用程序几乎是没有限制的。

1.1 Web服务的基本概念

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span lang="EN-US">1.1.1</span></chsdate> 什么是Web服务

从表面上看,Web服务就是一个应用程序,它向外界显露出一个能够通过Web调用的API。也就是说,能够用编程的方法通过Web调用来实现某个功能的应用程序。例如,某人在本地创建一个Web服务,可以插叙SQL Server数据库内容。其它用户或者开发人员可以在浏览器的地址栏中直接输入HTTP GET 请求来调用该Web服务,将数据库内容显示在浏览器页面上,这就是使用了Web服务。

从深层次上看,Web服务是一种新型的Web应用程序,它是自包含、自描述、和模块化的应用,可以再Web描述、发布、查找以及通过Web来调用。

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span lang="EN-US">1.1.2</span></chsdate> Web服务的技术支持

Web服务平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,Web服务平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中不同的类型系统。目前使用的协议主要有一下几种

1:XML XSD

XML已经成为在Internet上传递数据的实施标准方式,因而也就顺理成章地成为Web服务中表示数据的基本格式。XML主要的优点在于它既与平台无关,又与厂商无关。

2.SOAP

SOAP(Simple Object Access Protocol,简单对象访问协议)是用于交换XML编码信息的轻量级协议,是一个基于XML的协议。它包括如下四个部分。

SOAP封装(envelop).封装定义消息中的内容是什么,是谁发送的,谁应当接收并处理它以及如何处理他们的框架

SOAP编码规则(encoding rules)。用于表示应用程序需要使用的数据类型的实例。

SOAP RPC 表示(RPC representation)。表示远程调用和应答的协定

SOAP 绑定(binding)。使用底层协议交换信息。

Web服务希望是现在不同的系统之间能够用“软件与软件对话”的方式相互调用,打破软件应用、网站和各种设备之间格格不入的状态,实现“基于Web无缝集成”的目标

3.WSDL

WSDL(Web Service Description Language,Web服务器描述语言)使用XML文档来描述Web服务的标准,是Web服务的接口定义语言。同WSDL,可以描述Web服务的三个基本属性

web服务所提供的操作(Web方法),也就是Web服务能够做些什么

Web服务交互的数据格式以及必要协议,即如何访问Web服务

协议相关的地址,比如URL,即Web服务位于何处

WSDL文档以端口集合的形式来描述Web服务,WSDL服务描述包含一组操作和消息的一个抽象定义,绑定到这些操作和消息的一个具体协议,和这个绑定的一个网络端点规范。因为是基于XML的,所以WSDL既是机器可阅读又是人可阅读的。

<!--[if !supportLists]-->1.1.3 <!--[endif]-->Web服务的优势

Web服务在很多方面是引人注目的。首先在技术方面,Web服务试图解决紧耦合技术(比如CORBADCOM)面临的问题。这些问题包括通过防火墙、处理底层协议的复杂性及与不同平台的集成。其次,在组织和经济方面,Web服务同样令人关注,因为它们为商务运作及公司间的系统集成开辟了新的途径

DCOMCORBA适合于创建运行于同一平台和同一局域网内的软件。但是,这些技术并不适合于开发跨平台,尤其是跨Internet的应用程序。而这正式Web服务的目的所在。Web服务代表了分布式计算的发展方向。其主要优势如下。

简单性。意味着Web服务可以在不同的平台上获得支持

松耦合。扩展Web服务的接口或者增加新的方法,只要仍旧提供旧的方法和参数就不会影响客户端。

无缝链接。Web服务并不需要持久的连接。需要Web服务时,客户端向Web服务端发出一个请求,Web服务返回其结果,然后可以关闭连接。这使得易于扩展到更多的客户端

不影响防火墙。防火墙通常会给分部技术带来障碍,但是Web服务几乎不会影响防火墙。因为,几乎所有的防火墙都会开放HTTP端口80443,而Web服务就是使用HTTP,因而使用Web服务不需要对防火墙进行配置

<!--[if !supportLists]-->1.1.3 <!--[endif]-->Web服务的基础结构

要在Web服务的多样性世界里取得成功,必须涉及到操作系统、对象模型和编程语言的选择,而Web服务不能对这些因素有任何倾向性。同样,要使Web服务像其他基于Web的技术一样被广泛采用,必须做到松耦合性、使用常规的通信信道和设备以及采用通用的数据格式

为了达成上述目标,.NET Framework提供的XML Web服务采用的基础结构提供下列内容,定位XML Web服务的发现机制、定义如何使用这些服务的服务描述以及通信时使用的标准连网形式。表1-1列出了Web服务基础结构的各个组件及其作用

1-1 XML Web服务基础结构的组件

基础结构组件

作用

XML Web服务目录

Internet上的所有其他资源一样,如果没有某种手段搜索的Web服务,那么就几乎不可能找到该服务。XML Web服务目录提供一个中心位置,XML Web服务提供程序可在其中发布与可用的XML Web服务有关的信息

XML Web服务发现

XML Web 服务发现是定位用WSDL所描述的特定Web服务的一个或多个相关文档的过程。DISCO规范定义了定位服务描述的算法。如果客户端知道服务描述的位置,则可以跳过发现过程

XML Web服务描述

要了解如何与特定的Web服务进行交互,需要提供定义了该Web服务所支持的交互功能的服务描述。客户端必须知道如何与Web服务进行交互才可以使用该服务

XML Web服务连网形式

为实现通用的通信,XML Web 服务使用开放式连网形式进行通信,这些格式是任何能够支持最常见的Web标准的系统都可以理解的协议。SOAP XML Web服务通信的主要协议

<!--[if !supportLists]-->1.2 <!--[endif]-->使用SOAP标头

SOAP 是一种跨平台标准,它用于对Web服务和客户端应用程序之间发送的消息进行格式化。SOAP的优势在于其灵活性,不仅可以用SOAP来发送任何类型的XML数据,还可以在非HTTP协议上进行传输。比如,可以通过TCP/IP连接发送SOAP消息。

从结构上说,SOAP消息包含以下三个主要的因素

SOAP封装(Envelope)。即所谓的消息根元素,也就是消息的标题元素,并且该元素在SOAP消息中是必须存在的元素,主要的作用就是告诉收方此消息的基本情况等。

SOAP表头(Header)。此元素在SOAP消息中不是必须的,如果存在此元素的话,它必须是SOAP封装的第一个子元素,主要的作用就是传递一些辅助性的附加消息,比附身份验证、会话等。

SOAP体(Body)。此元素即SOAP消息体,是每个SOAP消息中必须的元素。每个SOAP体元素可以由多个子元素构成。

SOAP表头提供了一种方法,用于将数据传递给Web服务方法或者从Web服务方法获取数据,条件是该数据不直接与Web服务方法的主功能相关。例如,一个Web服务可能包含若干个Web服务方法,而每个方法都需要自定义的身份验证方案。引用从SoapHeader派生的类的SoapHeaderAttribute应用于每个Web服务方法,就不用将参数添加到每个需要自定义身份验证方案的Web服务方法,而可以将从SoapHeader派生类的实现来处理该自定义身份验证方案。按照此方式,Web服务方法使用SOAP标头来仅实现特定于它的功能并添加其他功能。

接收和处理SOAP标头的基本步骤如下

⑴ 创建一个SoapHeader派生类,表示传入SOAP标头的数据。

⑵ 将一个成员添加到实现Web服务的类或者Web服务客户端的代理类(他们属于在第一步创建的类型)

⑶ 指定第二步中在MemeberName属性中创建的成员,将SoapHeaderAttribute应用

Web服务方法或代理类中的对应方法

⑷ 在Web服务方法或Web服务客户端代码中访问MemberName属性,以处理在SOAP标头中发送的数据。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭