2012-05-18 12 views
5

Ich versuche, einen WSDL-Dienst zu konsumieren und Knoten-Soap gefunden, aber ich kann nicht finden, wie einige Header gesetzt.Wie setze ich Header mit node-soap in node.js

Beispiel:

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

Der Grund Ich brauche dies, weil die Wsdl ich über die Header die Benutzername und das Passwort zu verbrauchen versuchen erfordert.

Vielen Dank im Voraus

+3

kein hilfreicher Kommentar, aber einer unserer älteren PHP-Ingenieure zu sagen pflegte „WSDL Integration Wahnsinn“ ... –

+0

ich Setup-Knoten-Seife haben, aber jetzt im mit anderen Fragen innerhalb addChild –

Antwort

1

für node-soap durch die Readme Lesen, wenn das, was Sie versuchen, nicht WS-Security ist zu tun (ich habe keine Ahnung, weil ich weit weg von SOAP zu bleiben), dann wirst du ein Problem mit dem Autor einreichen zu müssen, weil ich keine Möglichkeit sehe, benutzerdefinierte Header entsprechend der Dokumentation zu setzen.

Wenn es istWS-Security, dann folgen Sie den Anweisungen on this part of the README.

+0

David es, wie Sie scheinen sind richtig Ich habe es angepasst und werde es bald drücken. Aber ich würde gerne sagen, dass node.js mit Seife überhaupt nicht gut spielt. –

+7

Ich würde sagen, das liegt wahrscheinlich daran, dass SOAP ein Albtraum-Standard ist, der aus allem entsteht, was in der "Unternehmensentwicklung" falsch und böse ist. –

6

Es ist jetzt vielleicht nicht sinnvoll, aber um diese Frage zu beantworten, die noch offen ist, hier geht es.

Sie können die Methode Client.addSoapHeader verwenden. Gemäß der Dokumentation

Client.addSoapHeader (SOAPHeader- [, Name, Namespace, Xmlns]) - fügen SOAPHeader- zu Seife: Kopfknoten

Optionen

SOAPHeader- Objekt ({RootName: {name : "Wert"}}) oder strenge xml-string Optionale Parameter beim ersten arg Objekt:

Name Unbekannter Parameter (es könnte eine leere Zeichenkette) nur

Namespacepräfix XML-Namespace

Xmlns URI

So müssen Sie ein Objekt erstellen und wie diese Methode übergeben:

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

'addSoapHeader' erstellt neue Tags in der Kopfzeile, aber ich möchte eine andere Kopfzeile erstellen (" env: Header ", nicht" soap: Header "). Irgendeine Idee, wie man das macht? – 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); 
    }); 
}); 

Das wird nicht funktionieren. Die Antwort enthält ungültige Anmeldedaten. Die gleichen Anmeldeinformationen funktionieren gut mit SOAPUI. Daher muss das Format zum Senden der Anmeldeinformationen, die in den anderen Antworten erwähnt werden, falsch sein.

+0

Sie müssen das '' tns: AuthenticationToken ': 'Präfix für jeden Wert in Soap-Headern hinzufügen – radyz

0

Das funktionierte für mich. Die create client-Methode benötigt den wsdl_header, um die wsdl-Definition abzurufen. Sobald es erstellt wurde, müssen Sie die grundlegende Authentifizierungssicherheit festlegen.

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); 
    } 
Verwandte Themen