【问题标题】:WCF vs WebAPI and native mobile devicesWCF 与 WebAPI 和本机移动设备
【发布时间】:2013-01-23 17:46:41
【问题描述】:
我一直在开发一个完全基于 ajax(无 POST)的单页 Web 应用程序,现在我在开发 Web 服务时使用 ASMX。 Web 服务使用 JSON 数据。对于该版本,我知道我需要升级到 WCF 或 WebAPI。
最终,我计划构建原生移动应用程序,这些应用程序将使用与 Web 应用程序相同的 Web 服务。在所有条件相同的情况下,如果我必须在两者之间进行选择,我应该选择哪个选项,以便 Web 服务可以与不同的客户端应用程序一起使用?
谢谢。
【问题讨论】:
标签:
asp.net
wcf
asp.net-web-api
【解决方案1】:
如果您的应用程序设计为只能通过各种平台的移动设备访问,则意味着您必须为所有这些平台找到最简单的共同点。因此,换句话说,如果您关心互操作性,您将专注于一种所有平台都可以使用的独特通信技术。
JSON + REST 似乎是当今许多平台(当然包括移动平台)最常见的最简单的分母。如果这是您将实施的唯一通信技术,WebAPI 似乎是显而易见的选择。
WCF 更可扩展,更可配置,你可以在不同的协议上插入不同的绑定、不同的编码,它实现了 SOAP、WS-*,它可以非常快(通过精心选择的绑定),你也可以做 JSON+ REST 与它,但您不需要所有的功能(并且由于所有这些功能,WCF 也可能非常复杂),您需要的似乎是无处不在和简单。鉴于您的要求,我会选择 WebAPI。
【解决方案2】:
我使用 WCF 开发了一组 RESTful Web 服务,最近启动了一个项目,用 ASP.NET Web API 替换 WCF。我的经验是 ASP.NET Web API 比 WCF 更容易学习和使用。我还可以给你几个选择 ASP.NET Web API 的理由:
-
WCF url 包含“.svc”扩展名。例如:http://localhost/MyRestService.svc/。这不应该对客户造成问题,但它很丑陋。您可以通过使用 IIS URL Rewrite 模块(请参阅this blog post)摆脱.svc 扩展,但是使用 ASP.NET Web API,您一开始就没有问题。
李>
WCF 使用 DataContractJsonSerializer,它生成的 JSON 可能会给客户端带来问题。具体例子包括dates和dictionaries。您可以更改 WCF 使用的序列化程序(参见 SO question),但 ASP.NET Web API 默认使用 JSON.NET,这是高度可配置的。
如果我今天开始创建一个新的 RESTful Web 服务,那么选择 ASP.NET Web API 而不是 WCF 将是一个简单的选择,因为这就是它的设计目的。