Простой SOAP-вызов с Node с использованием Strong-Soap - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь вызвать простой метод, созданный в моем сервисе SOAP, который возвращает «Hello, World!». Мне удалось успешно вызвать этот метод с помощью SoapUI, поэтому я знаю, что он работает.

В настоящее время распечатывается только пустой объект. Я врезался в стену и не уверен, что делаю неправильно. Любая помощь будет отличной!

Вот что у меня есть:

"use strict";

var soap = require('strong-soap').soap;
// wsdl of the web service this client is going to invoke. For local wsdl you can use, url = './wsdls/stockquote.wsdl'
var url = 'https://test-idv.dataventures.com/CP3_WCF_DATA/WCFAccess.svc/mex?wsdl';

var options = {};

soap.createClient(url, options, function (err, client) {
    client.addSoapHeader("<wsa:Action>http://tempuri.org/IWCFAccess/GetOtherData</wsa:Action>");
    client.addSoapHeader("<wsa:To>https://test-idv.dataventures.com/CP3_WCF_DATA/WCFAccess.svc</wsa:To>");
    client.GetOtherData({}, function (err, result, envelope, soapHeader) {
        if (err) {
            throw err;
        }
        console.log(result);
        // Result is a javascript object
        // Envelope is the response envelope from the Web Service
        // soapHeader is the response soap header as a JavaScript object
    })
});

Вот XML-код SoapUI:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
    <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
        <wsa:Action>http://tempuri.org/IWCFAccess/GetOtherData</wsa:Action>
        <wsa:To>https://test-idv.dataventures.com/CP3_WCF_DATA/WCFAccess.svc</wsa:To>
    </soap:Header>
    <soap:Body>
        <tem:GetOtherData/>
    </soap:Body>
</soap:Envelope>

Вот XML-запрос от Strong-Soap

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">  
    <soap:Header>    
        <wsa:Action>http://tempuri.org/IWCFAccess/GetOtherData</wsa:Action>    
        <wsa:To>https://test-idv.dataventures.com/CP3_WCF_DATA/WCFAccess.svc</wsa:To>  
    </soap:Header>  
    <soap:Body>   
        <ns1:GetOtherData xmlns:ns1="http://tempuri.org/"/>  
    </soap:Body>
</soap:Envelope>

1 Ответ

0 голосов
/ 31 августа 2018

Вы можете добавить заголовки, например, в strong-soap ... возможно, есть лучший способ добавить xmlns.

"use strict";
require('request').debug = true
var soap = require('strong-soap').soap;
// wsdl of the web service this client is going to invoke. For local wsdl you can use, url = './wsdls/stockquote.wsdl'
var url = 'https://test-idv.dataventures.com/CP3_WCF_DATA/WCFAccess.svc/mex?wsdl';

var options = {};

soap.createClient(url, options, function (err, client) {
  client.addSoapHeader(`<wsa:Action xmlns:wsa="http://www.w3.org/2005/08/addressing">http://tempuri.org/IWCFAccess/GetOtherData</wsa:Action>`);
  client.addSoapHeader(`<wsa:To xmlns:wsa="http://www.w3.org/2005/08/addressing">https://test-idv.dataventures.com/CP3_WCF_DATA/WCFAccess.svc</wsa:To>`);
  client.GetOtherData({}, function (err, result, envelope, soapHeader) {
    console.log('result',result);
    console.log('envelope',envelope);
    if (err) {
      throw err;
    }
    console.log(result);
  })
});
...