为什么我在回答这个问题:
我花了很多时间才理解了这两种技术的区别。我会在这里列出所有那些我认为“如果当我在寻找答案的时候有这些要点,那么我会更早地选择我需要的技术”的要点。
信息来源:
Microsoft® Visual Studio® 2015 Unleashed
ISBN-13: 978-0-672-33736-9 ISBN-10: 0-672-33736-3
为什么选择ASP.NET Web API和WCF:
在比较ASP.NET Web API和WCF技术之前,重要的是要了解实际上有两种创建Web服务的样式/标准:REST(表现层状态转移)和SOAP/WSDL。 SOAP/WSDL是最初构建Web服务的标准。然而,它很难使用,并且具有影响性能的笨重消息格式(如XML)。基于REST的服务很快成为替代方案。它们更易于编写,因为它们利用HTTP的基本结构(GET、POST、PUT、DELETE),并通常使用较小的消息格式(如JSON)。因此,基于REST的HTTP服务现在是严格针对Web的服务的标准。
让我们定义ASP.NET Web API的目的
ASP.NET Web API是微软用于开发基于REST的HTTP网络服务的技术。(它早已取代了基于SOAP/WSDL的Microsoft ASMX。)Web API使编写基于HTTP协议的健壮服务变得容易,所有浏览器和本地设备都能理解。这使您能够创建服务来支持您的应用程序,并从其他Web应用程序、平板电脑、移动电话、个人计算机和游戏机中调用它们。今天撰写的大多数应用程序都以某种方式利用HTTP服务,以利用无处不在的Web连接。
现在让我们定义WCF的目的:
跨互联网通信并非总是最有效的方法。例如,如果客户端和服务都存在于相同的技术上(甚至是同一台机器上),它们通常可以协商出更有效的通信方式(如TCP/IP)。服务开发人员发现自己正在做他们试图避免的相同选择。现在他们必须在创建高效的内部服务和拥有Internet广泛访问之间做出选择。而且,如果他们必须同时支持两者,他们可能必须创建多个版本的服务或至少分离代理来访问他们的服务。这是微软用WCF解决的问题。
使用WCF,您可以创建服务而不必担心边界问题。然后,您可以让WCF根据调用客户端的最有效方式来运行您的服务。为了管理此任务,WCF使用端点的概念。您的服务可能具有多个端点(在设计时间或部署后配置)。每个端点指示服务如何支持调用客户端:通过Web、通过远程过程调用、通过Microsoft Message Queuing(MSMQ)等。WCF使您专注于创建服务功能。它会自动处理与调用客户端的通信方式,以实现最高效的通信。因此,单个WCF服务可以有效地支持许多不同类型的客户端。
WCF的示例:
考虑以下示例:
客户数据在应用程序之间共享。每个应用程序可能在不同的平台上编写,并且可能存在于不同的位置。您可以将客户端口提取到WCF服务中,以提供对共享客户数据的公共访问。这样可以集中数据,减少重复,消除同步问题并简化管理。此外,通过使用WCF,您可以配置服务端点以按照调用客户端的方式工作。图显示了先前的示例,其中客户数据在WCF服务中进行了集中访问。
![This is how WCF serves different clients](https://istack.dev59.com/qXXS9.webp)
结论:
i) 何时选择Web API:
毫无疑问,基于REST的HTTP服务(如使用ASP.NET Web API创建的服务)已成为构建Web服务的标准。这些服务为构建服务的Web开发人员提供了一种简单直接的方法。Web开发人员了解HTTP GET和POST,因此很容易适应这些类型的服务。因此,如果您正在编写严格针对HTTP的服务,ASP.NET Web API是合乎逻辑的选择。
ii) 何时选择WCF:
当您需要支持基于不同协议和消息格式的多个服务端点时,WCF技术非常有用。像Microsoft BizTalk这样的产品利用WCF创建强大的服务,这些服务可以通过Web以及不同的机器配置使用。然而,如果您需要编写一个应用程序,在连接到本地网络时通过TCP/IP进行通信,并在离开网络时通过HTTP工作,则WCF是您的答案。
请注意:
Web开发人员通常认为WCF更难以开发和复杂。因此,如果您不预见需要多协议服务,您可能会坚持使用ASP.NET Web API。