C#-Web Service----Web Service基础知识
什么是Web Service?
Web Service是以独立于平台的方式,通过标准的Web协议,可以由程序访问的应用程序逻辑单元。它是一种分布式计算技术,一种自包含、自描述、模块化的应用,可以发布、定位、通过Web调用。一旦部署之后 ,其它Web Service应用程序可以发现并调用它部署的服务。它运用了Web网络技术和基于组件开发的精华成分。DCOM、CORBA和其它基于组件的分布式计算技术都依赖于特定的对象模型协议,而Web Service扩展了这些模型,使之可以和SOAP(简单对象访问协议)以及XML通信以根除特定对象模型协议带来的通信障碍。
下表是DCOM、CORBA和Web Service的比较:
特征 |
DCOM |
CORBA |
Web Service |
远程过程调用(RPC)机制 |
分布式计算环境远程过程调用(DCE-RPC) |
Internet Inter-ORB协议 |
超文本传输协议(HTTP) |
编码 |
网络数据表示(NDR) |
通用数据表示(CDR) |
扩展标记语言(XML) |
接口描述 |
接口定义语言(IDL) |
接口定义语言(IDL) |
Web服务描述语言(WSDL) |
发现 |
注册库 |
命名服务与交易服务 |
通用发现、描述与集成机制(UDDI) |
防火墙的友好性 |
否 |
否 |
是 |
协议的复杂性 |
高 |
高 |
低 |
跨平台性 |
否 |
部分 |
是 |
Web Service的主要优点是:允许在不同平台上、以不同语言编写的各种程序以基于标准的方式相互通信。。它就是个对外的接口,里面有函数可供外部客户调用。注意Web Service传递的数据只能是序列化的数据,典型的就是XML数据
Web服务三个重点:
一、简单对象访问协议(SOAP)
SOAP是一种基于XML的通信协议,包括三个部分:
1、 SOAP封装结构:定义消息的XML格式,包括整体框架、消息内容、谁处理这些内容等
2、 SOAP编程规则:定义如何将程序数据表示为XML
3、 SOAP RPC表示:定义如何使用SOAP进行远程过程调用
二、Web服务描述语言(WSDL)
1、 是一个XML文档,用于说明一组SOAP消息以及如何交换这些信息
2、 定义了服务的位置以及使用服务的通信协议
3、 可提供更高层次的消息,如Web服务的业务类型和关联关键字等
三、同一描述、发现和继承(UDDI)
1、 Web服务的黄页
2、 其核心组件是UDDI商业注册,它使用一个XML文档来描述Web服务。包括三个部分:
a) 白页:介绍提供服务的公司,包括名称、地址、联系方式
b) 黄页:包括按照标准分类进行分类的行业类别
c) 绿页:细则介绍、访问服务接口等技术信息
SOAP、WSDL和UDDI都基于XML。SOAP使用XML作为其数据编码格式。WSDL使用XML Schema来描述Web服务的结构。UDDI使用XML描述商业实体和Web服务
Web服务基础结构:
基础结构块 |
职能 |
XML Web服务目录 |
XML Web服务目录提供一个中央地址,用于定位其它组织提供的XML Web服务。象UDDI登记这样的XML Web服务目录实现这个职能。XML Web服务的客户端可以引用XML Web服务目录,也可以不引用XML Web服务目录 |
XML Web服务发现 |
XML Web服务发现是使用web服务描述语言(WSDL)定位或发现一个或多个描述特别的XML Web服务的相关文档。DISCO规格定义了定位服务描述的规则。如果XML Web服务客户了解服务描述的位置,他们可以绕过发现步骤 |
XML Web服务描述 |
为了了解如何与一个特定的XML Web服务交互利用,需要提供一个描述来定义XML Web服务支持的交互操作。XML Web服务客户端在可以使用一个XML Web服务之间必须了解如何与它交互 |
XML Web服务连接格式 |
为了能够进行通用通信,XML Web服务使用开发连接格式来进行通信,这些是任何支持最普通的web标准的系统都能够理解的协议。SOAP是用于进行XML Web服务通信的关键协议 |
C#创建Web服务(环境:.NET Framework3.0 VS2005)
创建一个简单的Web服务,用于说明Web服务的作用和代理类的生成方法
步骤一:新建—>网站—>ASP.NET Web服务
步骤二:项目中生成Service.asmx文件,App_Code/Service.cs。
Service.asmx文件内容:
<%@ WebService Language=”C#” CodeBehind=”~/App_Code/Service.cs” Class=”Service” %>
Service.cs文件内容:
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols
[WebService(Namespace = http://tempuri.org/)]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
public Service() {
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}
[WebMethod]
public string HelloWorld() {
return “Hello World”;
}
[WebMethod]
public int Add(int a , int b) {
return a + b;
}
}
步骤三:在浏览器中查看
http://localhost/WebService1/Service.asmx
页面中显示HelloWorld方法和Add方法。点击方法并调用。注意如果方法需要传参,则输入相关参数。最后页面显示出调用结果。
这样,一个简单的WebService就制作好了。接下来就要在其它项目中进行调用,即我们常说的使用代理类(代理类:可以引用远程的Web服务,在用户的应用程序中使用其功能,就像返回的数据是本地生产的一样)
步骤一:添加引用。
可以添加URL(http://localhost/WebService1/Service.asmx),也可以添加dll引用。
添加地址较为简单,VS会有相关提示。主要讲解dll引用的添加
如何生成dll文件?
方法一:选中Web服务,并发布网站,在根目录下找到bin目录,里面有生成的dll。可惜因为VS2005的bug,生成的dll都自动命名为App_Code.dll。可以安装微软提供的Web服务部署工具Web Deployment 。安装完成后,Web服务上右键选择Add Web Deployment Project…就可以正常部署Web项目并生成你想要的dll文件了
方法二:VS2005命令提示
a) wsdl url /n:namespace
生成和name.asmx相同文件名的C#源文件name.cs
b) 编译第一步生成的cs文件,生成dll
csc /out:name.dll /t:library /r:System.Web.Services.dll directory
/out:name.dll是要输出的dll文件,/t:library是输出文件类型,/r:System.Web.Services.dll是要引用的组件,directory是第一步生成的cs文件所在的路径和文件名,比如D:"name.cs
c) 在需要引用的工程中添加dll引用,即可调用WebService
步骤二:实例化对象
WebService1.Service s = new WebService1.Service();
int temp = s.Add(1,2);
Console.Write(“temp”);
Web服务的发布和部署
部署XML Web服务:
部署一个XML Web服务包括把.asmx文件和任何XML Web服务使用的汇编文件,而不是Microsoft.NET Framework的一部分,复制到Web服务器上
XML Web服务发布的条目
条目 |
描述 |
Web应用程序目录 |
作为你的XML Web服务的根目录。所有的文件都存放在这个目录中。这个目录应该被标记为一个IIS Web应用程式所用 |
.asmx文件 |
调用XML Web服务的客户端的基本URL。这个文件可以为任何有效的文件名 |
.disco文件 |
(可选的)作为XML Web服务的发现机制。.disco文件不会自动地为XML Web服务创建。这个文件可以为任何有效的文件名 |
Web.config文件 |
(可选择的)如果你需要覆盖默认配置设置,可以包含一个web.config文件。XML Web服务使用这个配置文件来允许系统的定制和可扩展性 |
"Bin目录 |
包含用于这个XML Web服务的二进制文件。如果你的XML Web服务类和.asmx文件不在同一个目录下,那么包含类的部件必须在"Bin目录中 |
总结
本文简单的介绍了Web Service的基本概念并给出了一个简单的例子用以理解。Web Service做到了平台无关性,可穿透防火墙,允许开发者方便地重用代码,限制了对数据库的连接,允许用户通过编程的方式访问Internet上的对象等。我们还可以通过Web服务外置数据,确保安全性。
其它的一些用法后面介绍:Web服务的状态,异步Web服务,Web服务中的事务处理,Web服务中的缓存技术和Web服务的性能优化
什么是Web Service?
Web Service是以独立于平台的方式,通过标准的Web协议,可以由程序访问的应用程序逻辑单元。它是一种分布式计算技术,一种自包含、自描述、模块化的应用,可以发布、定位、通过Web调用。一旦部署之后 ,其它Web Service应用程序可以发现并调用它部署的服务。它运用了Web网络技术和基于组件开发的精华成分。DCOM、CORBA和其它基于组件的分布式计算技术都依赖于特定的对象模型协议,而Web Service扩展了这些模型,使之可以和SOAP(简单对象访问协议)以及XML通信以根除特定对象模型协议带来的通信障碍。
下表是DCOM、CORBA和Web Service的比较:
特征 |
DCOM |
CORBA |
Web Service |
远程过程调用(RPC)机制 |
分布式计算环境远程过程调用(DCE-RPC) |
Internet Inter-ORB协议 |
超文本传输协议(HTTP) |
编码 |
网络数据表示(NDR) |
通用数据表示(CDR) |
扩展标记语言(XML) |
接口描述 |
接口定义语言(IDL) |
接口定义语言(IDL) |
Web服务描述语言(WSDL) |
发现 |
注册库 |
命名服务与交易服务 |
通用发现、描述与集成机制(UDDI) |
防火墙的友好性 |
否 |
否 |
是 |
协议的复杂性 |
高 |
高 |
低 |
跨平台性 |
否 |
部分 |
是 |
Web Service的主要优点是:允许在不同平台上、以不同语言编写的各种程序以基于标准的方式相互通信。。它就是个对外的接口,里面有函数可供外部客户调用。注意Web Service传递的数据只能是序列化的数据,典型的就是XML数据
Web服务三个重点:
一、简单对象访问协议(SOAP)
SOAP是一种基于XML的通信协议,包括三个部分:
1、 SOAP封装结构:定义消息的XML格式,包括整体框架、消息内容、谁处理这些内容等
2、 SOAP编程规则:定义如何将程序数据表示为XML
3、 SOAP RPC表示:定义如何使用SOAP进行远程过程调用
二、Web服务描述语言(WSDL)
1、 是一个XML文档,用于说明一组SOAP消息以及如何交换这些信息
2、 定义了服务的位置以及使用服务的通信协议
3、 可提供更高层次的消息,如Web服务的业务类型和关联关键字等
三、同一描述、发现和继承(UDDI)
1、 Web服务的黄页
2、 其核心组件是UDDI商业注册,它使用一个XML文档来描述Web服务。包括三个部分:
a) 白页:介绍提供服务的公司,包括名称、地址、联系方式
b) 黄页:包括按照标准分类进行分类的行业类别
c) 绿页:细则介绍、访问服务接口等技术信息
SOAP、WSDL和UDDI都基于XML。SOAP使用XML作为其数据编码格式。WSDL使用XML Schema来描述Web服务的结构。UDDI使用XML描述商业实体和Web服务
Web服务基础结构:
基础结构块 |
职能 |
XML Web服务目录 |
XML Web服务目录提供一个中央地址,用于定位其它组织提供的XML Web服务。象UDDI登记这样的XML Web服务目录实现这个职能。XML Web服务的客户端可以引用XML Web服务目录,也可以不引用XML Web服务目录 |
XML Web服务发现 |
XML Web服务发现是使用web服务描述语言(WSDL)定位或发现一个或多个描述特别的XML Web服务的相关文档。DISCO规格定义了定位服务描述的规则。如果XML Web服务客户了解服务描述的位置,他们可以绕过发现步骤 |
XML Web服务描述 |
为了了解如何与一个特定的XML Web服务交互利用,需要提供一个描述来定义XML Web服务支持的交互操作。XML Web服务客户端在可以使用一个XML Web服务之间必须了解如何与它交互 |
XML Web服务连接格式 |
为了能够进行通用通信,XML Web服务使用开发连接格式来进行通信,这些是任何支持最普通的web标准的系统都能够理解的协议。SOAP是用于进行XML Web服务通信的关键协议 |
C#创建Web服务(环境:.NET Framework3.0 VS2005)
创建一个简单的Web服务,用于说明Web服务的作用和代理类的生成方法
步骤一:新建—>网站—>ASP.NET Web服务
步骤二:项目中生成Service.asmx文件,App_Code/Service.cs。
Service.asmx文件内容:
<%@ WebService Language=”C#” CodeBehind=”~/App_Code/Service.cs” Class=”Service” %>
Service.cs文件内容:
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols
[WebService(Namespace = http://tempuri.org/)]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
public Service() {
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}
[WebMethod]
public string HelloWorld() {
return “Hello World”;
}
[WebMethod]
public int Add(int a , int b) {
return a + b;
}
}
步骤三:在浏览器中查看
http://localhost/WebService1/Service.asmx
页面中显示HelloWorld方法和Add方法。点击方法并调用。注意如果方法需要传参,则输入相关参数。最后页面显示出调用结果。
这样,一个简单的WebService就制作好了。接下来就要在其它项目中进行调用,即我们常说的使用代理类(代理类:可以引用远程的Web服务,在用户的应用程序中使用其功能,就像返回的数据是本地生产的一样)
步骤一:添加引用。
可以添加URL(http://localhost/WebService1/Service.asmx),也可以添加dll引用。
添加地址较为简单,VS会有相关提示。主要讲解dll引用的添加
如何生成dll文件?
方法一:选中Web服务,并发布网站,在根目录下找到bin目录,里面有生成的dll。可惜因为VS2005的bug,生成的dll都自动命名为App_Code.dll。可以安装微软提供的Web服务部署工具Web Deployment 。安装完成后,Web服务上右键选择Add Web Deployment Project…就可以正常部署Web项目并生成你想要的dll文件了
方法二:VS2005命令提示
a) wsdl url /n:namespace
生成和name.asmx相同文件名的C#源文件name.cs
b) 编译第一步生成的cs文件,生成dll
csc /out:name.dll /t:library /r:System.Web.Services.dll directory
/out:name.dll是要输出的dll文件,/t:library是输出文件类型,/r:System.Web.Services.dll是要引用的组件,directory是第一步生成的cs文件所在的路径和文件名,比如D:"name.cs
c) 在需要引用的工程中添加dll引用,即可调用WebService
步骤二:实例化对象
WebService1.Service s = new WebService1.Service();
int temp = s.Add(1,2);
Console.Write(“temp”);
Web服务的发布和部署
部署XML Web服务:
部署一个XML Web服务包括把.asmx文件和任何XML Web服务使用的汇编文件,而不是Microsoft.NET Framework的一部分,复制到Web服务器上
XML Web服务发布的条目
条目 |
描述 |
Web应用程序目录 |
作为你的XML Web服务的根目录。所有的文件都存放在这个目录中。这个目录应该被标记为一个IIS Web应用程式所用 |
.asmx文件 |
调用XML Web服务的客户端的基本URL。这个文件可以为任何有效的文件名 |
.disco文件 |
(可选的)作为XML Web服务的发现机制。.disco文件不会自动地为XML Web服务创建。这个文件可以为任何有效的文件名 |
Web.config文件 |
(可选择的)如果你需要覆盖默认配置设置,可以包含一个web.config文件。XML Web服务使用这个配置文件来允许系统的定制和可扩展性 |
"Bin目录 |
包含用于这个XML Web服务的二进制文件。如果你的XML Web服务类和.asmx文件不在同一个目录下,那么包含类的部件必须在"Bin目录中 |
总结
本文简单的介绍了Web Service的基本概念并给出了一个简单的例子用以理解。Web Service做到了平台无关性,可穿透防火墙,允许开发者方便地重用代码,限制了对数据库的连接,允许用户通过编程的方式访问Internet上的对象等。我们还可以通过Web服务外置数据,确保安全性。
其它的一些用法后面介绍:Web服务的状态,异步Web服务,Web服务中的事务处理,Web服务中的缓存技术和Web服务的性能优化