Envoi d'arguments via Savon dans Node.js à l'aide de nœud-savon

Je commence à commencer par NodeJS et je me suis engagé à parler à un service SOAP en utilisant le soap-node de Milewise . J'utilise une API de SOAP de validation d'adresse de base comme mon cas de test.

Je ne semble pas comprendre la façon correcte de formater mes listes d'arguments.

Mon code client SOAP:

var url = "http://www.restfulwebservices.net/wcf/EmailValidationService.svc?wsdl"; soap.createClient(url, function(err, client){ console.log(client.describe().EmailValidationService.BasicHttpBinding_IEmailValidationService.Validate); client.Validate({result:"[email protected]"}, function(err, result){ console.log(result); }); }); 

La commande client.describe () me dit comment l'API souhaiterait que son entrée soit formatée et comment elle produira sa sortie. C'est ce qui se dit:

{ input: { 'request[]': 'xs:string' }, output: { 'ValidateResult[]': 'xs:boolean' } }

Cependant, lorsque j'envoie les arguments en tant qu'objet: {request:"[email protected]"}

Je pense que mes problèmes résident dans la façon dont je définis l'objet arguments … qu'est-ce que les brackets request[] signifient?

Cela devrait fonctionner, si vous ajoutez l'espace de noms sur l'argument de demande. Il s'agit d'un exemple de code.

 var soap = require('soap'); var url = "http://www.restfulwebservices.net/wcf/EmailValidationService.svc?wsdl"; var args = {"tns:request":"[email protected]"}; soap.createClient(url, function(err, client){ client.EmailValidationService.BasicHttpBinding_IEmailValidationService.Validate(args, function(err, result){ if (err) throw err; console.log(result); }); }); 

Toutefois, il renvoie "Accès refusé".

J'utilise soapUI pour tester ce service web, il renvoie le même résultat.

J'essaie d'un autre service Web, et ça marche.

 var soap = require('soap'); var url = "http://www.restfulwebservices.net/wcf/StockQuoteService.svc?wsdl"; var args = {"tns:request":"GOOG"}; soap.createClient(url, function(err, client){ client.StockQuoteService.BasicHttpBinding_IStockQuoteService.GetStockQuote(args, function(err, result){ if (err) throw err; console.log(result); }); }); 

ValidateResult prend une demande de tableau. C'est ce que request[] signifie. Si c'était un objet, il ne fallait que demander. Par conséquent, si vous essayez args comme suit, cela peut fonctionner:

 var args = {request[]: ["[email protected]", "another email adress if you want"]};