Если вы используете node-soap и выяснили, как его использовать, не могли бы вы помочь мне с созданием файла wsdl. Есть ли генератор или хороший учебник по написанию файла wsdl. stackoverflow.com/questions/32480481/…
Спасибо. возникли проблемы с установкой node-soap из-за сбоя установки node-
expat
Для его создания вам понадобятся заголовки для разработчиков
Juicy Scripter
Я обнаружил, что проблема связана с заголовками, но я не знаю, где мне ее взять, где мне поместить ее для компиляции, не могли бы вы объяснить, пожалуйста?
WHITECOLOR
1
Вероятно, вы можете получить их с помощью инструментов управления пакетами для вашей ОС. Например, на Ubuntusudo apt-get install libexpat1-dev
Juicy Scripter
1
@RobertBroden, спасибо за обновление. Пожалуйста, в следующий раз отредактируйте ответ (или предложите исправление)!
Juicy Scripter
31
Думаю, альтернативой было бы:
используйте такой инструмент, как SoapUI ( http://www.soapui.org ) для записи входных и выходных XML-сообщений
К сожалению, это самый надежный способ взаимодействия с SOAP с Node.js. Я еще не нашел ни одной библиотеки мыла, которая должным образом выполняла бы запросы мыла для нескольких API, которые мне нужно использовать.
AlbertEngelB
1
100% грязный, но довел меня до результата)))
markkillah 01
что вы все имеете в виду именно под формой input xml`?
timaschew
да, могу подтвердить, что ни одна из вышеупомянутых библиотек не работает идеально.
someUser
Я думаю, что «Ввод формы xml» означает просто предоставление Content-Type «text / xml»
SSH
22
Если у node-soapвас не работает, просто используйте noderequestмодуль, а затем при необходимости конвертируйте xml в json.
Мой запрос не работал, node-soapи для этого модуля нет поддержки, кроме платной поддержки, которая была вне моих ресурсов. Итак, я сделал следующее:
спасибо @jtlindsey. Но я получаю метод 405, который не разрешен как response.statusCode, response.statusMessage. Вы случайно не знаете, как это исправить?
Суджой
Возникла проблема с моим URL. Я использовал исходный URL-адрес вместо конечной точки, созданной SOAPUI. Спасибо за приведенный выше код.
Суджой
17
Мне удалось использовать мыло, wsdl и Node.js Вам нужно установить мыло с npm install soap
Создайте сервер узла, server.jsкоторый будет определять мыльную службу, которая будет использоваться удаленным клиентом. Этот мыльный сервис рассчитывает индекс массы тела на основе веса (кг) и роста (м).
const soap =require('soap');const express =require('express');const app = express();/**
* this is remote service defined in this file, that can be accessed by clients, who will supply args
* response is returned to the calling client
* our service calculates bmi by dividing weight in kilograms by square of height in metres
*/const service ={
BMI_Service:{
BMI_Port:{
calculateBMI(args){//console.log(Date().getFullYear())const year =newDate().getFullYear();const n = args.weight /(args.height * args.height);
console.log(n);return{ bmi: n };}}}};// xml data is extracted from wsdl file createdconst xml =require('fs').readFileSync('./bmicalculator.wsdl','utf8');//create an express server and pass it to a soap serverconst server = app.listen(3030,function(){const host ='127.0.0.1';const port = server.address().port;});
soap.listen(server,'/bmicalculator', service, xml);
Затем создайте client.jsфайл, который будет использовать службу мыла, определяемую server.js. Этот файл предоставит аргументы для мыльной службы и вызовет URL-адрес с портами и конечными точками службы SOAP.
Ваш файл wsdl - это протокол на основе xml для обмена данными, который определяет, как получить доступ к удаленной веб-службе. Назовите ваш файл wsdlbmicalculator.wsdl
<definitionsname="HelloService"targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl"xmlns="http://schemas.xmlsoap.org/wsdl/"xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl"xmlns:xsd="http://www.w3.org/2001/XMLSchema"><messagename="getBMIRequest"><partname="weight"type="xsd:float"/><partname="height"type="xsd:float"/></message><messagename="getBMIResponse"><partname="bmi"type="xsd:float"/></message><portTypename="Hello_PortType"><operationname="calculateBMI"><inputmessage="tns:getBMIRequest"/><outputmessage="tns:getBMIResponse"/></operation></portType><bindingname="Hello_Binding"type="tns:Hello_PortType"><soap:bindingstyle="rpc"transport="http://schemas.xmlsoap.org/soap/http"/><operationname="calculateBMI"><soap:operationsoapAction="calculateBMI"/><input><soap:bodyencodingStyle="http://schemas.xmlsoap.org/soap/encoding/"namespace="urn:examples:helloservice"use="encoded"/></input><output><soap:bodyencodingStyle="http://schemas.xmlsoap.org/soap/encoding/"namespace="urn:examples:helloservice"use="encoded"/></output></operation></binding><servicename="BMI_Service"><documentation>WSDL File for HelloService</documentation><portbinding="tns:Hello_Binding"name="BMI_Port"><soap:addresslocation="http://localhost:3030/bmicalculator/"/></port></service></definitions>
Огромное спасибо. Однако мне пришлось удалить "res.send (response);" от клиента и "" "в последней строке файла сервера.
Субхаши
13
Самый простой способ, который я нашел, просто отправить необработанный XML в службу SOAP с помощью Node.js, - это использовать реализацию Node.js http. Это выглядит так.
var http =require('http');var http_options ={
hostname:'localhost',
port:80,
path:'/LocationOfSOAPServer/',
method:'POST',
headers:{'Content-Type':'application/x-www-form-urlencoded','Content-Length': xml.length
}}var req = http.request(http_options,(res)=>{
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data',(chunk)=>{
console.log(`BODY: ${chunk}`);});
res.on('end',()=>{
console.log('No more data in response.')})});
req.on('error',(e)=>{
console.log(`problem with request: ${e.message}`);});// write data to request body
req.write(xml);// xml would have been set somewhere to a complete xml document in the form of a string
req.end();
Вы бы определили переменную xml как необработанный xml в форме строки.
Но если вы просто хотите взаимодействовать со службой SOAP через Node.js и делать регулярные вызовы SOAP, а не отправлять необработанный XML, используйте одну из библиотек Node.js. Мне нравится узел-мыло .
Я попробовал node-soap для доступа к маршруту wsdl, но он не работает, я продолжаю получать ошибку, хотя то же самое работает в php. Можете ли вы ответить на мой вопрос о том, как вы это сделали stackoverflow.com/questions/39943122/…
Ammar Ajmal
8
Я успешно использовал пакет «мыло» ( https://www.npmjs.com/package/soap ) на более чем 10 отслеживающих WebApis (Tradetracker, Bbelboon, Affilinet, Webgains, ...).
Проблемы обычно возникают из-за того, что программисты не уделяют много внимания тому, что удаленному API нужно для подключения или аутентификации.
Например, PHP автоматически пересылает файлы cookie из заголовков HTTP, но при использовании пакета 'node' он должен быть явно установлен (например, пакетом 'soap-cookie') ...
Вы также можете использовать wsdlrdr. EasySoap в основном переписывает wsdlrdr с некоторыми дополнительными методами. Будьте осторожны, у easysoap нет метода getNamespace, доступного на wsdlrdr.
Если вам просто нужно одноразовое преобразование, https://www.apimatic.io/dashboard?modal=transform позволяет сделать это, создав бесплатную учетную запись (без привязки, это просто сработало для меня).
Если вы трансформируетесь в Swagger 2.0, вы можете создать js lib с
Ответы:
У вас не так много вариантов.
Вероятно, вы захотите использовать одно из:
node-soap
)источник
sudo apt-get install libexpat1-dev
Думаю, альтернативой было бы:
Да, это довольно грязный и низкоуровневый подход, но он должен работать без проблем.
источник
Если у
node-soap
вас не работает, просто используйтеnode
request
модуль, а затем при необходимости конвертируйте xml в json.Мой запрос не работал,
node-soap
и для этого модуля нет поддержки, кроме платной поддержки, которая была вне моих ресурсов. Итак, я сделал следующее:curl http://192.168.0.28:10005/MainService/WindowsService?wsdl > wsdl_file.xml
File > New Soap project
и загрузил свойwsdl_file.xml
.Show Request Editor
.Оттуда я мог отправить запрос и убедиться, что он работает, а также использовать данные
Raw
или,HTML
чтобы помочь мне создать внешний запрос.Raw из SoapUI по моему запросу
XML из SoapUI
Я использовал это для создания следующего
node
request
:источник
Мне удалось использовать мыло, wsdl и Node.js Вам нужно установить мыло с
npm install soap
Создайте сервер узла,
server.js
который будет определять мыльную службу, которая будет использоваться удаленным клиентом. Этот мыльный сервис рассчитывает индекс массы тела на основе веса (кг) и роста (м).Затем создайте
client.js
файл, который будет использовать службу мыла, определяемуюserver.js
. Этот файл предоставит аргументы для мыльной службы и вызовет URL-адрес с портами и конечными точками службы SOAP.Ваш файл wsdl - это протокол на основе xml для обмена данными, который определяет, как получить доступ к удаленной веб-службе. Назовите ваш файл wsdl
bmicalculator.wsdl
Надеюсь, поможет
источник
Самый простой способ, который я нашел, просто отправить необработанный XML в службу SOAP с помощью Node.js, - это использовать реализацию Node.js http. Это выглядит так.
Вы бы определили переменную xml как необработанный xml в форме строки.
Но если вы просто хотите взаимодействовать со службой SOAP через Node.js и делать регулярные вызовы SOAP, а не отправлять необработанный XML, используйте одну из библиотек Node.js. Мне нравится узел-мыло .
источник
В зависимости от количества необходимых конечных точек может быть проще сделать это вручную.
Я пробовал 10 библиотек «мыло nodejs», наконец, делаю это вручную.
источник
Я успешно использовал пакет «мыло» ( https://www.npmjs.com/package/soap ) на более чем 10 отслеживающих WebApis (Tradetracker, Bbelboon, Affilinet, Webgains, ...).
Проблемы обычно возникают из-за того, что программисты не уделяют много внимания тому, что удаленному API нужно для подключения или аутентификации.
Например, PHP автоматически пересылает файлы cookie из заголовков HTTP, но при использовании пакета 'node' он должен быть явно установлен (например, пакетом 'soap-cookie') ...
источник
Вы также можете посмотреть файл easysoap npm - https://www.npmjs.org/package/easysoap или некоторые из них: https://nodejsmodules.org/tags/soap
https://nodejsmodules.org/pkg/express-soap2json
источник
Я использовал сетевой модуль узла, чтобы открыть сокет для веб-службы.
Отправить запросы на мыло
Разобрать ответ мыла, я использовал модуль - xml2js
Надеюсь, это кому-то поможет
источник
Добавление к решению Kim .J : вы можете добавить
preserveWhitespace=true
, чтобы избежать ошибки пробела. Как это:источник
Вы также можете использовать wsdlrdr. EasySoap в основном переписывает wsdlrdr с некоторыми дополнительными методами. Будьте осторожны, у easysoap нет метода getNamespace, доступного на wsdlrdr.
источник
Для тех, кто новичок
SOAP
и хочет получить быстрое объяснение и руководство, я настоятельно рекомендую эту замечательную статью среднего размера .Вы также можете использовать
node-soap
пакет с помощью этого простого руководства .источник
Если вам просто нужно одноразовое преобразование, https://www.apimatic.io/dashboard?modal=transform позволяет сделать это, создав бесплатную учетную запись (без привязки, это просто сработало для меня).
Если вы трансформируетесь в Swagger 2.0, вы можете создать js lib с
источник