2.4.1 基础知识--添加服务引用与Web引用的区别
由于.NET Framework 4默认不再推荐Web服务,而是通过WCF来实现Web服务的功能。而.NET Framework 3.5两者都支持,因此在添加时存在一些差异。
在创建基于.NET Framework 4的项目或者网站时,右击项目或者网站名称,弹出的快捷菜单中只会出现【添加服务引用】命令,如图2-20所示。
选择该项将打开【添加服务引用】对话框,在这里的【地址】下拉列表框中可以输入WCF的地址,再单击【前往】按钮。如图2-21所示为添加一个WCF服务引用时的对话框效果。
图2-20 快捷菜单 |
图2-21 【添加服务引用】对话框 |
虽然,也可以通过Web服务的URL来添加服务引用。但是要注意,此方法不能保证Web服务的正常使用,因此不推荐使用。
不过,打开【添加Web引用】对话框并不复杂。在图2-21所示的对话框中单击【高级】按钮,然后从弹出的【服务引用设置】对话框中单击【添加Web引用】按钮即可,如图2-22所示。
图2-22 【服务引用设置】对话框 |
下面我们来了解一下添加服务引用与添加Web引用的区别。
(1) 添加服务引用使用的是WCF服务,而添加Web引用使用的是Web服务。
(2) Visual Studio 2010在升级以后为了支持.NET Framework 3.0或3.5版本上的WCF Service Library,增加了添加服务引用功能。而对于Web服务从.NET Framework 1.0开始就支持。
(3) 同时存在添加服务引用与添加Web引用两者情况的项目类型是Web服务程序,包括Web Service项目。普通的控制台和窗体等类型是没有添加Web引用的。
(4) 使用添加Web引用后将由wsdl.exe生成客户端代理。而使用添加服务引用后生成客户端代理的命令是svcutil.exe。
(5) 添加Web引用生成的代理可以被.NET Framework 1.0或者.NET Framework 2.0的客户端调用。而添加服务引用生成的代理只能被.NET Framework 3.0以上的客户端调用,而且添加服务引用后不仅生成代理类,在web.config中还会生成相应的标记。
(6) 添加Web引用生成的Reference.cs文件里包含一个服务代理类,它负责与Web服务通信。它继承一个SOAP类,使用SOAP协议,基于XML语言。此外还包含一些Web服务类里定义的方法,和与之相关的异步调用方法和事件。遵守.NET Web Service的主要规则。
(7) 添加服务引用生成的客户端文件Reference.cs也会反序列化一个本地代理类,这点和前者相似。不过除了服务类和其相关的一些别的类和契约接口外,还有服务请求和相应的信息。遵循WCF服务框架的规则。
技术文档 WCF与Web服务的关系
严格地说,Web服务是行业标准,它有一套规范体系标准,而且在持续不断的更新完善中,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术。
微软的Web服务实现称为ASP.NET Web Service,它使用Soap来实现分布式环境里应用程序之间的数据交互,用WSDL来实现服务接口相关的描述。
WCF(Windows Communication Foundation)是一个分布式应用的开发框架,属于特定的技术,或者平台。既不是标准,也不是规范。WCF在一定程度上就是ASP.NET Web Service,因为它支持Web Service的行业标准和核心协议。因此ASP.NET Web Service能做的事情,WCF几乎都能胜任,跨平台和语言更不是问题。
但是WCF作为微软主推的一个通信平台,它的目标不仅仅是支持和集成Web Service,因为它还兼容和具备了微软早期很多分布式技术的特性。在本书的第13章将详细讨论WCF。