gpt4 book ai didi

wcf - 现有的 SOAP 服务和新的 Angular Web App

转载 作者:行者123 更新时间:2023-12-04 04:05:55 24 4
gpt4 key购买 nike

我们已经建立了 WCF SOAP 服务。它的接口(interface)在 WSDL 中定义,从中为我们的服务器生成 C# 类(客户从相同的 WSDL 生成各种语言的客户端绑定(bind))。 WSDL 有一个当前版本,我们可以稍作更改,还有旧版本,如果没有弃用期、咨询等,我们不能更改或删除它们。SOAP 请求往往很复杂,在同一个请求中有多个 XML 命名空间.

WCF SOAP 服务有很多“智能”,它提供了我们需要的新 Web 应用程序所需的各种获取和报告功能。我们希望在客户端使用 AngularJS。但是这些复杂的 SOAP 请求在 JavaScript 世界中并不容易实现。如果我们只有一个 REST 服务,我们就可以使用 Angular Resource 服务。如果不是这样,那么一个使用 JSON 的服务器,尽管是像 SOAP 这样的 RPC 样式,将运行得相当接近。

对于如何减轻服务器和客户端之间的阻抗不匹配,我有各种想法。但听起来没有什么是快速或容易的。

我想过:-

  • 编写一个新的 REST 服务。正是客户端想要的,但这是一个重要的新开发。
  • WebHttpBinding 看起来可以提供一些东西。但在我看来,它需要自定义属性的 C# 标记(当我们的 C# 是从 WSDL 生成时如何实现)并且可能不支持我们的复杂类型
  • 获取或编写大量客户端 JS 以抽象出调用 SOAP 服务。但是,除非这可以从 WSDL 自动生成,否则需要编写大量的客户端代码。
  • 为服务器编写一个 IDispatchMessageFormatter,以接受我发明的一些 JSON 格式的消息。听起来很难,尤其是实现和集成 IDispatchMessageFormatter 的人的好例子似乎很难找到。
  • 编写一个 MessageEncoder 在 JSON 和 XML 之间进行交换。但这并不是真正的编码操作,当我尝试编写它时变得非常清楚!

  • 我正在寻找建议。

    最佳答案

    一般来说,我建议为任何 AngularJS 开发使用 REST 服务,并使用 Node.js API 服务器包装了许多遗留系统。当然,有大量的“它取决于”,但通常大多数项目会按照这条路线更快乐、更有成效。

    需要考虑的一些事情

  • 您当前的 SOAP API 与用户界面要求的匹配程度如何?
  • 您是否使用过 Express、Sinatra、Flask 或其他允许快速开发 REST API 的微框架?我发现我可以在几个小时内构建一个可靠的 Node.js Express API 服务器,然后在构建 AngularJS 应用程序时对其进行扩展。
  • 你对 AngularJS 有多少经验?构建复杂的数据层客户端是一个更高级的项目。

  • REST 对 AngularJS 很重要的六个原因
  • 使用 $resource 和 $http 编写 Angular 代码要快得多。获得正确的 API 是有效的 AngularJS 开发的一个很好的建议。实际上,您可能会争辩说 AngularJS 是为 REST 设计的,这就是为什么纯 JavaScript 适用于该模型的原因(参见 2)。
  • Angular 的普通 JavaScript 对象数据模型与 REST API 很好地配合使用,该 API 使用与用户界面匹配的 JSON。但是,当不合适时会出现问题——Angular 没有正式的数据模型,因此您最终会编写大量代码来尝试合理化您的 API 以与 Angular 一起工作。像微风.js 这样的第三方库可能会提供一些解决方案,但它仍然很尴尬。
  • 您可以使用缓存轻松扩展。很容易将 Redis 或 memcache 或 Varnish 或其他常见的 HTTP 缓存解决方案添加到组合中。由于 REST API 的透明性和幂等性,基于资源的抽象非常适合缓存策略。
  • 前端和服务器的松散耦合 - 如果您从 SOAP 迁移或需要与其他服务集成,将更容易支持对后端的更改。
  • 将 JSON API 与 AngularJS 逻辑分开测试通常更容易,因此您的测试套件将更简单、更有效。
  • 您的新 REST API 将更容易用于 future 的 AngularJS 和面向 JSON 的项目。

  • 我希望这会有所帮助。

    干杯,
    缺口

    关于wcf - 现有的 SOAP 服务和新的 Angular Web App,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17401679/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com