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

时间:2013-07-01 09:57:40

标签: wcf soap angularjs

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

WCF SOAP服务中有很多“智能”,它提供了我们需要制作的新Web应用程序所需的各种提取和报告工具。我们希望将AngularJS用于客户端。但是这些复杂的SOAP请求在JavaScript世界中并不容易。如果我们只有REST服务,我们可以使用角度资源服务。如果不是这样,那么一个讲JSON的服务器,虽然是像SOAP这样的RPC风格,但会运行得非常接近。

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

我想到了: -

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

1 个答案:

答案 0 :(得分:8)

通常,我建议为任何AngularJS开发提供REST服务,并使用Node.js API服务器包装许多遗留系统。当然,存在大量的“依赖”,但通常大多数项目都会在这条路线上更快乐,更有成效。

要考虑的一些事情

  1. 您当前的SOAP API与用户界面要求的匹配程度如何?
  2. 您是否熟悉Express,Sinatra,Flask或其他允许快速开发REST API的微框架?我发现我可以在几个小时内构建一个可靠的Node.js Express API服务器,然后在构建AngularJS应用程序时对其进行扩展。
  3. 您对AngularJS的经验如何?这是一个构建复杂数据层客户端的更高级项目。
  4. 为什么REST对AngularJS很重要的六个原因

    1. 使用$ resource和$ http编写Angular代码要快得多。获得正确的API是有效的AngularJS开发的一个很好的建议。实际上,你可以说AngularJS是专为REST设计的,这就是普通JavaScript适用于该模型的原因(见2)。
    2. Angular的普通JavaScript对象数据模型适用于使用与用户界面匹配的JSON的REST API。但是,如果没有合适的问题就会出现问题 - Angular没有正式的数据模型,因此您最终编写了大量代码,试图使您的API合理化以便与Angular一起使用。像breeze.js这样的第三方图书馆可能会提供一些解决方案,但它仍然很尴尬。
    3. 您可以使用缓存轻松扩展。将Redis或memcache或Varnish或其他常见的HTTP缓存解决方案添加到组合中很容易。由于REST api的透明性和幂等性,基于资源的抽象非常适合缓存策略。
    4. 前端和服务器的松散耦合 - 如果您迁移SOAP或需要与其他服务集成,则更容易支持对后端的更改。
    5. 与AngularJS逻辑分开测试JSON API通常更容易,因此您的测试套件将更简单,更有效。
    6. 您的新REST API将更容易用于未来的AngularJS和面向JSON的项目。
    7. 我希望有所帮助。

      干杯, 尼克