webservice简介
?从表面上看,Web service 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web来调用这个应用程序。我们把调用这个Web service 的应用程序叫做客户。
Web Service是指由企业发布的完成其特别商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。 ? 组成Web service平台的这三个技术 XML和XSD ?????? 可扩展的标记语言(XML)是Web service平台中表示数据的基本格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。无关性是比技术优越性更重要的:软件厂商是不会选择一个由竞争对手所发明的技术的。 ?????? XML解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,还是64位?这些细节对实现互操作性都是很重要的。W3C制定的XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。Web service平台就是用XSD来作为其数据类型系统的。当你用某种语言(如VB.NET或C#)来构造一个Web service时,为了符合Web service标准,所有你使用的数据类型都必须被转换为XSD类型。你用的工具可能已经自动帮你完成了这个转换,但你很可能会根据你的需要修改一下转换过程。
?????? Web service建好以后,你或者其他人就会去调用它。简单对象访问协议(SOAP)提供了标准的RPC方法来调用Web service。实际上,SOAP在这里有点用词不当:它意味着下面的Web service是以对象的方式表示的,但事实并不一定如此:你完全可以把你的Web service写成一系列的C函数,并仍然使用SOAP进行调用。SOAP规范定义了SOAP消息的格式,以及怎样通过HTTP协议来使用SOAP。SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。
?????? 你会怎样向别人介绍你的Web service有什么功能,以及每个函数调用时的参数呢?你可能会自己写一套文档,你甚至可能会口头上告诉需要使用你的Web service的人。这些非正式的方法至少都有一个严重的问题:当程序员坐到电脑前,想要使用你的Web service的时候,他们的工具(如Visual Studio)无法给他们提供任何帮助,因为这些工具根本就不了解你的Web service。解决方法是:用机器能阅读的方式提供一个正式的描述文档。Web service描述语言(WSDL)就是这样一个基于XML的语言,用于描述Web service及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应Web service的代码。
? ?????? 客户端(在商店的PC)在那个时候将要连接(服务器上的)WebService,并发送一个需要目录的服务请求。服务器将会通过一个服务响应返回目录信息。当然这是一个描述Web Service如何工作的非常潦草的例子。等一下,我们将会看到一个非常详细的解释。
Web Service由于使用标准的XML语言因而是平台无关、语言无关的,这就意味着我们的客户端可以用C++编写在windows下运行,而Web Service使用Java编写而运行在linux下,大部分Web Service 使用HTTP传输消息(像服务请求和响应)。如果你想建立一个Internet范围的程序,这是一个主要的优点,因为大部分Internet's的代理和防火墙都不会破坏HTTP的传输(不像CORBA会在穿过防火墙时遇到麻烦) ,当然了,Web Service也存在以下一些缺点: 压力过大。很明显所有在XML中的数据没有定义好的二进制代码效率高。在你赢得通用性的同时降低了效率。尽管那样,这个压力通常是可以被大部分应用程序所接受的, 用途狭窄。目前,由于他们只支持很基本的服务种类,所以Web Service 的用途不是很多。例如CORBA提供给编程者很多正在支持的服务(像持续服务,通知,生命周期管理,转换等等)。事实上,在下一页我们可以看到网格服务可以真正的补偿了用途狭窄的缺点。 ? 一个典型的Web Service的调用 ????? 我们看一下一个完整的Web Service调用的全部的调用步骤。
? ?Web Service的寻址 ????? 但是....如何准确的寻址Web Service?这个答案非常的简单:就像我们的网页。我们使用朴素而简单的URIs(Uniform Resource Identifiers)。如果你熟悉 URL (Uniform Resource Locator)这个名词的话,那就不要担心:URI和URL事实上是同一样东西。 例如UDDI注册服务期可能会返回如下 URI: http://webservices.mysite.com/weather/us/WeatherService 这个很容易被认为是一个网页的地址。然而Web Service 是通过软件来记住这个地址的(不再是让人直接记住)。如果你写一个Web Service的URI进你的Web浏览器,你可能会的到一个错误信息或者是难以理解的代码(一些Web Service 会显示给你一个漂亮的界面,但是这个界面和通常的不一样)。当你拥有一个Web Service 的URI时,你通常需要将这个URI交给一个程序。事实上,我们写的大部分的客户端程序都会把网格服务URI作为一个命令参数来接收。 ? ? Web Services 的架构 ????? 现在我们已经看到了在Web Service调用过程中的不同活动者,让我们来更清楚地了解Web Service的架构吧!
这部分容许我们寻找满足需要的Web Service。这部分通常由UDDI(Universal Description,Discovery,and Integration)来处理。GT3目前不支持UDDI.
Web Service最有趣特点之一就是他们能够自我描述。这意味着一旦你定位了Web Service,你能要求他"描述自己"并告诉你如何操作和使用它。这是通过Web Services Description Language (WSDL)来处理的
?调用一个Web Service(和一般的任何类似CORBA对象或者Enterprise Java Beand的分布式服务)的过程中包含在客户端与服务端之间传输的信息。SOAP (Simple Object Access Protocol)规范了我们如何格式化送往服务器的请求信息和如何格式化服务器本身的响应信息。在理论上,我们还可以使用其它调用语言(例如XML_RPC或者 even some ad hoc XML language).然而,SOAP是Web Service更乐意的选择。
?最后,这些所有的信息可以在服务端和客户端之间传输。架构这部分选择的协议是HTTP(HyperText Transfer Protocol),与访问Internet上的普通网页的协议相同!在理论上我们仍然能使用其他协议,但HTTP协议是目前使用最广泛的了。 ? Web Service 应用看起来是什么? ????? 首先,你应该知道尽管存在很多协议和在周围浮现的众多语言,Web Service 编程者通常不用写一行SOAP或者WSDL的代码。一旦我们到了我们的客户端需要调用一个Web Service那一刻时,我们授权给软件中一块叫本地stub(a client stub)的任务。好消息是有很多可以利用的工具为我们自动产生基于WSDL的Web Service描述的本地stub(a client stub)。 ? ????? 这样你不需要逐字地解释"典型的调用"对话过程。一个Web Service客户端通常不会在一个调用过程中经过所有步骤。一个更正确的事件流程如下: ? 我们通过UDDI定位一个满足我们需要的Web Service。 ? ????? 服务端的编程比较容易。我们不用必须写一个复杂的需要动态解释SOAP请求和产生SOAP响应的服务程序,我们能简单的实现我们Web Service的所有功能,然后产生一个服务器stub(the term skeleton is also used),这个stub负责解释请求然后将这些请求转交给服务器的实现部分。当服务器实现部分包含一个结果时,它将会把这个结果交给服务器stub,这样就产生了合适的SOAP响应。这个服务器stub还能通过WSDL描述产生,或者从其他语言(像IDL)定义的接口。此外的是服务器实现和服务器stub都通过软件中被称为Web Service容器的代码来管理,这个容器会确保提交给Web ServviceHTTP请求直接交给服务器stub。 ? 调用一个Web Service的步骤
???? SOAP请求使用HTTP协议通过网络发送出去。Web Service容器接收到SOAP的请求后将它交给服务器stub。服务器stub把SOAP请求转换服务器实现程序能够理解的形式。这步经常被称为解散。 服务器实现部分收到从服务器stub转来的请求后,执行所请求的工作。例如我们调用了 int add(int a,int b) 方法,服务器实现执行加法功能。 执行请求的结果由服务器stub处理转换为SOAP响应。 SOAP响应使用HTTP协议通过网络发送。客户端stub收到SOAP响应并将它转换为客户端应用可以理解的形式。 最终客户端应用接受到调用Web Service的结果并使用这个结果。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何在Scala中从a => b => c获取(a,b)=> c?
- angularjs – 在expect语句中一起添加变量
- scala – akka http,charset header,utf-8问题
- Windows下编译PHP和memcache扩展教程
- Bootstrap零基础入门教程(二)
- bootstrap 主题颜色搭配
- bash – 运行eval命令后控制到下一个语句
- 详解Docker使用Linux iptables 和 Interfaces管理容器网络
- angular2-jwt.d.ts给出“找不到模块’@ angular / http”错
- angularjs – $watch是在init之后直接触发的,为什么?