Я размещаю Soap сервер в NodeJS через библиотеку 'strong- soap'. Я последовал стандартному примеру, приведенному здесь в официальной документации: strong- soap
Он отлично работает, когда я немедленно отправляю ответ. Однако моя реализация функции веб-службы требует вызова БД для обновления записи перед отправкой ответа.
Моя Soap Реализация службы выглядит примерно так:
var myService = {
UpdateService: {
UpdatePort: {
UpdateCps: function(args) {
//return {
// StatusCode: 0,
// StatusDesc: "Update successful"
//};
utils.connectDB(function (err, connection) {
if(err){
return {
StatusCode: 1,
StatusDesc: "Error connecting to DB"
};
}
connection.execute(
queryString,
{
args
},{
autoCommit: true
}, function (err, results) {
if (err) {
utils.releaseConnection(connection);
return {
StatusCode: 1,
StatusDesc: "Error Updating Request ID"
};
}
utils.releaseConnection(connection);
return {
StatusCode: 0,
StatusDesc: "Update successful"
}
});
}
);
}
}
}
Проблема, с которой я сталкиваюсь, заключается в том, что ответ, который я возвращаю из внутренней функции после вызова БД (успех или ошибка) не возвращается обратно клиенту SOAP. Поток вызовов завершается после вызова внутренней функции. Я не могу сделать функцию обратным вызовом (асинхронной), так как вызывающий (SOAP клиент) ожидает «синхронного» ответа. Что мне не хватает?
Как сделать вызов синхронным, чтобы ответ отправлялся обратно клиенту только после обновления БД?
Заранее благодарим за помощь!