如何在.NET中实现基于REST的Web服务?

3
到目前为止,我可以选择ADO.Net数据服务、WCF REST Starter Kit(不确定是否可以使用,因为他们的最终用户许可协议难以理解和混乱),ASP.NET MVC。有很多帖子,但我想知道是否还有其他框架我没有考虑到。如果您已经使用过上述选项,请分享您的经验。我正在寻找用于保存和从SQL Server数据库检索一些数据的方案。我正在寻找一些已经构建了基础架构的东西。我阅读了其他问题,但我没有得到任何人对上述选项的具体经验,所以想知道事情是否随着时间的推移而改变了。请注意:我目前将我的选择限制在MS Stack上。
5个回答

4

2
“就v1而言,WCF绝对不是正确的选择。它会阻止您实现许多ReST架构的约束条件。如果您想在http上实现ReST,为什么不看看OpenRasta呢?它从头开始构建,支持REST场景。”

http://trac.caffeine-it.com/openrasta

Seb


0
如果您正在使用.asmx Web服务,您可以使用ScriptService标记类,然后在AJAX调用中请求Json以获取Json返回。

0

如果您的网站已经在运行MVC,只需添加一个额外的视图并转储xml / json而不是HTML内容就更容易了。(Stack Overflow对其RSS提要使用此方法)

如果您想添加自定义标头,例如基本HTTP身份验证,X-HTTP-Method-Override以支持put/delete(因为浏览器管道仅支持get/post),则在Rest Starter Kit中很容易实现,但在WCF 3.5中目前几乎不可能(可以通过设置允许httpcontext属性的asp.net模块来实现)

Rest Starter Kit填补了WCF 3.5遗漏的所有空白!

REST Starter Kit具有ASP.NET预发布组件,如“该软件按原样授权。您承担使用它的风险。它可能永远不会作为稳定版本发布”查看许可证

为了让你开始学习,PluralSight 提供了一些关于 REST 和 REST Starter Kit 的精彩视频教程。


-1

ASP.NET MVC不同于其他的东西。它是一种Web开发模型,也可以作为WebForms的替代品。

如果要实现基于REST的Web服务,那么 WCF 可能是最好的选择。只需要设置一些额外的属性,配置一个单独的xml文件就可以了。从基础设施方面来说,WCF和任何其他选择一样完善,因为它具有带宽和并发性,并且如果您决定切换传输方式(例如命名管道或TCP),或者希望切换到使用SOAP,都是很容易实现的。此外,跟踪功能已经内置在其中,当出现问题时非常有用。

最后一个选项可能是Web方法。如果您只是想使网站支持Ajax,则 Web 方法可能是可行的。

至于是否缺少任何框架... 如果您处理的是MS开发堆栈,那就没有了,除了仍然受到支持的经典Web服务。

如果您谈论的是非MS语言,则各种语言(Java、Python、Ruby等)有上百种不同的Web服务标准。如果您不局限于MS技术,请明确说明,这将大大扩展您的选项。

编辑:这并不意味着您不能使用ASP.NET MVC创建基于REST的无视图接口。只是意味着您没有任何内置的基础设施,基本上需要自己开发。因此,没有负载处理、DDOS保护、容错等功能...


3
认为通过设置一些属性就可以将WCF SOAP接口转换为REST接口,这表明缺乏对RESTful接口属性的理解。REST不仅仅是使用URL和HTTP GET传递XML/json。 - Darrel Miller
我不同意。鉴于WCF提供的服务和抽象数量,从REST切换到SOAP数据层只需要进行一些属性/配置更改就可以了。 - Serapth
是的,这就是问题所在。REST并不意味着要暴露数据层,而是应该暴露机器可消费的表示层。 - Darrel Miller
@Darrel:REST只用于表示层?你是怎么得出这个印象的?@Serapth:通过改变一些属性和配置,你无法切换架构风格。你可能能够使用HTTP动词获得POX(WCF REST提供),但如果不应用其他REST约束,其中核心约束是遵循(并生成!)链接,它就不会是RESTful的... - SerialSeb
1
@serialseb 是的,"presentation layer"(展示层)这个词太过狭义。我真正想表达的是"expose a content layer"(暴露内容层)。它位于展示层和数据层之间,包含用户代理要显示的内容,但不包括如何显示。我不认为REST是将数据暴露给业务流程或工作流程的最佳方法。 - Darrel Miller

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