求NodeJS for WebService
求NodeJS for WebService
求满足如下要求的node modules,可以单独的server也可以单独的client,也可以两者都兼备的:
1.server通过构建一个函数,就能发布服务并自产生wsdl
2.server发布的ws可以被java或者.net的一些工具调用到
3.client可以接受任何已经发布的ws
我目前的进展是:
SOAP Server使用 https://github.com/tan-tan-kanarek/node-soap-server (有代码错误) SOAP Client使用 https://github.com/KevinC1118/soapclient (非npm管理的包) A:SOAP Server发布的WS接口 B:SOAP Client请求WS接口 C:PC软件“WSStudio”请求WS接口 D:网上常用WS接口 http://developer.51cto.com/art/200908/147125.htm
可行:
- A发布
- B请求A
- C请求D
不可行:
- C请求A
- B请求D
为了实现你所描述的需求,我们可以使用 soap
模块来创建一个 Node.js 的 SOAP 服务器和客户端。soap
模块是一个功能强大的库,可以用来处理 SOAP 通信。
1. 创建一个 SOAP 服务器
首先,我们需要安装 soap
模块:
npm install soap
接下来,我们将创建一个简单的 SOAP 服务器。这个服务器将提供一个函数,并且能够自动产生 WSDL 文件。
const soap = require('soap');
const http = require('http');
// 定义服务
const service = {
MyService: {
MyPort: {
sayHello: function(args) {
return { result: `Hello ${args.name}` };
}
}
}
};
// 创建 HTTP 服务器
const server = http.createServer((request, response) => {
response.end('404: Not Found: ' + request.url);
});
server.listen(8000, () => {
console.log('Server listening on port 8000');
// 将服务和 WSDL 绑定到 HTTP 服务器
soap.listen(server, '/wsdl', service, service.MyService.getWSDL(), (err) => {
if (err) {
console.error(err);
} else {
console.log('WSDL is available at /wsdl');
}
});
});
2. 创建一个 SOAP 客户端
接下来,我们将创建一个 SOAP 客户端,它可以从任何已发布的 SOAP 服务中获取数据。
const soap = require('soap');
const url = 'http://localhost:8000/wsdl';
const args = { name: 'World' };
soap.createClient(url, (err, client) => {
if (err) {
console.error(err);
} else {
client.sayHello(args, (err, result) => {
if (err) {
console.error(err);
} else {
console.log(result); // 输出: { result: 'Hello World' }
}
});
}
});
解释
-
服务器部分:我们定义了一个简单的服务
MyService
,其中包含一个方法sayHello
。然后我们创建了一个 HTTP 服务器,并在/wsdl
路径上提供了 WSDL 文件。 -
客户端部分:我们使用
soap.createClient
方法创建了一个客户端,该客户端连接到服务器上的 WSDL 文件,并调用了sayHello
方法。
总结
以上代码展示了如何使用 soap
模块来创建一个 Node.js 的 SOAP 服务器和客户端。服务器通过定义的服务和方法自动生成 WSDL 文件,并且可以通过 Java 或 .NET 工具进行调用。客户端则可以连接到任何已发布的 SOAP 服务并执行相应的操作。
为了满足你的需求,你可以考虑使用 soap
这个 Node.js 模块来实现一个 SOAP WebService。这个模块支持服务器端和客户端的功能,并且可以生成 WSDL 文件。下面是具体的示例代码:
示例代码
1. 创建一个简单的 SOAP 服务器
const soap = require('soap');
const express = require('express');
// 定义一个简单的服务
const services = {
CalculatorService: {
CalculatorPort: {
Add: (args) => {
return { AddResult: args.A + args.B };
},
Subtract: (args) => {
return { SubtractResult: args.A - args.B };
}
}
}
};
// 定义 WSDL 文件
const wsdl = `
<wsdl:definitions xmlns:tns="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<xsd:schema targetNamespace="http://tempuri.org/Imports">
<xsd:import schemaLocation="http://localhost:8000/wsdl" namespace="http://tempuri.org/"/>
<xsd:import schemaLocation="http://schemas.microsoft.com/2003/10/Serialization/" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
</xsd:schema>
</wsdl:types>
<wsdl:message name="AddSoapIn">
<wsdl:part name="parameters" element="tns:Add"/>
</wsdl:message>
<wsdl:message name="AddSoapOut">
<wsdl:part name="parameters" element="tns:AddResponse"/>
</wsdl:message>
<!-- Other message definitions -->
<wsdl:portType name="CalculatorPortType">
<wsdl:operation name="Add">
<wsdl:input message="tns:AddSoapIn"/>
<wsdl:output message="tns:AddSoapOut"/>
</wsdl:operation>
</wsdl:portType>
<!-- Other portType definitions -->
<wsdl:binding name="CalculatorBinding" type="tns:CalculatorPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Add">
<soap:operation soapAction="http://tempuri.org/Add" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<!-- Other binding definitions -->
<wsdl:service name="CalculatorService">
<wsdl:port name="CalculatorPort" binding="tns:CalculatorBinding">
<soap:address location="http://localhost:8000/wsdl"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
`;
// 创建一个 Express 应用
const app = express();
// 提供 WSDL 文件
app.get('/wsdl', (req, res) => {
res.type('xml');
res.send(wsdl);
});
// 设置 SOAP 服务
app.post('/wsdl', (req, res) => {
soap.listen(app, '/wsdl', services, wsdl, () => {
console.log('Server is running...');
});
});
// 启动服务器
app.listen(8000, () => {
console.log('Server listening on port 8000');
});
2. 创建一个简单的 SOAP 客户端
const soap = require('soap');
// 调用远程服务
const url = 'http://localhost:8000/wsdl';
const args = { A: 1, B: 2 };
soap.createClient(url, (err, client) => {
if (err) {
console.error(err);
return;
}
client.Add(args, (err, result) => {
if (err) {
console.error(err);
return;
}
console.log('Result:', result);
});
});
解释
- SOAP 服务器:使用
soap
模块定义了一个简单的 SOAP 服务,包括加法和减法操作。服务器同时提供了 WSDL 文件。 - SOAP 客户端:使用同一个
soap
模块创建了一个客户端,可以调用服务器上的加法操作。
这样就可以实现一个简单的 SOAP WebService,并且能够被 Java 或 .NET 工具调用。你可以根据实际需求调整服务和客户端的逻辑。