求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

可行:

  1. A发布
  2. B请求A
  3. C请求D

不可行:

  1. C请求A
  2. B请求D

2 回复

为了实现你所描述的需求,我们可以使用 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);
    });
});

解释

  1. SOAP 服务器:使用 soap 模块定义了一个简单的 SOAP 服务,包括加法和减法操作。服务器同时提供了 WSDL 文件。
  2. SOAP 客户端:使用同一个 soap 模块创建了一个客户端,可以调用服务器上的加法操作。

这样就可以实现一个简单的 SOAP WebService,并且能够被 Java 或 .NET 工具调用。你可以根据实际需求调整服务和客户端的逻辑。

回到顶部