如果我可以使用 ASP.net Web API,我是否需要 WCF

2024-02-17

今天我读了很多关于 ASP.net Web API 的内容。我的理解是否正确,如果我需要一个只需要 HTTP 作为传输的 WebService,我可以使用 ASP.net API 而不需要 WCF? 到目前为止,Web API 似乎比 WCF 更容易使用。

最好的 托马斯


你的问题的答案基本上是肯定的。如果您 a) 只想使用 HTTP,b) 希望以 XML 或 JSON 形式返回内容,c) 希望使用 RESTful API,d) 不需要任何高级消息传递功能,那么 Web API 是您的最佳选择。正如您所指出的,它比 WCF 更容易使用。

创建 Web 服务时,您有两个基本选项:基于 SOAP 的服务或 RESTful API。如果您使用基于 SOAP 的服务,则应该使用 WCF。如果您使用 RESTful 服务,则应该使用 Web API。您可以查看此博客文章以进一步讨论此问题:http://blogs.microsoft.co.il/blogs/idof/archive/2012/03/05/wcf-or-asp-net-web-apis-my-two-cents-on-the-subject.aspx http://blogs.microsoft.co.il/blogs/idof/archive/2012/03/05/wcf-or-asp-net-web-apis-my-two-cents-on-the-subject.aspx

顺便说一句,您选择 SOAP 还是 REST 取决于您具体情况。一些一般准则如下:

有利于 SOAP 服务的因素:

  • 您只是服务的消费者,或者服务的范围有限 消费者
  • 高级功能,例如事务、WS-Security、 需要可靠的消息传递等
  • 服务必须通过除 HTTP 之外的其他传输方式公开,例如 TCP、MSMQ、命名管道等。
  • 要公开的功能不容易映射到实体或集合上的 CRUD 操作
  • 您需要对复杂类型的强类型的支持
  • 网络带宽问题不是问题

有利于 RESTful 服务的因素:

  • 服务必须由大量客户端(即互联网)使用
  • 高级功能,例如事务、WS-Security、可靠消息传递等,不是必需的
  • 可接受仅通过 HTTP 公开的服务
  • 功能可以轻松映射到实体或集合上的 CRUD 操作
  • 您需要支持其他媒体类型,例如 JSON 或 YAML
  • 网络带宽问题考虑

Edit:作为对您的评论的回应,如果您使用 WCF/SOAP,您就可以使用 SOAP 支持的广泛功能。这包括事务、可靠消息传递、各种消息传递模式(单向、双工等)和 WS-Security 等。这些标准由OASIS标准机构 https://www.oasis-open.org/standards通常称为 WS-*。可以找到 WS-* 标准列表here http://en.wikipedia.org/wiki/List_of_web_service_specifications.

如果您使用的是 Web API/REST,则无法使用任何 WS-* 功能。但是,仍然可以使用 IIS 和 ASP.Net 中提供的标准身份验证技术来验证和授权对 RESTful 服务的访问。有关这方面的更多信息,请参阅以下链接:

http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/ http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/

http://stevescodingblog.co.uk/basic-authentication-with-asp-net-webapi/ http://stevescodingblog.co.uk/basic-authentication-with-asp-net-webapi/

以及其中一些博客帖子 http://leastprivilege.com/2012/03/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果我可以使用 ASP.net Web API,我是否需要 WCF 的相关文章

