在最近发布的Visual  Studio 2012及.NET 4.5中, 微软正式推出新的网络服务框架ASP.NET Web API。作为ASP.NET MVC  4的一部分,ASP.NET Web API这套开源框架的设计目的是简化RESTful服务的开发和使用。

ASP.NET Web API 与之前的内建HTTP服务解决方案的不同之处在于,它一开始就是围绕HTTP协议及其消息语义构建起来的。与WCF  REST或ASP.NET AJAX加ASMX相比,它不是对现有框架的增强,而是一个全新的平台。新的ASP.NET Web  API的优势在于它汇集了之前各平台的各种最佳特性,结合为一个全面而不臃肿的HTTP平台。

微软已经有了一个的Web服务框架叫做Windows Communication Foundation(  WCF),它利用TCP、HTTP、MSMQ等传输协议构建“契约先行”的服务。WCF最初为基于SOAP的服务而设计,首先支持的是WS-*功能,但后来添加了少量迎合REST的功能。

在WCF  4.5也有很大的增强,具体可以看如下系列文章:

1.What’s   new in WCF 4.5? Let’s start with WCF configuration

2.What’s   new in WCF 4.5? A single WSDL file

3.What’s   new in WCF 4.5? Configuration tooltips and intellisense in config   files

4.What’s   new in WCF 4.5? Configuration validations

5.What’s   new in WCF 4.5? Multiple authentication support on a single endpoint in   IIS

6.What’s   new in WCF 4.5? Automatic HTTPS endpoint for IIS

7.What’s   new in WCF 4.5? BasicHttpsBinding

8.What’s   new in WCF 4.5? Changed default for ASP.NET compatibility mode

9.What’s   new in WCF 4.5? Improved streaming in IIS hosting

10.What’s   new in WCF 4.5? UDP transport support

11.What’s   new in WCF 4.5? WebSocket support (Part 1 of 2)

12.What’s   new in WCF 4.5? WebSocket support (Part 2 of 2)

随着时间流逝,WCF Web API为了让WCF适配到”原生”HTTP世界,遇到了很多困难。因为WCF主要是为基于SOAP的XML消息设计的,为了让Web  API成为WCF一部分,需要动的手术实在有点大(至少Web API的开发者们给了我这样的印象),是基于RPC风格的API。另一方面,ASP.NET  MVC的基础设施既能优雅地处理HTTP请求和响应,又能轻松创建各种控制器,好像是创建这种新类型服务的合适途径。

•支持URL路由,透过用户熟悉的MVC风格路由语义,生成干净的URL

•根据Accept标头对请求和响应的序列化形式进行内容协商(Content Negotiation)

•支持大量输出格式,包括JSON、XML、ATOM等

•默认对REST语义有完善支持,同时又不强制限定必须使用REST语义

•易于扩展的Formatter机制,支持添加新的输入/输出类型

•可通过HttpResponseMessage类、HttpRequestMessage类和强类型枚举来描述大量的HTTP操作,提供对更高级的HTTP特性的深度支持

•基于惯例的设计引导用户按HTTP Services的正确方式行事

•Formatters和Filters延续了MVC的扩展模型,具备出色的扩展能力

•用于非Web程序时,可以脱离IIS运行(Self-hostable)

•具备可测试性,测试机制的设计类似于MVC

现在我们拥有了2个服务框架,一个基于RPC机制的WCF和一个基于HTTP的ASP.NET Web  Api。在我们的开发实践中如何进行选择呢?  可以参照知名互联网企业,无论是google,facebook,baidu,新浪还是腾讯。他们对外开放的接口都是基于Http的Web  API,在服务内部框架都是基于SOA架构设计的,通讯机制都是采用RPC机制的,例如Google Protocol Buffers ,Facebook  thift。 我们完全也可以这样搭配,在内部通讯采用WCF + Protobuf-NET,参看《WCF服务上应用protobuf》,对外的服务采用ASP.NET  WEB API。WCF的 TCP、Named Pipes,甚至UDP(在WCF 4.5中)绑定的性能要比HTTP强很多倍,这里有一个几年前的微软的测试报告《WCF  性能基准报告》,对外提供的服务采用Web  API同时也是一个业界标准问题,用WebAPI就很容易的跨越ios,android,wp等移动终端平台,同时有很成熟的OAuth 解决安全问题。

