WCF和webservice的区别

本文对比了WCF和WebService的特点,介绍了WCF作为一种统一框架如何整合.NET平台下的分布式技术,并详细阐述了WCF与WebService在序列化、服务开发、承载方式、客户端开发等方面的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

脑内:果然是高大上啊

    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。

 

 

<think>好的,用户想要了解.NET中的WCFWebService,我需要先理清楚两者的基本概念、区别以及应用场景。首先,回忆一下WebService,它应该是一种基于SOAP的远程调用技术,使用XML进行数据交换,通常通过HTTP协议传输。而WCF是微软推出的更全面的服务框架,整合了多种通信方式,支持多种协议,不只是HTTPSOAP,可能还包括TCP、Named Pipes等。 接下来,需要明确两者的区别WebService可能更简单易用,适合基本的跨平台通信,而WCF则更加强大灵活,适合复杂的分布式系统。需要提到WCF的统一编程模型,支持多种传输协议消息格式,而WebService可能受限于HTTPSOAP。 然后,要考虑用户可能的实际需求。他们可能在选择技术栈时遇到困惑,比如什么时候用WebService,什么时候用WCF。需要给出具体的适用场景,例如WebService适合简单的Web服务,而WCF适合需要多种协议或事务支持的企业级应用。 还要注意两者的技术实现差异。WebService通常使用.asmx文件,而WCF使用.svc文件,并且配置更加复杂,基于ABC(地址、绑定、合同)模型。需要解释这些术语,但保持简洁。 另外,要提到WCF的扩展性安全性,支持WS-*标准,而WebService可能在安全方面需要额外配置。同时,WCF可以与ASP.NET集成,但也可以独立运行,而WebService通常依赖于IIS。 可能还需要比较两者的性能可维护性,WCF由于配置灵活,可能在性能调优方面更有优势,但学习曲线较陡。WebService则更适合快速开发简单的服务。 最后,要总结何时选择哪种技术,可能涉及项目需求、团队熟悉度、未来扩展性等因素。需要给出建议,帮助用户根据具体情况做出决策。 需要确保回答结构清晰,分点说明,用例子帮助理解,同时避免技术术语过多导致混淆。检查是否有遗漏的关键点,比如REST支持,因为WCF后来也支持RESTful服务,而WebService主要基于SOAP。可能还要提到Web API作为替代方案,但用户的问题主要集中在WCFWebService,所以简要带过即可。 现在组织语言,先定义两者,再分点比较,最后给出场景建议。保持口语化,避免使用Markdown格式,使用自然的中文段落分点符号。确保符合系统级指令中的格式要求,数学表达式用$...$,但在这个问题中可能用不到,但需要保持警惕。例如,如果有任何公式或代码,正确使用格式,但当前内容可能不涉及。检查LaTeX语法是否正确,不过可能这里不需要。使用中文回答,结构清晰,逐步解释。</think>**.NET WCFWebService 的核心区别与应用场景** **1. WebServiceASP.NET WebService)** - **定义**:基于**SOAP协议**的远程调用技术,使用XML格式传输数据,依赖HTTP协议(如GET/POST)。 - **特点**: - 简单易用,适合**跨平台通信**(如Java调用.NET服务)。 - 通过**.asmx文件**定义服务,使用`[WebMethod]`标记公开方法。 - 默认仅支持**HTTP协议****文本传输**,扩展性有限。 - **示例场景**: 快速构建一个查询天气的接口,供外部网站调用。 **2. WCF(Windows Communication Foundation)** - **定义**:微软统一的**服务框架**,整合了WebService、Remoting、MSMQ等技术,支持**多种协议**(HTTP、TCP、Named Pipes等)**消息格式**(SOAP/JSON)。 - **特点**: - **ABC模型**:基于`地址(Address)`、`绑定(Binding)`、`合同(Contract)`的配置模式。 - 支持**双向通信**(如双工合约)、**事务处理****高级安全性**(WS-Security)。 - 通过**.svc文件**托管服务,配置灵活(可用代码或配置文件)。 - **示例场景**: 企业内部系统需要同时支持HTTP(对外)TCP(高速内网通信),且需事务一致性保障。 --- **核心对比表** | **特性** | **WebService** | **WCF** | |------------------|-----------------------------|----------------------------------| | **协议支持** | 仅HTTP | HTTP、TCP、MSMQ、Named Pipes等 | | **消息格式** | SOAP/XML | SOAP、JSON、二进制等 | | **通信模式** | 请求-响应 | 请求-响应、单向、双工 | | **安全性** | 依赖HTTPS | 支持传输/消息级安全(WS-*标准) | | **复杂性** | 低 | 高(需配置ABC模型) | --- **何时选择?** - **选择WebService**: - 需要快速实现简单的跨平台服务。 - 仅需HTTP通信且无复杂事务需求。 - **选择WCF**: - 需支持多种协议或高性能传输(如TCP)。 - 需要高级特性(如事务、双工通信)。 - 未来可能扩展服务功能(如集成消息队列)。 --- **迁移与替代** - **WebServiceWCF**:微软提供工具(`svcutil.exe`)自动生成代理类。 - **现代替代方案**:若仅需RESTful API,可考虑**ASP.NET Web API**(更轻量,适合移动端)。 **总结**:WebService是轻量级解决方案,而WCF是功能全面的企业级框架。根据项目复杂度、协议需求及扩展性决定技术选型。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

avi9111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值