(转)2.4.1 基础知识--添加服务引用与Web引用的区别
《Web服务开发学习实录》第2章构建ASP.NET Web服务,本章我们将学习创建Web服务的各种方法,并重点对使用Visual Studio创建ASP.NET Web服务和修改Web服务的属性进行介绍。本节为大家介绍基础知识--添加服务引用与Web引用的区别。
AD:
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。
(转)2.4.1 基础知识--添加服务引用与Web引用的区别的更多相关文章
- 基础知识系列☞C#中→属性和字段的区别
"好吧...准备写个'基础知识系列',算是记录下吧,时时看看,更加加深记忆···" 其实本来准备叫"面试系列"... 字段.属性.你先知道的哪个概念? ***我 ...
- c# winform 访问WebServices 服务(通过WEB引用的方式进行访问)
第一步.Winform项目引用WEB服务 第二步.代码声明实例化 Web引用 YzServ.TestServ yzserv = new WebYzServ.TestServ(); yzserv.AAA ...
- 基础知识系列☞各版本下IIS请求处理过程区别
转载地址→http://www.cnblogs.com/fsjohnhuang/articles/2332074.html ASP.NET是一个非常强大的构建Web应用的平台, 它提供了极大的灵活性和 ...
- 网络基础知识之————A记录和CNAME记录的区别
1.什么是域名解析? 域名解析就是国际域名或者国内域名以及中文域名等域名申请后做的到IP地址的转换过程.IP地址是网路上标识您站点的数字地址,为了简单好记,采用域名来代替ip地址标识站点地址.域名的解 ...
- Java基础知识强化18:抽象类、接口的区别 和 选择性实现接口方法
1.抽象类和接口的区别 抽象类里面可以有非抽象的方法(可以没有抽象方法),接口里只能有抽象方法. 抽象类中的抽象方法声明时不能有大括号,而接口中的所有方法都没有大括号. 抽象类(abstract c ...
- 以太网基础知识0(UDP和TCP有什么区别)
参考:http://zhidao.baidu.com/link?url=GSIg9_zFhWi6PHezalQveRwwUsU0as7k6MFd05r-cruLT1yDABARraHkuq8ohdIR ...
- Linux基础知识之bashrc和profile的用途和区别
使用终端ssh登录Linux操作系统的控制台后,会出现一个提示符号(例如:#或~),在这个提示符号之后可以输入命令,Linux根据输入的命令会做回应,这一连串的动作是由一个所谓的Shell来做处理. ...
- Java基础知识总结--final、finally、finalize的区别
谈谈final.finally.finalize的区别 1.final修饰符:如果一个类被声明为final,意味着这个类不能再被派生出新的子类,不能作为父类被别的类继承.因此,一个类不能即被声明为ab ...
- ConsoleApplication 添加对于 System.ServiceModel.Web 引用失败(出现黄色感叹号)的解决办法
今天在写一个WebHttpBinding的demo,再创建一个Console应用程序后,发现无法添加System.ServiceModel.Web,如图
随机推荐
- ORACLE 物化视图
最近几天,我负责的P项目环境中提供给W系统的一个视图,由于查询逻辑复杂,数据量比较大,导致每次查询视图的时候,查询速度慢,效率低下,遭到了w系统人员的投诉.想了想,还是改成物化视图吧,用了物化视图,腰 ...
- unity中数据的持久化存储
unity 提供了PlayerPrefs这个类用于存储游戏数据到电脑硬盘中. 这个类有10个函数可以使用 Class Functions类函数 SetInt Sets the value of the ...
- 修改Servlet模板
1.找到jar文件 查看MyEclipse根目录下的myeclipse.ini,找到Common文件夹的位置,打开文件夹..\Common\plugins 找到文件 com.genuitec.ecli ...
- H5原生拖拽事件
使用原生js实现简单的拖拽事件 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- 更好的使用chrome
Ctrl+tab 在标签页之间切换 Ctrl+1 到 Ctrl+8 切换到指定位置编号的标签页.您按下的数字代表标签页横条上的相应标签位置 Ctrl+9 ...
- [Mugeda HTML5技术教程之6]添加元素
我们上节讲了怎么创建新作品.新作品创建好后,我们就可以在里面添加内容了.这一节,我们将要讲述如何在作品中添加元素.动画的中的内容都是以各种元素的形式组成的.对于添加到舞台上的元素,我们可以在时间线上添 ...
- [Mugeda HTML5技术教程之2] Mugeda HTML5富媒体平台简介
[Mugeda HTML5技术教程之2] Mugeda HTML5动画平台简介 摘要:Mugeda提供基于云的平台,供开发人员和设计人员快速的开发.发布和统计基于HTML5的,包含丰富动画和交互的移动 ...
- POJ2406 KMP算法
POJ2406 问题重述:给定字符串s0,记连续的k个s前后相连组成的s0s0...s0为s0^k.输入字符串S,求最大的k,使得S = s0^k. 问题分析: 1.采用kmp算法求出前缀函数 pre ...
- C语言初学 计算表达式的值 switch的意义
#include<stdio.h> main() { int a; printf("请输入一个数字\n"); scanf("%d",&a); ...
- mysql 查询表
判断表是否存在 SELECT table_name FROM information_schema.TABLES WHERE table_name ='yourname'; 判断存储过程是否存在 se ...