作者:Alexis
出处:http://www.cnblogs.com/alexis/
关于作者:专注于Windows Phone 7、Silverlight、Web前端(jQuery)。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过shuifengxuATgmail.com 联系我,非常感谢。
Web Service的宗旨是创建不需要用户界面就能与其他应用程序交互的Web应用程序。
举例说明它的优点,假如你正在为一家股票投资公司创建网站,你并不需要把不同证劵交易所得数据库与自己的后台数据库进行整合,因为你的应用程序可以使用Web Service,并使用XML格式交换数据。
Web Service是松耦合的,它与服务器端和客户端使用的操作系统、编程语言都无关。假如你既拥有客户端又有服务器端的访问和管理权,这种情况更适合用.NET 的Remoting技术,而不是Web service。
创建Web Service必须保证的是,服务器端和客户端都要支持HTTP、SOAP(简单对象访问协议)和XML等行业标准协议。
Web Service是如何工作的
Web Service允许两个程序之间交换XML文档。在这个架构的顶层,微软实现了一个远程过程调用(Remote Procedure Call,PRC)模型。
Web Service架构包括以下特性:
1。WebServcie的服务器端和客户端应用程序都能够连接到互联网。
2。用于进行通信的数据格式必须遵守相同的开放标准,并且在大多数情况下,这个标准几乎总是SOAP。
3。客户端和服务器端的系统是松耦合的。即Web Service不关心客户端和服务器端所使用的操作系统、对象模型或者编程语言。只要Web Service和使用Web Service的应用程序都能够发送和接收遵守适当协议标准的消息即可。
下图为Web Service流程的逻辑架构
如图所示,一个Web Service使用着会向Web Service发出一个调用请求。使用者会认为它通过Internet直接和Web Service进行交流,当然这实际上是个幻象。实际上,真正的调用由代理类完成。代理类对于Web Service使用者来说是一个本地类。代理会处理所有的负责的复杂架构,包括通过Internet发送请求道服务器、从web Service取回结果并呈现给Web Service使用者。
由于代理类在之前已在消费程序中注册,所有一切工作才可以顺利进行。注册有开发消费程序的程序员完成。
开发Web Service
开发Web Service的流程与开发网页的流程近乎一致:
1。所有构成网页和服务的源文件都是文本文件,它们可以使用任何文本编辑器创建和修改。而类文件可以在控制台命令行中通过命令工具进行编译。
2。可以在vs2005及以上版本中创建网页和Web Service
3。网页和Web Service既可以使用代码隐藏模型,也可以使用内联编码(inline coding)模型。Web Service中不需要使用代码隐藏技术,因为Web Service并不包括任何可视化内容。
4。网页和Web Service都充分利用了CLR和.NET Framework。
.aspx文件用于定义网页,而.asmx文件用于定Web Service,我们可以吧Web Service想象成类,类中的一些方法通过Internet被暴露给客户端。
代理
客户端应用程序如果使用Web Service,必须先创建一个代理。代理是要调用的真正代码的替身,它负责在机器边界引导调用。在代理在客户端应用程序中注册后,客户端应用程序调用方法就如调用本地对象一样。代理接受该调用,并以适当格式封装调用,然后以SOAP请求发送调用到服务器。当服务器返回SOAP包给客户端后,代理会对包进行解密,并且如同从本地对象的方法返回数据一样将其返回给客户端应用程序。如下图所示:
协议与标准(HTTP、XML、SOAP)
HTTP:TCP/IP协议的最上层是超文本传输协议(HTTP)。它是用于在网络之间使用服务器和浏览器实现通讯,主要包括在服务器和浏览器建立连接,并将HTML传输到客户端浏览器。当客户端向服务器发送HTTP请求后,服务器就开始处理请求。通常,会返回HTML页面,然后通过浏览器呈现。然而对Web Service而言,服务器返回的是SOAP消息,消息中包含了被调用的Web Service方法的返回数据。
HTTP请求从请求的浏览器出传递名称和值到服务器,这种请求包括GET和POST两种。
GET请求中,名称和值会被附加到url上,数据是未加密的。当所有需要传递的数据可以使用名称和值成对表示,而且只需要传递少量字段,字段长度较短时,比较适合GET请求。另外,如果不需考虑安全问题时,也可以使用GET。
POST请求中,配对的名称和值是作为请求消息的一部分发送的。当有大量字段或者参数很长时,适合使用POST请求。从安全方面看,POST比GET更安全,因为POST请求可以被加密。和GET请求一样,POST请求无法传递复杂的数据类型(如类、结构体和DataSet)。
XML:是有W3C公布的开放标准的一种描述数据的方法。
XML和HTML十分类似。不同的是HTML使用的是预定义元素,这些元素规定了HTML在浏览器中如何显示,而XML的元素则是由开放人员自己定义的,所以几乎所有的数据都可以表示。制定XML的目的是为了使其成为一种平台无关、语言无关的标准。
XML架构(Schema)是用于定义元素已经XML文档中或者许多XML之间元素与元素之间关联的文件。在架构中将指定元素名称和内容类型。HTML与XML的显著差别:大多数HTML读取器有很好的容错能力,而XML读取器则完全不同,所以XML文件的格式必须正确。另外,XML元素都是小写的。
SOAP:(simple object access protocol,简单对象访问协议)是一种用于控制数据交换的XML语法。它是简单的、轻量级的信息交换协议。SOAP消息有消息内容和一个或多个头模块组成,并且封装在SOAP envelope中。
SOAP使用XML语法来格式化内容。在设计上,SOAP尽可能简单并且提供最小化的功能。
SOAP不需HTTP的GET和POST,它不受“名称/值”对的限制,我们可以使用它来发送复杂的对象,包括DataSet、类和其他对象。
SOAP的缺点:SOAP消息十分冗长,因此如果存在带宽或者传输性能的问题,建议使用POST或GET。