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