WCF REST Starter Kit是否已经死亡?

21
我们正在考虑在应用程序中将服务层从使用WCF切换到REST。目前,我们认为可以使用WCF REST Starter Kit来完成此操作。但是,由于该项目仍处于预览2阶段,并且自2009年3月以来没有更新,因此我们不确定是否可行。如果项目已经被放弃了,我们有哪些选择来创建基于.NET的REST服务呢?(一些人建议使用ASP.NET MVC,我们已经在UI层中使用了它)。编辑:看起来现在,WCF REST Starter Kit确实已经死了ASP.NET Web API是推荐的替代品。

1
如果是这样的话,那将是一个巨大的遗憾。SOAP将Web转化为一堆自定义接口的迷宫,每个接口都必须编写代码,而REST则通用了CRUD处理方式,并提供了更好的通用交互机会。 - quillbreaker
@quillbreaker - 在.NET堆栈上仍然可以使用REST,使用ASP.NET MVC(如我在问题中链接的那样) - Richard Ev
2
你看过OpenRasta吗?如果你是REST的新手,那么它是一个更好的起点。 - Darrel Miller
1
我会看看OpenRasta或MVC,WCF太过庞大且并没有什么实质性的增益。 - Colin Jack
@Colin,@Darren:最终我们选择了使用WCF,在服务方法上使用“WebGet”和“WebInvoke”属性。工作完成得相对轻松。 - Richard Ev
在许多项目中,我已经成功地使用了WCF的REST。需要一些前期工作来使所有动词正常工作,并获得零web.config设置,但这是可能的。 - James Westgate
10个回答

15

经过大量尝试不同的.NET REST框架,我得出了结论。使用ASP.NET MVC是处理RESTful服务最简单、最透明的方式。配置也要简单许多。

ASP.NET MVC

由于它的本质,ASP.NET MVC非常适合RESTful服务方法。与将复杂的SOAP驱动框架“适应”RESTful协议不同,ASP.NET MVC在其核心处采用Web编程范例。它更加透明和易于调试。利用ASP.NET路由框架,IIS请求被连接到控制器类。返回任何类型的内容变得十分容易。因为约定优于配置的哲学,设置起来也更加容易。它就是这么好用。说够了。

这是我在尝试使WCF很好地与REST配合时玩过的项目列表。我花了数天时间研究不同的方法。最后,每个项目都有各自的优点,但没有一个可以满足我们所有的需求。MVC胜出了。

WCF Rest 项目


WCF Rest Contrib - wcfrestcontrib.codeplex.com

这个项目具有一些非常有用的功能,如零配置、错误处理(返回适当的Web响应代码)和Web身份验证。

它要求您更改创建WCF服务的服务工厂类。这意味着它不能与其他要求您使用其工厂的库很好地协作。

WCF Rest Starter Kit - code.msdn.microsoft.com/wcfrestlabs/

这实际上只是一个“学习工具”和实验室,展示了如何在WCF中实现REST。看起来它已经不再更新了。我认为ASP.NET MVC和WCF 4.0让它失去了市场。它确实有一些很好的类,最终被纳入了WCF 4.0中(Help功能)。

文档工具


WCF Rest AutoDocs - autodocs.codeplex.com

WCF Rest AutoDocs 可以根据属性和新的端点行为适配器类,生成非常酷炫、易于使用的文档。

但是我在使用它时遇到了一个大问题——一旦将其添加到 WCF 中,post 请求就不再工作了。我一直收到“未找到端点”的错误。最终我放弃了并停止使用该库,因为它无法与其他库很好地兼容。

WCF Doc - wcfdoc.codeplex.com

WCF Doc 可以为基于 soap 和 rest 的服务生成文档。你可以创建自己的 xslt 样式表,然后生成符合公司品牌的酷炫文档。我目前正在将其集成到我们的构建过程中。


10

自 .Net Framework 3.5 版本以来,WCF 提供了对 REST 风格服务的支持,您可以立即在 WCF 上开始构建 REST 服务。

WCF REST Starter Kit 旨在成为团队从社区获取有关 WCF 中 REST 的新功能想法的工具。我们正在积极努力地将开发人员喜爱的启动包功能纳入 .Net Framework 中 - 例如,您可以在最近发布的 .Net 4 Beta 1 版本中使用帮助页面功能。随着我们收到有关启动器包功能的反馈,我们会考虑将它们纳入框架中,这样您就可以在生产中使用它们。

关于启动包“不再更新”的评论,我可以向您保证,实际情况恰恰相反。正如我们在启动器包主页上所述,我们的目标是在四个月的开发周期内发布新版本的启动器包。我们已经投入资源支持启动包,并致力于开发未来的版本。