WCF与Web API在应用上的选择的更多相关文章

  1. 【转】WCF和ASP.NET Web API在应用上的选择

    文章出处:http://www.cnblogs.com/shanyou/archive/2012/09/26/2704814.html 在最近发布的Visual Studio 2012及.NET 4. ...

  2. WCF和ASP.NET Web API在应用上的选择

    小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/shareto ...

  3. [转载]WCF和ASP.NET Web API在应用上的选择

    http://www.cnblogs.com/shanyou/archive/2012/09/26/2704814.html http://msdn.microsoft.com/en-us/libra ...

  4. WCF和ASP.NET Web API在应用上的选择(转)

    出处:http://www.cnblogs.com/shanyou/archive/2012/09/26/2704814.html 在最近发布的Visual Studio 2012及.NET 4.5中 ...

  5. WCF、Web API、WCF REST、Web Service比较

    原文地址:http://www.dotnet-tricks.com/Tutorial/webapi/JI2X050413-Difference-between-WCF-and-Web-API-and- ...

  6. WCF与Web API 区别

    WCF与Web API 区别(应用场景)   Web api  主要功能: 支持基于Http verb (GET, POST, PUT, DELETE)的CRUD (create, retrieve, ...

  7. webservice和wcf和web.api简单介绍

    转自:无废话的wcf等等 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下,你有很多的选择来构建一个HTTP Ser ...

  8. http服务 WCF、Web API、Web service、WCF REST之间的区别

      http服务 WCF.Web API.Web service.WCF REST之间的区别 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web ...

  9. Difference between WCF and Web API and WCF REST and Web Service

    The .Net framework has a number of technologies that allow you to create HTTP services such as Web S ...

随机推荐

  1. a标签伪类选择器+过度模块

    a标签的伪类选择器 1.什么是a标签的伪类选择器?a标签的伪类选择器是专门用来修改a标签不同状态的样式的. 2.格式: 1):link 修改从未被访问过状态下的样式. 2):visited 修改被访问 ...

  2. 2019_软工实践_Beta(4/5)

    队名:955 组长博客:点这里! 作业博客:点这里! 组员情况 组员1(组长):庄锡荣 过去两天完成了哪些任务 文字/口头描述 ? 测试新功能中 展示GitHub当日代码/文档签入记录 接下来的计划 ...

  3. how does SELECT TOP works when no order by is specified?

    how does SELECT TOP works when no order by is specified? There is no guarantee which two rows you ge ...

  4. Multi-shot Pedestrian Re-identification via Sequential Decision Making

    Multi-shot Pedestrian Re-identification via Sequential Decision Making 2019-07-31 20:33:37 Paper: ht ...

  5. 为什么printf()用%f输出double型,而scanf却用%lf呢?

    转:https://blog.csdn.net/bat67/article/details/52056057 示例:double x:scanf(“%f”,&x):输入“123.4”,输出x的 ...

  6. t4模版快速入门

    语法 主要包括指令.文本块.控制块. 1.指令 指令主要包括template, output, assembly, import, include等类型,用以告诉T4引擎如何编译和运行一个模板.这些指 ...

  7. asp.net core项目 Nlog直接写入集群ElasticSearch的配置方法

    1.NuGet 项目引用 NLog.Web.AspNetCore NLog.Targets.ElasticSearch 2.nlog.config配置文件: <?xml version=&quo ...

  8. Eclipse新项目检出后报错第一步:导入lib中的jar包【我】

    新检出项目报错,第一步,先看项目 web-info下的 lib目录里的包是不是都添加到项目构建中了,可以全选先添加到项目构建中,看项目是否还在报错.

  9. vue强制刷新组件 ----组件重置到初始状态

    把一个组件重置到初始状态是一个常见的需求,推荐的做法有两种,一种是父组件重置子组件的 prop,另一种是子组件暴露一个重置的方法供父组件调用.但有些时候,子组件既没有提供重置的方法,也没提供 prop ...

  10. 使用命令行操控vmware--安装

    在虚拟化出现之前,服务器的使用率很低,一般只有15%-20%,其余的资源处于闲置状态,但vmware出现之后,首先,可以充分的利用资源,从而达到节约成本的目的,其次,使得虚机便于维护.一般小型公司使用 ...