Node.js中的Web服务通信

在现代Web开发中,Node.js因其非阻塞I/O和事件驱动的特性而受到开发者的青睐。当需要与现有的Web服务进行通信时,Node.js提供了强大的工具和库来支持这一需求。特别是当涉及到RESTful服务时,Node.js的表现尤为出色,因为REST服务在Node.js中是一等公民。然而,当需要消费SOAPWeb服务,尤其是那些使用WS-*标准(如WS-Security, MTOM等)的服务时,挑战就出现了。几个月前,当作者面临这种情况时,他发现没有现成的模块可以提供帮助,因此决定创建Ws.js库。

使用Ws.js

Ws.js是一个Node.js模块,专门用于处理SOAP服务,特别是那些使用WS-*标准的服务。以下是如何使用Ws.js库的步骤:

npm install ws.js

首先,需要导入相关的模块,然后构建SOAP请求,并发送请求。以下是一个示例代码:

var ws = require('ws.js'), Http = ws.Http, Security = ws.Security, UsernameToken = ws.UsernameToken; var request = '' + '' + '' + '' + '123' + '' + '' + ''; var ctx = { request: request, url: "http://service/security", action: "http://tempuri.org/EchoString", contentType: "text/xml" }; var handlers = [ new Security({}, [ new UsernameToken({username: "yaron", password: "1234"}) ]), new Http() ]; ws.send(handlers, ctx, function(ctx) { console.log("response: " + ctx.response); });

上述代码首先导入了Ws.js库中的相关模块。然后定义了SOAP信封和一些必要的信息,如URL。需要注意的是,Ws.js不是一个SOAP引擎,因此需要手工构建SOAP信封。接着,定义了请求中想要使用的协议。在这个特定的请求中,使用了ws-security标准,并配置了发送用户名令牌。最后,发送请求(使用指定的协议)并处理响应。

MTOM示例

发送MTOM附件的过程非常相似,只需要指定想要发送的文件以及它对应的SOAP元素路径即可。以下是示例代码:

ws.addAttachment(ctx, "request", "//*[local-name(.)='File1']", "me.jpg", "image/jpeg"); var handlers = [ new Mtom(), new Http() ];

支持的协议

目前,Ws.js支持以下协议:

  • MTOM
  • WS-Security(仅用户名令牌)
  • WS-Addressing(所有版本)
  • HTTP(S)

幕后实现

SecurityHandler.prototype.send = function(ctx, callback) { var self = this; // actual logic here... this.next.send(ctx, function(ctx) { self.receive(ctx, callback); }); } SecurityHandler.prototype.receive = function(ctx, callback) { // optionally post processing here... callback(ctx); } var s = new SecurityHandler(); s.next = new HttpHandler(); s.send(ctx, function(ctx) {...});
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485