Nat*_*ate 7 .net c# rest asp.net-mvc wcf
目标是构建一个服务,然后我将通过jQuery和基于标准的Web前端,移动设备"胖客户端"以及很可能是WPF桌面应用程序来使用.
看起来WCF会是一个不错的选择,但我从来没有用WCF构建RESTful服务,所以我不确定从哪里开始这种方法.
我正在考虑的另一个选项是使用ASP.NET MVC,添加一些自定义路由,添加一些控制器操作并使用不同的视图来推出JSON,xml和其他返回类型.
这个项目主要是我自己的学习练习,我想花一些额外的时间来做"正确",这样我就可以更好地了解各个部分是如何组合在一起的.
所以我的问题是,我应该使用哪种方法来构建这种RESTful服务,这样做有什么好处呢?
通常情况下,我会说WCF适用于任何类型的托管服务,但在使用JSON作为序列化机制的RESTful服务的特定情况下,我更喜欢ASP.NET MVC(我将在本答案的其余部分中将其称为ASP.NET) ).
第一个原因之一是由于路由机制.在WCF中,你必须在合同上定义它,这一切都很好,但如果你必须快速更改路由,从我的角度来看,使用ASP中的路由机制更容易.净.
此外,对于上述问题,如果您在WCF中通过多个接口公开了多个服务,则很难获得URL结构的完整图像(这很重要),而在ASP.NET中(通常)具有所有路径在一个地方的作业.
关于ASP.NET的第二件事是你将能够访问ASP.NET所知的所有内部对象(请求,响应,服务器等等),这在暴露特定于HTTP的端点时是必不可少的. (这是你正在创造的).当然,您可以在WCF中使用许多相同的东西,但是您必须明确告诉WCF您正在这样做,然后考虑到这一点设计您的服务.
最后,通过个人经验,我发现DataContractJsonSerializer它不能DateTimeOffset很好地处理值,并且它是在使用DateTime服务(在任何端点上)时应该使用的类型,可以由多个时区的人调用.在ASP.NET中,您可以使用不同的序列化程序,或者如果需要,您可以创建自己的ActionResult序列化程序,为您使用自定义序列化程序.我个人更喜欢JSON.Net序列化器.
我喜欢的JSON.Net序列化程序和ASP.NET的一个好处是你可以使用匿名类型,如果你很聪明的话.如果在非泛型类型上创建静态泛型方法然后委托给内部泛型类型,则可以使用类型推断来轻松地为序列化返回值使用匿名类型(假设它们是一次性的,当然,如果您有一个一致返回的结构,你应该定义它并使用它).
还应该提到的是,如果开发RESTful服务,则不必完全折扣WCF.如果你正在推动一个原子或RSS从服务中送出,则类System.ServiceModel.Syndication的命名空间巨大的这些饲料的建设和系列化的帮助.创建类的简单子ActionResult类以获取实例,SyndicationFeed然后在ActionResult执行时将其序列化为输出流非常简单.
| 归档时间: | 
 | 
| 查看次数: | 2049 次 | 
| 最近记录: |