随机推荐

  • 将 jQuery UI 按钮添加到从 Ajax 加载的 UI 对话框

    我正在打开和关闭使用 ajax 动态创建的对话框 我希望能够让对话框中显示的按钮使用 jQuery UI 按钮 我可以通过调用 button button 来做到这一点 但这会影响每个按钮元素 我怎样才能具体只影响此对话框中出现的按钮 va
  • 用于探索 Windows Vista 音频设备链(树?)的工具

    新的 Vista Audio 子系统被设置为一系列设备 从输入开始 经过所有各种控制 如混音器和音量控制 然后到达各种端点 如扬声器或耳机 我的问题是 是否有一种工具可以显示系统中的所有端点设备以及哪些设备链接在一起 理想情况下 它会绘制拓
  • 重写 Amazon S3 静态 URL [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 为了从 Amazon S3 托管纯静态站点 重写 URL 和终端节点以便通过重写引擎 例如任何 Web 服务器 以更友好的方式访问其资源是唯一的途径吗
  • NVD3时间格式,带焦点图的线

    我正在使用带有焦点图的 nvd3 线的相当简单的示例 myData从我的 php 文件返回一个 JSON 对象 其中 x 坐标是 0 23 之间的数字 我想知道如何将 x 轴格式化为小时格式 d3 json get data php fun
  • Laravel 5.2 auth 更改“用户”表

    我使用了 Laravel 中的新功能 php artisan make auth 但是当我注册时它将使用数据库表users默认情况下 但我想将其更改为其他表 默认情况下它使用updated at and created at在那个表中 我也
  • Java I/O - 模拟 System.console() 的输入

    我正在为练习中创建的程序编写 JUnit 这意味着测试需要覆盖尽可能多的情况 并且我对程序中某些事情的实现方式没有任何影响 此外 该程序运行无限循环 在某一时刻 它要求用户输入一些内容 对于 JUnit 测试 我在另一个中运行该程序Thre
  • Python基础数据参考,相同参考列表

    假设我有两个列表 gt gt gt l1 1 2 3 4 gt gt gt l2 11 12 13 14 我可以将这些列表放入元组或字典中 看起来它们都是对原始列表的引用 gt gt gt t l1 l2 gt gt gt d l1 l1
  • css 无法在 github 页面上工作[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我无法让我的 CSS 显示在网站上 我真的不知道我在这里做错了什么 我对这一切都很陌生 所以我确信有些东西我看不到 这是
  • Django 如何在 DatabaseError: 查询超时后重新连接

    我有一个独立的脚本 它使用 Django ORM 从 Postgresql 读取 写入 我偶尔会收到此错误 数据库错误 查询超时服务器 意外关闭连接 这可能意味着服务器异常终止 在处理请求之前或期间 我需要重新建立连接并重试脚本中的处理代码
  • 我应该为 SSIS 项目签入哪些文件?

    在我的 SSIS 项目文件夹中 除了我创建的三个包 dtsx 文件之外 我还有额外的文件 有一个 ProjectName database 文件 一个 ProjectName dtproj 文件和一个 ProjectName dtproj
  • 可以有多个内容脚本用于不同的功能吗?

    我对此很陌生 但我正在尝试创建一个 chrome 扩展来操作网页上的 DOM 目前 我有两个按钮 每个按钮都会执行不同的任务 下面这段话有道理吗 另外 如果我有多个内容脚本 如何将它们都添加到manifest json中 弹出 js fun
  • 如何在 Google Play 商店上发布现有 ionic 应用程序的更新版本?

    我最近在 Play 商店上推出了我的第一个离子应用程序 现在我想发布更新版本 我有 keystore 文件及其密码 但我没有获得生成发布 apk 来更新我现有的 ionic 应用程序的步骤 我将不胜感激的帮助 谢谢 从改变开始android
  • WSL 从 Windows 运行 Linux,无需生成 cmd 窗口

    我在 cmd 中运行 WSL bash 我没有将它用于任何用途 它只是挂在那里以保持 WSL 系统的活动 当我启动 X 应用程序时 bash c DISPLAY 0 xmessage hello 我得到这个结果 我可以毫无问题地关闭命令窗口
  • JavaScript 对象中的属性数量有限制吗?

    我们有一个具有超过 75000 个属性的对象 对象的格式如下 The key starts with 3 letters and then is followed by 8 numbers var bigArray AAA 12345678
  • 从容器获取线程?

    在大多数应用程序服务器上 J2EE Ejb 规范禁止 手动 创建线程 因为这些资源应由服务器管理 但是有没有办法从 Tomcat Glassfish Jboss 等获取线程 从而访问他们的ThreadPool 您可以使用通用工作管理器 ht
  • 为什么 gdb 无法附加到使用 inetd 调用的服务器应用程序?

    我有一个服务器应用程序 可以使用 inetd 为客户端调用 但是 如果我尝试附加到使用 inetd 启动的服务器进程 我会收到以下响应 ptrace 不允许操作 gdb annotate 3 my app here
  • 如何在 Rails 中通过自动完成进行 HABTM 管理?

    我正在寻找一个好的解决方案来解决 Rails 中使用 HABTM 关联管理模型的可能典型问题 假设我们有两个模型 产品和类别 Products has many categorizations has many categories thr
  • 如何将子视图与父 NSView 的中心对齐

    我正在开发一个程序 在其中以编程方式将 NSImageView 添加到自定义 NSView 类 在创建图像视图时 我传递父容器的框架 NSImageView loadNSImage NSString imageName frame NSRe
  • 列“dbo.User.FB_UserId”在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中

    我在这里多次看到此错误消息 但我没有从中得到针对我的具体问题的解决方案 可能是因为我不是 sql 专家 所以请原谅我向同一问题发布问题错误 这是我试图执行的查询 SELECT DISTINCT U FB UserId U Id AS Gam
  • 如果我可以使用 ASP.net Web API,我是否需要 WCF

    今天我读了很多关于 ASP net Web API 的内容 我的理解是否正确 如果我需要一个只需要 HTTP 作为传输的 WebService 我可以使用 ASP net API 而不需要 WCF 到目前为止 Web API 似乎比 WCF