WCF和webservice的区别

微软论坛的斑竹回答如下:

脑内:果然是高大上啊

    1.WebService:严格来说是行业标准,不是技术,使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键)。微

软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互。

WSDL来实现服务接口相关的描述。此外Web services 可以注册到UDDI中心.供其客户查找使用。
    后来微软做了ASP.NET Web Service的安全,性能,数据加密、解密,托管宿主等多方面的扩展,称为WSE系列,这个是过

度产品,最高到WSE3.0.后来就是WCF时代。

    2.WCF:其实一定程度上就是ASP.NET Web Service,因为它支持Web Service的行业标准和核心协议,因此ASP.NET Web Service

和WSE能做的事情,它几乎都能胜任,跨平台和语言更不是问题(数据也支持XML格式化,而且提供了自己的格式化器)。
    但是WCF作为微软主推一个通讯组件或者平台,它的目标不仅仅是在支持和集成Web Service,因为它还兼容和具备了微软

早期很多技术的特性。
    根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程

序的统一框架。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF

是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,如Enterprise Sevices

(COM+).Net Remoting、Web Service(ASMX)、WSE3.0和MSMQ消息队列。以通信(Communiation)范围而论,它可以跨进程、跨机器

、跨子网、企业网乃至于 Internet;以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿

主(Host)。WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML, Kerberos,X509,用户/密码,

自定义等多种标准与模式。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相关的技术

要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。

 

 

小插曲:

当时胖胖的模样

   2年前在一个全国性的企业IT部门开发SmartClient,在那企业工作超过10年经理问我说,WebService的原理是什么?就是FTP!。。。。。。。我当场语塞,其实是我不知道FTP和WebService有什么区别啦,没法回经理。经理继续说,要先打个包再一次传数据这样效率才高,要不全国各地传数据来怎么受得了。FTP跟WebService协议不同,至于要怎么做才好其实也不好说。

   刚毕业在全国第二大的印刷厂IT部门做开发,来了个牛B经理,公司要把通信都转成WebService,那时连WebService是什么都不知道,做了个效能测试(测试不是我做的),发现通信一次怎么都要6秒多?后来没推,再后来我就走啦。WebService第一次建立通信是要花点时间,再加上公司网络监控比较多,可能是这个原因通信要去到6秒,每次都要6秒的原因是“事务做的太好了“,每次通信完都释放,哈哈。

   其实WebService和WCF有什么不同,自己用用就知道啦,不过千万不要像下面这个大哥,标题特搞笑,既没有深入也没有浅出,照抄个HELLOWORLD程序有什么用捏?就像刚毕业的我,要成长是要不断磨练D

 

 

 

 

 

下面基本可以无视:

当时就惊呆了,尼玛

GOOGLE到的,标题就是,深入学习WCF之比较WCF与Asp.net webservice的区别

《-------------------------------------------------------------------------------------------------》
 首先简单介绍一下 WCF 是什么,然后再对 WCF 和 Asp.net Web service 做个比较。
    Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架。借助 WCF,可以将数据作为异步消息从

一个服务终结点发送至另一个服务终结点。服务终结点可以是由 IIS 承载的持续可用的服务的一部分,也可以是应用程序中

承载的服务。终结点可以是从服务终结点请求数据的服务客户端。消息可以是从以 XML 格式发送的单个字符或单词,到复

杂的二进制数据流。虽然在WCF 出现之前也可以开发应用,但是 WCF 的出现使此类应用的开发变得更加简单。
    Asp.net Web service 通常依赖于 XmlSerializer 将 .NET Framework 的数据类型转换为 XML 格式在服务中传送,或将从服务中接

收的 XML 格式的数据转换为 .NET Framework 中的对象。
使用 XmlSerializer 序列化或反序列化 .NET Framework 的数据类型时的缺点:
1、只有标记为 public 的字段和属性能够被序列化。
2、只有实现了 IEnumerable 和 ICollection 接口的类的集合才能被序列化。
3、实现 IDictionary 接口的类不能被序列化,如Hashtable。
    WCF 使用 DataContractAttribute 和 DataMemberAttribute 来标记可以被序列化的 .NET Framework 类型。

