Wenn Sie Node-Soap verwenden und herausfinden, wie es verwendet wird, können Sie mir beim Erstellen einer WSDL helfen. Gibt es einen Generator oder ein gutes Tutorial, wie man die WSDL schreibt? stackoverflow.com/questions/32480481/…
Vielen Dank. Probleme mit der Node-Soap-Installation, da Node-Expat-Installationsfehler = (
WHITECOLOR
Sie benötigen Expat-Entwicklungsheader, um es zu erstellen
Juicy Scripter
Ich fand das Problem, das über Header gesagt wurde, aber ich weiß nicht, wo ich es bekommen soll, wo ich es zum Kompilieren ablegen soll. Könnten Sie das bitte erklären?
WHITECOLOR
1
Wahrscheinlich können Sie sie über Paketverwaltungstools für Ihr Betriebssystem erhalten. Auf Ubuntu zum Beispielsudo apt-get install libexpat1-dev
Juicy Scripter
1
@ RobertBroden, danke für das Update. Bitte bearbeiten Sie das nächste Mal die Antwort (oder schlagen Sie eine Bearbeitung vor)!
Juicy Scripter
31
Ich denke, dass eine Alternative wäre:
Verwenden Sie ein Tool wie SoapUI ( http://www.soapui.org ), um Eingabe- und Ausgabe-XML-Nachrichten aufzuzeichnen
Leider ist dies die zuverlässigste Methode für die Interaktion mit SOAP mit Node.js. Ich habe noch keine einzige Seifenbibliothek gefunden, die Seifenanfragen für die wenigen APIs, die ich verwenden muss, ordnungsgemäß stellt.
AlbertEngelB
1
100% dreckig, brachte mich aber zu Ergebnissen)))
Markkillah
Was meint ihr alle damit, Input xml` genau zu bilden?
Timaschew
Ja, kann immer noch bestätigen, dass keine der oben genannten Bibliotheken perfekt funktioniert.
someUser
Ich denke, "Formulareingabe xml" bedeutet nur, einen Inhaltstyp von "text / xml" anzugeben
SSH Diesen
22
Wenn node-soapdies bei Ihnen nicht funktioniert, verwenden Sie einfach das noderequestModul und konvertieren Sie die XML-Datei bei Bedarf in JSON.
Meine Anfrage funktionierte nicht node-soapund es gibt keinen Support für dieses Modul, außer dem bezahlten Support, der über meine Ressourcen hinausging. Also habe ich folgendes gemacht:
kopierte die WSDL-XML in eine lokale Datei curl http://192.168.0.28:10005/MainService/WindowsService?wsdl > wsdl_file.xml
In SoapUI habe ich File > New Soap projectmeine hochgeladen wsdl_file.xml.
Im Navigator habe ich einen der Dienste erweitert und mit der rechten Maustaste auf die Anfrage geklickt und auf geklickt Show Request Editor.
Von dort aus konnte ich eine Anfrage senden und sicherstellen, dass sie funktionierte, und ich konnte auch die Daten Rawoder HTMLverwenden, um eine externe Anfrage zu erstellen.
Raw von SoapUI für meine Anfrage
POST http://192.168.0.28:10005/MainService/WindowsService HTTP/1.1Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8SOAPAction:"http://Main.Service/AUserService/GetUsers"Content-Length:303Host:192.168.0.28:10005Connection:Keep-AliveUser-Agent:Apache-HttpClient/4.1.1(java 1.5)
danke @jtlindsey. Aber ich bekomme 405 Methode nicht als response.statusCode, response.statusMessage erlaubt. Wissen Sie vielleicht, wie Sie das beheben können?
Sujoy
Es gab ein Problem mit meiner URL. Ich habe die ursprüngliche URL anstelle des von SOAPUI generierten Endpunkts verwendet. Danke für den obigen Code.
Sujoy
17
Ich habe es geschafft, Seife, wsdl und Node.js zu verwenden. Sie müssen Seife mit installieren npm install soap
Erstellen Sie einen Knotenserver mit dem Namen server.js, der den Seifendienst definiert, der von einem Remoteclient verwendet werden soll. Dieser Seifenservice berechnet den Body Mass Index basierend auf Gewicht (kg) und Größe (m).
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);
Erstellen Sie als Nächstes eine client.jsDatei, die den durch definierten Seifendienst verwendet server.js. Diese Datei enthält Argumente für den Seifendienst und ruft die URL mit den SOAP-Dienstports und -Endpunkten auf.
Ihre wsdl-Datei ist ein XML-basiertes Protokoll für den Datenaustausch, das definiert, wie auf einen Remote-Webdienst zugegriffen wird. Rufen Sie Ihre wsdl-Datei aufbmicalculator.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>
Ich danke dir sehr. Ich musste jedoch "res.send (response)" entfernen. vom Client und "` "in der letzten Zeile der Serverdatei.
Subhashi
13
Der einfachste Weg, Roh-XML mit Node.js an einen SOAP-Dienst zu senden, ist die Verwendung der http-Implementierung von Node.js. Es sieht aus wie das.
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();
Sie hätten die XML-Variable als rohe XML in Form einer Zeichenfolge definiert.
Wenn Sie jedoch nur über Node.js mit einem SOAP-Dienst interagieren und regelmäßige SOAP-Aufrufe durchführen möchten, anstatt rohe XML-Dateien zu senden, verwenden Sie eine der Node.js-Bibliotheken. Ich mag Knotenseife .
#Halfstop, können Sie mir bitte sagen, wie ich eine POST-Anfrage mit Node-Soap stellen soll?
Abhishek Saini
@Abhisheksaini das obige Beispiel ist ein Beitrag.
Halfstop
@Halfstop Bitte sagen Sie mir, wie ich SOAPAction in die Anfrage aufnehmen soll.
Sohail
12
Abhängig von der Anzahl der benötigten Endpunkte ist es möglicherweise einfacher, dies manuell zu tun.
Ich habe 10 Bibliotheken "soap nodejs" ausprobiert. Ich mache es endlich manuell.
Verwenden Sie die Knotenanforderung ( https://github.com/mikeal/request ), um eine Eingabe-XML-Nachricht zum Senden (POST) der Anforderung an den Webdienst zu erstellen
Ich habe Node-Soap für den Zugriff auf die WSDL-Route ausprobiert, aber es funktioniert nicht. Ich erhalte immer wieder Fehler, obwohl das Gleiche in PHP funktioniert. Können Sie meine Frage beantworten, wie Sie es gemacht haben ? Stackoverflow.com/questions/39943122/…
Ammar Ajmal
8
Ich habe das "Seifen" -Paket ( https://www.npmjs.com/package/soap) erfolgreich verwendet ) erfolgreich für mehr als 10 Tracking-WebApis (Tradetracker, Bbelboon, Affilinet, Webgains, ...) verwendet.
Probleme ergeben sich normalerweise aus der Tatsache, dass Programmierer nicht zu viel darüber untersuchen, was die Remote-API benötigt, um eine Verbindung herzustellen oder sich zu authentifizieren.
Zum Beispiel sendet PHP Cookies von HTTP-Headern automatisch erneut, aber wenn Sie das 'Node'-Paket verwenden, müssen Sie dies explizit festlegen (zum Beispiel durch das' Soap-Cookie'-Paket) ...
Sie können auch wsdlrdr verwenden. EasySoap ist im Grunde ein Umschreiben von wsdlrdr mit einigen zusätzlichen Methoden. Achten Sie darauf, dass easysoap nicht über die getNamespace-Methode verfügt, die unter wsdlrdr verfügbar ist.
Wenn Sie nur eine einmalige Konvertierung benötigen, können Sie dies unter https://www.apimatic.io/dashboard?modal=transform tun, indem Sie ein kostenloses Konto erstellen (keine Zugehörigkeit, es hat nur bei mir funktioniert).
Wenn Sie sich in Swagger 2.0 verwandeln, können Sie eine js lib mit erstellen
Antworten:
Sie haben nicht so viele Möglichkeiten.
Sie möchten wahrscheinlich eines der folgenden Elemente verwenden:
node-soap
)quelle
sudo apt-get install libexpat1-dev
Ich denke, dass eine Alternative wäre:
Ja, dies ist ein ziemlich schmutziger und niedriger Ansatz, aber er sollte ohne Probleme funktionieren
quelle
Wenn
node-soap
dies bei Ihnen nicht funktioniert, verwenden Sie einfach dasnode
request
Modul und konvertieren Sie die XML-Datei bei Bedarf in JSON.Meine Anfrage funktionierte nicht
node-soap
und es gibt keinen Support für dieses Modul, außer dem bezahlten Support, der über meine Ressourcen hinausging. Also habe ich folgendes gemacht:curl http://192.168.0.28:10005/MainService/WindowsService?wsdl > wsdl_file.xml
File > New Soap project
meine hochgeladenwsdl_file.xml
.Show Request Editor
.Von dort aus konnte ich eine Anfrage senden und sicherstellen, dass sie funktionierte, und ich konnte auch die Daten
Raw
oderHTML
verwenden, um eine externe Anfrage zu erstellen.Raw von SoapUI für meine Anfrage
XML von SoapUI
Ich habe das Obige verwendet, um Folgendes zu erstellen
node
request
:quelle
Ich habe es geschafft, Seife, wsdl und Node.js zu verwenden. Sie müssen Seife mit installieren
npm install soap
Erstellen Sie einen Knotenserver mit dem Namen
server.js
, der den Seifendienst definiert, der von einem Remoteclient verwendet werden soll. Dieser Seifenservice berechnet den Body Mass Index basierend auf Gewicht (kg) und Größe (m).Erstellen Sie als Nächstes eine
client.js
Datei, die den durch definierten Seifendienst verwendetserver.js
. Diese Datei enthält Argumente für den Seifendienst und ruft die URL mit den SOAP-Dienstports und -Endpunkten auf.Ihre wsdl-Datei ist ein XML-basiertes Protokoll für den Datenaustausch, das definiert, wie auf einen Remote-Webdienst zugegriffen wird. Rufen Sie Ihre wsdl-Datei auf
bmicalculator.wsdl
Ich hoffe es hilft
quelle
Der einfachste Weg, Roh-XML mit Node.js an einen SOAP-Dienst zu senden, ist die Verwendung der http-Implementierung von Node.js. Es sieht aus wie das.
Sie hätten die XML-Variable als rohe XML in Form einer Zeichenfolge definiert.
Wenn Sie jedoch nur über Node.js mit einem SOAP-Dienst interagieren und regelmäßige SOAP-Aufrufe durchführen möchten, anstatt rohe XML-Dateien zu senden, verwenden Sie eine der Node.js-Bibliotheken. Ich mag Knotenseife .
quelle
Abhängig von der Anzahl der benötigten Endpunkte ist es möglicherweise einfacher, dies manuell zu tun.
Ich habe 10 Bibliotheken "soap nodejs" ausprobiert. Ich mache es endlich manuell.
quelle
Ich habe das "Seifen" -Paket ( https://www.npmjs.com/package/soap) erfolgreich verwendet ) erfolgreich für mehr als 10 Tracking-WebApis (Tradetracker, Bbelboon, Affilinet, Webgains, ...) verwendet.
Probleme ergeben sich normalerweise aus der Tatsache, dass Programmierer nicht zu viel darüber untersuchen, was die Remote-API benötigt, um eine Verbindung herzustellen oder sich zu authentifizieren.
Zum Beispiel sendet PHP Cookies von HTTP-Headern automatisch erneut, aber wenn Sie das 'Node'-Paket verwenden, müssen Sie dies explizit festlegen (zum Beispiel durch das' Soap-Cookie'-Paket) ...
quelle
Sie können sich auch die easysoap npm - https://www.npmjs.org/package/easysoap - oder einige davon ansehen: https://nodejsmodules.org/tags/soap
https://nodejsmodules.org/pkg/express-soap2json
quelle
Ich habe das Node-Net-Modul verwendet, um einen Socket für den Webservice zu öffnen.
Seifenanfragen senden
Seifenantwort analysieren, ich habe Modul - xml2js verwendet
Hoffe es hilft jemandem
quelle
Hinzufügen zur Lösung von Kim .J : Sie können hinzufügen
preserveWhitespace=true
, um einen Whitespace-Fehler zu vermeiden. So was:quelle
Sie können auch wsdlrdr verwenden. EasySoap ist im Grunde ein Umschreiben von wsdlrdr mit einigen zusätzlichen Methoden. Achten Sie darauf, dass easysoap nicht über die getNamespace-Methode verfügt, die unter wsdlrdr verfügbar ist.
quelle
Für diejenigen, die neu in diesem Bereich sind
SOAP
und eine kurze Erklärung und Anleitung wünschen, empfehle ich diesen großartigen Artikel .Mit diesem einfachen Tutorial können Sie auch das
node-soap
Paket verwenden .quelle
Wenn Sie nur eine einmalige Konvertierung benötigen, können Sie dies unter https://www.apimatic.io/dashboard?modal=transform tun, indem Sie ein kostenloses Konto erstellen (keine Zugehörigkeit, es hat nur bei mir funktioniert).
Wenn Sie sich in Swagger 2.0 verwandeln, können Sie eine js lib mit erstellen
quelle