关于c#:WCF vs ASP.NET Web API

WCF vs ASP.NET Web API

我花了几个月的时间试图了解WCF背后的概念,最近我开发了我的第一个WCF服务应用程序。

我很难理解配置文件中的所有设置。我对环境并不确信,但似乎你可以用它做一些令人惊奇的事情。

前几天,我发现微软推出了一种叫做ASP.NET Web API的新产品。

对于我所能理解的,它是一个RESTful框架,非常易于使用和实现。

现在,我正试图找出这两个框架之间的主要区别,以及是否应该尝试用新的API转换我的旧WCF服务应用程序。

有人能帮我理解每一种的区别和用法吗?


对于我们来说,WCF用于SOAP,Web API用于REST。我也希望Web API支持SOAP。我们没有使用WCF的高级功能。以下是与msdn的比较:

enter image description here


新的ASP.NET Web API是上一个WCF Web API项目的延续(尽管某些概念已更改)。

WCF最初是为启用基于SOAP的服务而创建的。对于更简单的restful或rpcish服务(想想jquery这样的客户机),ASP.NET Web API应该是不错的选择。


ASP.NET Web API是关于HTTP和基于REST的GET、POST、PUT、DELETE的,具有众所周知的ASP.NET MVC编程风格和JSON可返回性;Web API用于所有轻量过程和纯HTTP组件。对于一个人来说,即使是对于简单或最简单的单一Web服务,它也会带来所有额外的负担。对于轻量级的Ajax或动态调用的简单服务,WebAPI总是能满足需求。这与ASP.NET MVC很好地互补或帮助。

查看播客:Hanselminutes播客264-这不是你父亲的WCF-有关Scott Hanselman与Glenn Block的WebAPI的更多信息。


在下面列出的方案中,您应该选择WCF:

  • 如果需要在TCP、msmq或mime等协议上发送数据
  • 如果消费客户端只知道如何消费SOAP消息
  • Web API是一个用于开发RESTful/HTTP服务的框架。

    有太多的客户机不理解类似SOAP的浏览器HTML5,在这种情况下,Web API是一个不错的选择。

    HTTP服务头指定如何保护服务、如何缓存信息、消息体的类型以及HTTP体可以指定任何类型的内容,如HTML,而不仅仅是XML作为SOAP服务。


    从使用这两种方法到现在,我发现wcf和web api之间有很多不同之处。这两种技术在不同的情况下都非常适合。所以不可能说哪个更好,这取决于配置和场景。

    See this image to understand more differnce

    注:数据不仅是我的观点,这也是从其他官方网站收集的。


    WCF会给你很多现成的东西,它甚至无法与任何东西相比。除非您想自己实现(列举几个)身份验证、授权、加密、排队、限制、可靠消息传递、日志记录、会话等。WCF不仅是Web服务,而且是SOA的开发平台。


    关于这一点,在msdn上有一个比较。

    WCF和ASP.NET Web API

    对我来说,选择是关于客户是谁,他们在哪里?

    在公司网络和基于.NET的客户端中:使用WCF和TCP绑定(比HTTP更快的通信)

    在公司网络之外,使用各种技术,如php、python等:使用web api和rest


    我为什么回答:

    我花了大量的时间来理解这两种技术之间的区别。我将把所有这些点放在这里,我想,"如果我在四处寻找这个答案的时候有这些点,那么我在选择我所需的技术方面已经做了很早的决定。"好的。信息来源:

    微软?VisualStudio?2015释放好的。

    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 Web服务的技术。(很久以前,它取代了基于SOAP/WSDL的微软的ASMX。)Web API使得基于所有浏览器和本机设备都能理解的HTTP协议编写健壮的服务变得容易。这使您能够创建支持您的应用程序的服务,并从其他Web应用程序、平板电脑、移动电话、PC和游戏机调用它们。今天为利用现有的Web连接而编写的大多数应用程序都以某种方式使用HTTP服务。好的。现在让我们定义WCF的目的:

    在互联网上交流并不总是最有效的手段。例如,如果客户机和服务都存在于同一技术(甚至同一台机器上),它们通常可以协商更有效的通信方式(如TCP/IP)。服务开发人员发现自己做出的选择与他们试图避免的选择相同。他们现在必须在创造高效的内部服务和能够通过互联网获得广泛的访问之间做出选择。而且,如果他们必须同时支持这两种服务,他们可能必须创建其服务的多个版本,或者至少创建访问其服务的独立代理。这是微软用WCF解决的问题。好的。

    使用WCF,您可以创建服务而不必考虑边界。然后,您可以让WCF担心以最有效的方式运行您的服务,这取决于调用客户机。为了管理此任务,WCF使用端点的概念。您的服务可能有多个端点(在设计时或部署之后配置)。每个端点指示服务如何支持调用客户机:通过Web、通过远程处理、通过Microsoft消息队列(msmq)等等。WCF使您能够专注于创建服务功能。它担心如何最有效地与客户通话。通过这种方式,单个WCF服务可以有效地支持许多不同的客户机类型。好的。WCF的例子:

    举个例子:好的。

    客户数据在应用程序之间共享。每个应用程序可能被写在不同的平台上,并且可能存在于不同的位置。您可以将客户接口提取到提供对共享客户数据的公共访问的WCF服务中。这样可以集中数据、减少重复、消除同步并简化管理。此外,通过使用WCF,您可以将服务端点配置为以对调用客户机有意义的方式工作。图显示了以前在WCF服务中集中访问客户数据的示例。好的。

    This is how WCF serves different clients好的。结论:i)何时选择Web API:

    不可否认,像使用ASP.NET Web API创建的那些基于REST的HTTP服务已经成为构建Web服务的标准。这些服务为Web开发人员构建服务提供了一种简单、直接的方法。Web开发人员了解HTTPGET和POST,因此能够很好地适应这些类型的服务。因此,如果您要严格以HTTP为目标编写服务,那么ASP.NET Web API是一个合乎逻辑的选择。好的。ii)选择WCF的时间:

    当需要支持基于不同协议和消息格式的多个服务端点时,WCF技术非常有用。像Microsoft Biztalk这样的产品利用WCF来创建健壮的服务,这些服务既可以在Web上使用,也可以通过不同的机器到机器配置使用。但是,如果您确实需要编写一个应用程序,当连接到本地网络时通过TCP/IP进行通信,当连接到网络外部时通过HTTP进行工作,则可以使用WCF来解决问题。好的。被警告:

    Web开发人员通常认为WCF更难开发,也更复杂。因此,如果您没有预见到对多协议服务的需求,那么您可能会坚持使用ASP.NET Web API。好的。好啊。


    从业务角度讲,WebAPI缺少WSDL,因此开发人员应该手动记录所有内容。例如,如果webapi操作返回一个对象列表,那么客户机应该手动创建这些对象,即webapi很容易出现定义错误。

    WebAPI的Pro比WCF更轻。


    对于"webapi缺少wsdl"语句,有几种方法可以生成REST客户机。一种流行的方法是自大的ui/(自大的裸体)。这提供了一个丰富的接口来理解REST端点的输入和输出模式,以及用于测试端点的在线工具。

    JSONLD(JSONLinkedDocuments)是另一个新兴的标准,它将通过以更好的语义公开JSONSchema来进一步改善基于JSON的REST开发人员体验。


    有了WCF,我们可以为多个端点(如TCP、HTTP)配置和公开相同的服务支持。如果您希望您的服务仅基于HTTP,那么最好使用Web API。与WCF相比,Web API的配置非常少,并且比WCF快一点。WCF还支持RESTful服务。如果您有.NET Framework 3.5的限制,那么您的选项是wcf。