WCF和ASP.NET Web API在应用上的选择
小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03
在最近发布的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也有很大的增强,具体可以看如下系列文章:
- What’s new in WCF 4.5? Let’s start with WCF configuration
- What’s new in WCF 4.5? A single WSDL file
- What’s new in WCF 4.5? Configuration tooltips and intellisense in config files
- What’s new in WCF 4.5? Configuration validations
- What’s new in WCF 4.5? Multiple authentication support on a single endpoint in IIS
- What’s new in WCF 4.5? Automatic HTTPS endpoint for IIS
- What’s new in WCF 4.5? BasicHttpsBinding
- What’s new in WCF 4.5? Changed default for ASP.NET compatibility mode
- What’s new in WCF 4.5? Improved streaming in IIS hosting
- What’s new in WCF 4.5? UDP transport support
- What’s new in WCF 4.5? WebSocket support (Part 1 of 2)
- 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 解决安全问题。
参考页面:.html
WCF和ASP.NET Web API在应用上的选择的更多相关文章
- 【转】WCF和ASP.NET Web API在应用上的选择
文章出处:http://www.cnblogs.com/shanyou/archive/2012/09/26/2704814.html 在最近发布的Visual Studio 2012及.NET 4. ...
- [转载]WCF和ASP.NET Web API在应用上的选择
http://www.cnblogs.com/shanyou/archive/2012/09/26/2704814.html http://msdn.microsoft.com/en-us/libra ...
- WCF和ASP.NET Web API在应用上的选择(转)
出处:http://www.cnblogs.com/shanyou/archive/2012/09/26/2704814.html 在最近发布的Visual Studio 2012及.NET 4.5中 ...
- ASP.NET Web API是如何根据请求选择Action的?[下篇]
ASP.NET Web API是如何根据请求选择Action的?[下篇] 再<上篇>中我们简单介绍了用于实现Action选择机制的HttpActionSelector,接下来我们来讨论本章 ...
- ASP.NET Web API是如何根据请求选择Action的?[上篇]
ASP.NET Web API是如何根据请求选择Action的?[上篇] Web API的调用请求总是针对定义在某个HttpController中的某个Action方法,请求响应的内容来源于调用目标A ...
- ASP.NET Web API是如何根据请求选择Action的?[上篇] 【转】
http://www.cnblogs.com/leo_wl/p/3316548.html ASP.NET Web API是如何根据请求选择Action的?[上篇] Web API的调用请求总是针对定义 ...
- WCF 和 ASP.NET Web API
地址:https://docs.microsoft.com/zh-cn/dotnet/framework/wcf/wcf-and-aspnet-web-api WCF 是 Microsoft 为生成面 ...
- WCF与Web API在应用上的选择
在最近发布的Visual Studio 2012及.NET 4.5中, 微软正式推出新的网络服务框架ASP.NET Web API.作为ASP.NET MVC 4的一部分,ASP.NET Web ...
- ASP.NET Web API是如何根据请求选择Action的?[下篇] 【转】
再<上篇>中我们简单介绍了用于实现Action选择机制的HttpActionSelector,接下来我们来讨论本章最为核心的内 容:ASP.NET Web API如何利用HttpActio ...
随机推荐
- [编织消息框架][rpc]使用篇
rpc 分两部份,一个是调用者,另一方是服务提供者 调用者只关心那个服务,传相应参数,返回内容就可以 而提供者根据调用相应服务同参数,工作处理后响应内容即可 根据他们的关系可以用JAVA 接口同实现类 ...
- Linux实战教学笔记18:linux三剑客之awk精讲
Linux三剑客之awk精讲(基础与进阶) 标签(空格分隔): Linux实战教学笔记-陈思齐 快捷跳转目录: * 第1章:awk基础入门 * 1.1:awk简介 * 1.2:学完awk你可以掌握: ...
- 使用grunt完成requirejs的合并压缩和js文件的版本控制
最近有一个项目使用了 requirejs 来解决前端的模块化,但是随着页面和模块的越来越多,我发现我快要hold不住这些可爱的js文件了,具体表现在每个页面都要设置一堆 requirejs 的配置( ...
- 解决springmvc在单纯返回一个字符串对象时所出现的乱码情况(极速版)
使用springmvc框架开发了这么长时间,之前都是直接返回jsp页面,乱码情况都是通过配置和手动编解码来解决,但是今天突然返回一段单纯的字符串时,发现中文乱码情况解决不了了,下面就给各位分享一下如何 ...
- 香港多IP站群服务器-搭建多IP代理服务器、游戏加速服务器
耀磊花楹qq82521463香港WK自营机房多IP服务器租用,多IP站群服务器,多IP多C段 站群服务器租用 耀磊数据拥有3万个自由香港IP以及独立AS号,是APNIC核心成员,机房通过BGP融合 多 ...
- HTM5新手学习的一些日常总结,相互交流和相互学习。
第一天 一.HTML--网页的源码(超文本标签语言) HTML标签 标签式是HTML最基本单位和最重要的组成. 使<和>扩起来 标签都是闭合的(规范) HTML标签属性 是标签的一部分,用 ...
- oracle目录操作
1.创建目录 create directory dir_name as 'dir_path' (dir_path必须事先手动创建) 2.授权 grant read,write on director ...
- 本机安装mysql服务,步骤教程(另附SQLyog和Navicat工具)
因为这段时间不是装系统就是换硬盘,导致装了还几次MySql,每次都记不住都要上网找教程,着实麻烦,所以这次干脆直接写到博客上好了,便于自己也便于他人: 百度云:http://pan.baidu.com ...
- C++primer拾遗(第二章:变量和基本类型)
这是我对c++primer第二章的一个整理总结,算是比较适用于我自己吧,一小部分感觉不用提及的就省略了,只提了一下平时不注意,或者不好记住的内容. 排版太费劲了,直接放了图片格式.从自己的oneNot ...
- 取出关联数组的key值和values值
取出关联数组的key值,可用 array_keys()取出; <?php $a=array("Volvo"=>"XC90","BMW&qu ...