@Yavor - 这是否意味着我们可以在接下来的几周内期待第三个预览版? - Richard Ev
很抱歉,这是不准确的。正如Seb所指出的那样,如果想在WCF上实现除CRUD之外的任何功能,你需要编写大量的框架并与WCF进行斗争。 - Colin Jack
1
现在,在BUILD 2011之后,我们了解到HttpClient已经被整合到.NET 4.5中。 - Panagiotis Kanavos
1
哇,这个旧答案仍然受到关注。对不起,大家我没有更新它!自从 Starter Kit 发布以来,团队已经进一步改进了 WCF REST 栈,并将其与 ASP.NET 集成,这是社区中最重要的需求之一。结果是一个全新的、得到完全支持的 ASP.NET 特性:http://www.asp.net/web-api。 - Yavor Georgiev
@YavorGeorgiev,那么我现在在哪里可以获取用于 .net 4.x 的 WCF Restful starter kit 呢?我在 web-api 页面上找不到它。 - Elaine

3
我们曾使用WCF实现RESTFUL api,可以使用XML、JSON和ProtoBuf进行数据的发布和接收,GET也是如此。
然而,一旦我们看到了ASP.NET MVC,我们放弃了WCF,现在使用MVC来完成相同的事情,代码更加透明。有一些不错的文章在谷歌上,介绍如何做到这一点。
我们的主要需求是为客户提供将请求序列化并接收XML、JSON或Protobuf响应的选项。
我想说,对我们来说,WCF已经过时了。MVC万岁!

3

这取决于您的场景,但是您会发现WCF REST在启用某些场景时会遇到很多问题。

起始套件开始修复其中一些问题,其他问题将在下一个版本中得到解决,但如果您想要像链接创建、内容类型协商和自定义媒体类型等功能,则需要花费大量时间使其正常工作。

还有其他框架可以更直接地解决相同的问题,我建议您看看OpenRasta和Snooze,甚至是MVC。


2

另一种可能性是,这个功能将成为.NET 4.0和Visual Studio 2010的一部分。我建议你下载beta版本并自己尝试。


2
我认为它并没有取得什么进展。从预览版1到预览版2花费了4个月的时间,而从那时起仅过去了3个月。虽然还不是正式版,但这篇文章将其列为Framework 4 - Beta 1的亮点。此外,还有PDC会议关于它的介绍。许多组织正在使用REST进行服务,因此WCF不支持REST是不可接受的。

1

我正在使用WCF Rest Contrib,只是因为我需要支持从第三方开发的iPad应用程序发送给我们的x-www-form-urlencoded格式。此外,我需要支持自定义用户名验证,这也不是WCF 4 REST服务的原生支持。

不幸的是,缺点是我失去了自动生成帮助页面的能力,这似乎在WCF Rest Contrib库中不被支持。

失去了帮助页面已经成为一个真正的麻烦,但就以上需求而言,我没有看到其他选择。

我希望随着使用REST的移动设备的爆炸式增长,微软将更加认真地考虑在WCF中实现工业级版本。目前,我对WCF 4有点失望... 我希望它更接近于WCF Rest Contrib。

(顺便说一下,服务实现库还支持SOAP WS部署,以供经典的非移动客户端使用,其中可以使用WSDL合同来生成代理)。


1
我们正在开发一个应用程序来使用现有的服务。我们还需要实现RESTful服务,但我们的主要目标是重用/集中我们已经存在的WCF服务,从而实现可重用性。
然后我们尝试了Web API,并发现它非常直接。它还为我们的体系结构提供了一个额外的层次,我们也可以控制它。
起初,我们担心性能问题,但到目前为止,这些问题非常小。
因此,如果您不介意在WCF服务上添加一个额外的层次,请将其作为Web API层存在,否则HttpClient同样是一个坚实的选择。

1
到目前为止,我们假设使用WCF REST Starter Kit来完成这个任务。然而,该工具包仍处于预览2阶段,自2009年3月以来没有更新。 您可以使用WCF构建REST应用程序,而无需使用Starter Kit。 .NET 3.5中提供了良好的REST功能和工具,包括URI模板映射、WebGet属性等。
Starter Kit是示例代码、附加实用类、视频和其他附加内容,有助于说明如何在WCF中进行REST。您不需要Starter Kit就可以在WCF中进行REST。
您不需要等待Starter Kit“完成”才能在WCF中进行REST。如果您喜欢其中的某些内容,例如Http请求构建器,请使用它。它是开源的,您可以在项目中使用它。如果您不喜欢它,请不要使用它。

1
实际上,它附带了URI模板、属性以及XML/JSON支持。除此之外,没有其他功能,也没有构建完整的REST架构所需的各种特性,而无需投入大量的努力。 - SerialSeb
正如serialseb所指出的,支持最多只能算是基本水平。缺失的明显特性是链接功能,如果没有HATEOAS的支持,它就不是REST。我和Seb一直在与WCF团队讨论,希望在WCF4中会有所改善。 - Colin Jack
在众多特性中,内容协商、可插拔的序列化、链接创建以及状态码的控制等都是非常关键的。WCF ReST允许您通过http传输POD(plain old data)服务。但它并不擅长做正确的HTTP。正如Colin所说,WCF4正在朝着正确的方向发展,但我仍然认为它还有很大的改进空间。 - SerialSeb

1
如果您正在寻找一些额外的功能(例如基于内容类型和接受标头的序列化/反序列化,每个操作的身份验证等),请查看WCF REST Contrib项目:

http://wcfrestcontrib.codeplex.com/

它基于3.5 SP1 WCF REST API,并提供了一些在RSK中找不到的功能。


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