[DataContract]
public class Item
{[DataMember]public string ID;[DataMember]public decimal Qty;[DataMember]public decimal Price;
}

DataContractAttribute 可以应用于类或结构体上,DataMemberAttribute可以应用于标记为 public 或 private 的字段和属性上。
DataContractSerializer 和 XmlSerializer的区别:
1、DataContractSerializer 不对 .NET Framework 中的数据类型在 XML 中的表示方式作控制,因此性能要比 XmlSerializer 高。
2、XmlSerializer 不能确定要序列化的字段或属性,而 DataContractSerializer 使用 DataMemberAttribute 可以明确的确定要序列化

的字段或属性。
3、DataContractSerializer 可以序列化实现了 IDictionary 接口的类。
4、由于 DataContractSerializer 可以访问对象的非 public 成员,因此在反序列化时需要运行在完全信任模式下,而

XmlSerializer 不需要。
服务的开发
在开发 Asp.net Web service 时需要在类上面添加 WebService 属性(attribute),在类的方法上添加 WebMethodAttribute 。

[WebService]
public class WebService1 : System.Web.Services.WebService
{[WebMethod]public string HelloWorld(){return "Hello World";}
}

一个 WCF 服务提供一个或多个 WCF 终结点(Endpoint),每个终结点包含地址(Address)、绑定(Binding)、契约

(Contract)。开发 WCF 服务时,通常先在接口上添加 ServiceContractAttribute 和 OperationContractAttribute 来定义服务的契约(

contract):

[ServiceContract]
public interface IService1
{[OperationContract]void DoWork();
}
ServiceContractAttribute 指定接口定义了一个 WCF 服务契约,OperationContractAttribute 表示接口中的哪个方法定义为服务契约

中的操作。定义好服务契约后需要一个类来实现它:

