【问题标题】:Should it be a WebAPI or asmx它应该是 WebAPI 还是 asmx
【发布时间】:2012-07-23 11:47:55
【问题描述】:

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

我想在我的 ASP.NET MVC 项目中创建两个简单的 API。一个接受 3 个参数(currentUserIDDataTypeActionName)。它返回它们和它们请求的数据的 XML 字符串。 API 由客户端 JavaScript 代码使用。另一个 API 接收一个 XML 字符串,并在服务器端使用该字符串对数据库执行操作。

【问题讨论】:

  • ASMX = SOAP - 每个人都不容易“消费”; WCF = SOAP,但有大量不同的传输机制(远不止只是 HTTP); WebAPI = "RESTful WCF" 新衣服,REST 风格,任何拥有 HTTP 堆栈的人都可以使用数据,但它是仅限 HTTP(没有其他可用的传输)。因此,请根据您的需要进行选择。
  • 嗯,看起来 WebAPI 是要走的路。还有一个问题,您如何实现在方法中采用多个参数/参数的 WebAPI 方法(对于所讨论的场景 1)。我试图只使用一个具有多个参数的方法,但在测试它时我永远无法在浏览器中点击它。我收集它与地图路由有关吗?建议?
  • asmx to WCF or Web API的可能重复

标签: asp.net asp.net-mvc web-services asmx asp.net-web-api


【解决方案1】:

如果可能,我会在 mvc4 中使用 Web Api 控制器。您可以返回一个通用的可枚举列表或模型,它会自动将数据输出为请求的任何格式,例如 xml 或 json。真是太棒了。

【讨论】:

    【解决方案2】:

    看来您确实在 Views 方面做了很多工作,所以我认为 Web API 在这一点上会是更简洁的解决方案。

    【讨论】:

      【解决方案3】:

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

      What is the future of ASP.NET MVC framework after releasing the asp.net Web API

      基本上,微软提供的用于开发 Web 服务的框架有:

      • ASMX。基于 SOAP 的 XML 服务。

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

      • 网页 API。基于不在 SOAP 中的 HTTP。这个新的 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、命名管道,甚至可能是 UDP(在 WCF 4.5 中),并且您还希望在所有其他传输不可用时支持 HTTP,那么最好使用 WCF 并同时使用基于 SOAP 的绑定和 WebHttp 绑定。
      • 如果您想通过 HTTP 创建面向资源的服务,可以使用 HTTP 的全部功能 – 使用 ETag 定义浏览器的缓存控制、版本控制和并发,传递各种内容类型,例如图像、文档、HTML 页面等,使用 URI 模板在响应中包含任务 URI,那么新的 Web API 是您的最佳选择。
      • 如果您想创建一个多目标服务,该服务既可以用作 HTTP 上的面向资源的服务,也可以用作 TCP 上的 RPC 样式 SOAP 服务 - 请先与我交谈,我会给您一些建议。

      更详细的比较:

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

      【讨论】:

      • 补充两点:(1) .NET 4 中的 WCF 配置比以前简单得多 - 以至于您可以启动并运行 SOAP 服务基本上没有配置(如 ASMX)。并且 (2) WCF 还具有 RESTful 绑定 - webHttpBinding - 这使得使用一个代码库和合适的配置创建混合 SOAP/REST 服务成为可能。
      • 是的,我知道。尽管我更喜欢 WEB API。我只会在特定情况下使用 WCF,例如为了提高通过 TCP 公开绑定的性能,其余情况 WEB API 会好得多。由于两个团队强强联手 WCF + ADO.Net Data Services,我相信重点是 1)继续维护 WCF 2)大部分新功能将实现到 WEB API
      • 如果您能以面向 MVC 的方式使用 WEB API 实现相同的行为,那么使用 WCF REST 服务(通过 HTTP 公开它们)还有什么意义?
      • 很遗憾这是真的,但我们不是在谈论 MVC Web 应用程序。除了you can use WEB API with web forms
      猜你喜欢
      • 2012-09-27
      • 2011-05-24
      • 1970-01-01
      • 2020-11-30
      • 2014-11-06
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      相关资源
      最近更新 更多