选择哪个:ASP.NET MVC还是RESTful WCF?

17
使用ASP.NET MVC开发时,常见的做法是使用AJAX代码(例如jQuery)在不刷新页面的情况下调用服务器上的Web服务。自然而然地,将Web服务设计成RESTful风格。似乎有两种方式可供选择:第一种方式是利用ASP.NET MVC所提供的RESTful URI功能,很容易将某些控制器/操作(Controller/Action)作为Web服务方法来实现;第二种方式是利用WCF,从3.5版本开始就支持RESTful。
那么,这两种方式的优缺点是什么呢?
对于ASP.NET MVC的请求,它们会经过ASP.NET管道(Pipeline)。这是否会使得请求速度比WCF更慢呢?

2
WCF 也会通过 ASP.NET 管道。 - Brad Wilson
4个回答

12

如果您已经在网站的其余部分使用ASP.Net MVC,那么将相同的框架用于AJAX调用似乎是有道理的。

关于ASP.Net管道,我想您可能担心整个页面生命周期的问题。只有在使用WebFormViewEngine视图时才会执行页面生命周期。该框架为操作结果提供了JsonResult,方便进行JSON序列化,完全绕过ASP.Net页面生命周期。类似的类也适用于XML、RSS等。


6

3
您需要区分AJAX调用和REST API,AJAX调用是在您的应用程序上下文中进行的,并且可以依赖于应用程序上下文来处理会话、身份验证等方面的内容。而REST API是您提供给全世界使用的一组API - 它可以依赖于您的应用程序进行身份验证等操作,从而为客户端调用带来了整个新的复杂性。
如果您只需要让应用程序的JS与服务器通信,则使用MVC控制器是最简单直接的解决方案。
如果您希望将这些API与您的网站的MVC代码分离(出于部署等目的),或者如果您需要一个REST API供其他人使用来调用您的应用程序 - WCF。

0
使用WCF堆栈的另一个优点是,只需使用WCF数据服务/ODATA(specdemo)几个鼠标点击即可公开所有需要进行CRUD和数据探索的接口,前提是您已经使用实体框架实现了数据层。
我正在考虑将这些基本的RAD接口与更复杂的事务性服务的附加层结合起来,使用常规MVC构建。这种组合似乎不太优雅,但在生产力方面可能会有益处。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接