public class Service1 : IService1
{public void DoWork(){// do some works}
}

实现了服务契约的类即是 WCF 中的一个服务。接下来在配置文件中配置服务地址和绑定类型

<?xml version="1.0" encoding="utf-8" ?>
<configuration><system.serviceModel><services><service name="Service1"><endpoint address="Service1"binding="basicHttpBinding"contract="IService1"/></service></services></system.serviceModel>
</configuration>
绑定指定了如何与终结点进行通信。WCF 支持的绑定有
BasicHttpBinding、WSHttpBinding、WSDualHttpBinding、WSFederationBinding、NetTcpBinding、NetNamedPipeBinding、

NetMsmqBinding、MsmqIntegrationBinding、NetPeerTcpBinding。其中 BasicHttpBinding 包含了 Asp.net Web services 支持的协议。
服务的承载
Asp.net Web service 编译后生成一个程序集和一个扩展名为 .asmx 的服务文件,该文件中包含了服务类的代码和其所在的程

序集的信息。将服务文件复制到由 IIS 承载的 Asp.net 程序的根目录下,将程序集复制到程序根目录下的 /bin 目录下。服务

就可以通过服务文件的 URL来访问了。
WCF 服务可以由 IIS、Windows Process Activation Service(WAS)或 .NET 应用程序承载。在IIS或WAS中承载的步骤:
1、编译服务。
2、将扩展名为 .svc 的服务文件复制到一个虚拟目录下,将程序集复制到虚拟目录下的 /bin 文件夹下。
3、将web.config配置文件复制到虚拟目录下。
客户端开发
Asp.net Web service 客户端通过命令行工具 WSDL.EXE 生成客户端代码。
WCF 使用ServiceModel Metadata Utility Tool(svcutil.exe)生成客户端代码。
消息协定
Asp.net Web service 中的 SOAP 消息的消息头是可以自定义的。
WCF 通过 MessageContractAttribute、MessageHeaderAttribute和MessageBodyMemberAttribute 来描述服务中的 SOAP 消息的结构。
元数据
客户端通过 HTTP GET 向 Asp.net Web service 请求元数据时,ASP.NET 将生成 WSDL 并发送到客户端。生成的 WSDL 可以通过

创建一个继承自 ServiceDescriptionFormatExtension 的类来自定义。
客户端可以向 WCF 发送由 WS-MetadataExchange 标准定义的请求信息,接收返回的 WSDL。WCF 生成的 WSDL 也可以自定义

。WCF 还可以配置为不生成 WSDL,并提供一个固定的 WSDL 文件的URL。
异常处理
在 Asp.net Web service 中未处理的异常会作为 SOAP 错误返回客户端。
在 WCF 服务中未处理的异常不会作为 SOAP 错误返回客户端。在调试时可以通过配置设置让未处理的异常返回客户端。
安全
Asp.net Web services 安全设置和其他IIS 应用的安全设置相同。
WCF 可以承载于 IIS 之外的其他应用程序中,因此 WCF 的安全设置是独立的。但是可应用于Asp.net Web service 的安全设置

也可应用于 WCF。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

职场不得不明白的十大定律

帕金森定律 美国著名历史学家诺斯古德•帕金森通过长期调查研究&#xff0c;写了一本名叫《帕金森定律》的书&#xff0c;他在书中阐述了机构人员膨胀的原因及后果&#xff1a;一个不称职的官员&#xff0c;可能有三条出路。第一是申请退职&#xff0c;把位子让给能干的人&am…

php控制器教程,laravel基础教程 -- 控制器

HTTP 控制器简介控制器允许你将相应的路由业务逻辑封装在控制器类中进行有效的管理&#xff0c;这样你不必将所有的路由逻辑集中到routes.php文件中&#xff0c;导致代码的臃肿与难以维护。所有的控制器类都被存储在app/Http/Controllers目录中.基本控制器一个基本的控制器应该…

org.apache.jasper.JasperException: Unable to compile class for JSP:

报错信息&#xff1a; org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: 1 in the generated java file The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class filesSt…

i++和++i

关于自增自减运算&#xff0c;很多书籍没有把问题讲清楚,在C语言里是这样的&#xff1a; 1.后置运算&#xff1a;k表示先运算&#xff0c;后自加。 意思是遇到k了&#xff0c;我先把当前的k的值拿来参加运算&#xff0c;后面再去管它的自加。 那么&#xff0c;“后面”后到什么…

什么样的项目经历会让面试官眼前一亮

很多同学都问过我类似的问题&#xff1a; 咱们《C语言也能干大事》中讲的自己动手写windows优化大师、自己动手写计算器等东西只是写着玩的小玩具而已&#xff0c;这些能用来以后找工作时写到简历中的作品吗&#xff1f;看别人的简历写的“图书管理系统”、“教务选课系统”多有…

matlab采样频谱,Matlab对采样数据进行频谱分析

使用Matlab对采样数据进行频谱分析1、采样数据导入Matlab采样数据的导入至少有三种方法。第一就是手动将数据整理成Matlab支持的格式&#xff0c;这种方法仅适用于数据量比较小的采样。第二种方法是使用Matlab的可视化交互操作&#xff0c;具体操作步骤为&#xff1a;File --&g…

链表和顺序表的一些区别

顺序表与链表是非常基本的数据结构&#xff0c;它们可以被统称为线性表。 线性表&#xff08;Linear List&#xff09;是由 n&#xff08;n≥0&#xff09;个数据元素&#xff08;结点&#xff09;a[0]&#xff0c;a[1]&#xff0c;a[2]…&#xff0c;a[n-1] 组成的有限序列。…

ANCS推送简介

总体原理 ANCS通过蓝牙BLE 4.0实现&#xff0c;仅支持iPhone 4S及以上且系统版本在IOS 7以上的手机&#xff0c;同时在外设端需要支持蓝牙4.0协议。 1、外设端进行广播&#xff0c;手机打开蓝牙&#xff0c;搜索外设&#xff0c;连接外设&#xff0c;之后进行绑定&#xff08;这…

好记性不如烂笔头,记录几个常用的Linux操作

作者&#xff1a;老王Shell公共函数库Linux系统里有一些公共的Shell函数库可供使用&#xff0c;最重要的是/etc/rc.d/init.d/functions&#xff0c;在/etc/init.d目录下有很多脚本都用到了这个函数库&#xff0c;里面提供了很多有用的方法&#xff0c;比如&#xff1a;killproc…

用matlab简单电路模型,基于MATLAB的电路模型仿真应用

基于MATLAB的电路模型仿真应用实验指导书一、实验目的1、掌握采用M文件及SIMULINK对电路进行仿真的方法。2、熟悉POWERSYSTEM BLOCKSET 模块集的调用、设置方法。3&#xff0e;进一步熟悉M脚本文件编写的方法和技巧。二、实验原理1、通过M文件实现电路仿真的一般仿真步骤为&…

春节期间小游戏同时在线人数最高达2800万人/小时

微信官方发布2018年春节期间微信数据报告&#xff1a;除夕至初五&#xff0c;总共有2,297亿条微信消息&#xff0c;28亿条微信朋友圈成功发出&#xff0c;音视频通话总时长175亿乙分钟。其中&#xff0c;90后用广的消息发送量占总量的42.5%&#xff0c;80后用户25.9%&#xff0…

C语言中* 和

&x是对x变量取地址&#xff0c;也就是返回的是x的地址。 int *i;这里面的*说明变量i是一个指针&#xff0c;存的是一个地址。 而 *i整体代表的是一个数值&#xff0c;例如可以int *i 5 这里整体的*i代表的是5&#xff0c;而i代表的是这个值存储的地址

餐馆的故事-浅析职责链模式

我们在餐馆吃饭的时候&#xff0c;一般都是在拿到菜单后&#xff0c;选择喜欢的菜&#xff0c;然后通知服务员。服务员会将我们的定单交给大厨&#xff0c;大厨可能会亲自去做这道菜&#xff0c;也可能安排给小厨来做&#xff0c;总之&#xff0c;我们不用担心他们没有人做菜&a…

JDBC数据对象存储

一&#xff1a;将查询的结果生成对象&#xff0c;储存在数组中。 1 package day31;2 3 import java.sql.Connection;4 import java.sql.PreparedStatement;5 import java.sql.ResultSet;6 import java.sql.SQLException;7 import java.util.ArrayList;8 9 public class java_ob…

个人工作13年的一些人生真实领悟

此文不定期的更新&#xff0c;想起来就写一些&#xff0c;我都忘了我曾经会过什么了。你可能会在许多的文章里看到类似的&#xff0c;但这些是我个人的真实体会。 1 技术服从于业务 此问题以前的一个文章提过&#xff0c;不再多说。 适用于大多数对技术的盲目崇拜者。在绝大…

matlab非齐次方程组的通解,用matlab求非齐次线性方程组的通解?

先向大家介绍一下非齐次线性方程组。所谓非齐次线性方程组就是方程组等号右边的常数项不全为零的线性方程组。全部等于零时&#xff0c;就称为齐次线性方程组。下面我们就讲解一下如何利用matlab快速求非齐次线性方程组的通解。工具/材料matlab电脑操作方法01线性方程组Axb的求…

Linux 终端仿真程序Putty

PuTTY是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。较早的版本仅支持Windows平台&#xff0c;现在的版本中开始支持各类Unix平台。 用linux作为桌面系统&#xff0c;身为工程师很多时候需要通过Telnet、SSH协议进行远程管理&#xff0c;通过串口进行设备配置。Putty…

Mysql 数据库水平分表 存储过程

数据库存储量达到一定程度的时候&#xff0c;就需要进行分表以减轻检索的消耗。 常用的分表方式包括水平和垂直分表。本次进行的是按照uid进行水平分表。 ##分表思路&#xff1a; 水平分表平均的将数据按照特定方式分配到多个表中。理论上每个表的访问频次和数据量都是同一水平…

中国架构师,名符其实有多少?

先说一下读后感&#xff1a;我前段时间去过几个公司面试架构师&#xff0c;要求还是蛮高的&#xff0c;要熟悉大数据量处理&#xff0c;要熟悉高并发&#xff0c;要熟悉XX体系架构&#xff0c;要能在关键技术上实现突破。总之&#xff0c;架构错了&#xff0c;就啥都错了。呵呵…

粗识静态链表

为了弥补链表在内存分配上的不足&#xff0c;出现了静态链表这么一个折中的办法。静态链表比较类似于内存池&#xff0c;它会预先分配一个足够长的数组&#xff0c;之后链表节点都会保存在这个数组里&#xff0c;这样就不需要频繁的进行内存分配了。 当然&#xff0c;这个方法的…