2016-03-22 2 views
0

В настоящее время я работаю над узловым приложением, пытающимся сделать запрос к службе на основе SOAP. Я использую модуль узла-мыла, чтобы работать с этим. https://github.com/vpulim/node-soapПодключение к веб-службе с использованием SOAP

В настоящее время я имею следующую реализацию

var soap = require('soap'); 
var url = 'http:/xxxx/xxxx/xxxx?WSDL'; 
var appKey = 'ABYRCEE'; 
var xml = { 
    appKey: appKey, 
    mac: 'xxxxxxxx' 
} 

soap.createClient(url, function(err, client){ 
    //console.log('Client:', client); 
    client.getAllDocsisVideoInfo(xml, function(err, result){ 
     if(err){ 
      console.log(err); 
     } 
    }); 
}); 

Для службы в ответ, у меня есть образец запроса в формате XML, как следующий

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:doc="http://xxx.xxx.com"> 

    <soapenv:Header/> 

    <soapenv:Body> 

     <doc:getAllDocsisVideoInfo> 

     <appKey>"appKey"</appKey> 

     <mac>xxxxxxx</mac> 

     </doc:getAllDocsisVideoInfo> 

    </soapenv:Body> 

</soapenv:Envelope> 

Как вы можете видеть из выше, что я должен передать в appKey и mac значения, и по успешному запросу это отправит обратно successfu l в формате xml с соответствующим ответом.

Я могу видеть клиент объект вернуться обратно с соответствующими функциями, но при вызове client.getAllDocsisVideoInfo (....), я, кажется, следующая ошибка

S : Клиент: Не удается найти метод отправки для {} getAllDocsisVideoInfo

Я не уверен, почему? Это из-за того, как я передаю объект xml, как я могу передать запрос образца?

+1

Сделайте: console.log (client.describe()); Чтобы узнать, получаете ли вы информацию о клиенте (методы и т. Д.). Если вы не получите никакой информации, я задаюсь вопросом, правильно ли ваш URL-адрес? – cloaked

+0

Я попробовал, что дал мне необходимые функции – RRP

ответ

0

Итак, потратив на это часы и ударив головой, я смог получить успешный ответ, переопределив префикс пространства имен, удалив префикс пространства имен.

Например, следующий объект нужно передавать как

var xml = { 
    ':appKey': appKey, 
    ':mac': 'xxxxxxxx' 
} 

Вместо

var xml = { 
    appKey: appKey, 
    mac: 'xxxxxxxx' 
} 

Эта часть документации узла мыльный [https://github.com/vpulim/node-soap#overriding-the-namespace-prefix][1] помог в выяснении вопроса.

+0

Если это действительно решило вашу проблему, пожалуйста, примите свой ответ. – Blogueira

0

Глядя на узел-мыло API:

https://www.npmjs.com/package/soap

Похоже, что вы должны вызвать функцию следующим образом:

client.getAllDocsisVideoInfo(xml, function(err, result, raw, soapHeader){ 

}) 

Если вы хотите назвать это, как вы было ли это в вашем коде, тогда я думаю, вам нужно использовать следующее:

Скопируйте и вставьте из API ...

client.MyService.MyPort.MyFunction({name: 'value'}, function(err, result) { 
     // result is a javascript object 
    }) 
+0

, поэтому я выяснил проблему с этим, с помощью коллеги, и это было связано с переопределением префикса пространства имен при передаче аргументов функции – RRP

Смежные вопросы