WCF服务或Web API

24

我将要处理一个涉及多个元素的项目:

  • ASP.NET MVC网站
  • C#控制台应用程序
  • iPhone应用程序

为了让所有这些独立的应用程序都能与数据库通信,我的第一反应是使用WCF服务。

然而,现在我需要在网站上添加API,以允许第三方从他们自己的应用程序中选择、插入和更新记录。

在我看来,我只需要在我的WCF服务上创建一个单独的RESTful服务端点,该服务端点将使用身份验证进行锁定,并且只能访问某些方法。

然而,今天我阅读到了MVC 4中的Web API功能,它被认为是RESTful API的最新技术?

我应该使用Web API吗?还是因为我的其他应用程序需要Web服务,所以我应该坚持使用WCF服务?


可能是WCF vs ASP.NET Web API的重复问题。 - nawfal
6个回答

16
如果您打算进行RESTful开发,那么肯定会想要使用ASP.Net Web Api(最初称为WCF Web Api,并旨在使REST成为.NET的“一等公民”)。
另一件需要考虑的事情是WCF REST Starter kit 不再受支持
请注意,使用Web Api并不意味着您必须使用ASP.Net MVC或IIS,因为它可以自托管
处理非CRUD操作,建议您搜索“REST非CRUD”。我发现这篇博客文章RESTful URLs for non-CRUD operations(尤其是评论)很有趣。如果您决定需要进行RPC调用,则可能需要使用WCF。话虽如此,由于WCF REST已被淘汰,我不确定最佳解决方案将是什么。同时拥有两者可能是最好的答案,但同时也不一定是一个好答案。
另一种选择是WCF OData服务,但我不确定它是否得到iPhone的支持。
最后要提出的一点(可以在未来删除,因为这是时间敏感的)
微软已经提供了Go Live许可证,意味着它得到了微软的支持,并且您不应该在升级到文件RTM时遇到任何问题。

感谢您的评论。当然,因为我也将在我的MVC网站中使用该服务/ API,所以我不希望整个服务/ API都是RESTful的。Web API是否支持这种情况?我知道使用WCF服务可以为RESTful设置单独的端点。 - Dan Ellis
在帖子中添加了额外的信息。 - Shane Courtrille
我不完全理解你的附加信息。一个解决方案是使用一个WCF服务,在我的MVC网站中可以引用它。然后我可以使用一个带有身份验证的Web API(也与WCF服务通信)来获取数据? - Dan Ellis
你是否需要提供基于SOAP的RPC风格服务供人们使用?或者你可以提供RESTful URLS,以允许进行相同的操作,就像在“非CRUD操作的RESTful URLS”博客文章评论中所讨论的那样?如果你可以使用纯RESTful方式,那么这可能是值得的,这样你就不必拥有WCF的复杂性。如果你需要WCF,那么你就需要WCF,并且你应该使用Web API来处理你决定采用RESTful方式的事情... - Shane Courtrille
抱歉,我有点迷失在措辞中。如果我选择使用Web API,我能否将其作为服务引用添加到我的MVC网站中,以便能够访问大量方法来与我的数据库进行通信。然后,我是否能够拥有一个单独的Web API部分,可以向外界开放,并进行身份验证? - Dan Ellis
@Scrooby:是的,你可以这样做。 - Sunny R Gupta

6

2
+1 提到了 Service Stack,这是我以前从未听说过的。浏览他们的框架后,我的第一印象是,他们声称的客户端“无代码生成”目标并不完全准确。如果您没有访问服务 DTOs,则仍需要进行代码生成(显然需要手动),这对公共 API 来说是高度可能的情况。尽管如此,该框架看起来很有前途,所以我一定会认真学习它的。感谢您提供的链接! - Randolpho
不,没有代码生成,因为您可以重复使用与Web服务定义相同的DTO。因此,您将获得一个经过类型化、简洁通用的服务客户端,它使用快速可序列化的端到端版本。即使是C#异常也是惯用和类型化的。 https://github.com/ServiceStack/ServiceStack/wiki/Validation - mythz
@mythz 如果您无法访问定义DTO的.DLL怎么办?这是公共可访问Web服务的常见情况。 - Randolpho
元数据页面上有WSDL/XSD,因此您可以对其进行代码生成以生成模型。您可以动态解析它们。您可以在客户端上使用感兴趣的数据创建部分类型化模型。您可以使用包含模型和C#服务客户端的客户端库。由于这些技术干净简洁,您不会被限制在单一工具上,并且有很多选择。 - mythz

4

这里没有正确答案。你可以使用WCF RESTful服务或ASP.NET MVC来处理。两者都是完全有效的,并且都有优点和缺点。

最终,我建议您选择最容易维护的方式。

需要注意的是,MVC 4目前处于测试阶段,请小心错误并在正式发布前不要上线。


1

我倾向于看看在你将要使用的所有平台上支持最好的内容,我怀疑iPhone应用程序可能最终会驱动你的选择。

如果是纯.NET,我仍然倾向于使用SOAP服务 - 这在现今不被认为很酷,但通常可以在大多数平台上做到你需要的而无需滚动自定义解决方案。

编辑

ASP.NET Web API意味着.NET现在提供了一个开发RESTful API的极好框架,我修改我的答案,现在我会更倾向于这个 - 进步是伟大的!


1

既然您要创建一个ASP.NET MVC网站,使用ASP.NET Web API也会非常方便,因为编程模型非常相似,这些解决方案或多或少都是相互集成的。


0

我有同样的问题。

在MSDN网站上, http://msdn.microsoft.com/en-us/library/jj823172(v=vs.110).aspx

发现一个视频教程,他们说对于像iPhone或Web应用程序客户端的机器消费,JSON或XML的Web API是推荐选项。这是视频的最后部分。

而对于更复杂的机器到机器通信,WCF更可取。

http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-04-Building-a-Service-Layer-with-ASPNET-Web-API

这是他们演示文稿的截图。

enter image description here


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