我花了几个月的时间试图掌握WCF的概念,最近我开发了我的第一个WCF服务应用程序。
为了理解配置文件中的所有设置,我付出了很多努力。
我不相信环境,但是似乎可以用它做很多令人惊奇的事情。
前几天,我发现Microsoft推出了一个名为ASP.NET Web API的新产品。
据我所知,它是一个RESTful框架,非常易于使用和实现。
现在,我试图找出这两个框架之间的主要区别,以及是否应该尝试使用新的API 转换旧的 WCF服务应用程序。
有人可以帮我理解它们的区别和用法吗?
我花了几个月的时间试图掌握WCF的概念,最近我开发了我的第一个WCF服务应用程序。
为了理解配置文件中的所有设置,我付出了很多努力。
我不相信环境,但是似乎可以用它做很多令人惊奇的事情。
前几天,我发现Microsoft推出了一个名为ASP.NET Web API的新产品。
据我所知,它是一个RESTful框架,非常易于使用和实现。
现在,我试图找出这两个框架之间的主要区别,以及是否应该尝试使用新的API 转换旧的 WCF服务应用程序。
有人可以帮我理解它们的区别和用法吗?
Answers:
新的ASP.NET Web API是先前WCF Web API项目的延续(尽管某些概念已更改)。
WCF最初是为了启用基于SOAP的服务而创建的。对于更简单的RESTful或RPCish服务(例如jQuery之类的客户端),ASP.NET Web API应该是不错的选择。
HttpClient
其中有一个很棒的东西,但是它并不会处理实体生成和序列化/反序列化。
INotifyPropertyChanged
客户端实体吗?验证如何?
对于我们来说,WCF用于SOAP,而Web API用于REST。我也希望Web API也支持SOAP。我们没有使用WCF的高级功能。这是来自MSDN的比较:
ASP.net Web API都是基于HTTP和REST的GET,POST,PUT,DELETE,具有众所周知的ASP.net MVC编程风格和JSON可返回性;Web API适用于所有轻量级进程和基于纯HTTP的组件。对于WCF而言,即使是简单或最简单的单个Web服务,它也将带来所有额外的负担。对于Ajax或动态调用的轻量级简单服务,WebApi始终可以满足您的需求。这巧妙地补充了ASP.net MVC或与之并行。
请查看播客:Hanselminutes播客264-这不是您父亲的WCF-有关 Scott API的更多信息,请参阅Scott Hanselman 撰写的有关Glenn Block的WebAPI。
在下面列出的方案中,您应该使用WCF:
WEB API是用于开发RESTful / HTTP服务的框架。
有太多不了解SOAP的客户端,例如浏览器,HTML5,在这种情况下,WEB API是一个不错的选择。
HTTP服务标头指定如何保护服务,如何缓存信息,消息正文的类型以及HTTP正文可以指定任何类型的内容,例如HTML,而不仅仅是XML作为SOAP服务。
从现在开始使用两者以来,我发现WCF和Web API之间存在许多差异。两种技术堆栈都非常适合于不同的场景,因此不可能说哪个更好,这取决于配置和场景。
Properties ASP.Net Web API WCF
--------------------------------------------------------------------------------------------------
End point (mainly) Http based SOAP based
Service Type Front End Back-end
Support caching, compression, versioning No
Framework ASP.net WCF
Orientation Resource Oriented Service Oriented
Transports http http, tcp, MSMQ, Named pipe
Message pattern Request reply request Reply, one way, duplex
Configuration overhead Less Much
Security lesser than WCF (web standard security) Very high (WS-I standard)
Hosting IIS IIS, Windows Service, Self hosting
Performance Fast A bit slower than Web API
In use from .NET 4.0 .NET 3.5
注意:这些数据不仅是我的观点,也是从其他官方网站收集的。
WCF将为您提供很多便利,甚至无法与任何东西媲美。除非您想自己执行(仅举几例)身份验证,授权,加密,排队,限制,可靠的消息传递,日志记录,会话等。WCF不是[仅] Web服务;WCF是SOA的开发平台。
我花了大量时间来了解这两种技术之间的区别。我将所有这些观点放在这里,我认为“如果我在想寻找答案的时候想知道这些观点,那么我已经很早决定选择我所需的技术了。”
Microsoft®VisualStudio®2015发布
ISBN-13:978-0-672-33736-9 ISBN-10:0-672-33736-3
在比较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是Microsoft开发基于REST的HTTP Web服务的技术。(很早以前,它取代了基于SOAP / WSDL的Microsoft的ASMX。)Web API使基于所有浏览器和本机设备都能理解的HTTP协议的健壮服务编写变得容易。这使您能够创建服务来支持您的应用程序,并从其他Web应用程序,平板电脑,手机,PC和游戏机中调用它们。今天编写的大多数利用现有Web连接编写的应用程序都以某种方式使用HTTP服务。
跨Internet通信并不总是最有效的方法。例如,如果客户端和服务都存在于同一技术(甚至同一台机器)上,则它们通常可以协商更有效的通信方式(例如TCP / IP)。服务开发人员发现自己做出了他们试图避免的选择。他们现在必须在创建有效的内部服务与能够通过Internet找到广泛访问之间进行选择。而且,如果他们必须同时支持这两种服务,则他们可能必须创建其服务的多个版本,或者至少创建单独的代理来访问其服务。这是Microsoft使用WCF解决的问题。
使用WCF,您可以创建服务而不必担心边界。然后,您可以让WCF担心以最有效的方式运行服务,具体取决于调用客户端。为了管理此任务,WCF使用端点的概念。您的服务可能具有多个端点(在设计时或部署后配置)。每个端点都指示该服务如何支持呼叫客户端:通过Web,通过远程处理,通过Microsoft消息队列(MSMQ)等。WCF使您可以专注于创建服务功能。它担心如何最有效地与主叫客户通话。这样,单个WCF服务可以有效地支持许多不同的客户端类型。
考虑示例:
客户数据在应用程序之间共享。每个应用程序可能在不同的平台上编写,并且可能存在于不同的位置。您可以将客户界面提取到WCF服务中,该服务提供对共享客户数据的通用访问。这样可以集中数据,减少重复,消除同步并简化管理。另外,通过使用WCF,您可以配置服务终结点以使其对调用客户端有意义的方式工作。该图显示了以前的示例,其中集中地访问WCF服务中的客户数据。
不可否认,像使用ASP.NET Web API创建的基于REST的HTTP服务已成为构建Web服务的标准。这些服务为Web开发人员构建服务提供了一种简单明了的方法。Web开发人员了解HTTP GET和POST,因此可以很好地适应这些类型的服务。因此,如果要编写严格针对HTTP的服务,则ASP.NET Web API是合理的选择。
当您需要基于不同的协议和消息格式支持多个服务端点时,WCF技术很有用。像Microsoft BizTalk这样的产品利用WCF来创建健壮的服务,这些服务可以通过不同的机器到机器配置在Web上使用。但是,如果您确实需要编写一个在连接到本地时通过TCP / IP进行通信的应用程序网络,并且在网络之外时通过HTTP工作,WCF是您的答案。
Web开发人员经常将WCF视为开发起来更加困难和复杂。因此,如果您不希望使用多协议服务,则可能会坚持使用ASP.NET Web API。
MSDN上对此有一个比较
对我而言,选择是关于客户是谁,客户在哪里?
在公司基于网络和.NET的客户端中:将WCF与TCP绑定一起使用(比HTTP更快的通信)
在公司网络外部,并使用各种技术,例如PHP,Python等:将Web API与REST一起使用
关于“ WebApi缺少WSDL”的陈述,有几种生成Rest客户的方法。一种流行的方法是Swagger UI /(Swashbukkle Nuget)。这提供了一个丰富的界面来了解REST端点的输入和输出模式,以及用于测试端点的在线工具。
JSON LD(Json链接文档)是另一个新兴标准,它将通过以更好的语义公开JSON模式,从而进一步改善基于JSON的REST开发人员的体验。
使用wcf,我们可以为tcp,http等多个端点配置和公开相同的服务支持。如果您希望服务仅基于http,则最好使用Web API。与wcf相比,Web API的配置要少得多,并且比wcf快一些。Wcf还支持Restful服务。如果您有.Net framework 3.5的限制,那么您的选择是wcf。