我正在處理僅支持SOAP的Web服務。另外,我有一個NodeJS應用程序,我應該通過soap調用來使用這個服務。SOAP for NodeJS不使用WSDL
最大的問題是,Web服務在任何地方都沒有WSDL api描述。所以我的問題是,我如何使用NodeJS,在沒有WSDL的情況下使用Soap?到目前爲止,我已經檢查過NodeJS的所有庫,都要求我爲它們提供WSDL URL。我找到了一個不需要的C#,這裏:C#-soap-without-wsdl
我正在處理僅支持SOAP的Web服務。另外,我有一個NodeJS應用程序,我應該通過soap調用來使用這個服務。SOAP for NodeJS不使用WSDL
最大的問題是,Web服務在任何地方都沒有WSDL api描述。所以我的問題是,我如何使用NodeJS,在沒有WSDL的情況下使用Soap?到目前爲止,我已經檢查過NodeJS的所有庫,都要求我爲它們提供WSDL URL。我找到了一個不需要的C#,這裏:C#-soap-without-wsdl
我以前也遇到過這個問題。對於那些經常使用RESTful API的開發人員來說,要在合理的時間內掌握SOAP的基礎知識是非常困難的,更不用說能夠調試其中的問題了。需要記住的是,SOAP使用與您可能使用的RESTful API完全相同的應用層協議(HTTP)。將會有標題,一個URI,一種方法就像你習慣的那樣,唯一特別的方式就是你格式化這些字段。
在意識到這一點之後,我最終得出的解決方案是生成幾個SOAP請求(認爲它是兩個),我需要使用桌面SOAP工具(如SoapUI),然後使用non-SOAP HTTP request library for node發送這些生成的請求。
下面是始終如一地爲我工作的例子:
// SOAP
var requestBody =
'<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" ' +
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ><soap:Header>' +
'<SOAPAction>addRoom' +
'</SOAPAction></soap:Header><soap:Body><AddRoomRequest ' +
'xmlns="http://portal.vidyo.com/admin/v1_1"><room><name>' +
params.conferenceName + '</name><RoomType>Public</RoomType><ownerName>' +
vidyoApiUsername + '</ownerName>' + '<extension>' +
params.conferenceExtension +
'</extension><groupName>Default</groupName><RoomMode><isLocked>' +
'false</isLocked><hasPIN>false</hasPIN><hasModeratorPIN>false' +
'</hasModeratorPIN></RoomMode></room></AddRoomRequest></soap:Body>' +
'</soap:Envelope>';
var requestHeaders = {
'cache-control': 'no-cache',
'soapaction': 'addRoom',
'content-type': 'text/xml;charset=UTF-8'
};
var requestOptions = {
'method': 'POST',
'url': vidyoApiEndpoint,
'qs': { 'wsdl': ''},
'headers': requestHeaders,
'body': requestBody,
'timeout': 5000
};
request(requestOptions, function (error, response, body) {
if (error) {
// handle error
} else {
try {
var parsingOptions = {
'object': true,
'sanitize': false
};
var jsonResult = parser.toJson(body, parsingOptions); // from xml
if(jsonResult['soapenv:Envelope']
['soapenv:Body']
['ns1:AddRoomResponse']
['ns1:OK'] === 'OK') {
conferenceInfo(req, res, next, params);
} else {
// handle error
}
} catch (e) {
// handle error
}
}
}).auth(vidyoApiUsername, vidyoApiPassword);
// you can remove this .auth if your api has no authentication
UPDATE:底線是,這是一個解決辦法,這有助於解釋一個初學者SOAP作品相比其他請求如何。這並不意味着作爲最佳實踐的推薦,而是可以幫助開發人員理解手頭問題的信息。
輝煌。感謝你! –
這是完美的。你嚮導。 – AlexMcG