首页 > 解决方案 > 如何在 nodejs 中以 XML 格式显示 SOAP 信封?

问题描述

我有一个使用 nodejs 工作的简单 SOAP 服务,但我无法弄清楚如何构建我的项目所需的正确信封结构。

有没有办法以 XML 格式显示发送到服务器的 SOAP 信封?

我也试过 forceSoap12Headers:true` 但它没有在我的服务器中调用 v12 方法。这里的任何提示都会很棒。

服务器

    "use strict";
    var soap = require('soap');
    var http = require('http');
    var myService = {
          ACME: {
            ACMESoap: {
              CalcFee: function(args, callback) {
                      callback({
                          "ns1:barcodeReceive": args.cardNumber,
                          "ns1:requestId": args.requestId,
                          "ns1:calculatedFee": 0.15
                      });
                  },
              LoadCard: function(args, callback) {
                      callback({
                          "ns1:barcodeReceived": args.cardNumber,
                          "ns1:requestId": args.requestId,
                          "ns1:transactionAmount": '100.00',
                          "ns1:currency": 'EUR'
                      });
                  }
            },
            ACMESoap12: {
              CalcFee: function(args, callback) {
                      callback({
                          "ns1:barcodeReceived": args.cardNumber,
                          "ns1:calculatedFee": 0.15
                      });
                  },
              LoadCard: function(args, callback) {
                      callback({
                          "ns1:barcodeReceived": args.cardNumber,
                          "ns1:transactionAmount": '100.00',
                          "ns1:currency": 'EUR'
                      });
                  }
            }
          }
        };
    var port = 7777;
    var xml = require('fs').readFileSync('ACMEService.wsdl','utf8');
    var server = http.createServer(function(request,response) {  
      response.end("404: Not Found: " + request.url);
    });
    console.log('Started server on port ' + port);
    server.listen(port);

    soap.listen(server,'/wsdl',myService, xml);

客户

    "use strict";
    console.log('Started Client...');
    const util = require('util')
    var soap = require('soap');
    var url = 'http://ACME.net:7777/wsdl?wsdl';
    var args = {
      requestId: '2833007',
      cardNumber: '3452345234'
    };
    var args2 = {
      requestId: '2833008',
      cardNumber: '56345634563'
    };
    var options = {
        forceSoap12Headers: true
    };
    soap.createClient(url, options, function(err,client) {
      client.CalcFee(args,function(err, result, rawResponse) {
        console.log(rawResponse);
        // console.log(client.describe());
      });
      client.LoadCard(args2,function(err,result, rawResponse) {
        console.log(rawResponse);
      });
    });

标签: node.jsxmlsoap

解决方案


我发现我可以将请求发送回客户端进行显示。

服务器

...
callback({
    "tns:RECEIVED_ENVELOPE": args
});
...

推荐阅读