它们之间有什么区别?
我什么情况下会选择其中的一个?
它们之间有什么区别?
我什么情况下会选择其中的一个?
这个答案是基于一篇已经不存在的文章:
文章概述:
"WCF基本上是一个服务层,允许您构建可以使用各种通信机制进行通信的应用程序。使用它,您可以使用Peer to Peer、命名管道、Web服务等进行通信。
您不能将它们进行比较,因为WCF是一个构建互操作应用程序的框架。如果您愿意,可以将其视为SOA启用器。这是什么意思?
嗯,WCF符合所谓的ABC,其中A是您要通信的服务的地址,B代表绑定,C代表协议。这很重要,因为可以在不改变代码的情况下更改绑定。协议要强大得多,因为它强制将协议与实现分离。这意味着协议在接口中定义,并且有一个具体的实现,由使用相同协议思想的消费者进行绑定。数据模型被抽象出来."
... 稍后 ...
"当我们需要与其他通信技术(例如点对点、命名管道)进行通信时,应该使用WCF而不是Web服务"
WCF是微软替代所有早期Web服务技术的新技术。它要比传统上认为的“Web服务”做更多的事情。
WCF“Web服务”是通过WCF启用的更广泛的远程通讯范围的一部分。在WCF中完成任务可以获得比传统ASMX更高度的灵活性和可移植性。因为WCF从根本上设计了微软提供的所有不同的分布式编程基础设施的总结。WCF中的端点可以像SOAP/XML一样轻松地进行通信,也可以像TCP/binary一样进行通信。而改变这个媒介只是简单的配置文件修改。理论上,这减少了在移植或更改业务需求、目标等时所需的新代码数量。
ASMX比WCF旧,但任何ASMX能做到的WCF都能做到(更多)。基本上,您可以将WCF视为试图在微软的应用程序通讯方式中逻辑地组合所有不同的方法;ASMX只是这许多方法中的一个,因此现在被归为WCF功能的一部分。
Web服务只能通过HTTP访问,且它在无状态环境下工作,而WCF则灵活,因为它的服务可以托管在不同类型的应用程序中。托管WCF服务的常见场景是IIS、WAS、自托管和托管Windows服务。
主要区别在于,Web服务使用
XmlSerializer
,但WCF使用DataContractSerializer
,后者在性能上比前者更好。
Web服务 基于SOAP协议,在XML格式中返回数据。 仅支持HTTP协议。 它不是开源的,但可以被任何理解XML的客户端使用。 它只能在IIS上托管。
WCF 也基于SOAP协议,在XML格式中返回数据。 它是Web服务(ASMX)的演化版本,并支持多种协议,如TCP、HTTP、HTTPS、Named Pipes、MSMQ。 WCF的主要问题是繁琐而广泛的配置。 它不是开源的,但可以被任何理解XML的客户端使用。 它可以在应用程序内部、在IIS上或使用Windows服务进行托管。
ASP.NET Web服务和WCF服务的基本区别在于,ASP.NET Web服务仅设计用于在HTTP上交换SOAP消息,而WCF服务可以使用任何格式(默认为SOAP)在任何传输协议上进行消息交换,例如HTTP、TCP、MSMQ或NamedPipes等。
Web service use only HTTP protocol while transferring data from one application to other application.
But WCF supports more protocols for transporting messages than ASP.NET Web services. WCF supports sending messages by using HTTP, as well as the Transmission Control Protocol (TCP), named pipes, and Microsoft Message Queuing (MSMQ).
To develop a service in Web Service, we will write the following code
[WebService]
public class Service : System.Web.Services.WebService
{
[WebMethod]
public string Test(string strMsg)
{
return strMsg;
}
}
To develop a service in WCF, we will write the following code
[ServiceContract]
public interface ITest
{
[OperationContract]
string ShowMessage(string strMsg);
}
public class Service : ITest
{
public string ShowMessage(string strMsg)
{
return strMsg;
}
}
Web Service is not architecturally more robust. But WCF is architecturally more robust and promotes best practices.
Web Services use XmlSerializer but WCF uses DataContractSerializer. Which is better in performance as compared to XmlSerializer?
For internal (behind firewall) service-to-service calls we use the net:tcp binding, which is much faster than SOAP.
WCF is 25%—50% faster than ASP.NET Web Services, and approximately 25% faster than .NET Remoting.