I have been attempting to create a soap server with express and the package soap for the past few days.
(过去几天,我一直在尝试使用express和package soap创建一个soap服务器。)
I used the snippets provided by the library to get started but I'm always getting a 404. (我使用了库提供的摘录来开始使用,但是我总是得到404。)
The server is like the following:
(服务器如下所示:)
var xml = require('fs').readFileSync('./soap-service/MyService.wsdl', 'utf8');
var express = require('express');
var soap = require('soap');
var soap_service = require('./soap-service/index.js');
var bodyParser = require('body-parser');
var app = express();
const http = require('http');
const port = process.env.PORT || 4000;
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.disable('etag')
app.use(function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PATCH, PUT, DELETE, OPTIONS');
next();
});
app.use(express.static(path.join(__dirname, "client", "build")))
var url = 'http://localhost:4000/wsdl?wsdl';
const post_soap_request = () => soap.createClient(url, {}, function (err, client) {
if (!err) {
var args = { name: 'nameValue' };
client.MyFunction(args, function (err, result) {
console.log({ result });
});
}
});
app.use(bodyParser.raw({ type: function () { return true; }, limit: '5mb' }));
app.listen(port, function() {
console.log('Server working on port ' + port);
const soap_server = soap.listen(app, '/wsdl', soap_service, xml, function (err, result) {
post_soap_request();
});
soap_server.log = function (type, data) {
console.log({ type, data });
};
});
The soap_service imported from ./soap-service/index.js
(从./soap-service/index.js导入的soap_service)
var myService = {
MyService: {
MyPort: {
MyFunction: function (args) {
return {
name: 'COUCOU'
};
},
}
}
};
module.exports = myService;
and the WSDL file:
(和WSDL文件:)
<?xml version="1.0" encoding="UTF-8"?>
<definitions
name="MyService"
targetNamespace="http://localhost:4000/wsdl/MyService.wsdl"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://localhost:4000/wsdl/MyService.wsdl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
<message name="MyFunctionRequest">
<part name="name" type="xsd:string"/>
</message>
<message name="MyFunctionResponse">
<part name="status" type="xsd:string"/>
</message>
<portType name="MyPort">
<operation name="MyFunction">
<input message="tns:MyFunctionRequest"/>
<output message="tns:MyFunctionResponse"/>
</operation>
</portType>
<binding name="MyFunction_Binding" type="tns:MyPort">
<soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="MyFunction">
<soap:operation soapAction="MyFunction"/>
<input>
<soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:examples:MyService" use="encoded"/>
</input>
<output>
<soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:examples:MyService" use="encoded"/>
</output>
</operation>
</binding>
<service name="MyService">
<documentation>WSDL File for MyService</documentation>
<port binding="tns:MyFunction_Binding" name="MyPort">
<soap:address location="http://localhost:4000/MyFunction" />
</port>
</service>
</definitions>
I have the same problem from using SOAPUI or the post_soap_request function, the server response is
(我在使用SOAPUI或post_soap_request函数时遇到相同的问题,服务器响应为)
POST /MyFunction 404 2.179 ms
ask by Defranos translate from so