【问题标题】:WCF Service or Web API [closed]WCF 服务或 Web API [关闭]
【发布时间】:2012-03-19 03:23:23
【问题描述】:

我将从事一个涉及许多元素的项目:

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

为了让所有这些独立的应用程序与数据库通信,我立即想到的是使用 WCF 服务。

但是,我现在需要向站点添加一个 API,以允许第三方从他们自己的应用程序中选择、插入和更新记录。

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

但是,我今天一直在阅读有关 MVC 4 中的 Web API 功能的内容,该功能旨在成为 RESTful API 的最新功能?

我应该继续使用 Web API 吗?或者因为我的其他应用程序需要 Web 服务,我应该坚持使用 WCF 服务吗?

【问题讨论】:

标签: c# asp.net asp.net-mvc wcf asp.net-web-api


【解决方案1】:

如果您打算进行 RESTful 开发,那么您肯定会想要使用 ASP.Net Web Api(最初称为 WCF Web Api,其创建目标是“让 REST 成为 .NET 中的一等公民"。

要考虑的另一件事是 WCF REST Starter 工具包是 no longer supported。

请注意,使用 Web Api 并不意味着您必须使用 ASP.Net MVC 或 IIS,即使它可以是 self hosted。

对于处理本质上非 CRUD 的操作,我建议使用谷歌搜索“REST non-CRUD”。我发现这篇博文RESTful URLs for non-CRUD operations(尤其是 cmets 很有趣)。如果您决定需要进行 RPC 调用,那么这些调用可能必须使用 WCF 来完成。也就是说,由于 WCF REST 正在被淘汰,我不确定最好的解决方案是什么。两者都有可能是最好的答案,但同时也不一定是一个好的答案。

另一种选择是 WCF OData 服务,但我不确定这是否得到 iPhone 的任何支持。

最后一点(由于时间敏感,以后可以删除)

Microsoft 已在测试版中提供了 Go Live 许可证,这意味着它受 Microsoft 支持,升级到文件 RTM 应该没有任何问题。

【讨论】:

  • 感谢您的评论。当然,因为我也将在我的 MVC 网站上使用服务/api,所以我不希望整个服务/api 都是 RESTful 的? Web API 有可能吗?我知道使用 WCF 服务可以为 RESTful 提供单独的端点
  • 添加了附加信息以发布。
  • 我不完全理解您的附加信息。一个解决方案是使用我可以从我的 MVC 网站引用的 WCF 服务。然后我可以使用 Web API(带有身份验证),它还与 WCF 服务通信来获取数据?
  • 您是否需要人们可以使用的基于 SOAP 的 RPC 样式服务?或者您是否可以改为提供允许相同操作的 RESTful url。如非 CRUD 操作博客文章 cmets 的 RESTful URLS 中所讨论的那样?如果您可以侥幸保持纯 RESTful,那么它可能是值得的,这样您就没有 WCF 的复杂性。如果您需要 WCF,那么您需要 WCF,您可能应该将 Web Api 用于您认为应该是 RESTful 的东西......
  • 对不起,我在措辞上有点迷失了。如果我使用 Web API,我是否能够将其添加为我的 MVC 网站的服务参考,该网站将能够访问大量与我的数据库通信的方法。然后我是否能够拥有一个单独的 Web API 部分,我可以向外界开放并进行身份验证?
【解决方案2】:

Service Stack 看起来也是一个选项。

演示、概述、示例是available here。

【讨论】:

  • +1 提到了我从未听说过的服务堆栈。然而,纵观他们的框架,我的第一印象是,他们为客户提出的“无代码生成”目标并不完全准确。如果您无权访问服务 DTO,仍然需要代码生成(显然是手动的),这对于公共 API 来说很可能是这种情况。不过,这个框架看起来很有希望,所以我一定会研究它。感谢您的链接!
  • 不,没有代码生成,因为您可以重用定义 Web 服务的相同 DTO。因此,您将获得一个类型化、简洁的通用服务客户端,它使用快速、可版本化的端到端序列化。甚至 C# 异常也是惯用的并键入 github.com/ServiceStack/ServiceStack/wiki/Validation
  • @mythz 如果您无权访问定义 DTO 的 .DLL 怎么办?这是可公开访问的 Web 服务的常见场景。
  • 元数据页面上有 WSDL/XSD,因此您可以对模型进行代码生成。您可以动态解析它们。您可以使用您感兴趣的数据在客户端上创建部分类型化模型,您可以使用模型 + C# 服务客户端发布客户端库。因为它们是清洁技术,所以您不会与单一工具耦合,而且您有很多选择。
【解决方案3】:

这里没有正确的答案。您当然可以使用 WCF RESTful 服务做得相当好。或者您可以使用 ASP.NET MVC。两者都是完全有效的,并且都有优点和缺点。

最终,我建议您选择对您来说最易于维护的东西。

我想指出,MVC 4 处于测试阶段,因此请注意错误,在测试结束之前不要上线。

【讨论】:

    【解决方案4】:

    由于您要创建一个 ASP.NET MVC 网站,因此使用 ASP.NET Web API 会很舒服,因为编程模型非常相似,并且这些解决方案或多或少地相互集成。

    【讨论】:

      【解决方案5】:

      我很想看看在你将要使用的所有平台上什么支持最好,我怀疑 iPhone 应用程序最终可能会推动你的选择。

      如果它是纯 .net,我仍然倾向于使用 SOAP 服务 - 现在认为它并不酷,但它通常可以在大多数平台上满足您的需求,而无需推出自定义解决方案。

      编辑

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

      【讨论】:

        【解决方案6】:

        我也有同样的问题。

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

        找到一个视频教程,他们说对于 iPhone 或 JSON 或 xml 的 Web 应用程序客户端等机器消耗,建议选择 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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-06
          • 1970-01-01
          相关资源
          最近更新 更多