Web Service 是什么?
Web Service 也叫作XML Web Service,是一种网络化的,分布式的软件系统,通常通过Http交付,可以跨编程语言和操作系统进行远程调用操作,通常情况下,Web Service包括服务本身和客户端,后者也被称为消费者或请求者,可以通过网络访问部署在服务器提供的某种服务(通过调用Web服务对外公开的访问接口)。其可以是网页浏览器,一个桌面应用,更甚至是一个没有图形界面的应用程序
图 1.1 一个Web 服务和它的一个客户端
根据定义,Web服务和服务客户端间通过HTTP进行交互,HTTP消息是基础设施,这些HTTP消息被组合成描述Web服务特征的基本会话模式。常见的模式有4中,分别如下:
- 如果Web服务的会话以期望的HTTP请求HTTP响应开始,那么该模式被称为 请求/处理 模式,是目前4种模式中占主导地位的一种模式
- 如果会话以服务器发出的一条期望从客户端返回消息的HTTP消息开始,那么该模式称为 要求/响应
- 从客户端到服务器的无响应消息,被称为 单向模式
- 从服务器到客户单的无响应消息,被称为 通知模式
Web Service中的一些概念
SOAP:SOAP最初代表 简单对象访问协议(Simple Object Access Protocol),前面是我们说过Web Service 是通过HTTP进行交付的,Web服务和Web 服务客户端间交互的信息是经过封装的XML格式的数据,并增加了相应的HTTP报头,而这些就被称为SOAP协议,总的来说就是 SOAP协议 = HTTP协议 + XML格式的数据
WSDL:Web服务描述语言(Web Service Description Language),这是基于XML 的一种用来描述Web Service 内定义的操作的名称、说明信息、参数、返回值等信息的语言,它本身必须保证Web service 和Web 客户端都必须能理解这种语言。一般情况下有开发工具自动生成。
XSD : xml Schema Definition ,从其全称可以看出这也是一种基于XML的一种语言,它定义了一套标准的数据类型,Web Service就是使用XSD作为其数据类型系统的,Web Service中使用的数据最终都要被转换为XSD格式来定义(功能类似于Net平台的IL语言)
UDDI:UDDI 是一种规范,它主要提供基于Web服务的注册和发现机制, 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索,当客户端调用Web Service之前,必须知道Web Service的WSDL,Web Service的生产者可以通过两种方式将WSDL 公开给其使用者,其一,将WSDL直接告诉其调用者,其二,将服务对应WSDL注册到UDDI服务器上。
Web Service 的一些特点
- 语言透明性
Web服务的服务及其客户端可以不必使用同种编程语言来实现,语言透明性是 Web 服务互操作性的一个重要因素,即尽管使用不同的编程语言、不同的操作系统和硬件平台,Web服务和其消费者之间可以无缝的衔接。
假如使用C#写了一个Web服务,如果想让该服务可以让使用Python或Java语言开发的客户端来使用的话,那么必须存在一个中间处理层来处理服务和客户端之间不同的数据类型,XML可以作为这样的一个中间层,因为它支持结构化的文档交换和处理,另一个中间层是JSON(JavaScript Object Notation )
- 模块化设计
Web服务设计师模块化的,这使得新的服务可以有现有的服务组合而成。Web服务设计的指导原则是从非常简单的服务操作和本质上并不复杂的功能开始,然后可以根据现实需求把这些操作组合成服务
- 无状态性
Web 服务由一些操作组成,每个操作都被实现为一个无状态函数的调用(如果某个调用的返回值仅依赖于传递给他的参数,那么该调用是无状态的)
- 开发基础设施
Web服务使用符合行业标准的、独立于供应商的协议和HTTP、XML、JSON这些语言部署,所有的这一切都是普遍存在的,Web服务可以利用网络、数据格式、安全性和其它已经到位的基础设施来降低其进入成本
使用Web Service的好处
- 现代的软件系统一般情况下都是由多种语言编写的,这就造就了现代软件开发中的一个重大的挑战:系统集成,如何让这些不同语言编写的、运行在不同硬件平台上的软件系统进行交互?Web服务提供了一个相对简单的答案。
- 由于Web Service是基于模块化的思想开发的,可以很大程度上提升代码的复用率和软件开发进度
Web Service在Net中使用的一个简单小实例
- 打开 Visual Studio,新建项目àWebàASP.NET Web应用程序
- 在创建好的项目上右键à添加àWeb服务(asmx)
- 创建的firstWebService.asmx的文件如下
public class firstWebService : System.Web.Services.WebService { [WebMethod] public string HelloWorld() { return "Hello World"; } [WebMethod(Description ="求和的方法")] public int GetSum(params int[] arr) { int sum = 0; foreach(int i in arr) { sum += i; } return sum; } }
至此,一个简单的Web Service 就算部署完成了,点击启动程序,在浏览器里可以查看到
接下来创建一个Web客户端调用创建好的Web 服务,该例子只为演示,就创建一个最简单的控制台应用程序Client
- 在创建好的控制台程序上右键 添加à服务引用
在弹出的窗口中,将创建的Web 服务的URL粘到地址那一栏中,然后点击确定
创建完成后,咱们的Client的目录结构如下:
5.写代码调用Web服务
//需要导入服务所在的命名空间 using Client.ServiceReference1; firstWebServiceSoapClient c = new firstWebServiceSoapClient(); string s = c.HelloWorld(); Console.WriteLine(s); //调用求和函数GetSum(params int[] arr),但你会发现在这里其参数类型变为了(ArrayOfInt),转到定义可以看到该类继承自List<Int> //因此这里的实参要不参与下面的方式添加,要么 直接添加一个List<int>类型的集合 int[] arr = new int[] { 1, 2, 3 }; ArrayOfInt ar = new ArrayOfInt(); int sum = c.GetSum(ar); Console.WriteLine("The SUM is :{0}",sum); Console.ReadKey();
6.至此,一个简单的Web Service的构建和调用就全部完成了。