我刚刚开始使用NodeJS,并且正在使用milewise's node-soap深入研究SOAP服务。我使用基本的电子邮件地址验证SOAP API作为我的测试用例。
我似乎不明白格式化参数列表的正确方法。
我的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:"my@emailaddress.com"}, function(err, result){
console.log(result);
});
});
client.describe()命令告诉我API如何格式化其输入,以及它将如何返回其输出。这就是说:
{ input: { 'request[]': 'xs:string' },
output: { 'ValidateResult[]': 'xs:boolean' } }
但是,当我将参数作为对象发送时:{request:"my@emailaddress.com"}
我觉得我的问题在于我如何定义参数对象...... request[]
中的括号是什么意思?
答案 0 :(得分:10)
如果在请求参数上添加命名空间,它应该可以工作。 这是一个示例代码。
var soap = require('soap');
var url = "http://www.restfulwebservices.net/wcf/EmailValidationService.svc?wsdl";
var args = {"tns:request":"my@emailaddress.com"};
soap.createClient(url, function(err, client){
client.EmailValidationService.BasicHttpBinding_IEmailValidationService.Validate(args, function(err, result){
if (err) throw err;
console.log(result);
});
});
然而,它返回“访问被拒绝”。
我使用soapUI来测试这个Web服务,它会返回相同的结果。
我尝试了另一种网络服务,但它确实有效。
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);
});
});
答案 1 :(得分:1)
ValidateResult
接受数组请求。这就是request[]
的含义。如果它是一个对象,它应该只是请求。因此,如果您按如下方式尝试args,它可能会起作用:
var args = {request[]: ["my@emailadress.com", "another email adress if you
want"]};
答案 2 :(得分:-1)
I have similar situation where i have accountId[] , i need to pass multiple accountID, when i pass like "tns:accountId[]": [2321,2345325], it failing saying incorrect request parameter, it comes as <tns:accountId[]>2321</tns:accountId[]>
<tns:accountId[]>2345325</tns:accountId[]>.
I need to get <tns:accountId>2321</tns:accountId>
<tns:accountId>2345325</tns:accountId>. When i tried removing "[]", it comes as <accountId> only and it is failing. Can someone please help me?