应该选择WebAPI还是asmx?

14

我应该使用 ASMX 服务还是 ASP.NET Web API 来创建两个简单的 API?

我想在我的 ASP.NET MVC 项目中创建两个简单的 API。其中一个接受3个参数(currentUserID, DataType, ActionName),并返回这些参数以及所请求数据的 XML 字符串。该 API 被客户端 JavaScript 代码使用。另一个 API 接收一个 XML 字符串,并在服务器端使用它来执行数据库操作。


2
ASMX等同于SOAP,但不是所有人都容易“消费”它;WCF也等同于SOAP,但拥有大量不同的传输机制(不仅限于HTTP);而WebAPI则是穿上新衣服的“RESTful WCF”,采用REST风格,任何使用HTTP堆栈的人都可以消费数据,但它只是仅支持HTTP(无其他传输可用)。因此根据您的需要来选择哪一种。 - marc_s
好像 WebAPI 是前进的道路。还有一个问题,如何在 WebAPI 方法中实现接受多个参数的方法(针对问题描述中的情形1)?我试过只是简单地创建带有多个参数的方法,但是当我测试时却无法在浏览器中访问它。我认为这与映射路由有关?有什么建议吗? - Matt
可能是[asmx转WCF或Web API]的重复问题(https://dev59.com/iWkw5IYBdhLWcg3wDWPL)。 - Aliostad
3个回答

25
我刚回答了一个相关的问题:

发布 asp.net Web API 后,ASP.NET MVC 框架的未来是什么?

基本上,微软提供的用于开发网络服务的框架有:
  • ASMX。基于SOAP的XML服务。

  • WCF。基于SOAP的Web服务。这些服务是传统ASMX服务的演变,基本上它们专注于将服务本身与传输协议分离。这就是为什么您可以使用多个终结点和因此多个协议(TCP、HTTP、命名管道、MSMQ、HTTPS)公开相同的服务。这种灵活性带来了配置问题。社区对WCF的主要抱怨之一是繁琐而广泛的配置。

  • WEB API。基于HTTP而不是SOAP。这个新API是一个创建服务的新框架。与其他两个前辈的主要区别在于它基于HTTP而不是SOAP,因此您可以使用几个HTTP功能,例如:

    • 包含非常有意义和描述性的消息头-指示消息正文的内容类型的标头,解释如何缓存信息,如何保护信息等的标头。
    • 使用动词定义操作(POST、PUT、DELETE..)
    • 包含可用于发送任何类型内容的正文
    • 使用URI标识信息路径(资源)和操作

    WEB API专注于编写服务以通过HTTP公开它们(目前仅限于HTTP)。如果您想使用另一种协议公开服务,则应考虑使用WCF。

    WEB API基于MVC(如果您想知道它为什么基于MVC,那么很简单)

    WCF Web API的另一个目标是融合已知的概念,帮助开发人员克服他们在WCF中面临的一些缺点,例如巨大的配置、过度使用属性以及不支持测试的WCF基础结构。因此,Web API使用IoC,启用了约定优于配置,并尝试提供更简单的配置环境。

    ASP.NET MVC基础结构具有其优雅的处理HTTP请求和响应以及对易于创建控制器的支持,似乎是创建这种新类型服务的正确方式。

考虑以下因素以选择WCF还是WEB API:
  • 如果你的意图是创建支持特殊场景的服务——单向消息传递、消息队列、双工通信等,则最好选择WCF。
  • 如果您想创建可以在可用时使用快速传输通道(如TCP、命名管道,甚至在WCF 4.5中使用UDP),并且您还想在所有其他传输不可用时支持HTTP,则最好使用WCF并同时使用基于SOAP的绑定和WebHttp绑定。
  • 如果您想在HTTP上创建面向资源的服务,这些服务可以使用HTTP的全部功能(为浏览器定义缓存控制、使用ETag定义版本控制和并发处理、传递各种内容类型,如图像、文档、HTML页面等),使用URI模板将任务URI包含在响应中,则新的Web API是您的最佳选择。
  • 如果您想创建多目标服务,既可以作为面向资源的HTTP服务,也可以作为基于RPC样式的SOAP服务在TCP上使用,请先与我交谈,我会给您一些指针。

有关更详细的比较:

http://www.codeproject.com/Articles/341414/WCF-or-ASP-NET-Web-APIs-My-two-cents-on-the-subjec


1
有两点需要补充:(1) .NET 4中的WCF配置比以前简单得多 - 你可以基本上不用配置就能运行一个SOAP服务(就像ASMX一样)。 (2) WCF还有一个RESTful绑定 - webHttpBinding - 这使得创建混合SOAP / REST服务成为可能,只需一个代码库和适当的配置即可。 - marc_s
是的,我知道。尽管我更喜欢WEB API,但我只会在特定情况下使用WCF,例如通过TCP公开我的绑定以提高性能,其他情况下WEB API要好得多。自从两个团队合并以来,WCF + ADO.Net数据服务,我相信重点是1)继续维护WCF 2)大部分新功能将实现在WEB API上。 - Jupaol
如果您可以使用面向MVC的WEB API实现相同的行为,那么使用WCF REST服务(通过HTTP公开它们)有什么意义呢? - Jupaol
1
很遗憾,这是真的,但我们不是在谈论MVC Web应用程序。此外,您可以使用WEB API与Web表单 - Jupaol

1

看起来你在很多方面都在使用Views,所以我认为Web API可能是此时更简洁的解决方案。


0

如果可能的话,我会在MVC4中使用Web Api控制器。您可以返回一个通用的IEnumerable列表或模型,它会自动将数据输出到所请求的任何格式,比如xml或json。这相当惊人。


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