2013-07-01 47 views
9

我们已经建立了WCF SOAP服务。其接口在WSDL中定义,从中为我们的服务器生成C#类(客户使用相同的WSDL生成各种语言的客户端绑定)。 WSDL有一个当前版本,我们可以稍微改变一下,旧版本在没有弃用期和咨询等情况下不能更改或删除。SOAP请求通常很复杂,在同一个请求中有多个XML名称空间。现有的SOAP服务和新的Angular Web应用程序

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之间进行交换。但是这不是一个真正的编码操作,当我试图编写它时变得非常清楚!

我在寻找建议。

+0

多少业务合同(方法)做你的WCF服务器公开?你能编写一个嵌入并调用WCF服务实现类(Web方法:1操作契约)的WebAPI服务器,并盲目返回重新包装为json的数据对象(即,考虑到操作契约的数量和复杂性,它是否可行)?这应该是可能的,但如果您在服务操作中依赖于多态性,那么这些不能用JSON(AFAIK)复制。 –

+0

共有七项服务和约50项操作。 – PeteAC

+0

如何编写一个将调用委托给soap服务的休息服务? –

回答

8

一般来说,我建议为任何AngularJS开发一个REST服务,并用Node.js API服务器封装了一些遗留系统。当然,还有大量的“取决于”,但通常大多数项目都会在这条路线上更加快乐和高效。

一些事情要考虑

  1. 效果如何你现在的SOAP API适应用户界面要求?
  2. 您是否使用Express,Sinatra,Flask或其他允许快速开发REST API的微框架?我发现我可以在几个小时内构建一个稳定的Node.js Express API服务器,然后在构建AngularJS应用程序时扩展它。
  3. AngularJS你有多经验?构建复杂的数据层客户端是一个更高级的项目。

六个理由为什么REST是很重要的AngularJS

  1. 这将大大加快使用$资源和$ HTTP编写代码角。获取API对于有效的AngularJS开发是一个很好的建议。事实上,你可能会认为AngularJS是为REST设计的,这就是为什么普通的JavaScript适用于该模型的原因(参见2)。
  2. Angular的老式JavaScript对象数据模型可以很好地与REST API协同工作,该API可以说与用户界面相匹配的JSON。然而,当问题出现时,问题就会出现 - Angular没有正式的数据模型,因此最终编写了大量代码来试图合理化API,以便与Angular良好协作。像breeze.js这样的第三方库可能会提供一些解决方案,但仍然尴尬。
  3. 您可以使用缓存轻松进行缩放。将Redis,Memcache或Varnish或其他常见HTTP缓存解决方案添加到混合中很容易。由于REST API的透明性和幂能性,基于资源的抽象是缓存策略的完美选择。
  4. 前端和服务器的松散耦合 - 如果您迁移SOAP或需要与其他服务集成,更容易支持对后端进行更改。
  5. 与AngularJS逻辑分开测试JSON API通常更容易,因此您的测试套件将更简单,更有效。
  6. 您的新REST API将更容易用于未来的AngularJS和JSON导向项目。

我希望有所帮助。

干杯, 尼克

相关问题