2012-05-18 2 views
5

Sto tentando di utilizzare un servizio wsdl e ho trovato node-soap, ma non riesco a trovare come impostare alcune intestazioni.come impostare le intestazioni utilizzando node-soap in node.js

Esempio:

header = { 
    "Username": "foo", 
    "Password" : "bar" 
} 

La ragione per cui ho bisogno di questo è perché il WSDL che sto cercando di consumare richiede nome utente e password tramite le intestazioni.

Grazie in anticipo

+3

Non un commento utile, ma uno dei nostri ingegneri senior php usato per dire "integrazione WSDL è follia" ... –

+0

Ho installato il nodo di sapone, ma ora Im che ha altri problemi all'interno addChild –

risposta

1

Leggendo il README per node-soap, se quello che stai cercando di fare non è WS-Security (non ho idea di perché rimango lontano lontano da SOAP), allora si sta andando dover presentare un problema all'autore, perché non vedo alcun modo per impostare intestazioni personalizzate in base alla documentazione.

Se è èWS-Security, quindi seguire le istruzioni on this part of the README.

+0

David sembrare come te ho ragione, l'ho personalizzato e lo spingerò presto. Ma vorrei precisare che node.js non funziona affatto con il sapone. –

+7

Direi che probabilmente è perché SOAP è uno standard da incubo nato da tutto ciò che è sbagliato e malvagio nello sviluppo di "impresa". –

6

Potrebbe non essere utile ora, tuttavia, per rispondere a questa domanda che è ancora aperta, eccola qui.

È possibile utilizzare il metodo Client.addSoapHeader. Come per la documentazione

Client.addSoapHeader (SoapHeader [, nome, namespace, xmlns]) - aggiungere SoapHeader al nodo soap: Header

Opzioni

SoapHeader oggetto ({RootName: {nome : "valore"}}) o severe xML-stringa parametri facoltativi quando prima arg è oggetto:

nome del parametro sconosciuto (potrebbe essere solo una stringa vuota)

namespace prefix di xml namespace

xmlns URI

Quindi è necessario creare un oggetto e passare che a questo metodo come:

var soapHeader = { 
    "Username": "foo", 
    "Password" : "bar" 
}; 
client.addSoapHeader(soapHeader); 
+0

'addSoapHeader' sta creando nuovi tag nell'intestazione, ma voglio creare un'intestazione diversa (" env: Header ", non" soap: Header "). Qualche idea di come farlo? – Michael

0
soap = require('soap') 
parseString = require('xml2js').parseString 

soap.createClient('https://api.bingads.microsoft.com/Api/Advertiser/AdIntelligence/v9/AdIntelligenceService.svc?wsdl', function(err, client) { 
    var soapHeader = { 
    'AuthenticationToken': process.argv[2], 
    'DeveloperToken': process.argv[3], 
    'CustomerId': process.argv[4], 
    'CustomerAccountId': process.argv[5] 
    }; 
    client.addSoapHeader(soapHeader); 
    client.SuggestKeywordsFromExistingKeywords({Keywords: ["Hello world"]}, function(err, result) { 
    console.log(result.body); 
    }); 
}); 

Questo non funziona. La risposta è credenziali di accesso non valide. Le stesse credenziali funzionano bene con SOAPUI. Pertanto, il formato di invio delle credenziali di accesso menzionate nelle altre risposte deve essere errato.

+0

Devi aggiungere il prefisso ''tns: AuthenticationToken': ' per ogni valore nelle intestazioni soap – radyz

0

Questo ha funzionato per me. Il metodo create client ha bisogno di wsdl_header per recuperare la definizione wsdl. Una volta creato, è necessario impostare la sicurezza di autenticazione di base.

var url = 'your WSDL url'; 
var auth = "Basic " + new Buffer("username" + ":" + "password").toString("base64"); 

soap.createClient(url,{ wsdl_headers: {Authorization: auth} }).then(
    function(client){ 
     client.setSecurity(new soap.BasicAuthSecurity('rflhconfort_ws', '6syqxje9')); 
     client.your_Method(args); 
    }