不使用WSDL的NodeJS SOAP

维尔·米克沟

我正在处理仅支持SOAP的Web服务。另外,我有一个NodeJS应用程序,应该从这里通过soap调用使用此服务。

最大的问题是,Web Service在任何地方都没有WSDL api描述。所以我的问题是,如何使用NodeJS在不使用WSDL的情况下使用Soap?到目前为止,我检查过NodeJS的所有库都要求我给它们提供WSDL URL。我在这里找到了一个不需要的C#C#-soap-without-wsdl

科技

过去我也遇到过这个问题。对于具有使用大多数RESTful API经验的开发人员来说,在合理的时间内掌握SOAP的基础知识尤其困难,更不用说能够调试其中的问题了。要记住的是,SOAP使用与您可能曾经使用过的RESTful API完全相同的应用程序层协议(HTTP)。将有标头,uri,一种与您习惯的方法相同的方法,唯一不同的是格式化这些字段的方式

在意识到这一点之后,我最终想到的解决方案是使用诸如SoapUI之类的桌面SOAP工具生成一些我需要的SOAP请求(认为是两个),然后简单地使用针对节点非SOAP HTTP请求库发送这些生成的请求

这是一个始终为我工作的示例:

// SOAP
var requestBody =
  '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" ' +
  'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ><soap:Header>' +
  '<SOAPAction>addRoom' +
  '</SOAPAction></soap:Header><soap:Body><AddRoomRequest ' +
  'xmlns="http://portal.vidyo.com/admin/v1_1"><room><name>' +
  params.conferenceName + '</name><RoomType>Public</RoomType><ownerName>' +
  vidyoApiUsername  + '</ownerName>' + '<extension>' +
  params.conferenceExtension  +
  '</extension><groupName>Default</groupName><RoomMode><isLocked>' +
  'false</isLocked><hasPIN>false</hasPIN><hasModeratorPIN>false' +
  '</hasModeratorPIN></RoomMode></room></AddRoomRequest></soap:Body>' +
  '</soap:Envelope>';

var requestHeaders = {
  'cache-control': 'no-cache',
  'soapaction': 'addRoom',
  'content-type': 'text/xml;charset=UTF-8'
};

var requestOptions = {
  'method': 'POST',
  'url': vidyoApiEndpoint,
  'qs': { 'wsdl': ''},
  'headers': requestHeaders,
  'body': requestBody,
  'timeout': 5000
};

request(requestOptions, function (error, response, body) {
  if (error) {
    // handle error
  } else {
    try {
      var parsingOptions = {
        'object': true,
        'sanitize': false
      };
      var jsonResult = parser.toJson(body, parsingOptions); // from xml
      if(jsonResult['soapenv:Envelope']
        ['soapenv:Body']
        ['ns1:AddRoomResponse']
        ['ns1:OK'] === 'OK') {
          conferenceInfo(req, res, next, params);
      } else {
       // handle error
      }
    } catch (e) {
      // handle error
    }
   }
}).auth(vidyoApiUsername, vidyoApiPassword); 
// you can remove this .auth if your api has no authentication

更新:最重要的是,这是一种变通方法,可帮助向初学者解释SOAP与其他请求相比如何工作。这并不是作为最佳实践的建议,而是可以帮助开发人员理解当前问题的信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SOAP for NodeJS without using WSDL

来自分类Dev

SOAP WSDL php请求

来自分类Dev

SOAP wsdl,授权

来自分类Dev

SOAP Spring wsdl链接

来自分类Dev

使用Perl的SOAP API wsdl服务调用

来自分类Dev

在Android中将SOAP与WSDL结合使用

来自分类Dev

使用Perl的SOAP API wsdl服务调用

来自分类Dev

在Android中将SOAP与WSDL结合使用

来自分类Dev

如何使用Enunciate生成SOAP 1.2 WSDL?

来自分类Dev

在ServiceStack中使用wsdl soap服务

来自分类Dev

基于SOAP的WebServices和WSDL

来自分类Dev

SOAP的WSDL-REST呢?

来自分类Dev

消费SOA Suite WSDL SOAP

来自分类Dev

PHP(SOAP错误:解析WSDL)

来自分类Dev

SOAP wsdl 返回 404 not found

来自分类Dev

使用node-soap设置SOAP版本。

来自分类Dev

使用WSDL文件在Mule中生成SOAP服务

来自分类Dev

使用WSDL文件在Mule中生成SOAP服务

来自分类Dev

SOAP客户端真的需要使用WSDL吗?

来自分类Dev

SOAP请求返回了wsdl而不是预期的SOAP响应

来自分类Dev

“未捕获的 SoapFault 异常:[WSDL] SOAP-ERROR:WSDL 解析:无法加载”使用 ZEND SOAP 客户端

来自分类Dev

使用zabbix监视SOAP

来自分类Dev

使用zabbix监视SOAP

来自分类Dev

使用CURL的SOAP API

来自分类Dev

通过Post的DocusignAPI SOAP,不使用任何SDK

来自分类Dev

为特定的SOAP请求创建WSDL

来自分类Dev

SOAP错误:解析WSDL:无法从'https加载

来自分类Dev

WSDL生成的SOAPClient无效的SOAP 1.1消息

来自分类Dev

更改生成的wsdl中的soap:address位置