【问题标题】:How to consume WCF soap web service in node.js如何在 node.js 中使用 WCF 肥皂 Web 服务
【发布时间】:2013-03-14 18:48:08
【问题描述】:

我使用节点模块 wcf.js 尝试了很多网络中可用的示例。但无法得到任何适当的结果。我正在使用以下网址

https://webservice.kareo.com/services/soap/2.1/KareoServices.svc?wsdl

任何可以借助代码向我解释的人都会非常有帮助。我想知道如何访问 node.js 中的 wsdl

谢谢。

【问题讨论】:

标签: wcf node.js soap


【解决方案1】:

请看wcf.js

简而言之,您可以按照以下步骤操作:

  1. npm install wcf.js

  2. 这样编写代码:

代码

var Proxy = require('wcf.js').Proxy; 
var BasicHttpBinding = require('wcf.js').BasicHttpBinding; 

var binding = new BasicHttpBinding();

//Ensure the proxy variable created below has a working wsdl link that actually loads wsdl    
var proxy = new Proxy(binding, "http://YourHost/YourService.svc?wsdl");

/*Ensure your message below looks like a valid working SOAP UI request*/
var message = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:sil='http://YourNamespace'>" +
                "<soapenv:Header/>" +
                "<soapenv:Body>" +
                "<sil:YourMethod>" +
                "<sil:YourParameter1>83015348-b9dc-41e5-afe2-85e19d3703f9</sil:YourParameter1>" +
                "<sil:YourParameter2>IMUT</sil:YourParameter2>" +
                "</sil:YourMethod>" +
                "</soapenv:Body>" +
                "</soapenv:Envelope>";
/*The message that you created above, ensure it works properly in SOAP UI rather copy a working request from SOAP UI*/

/*proxy.send's second argument is the soap action; you can find the soap action in your wsdl*/
proxy.send(message, "http://YourNamespace/IYourService/YourMethod", function (response, ctx) {
    console.log(response);
    /*Your response is in xml and which can either be used as it is of you can parse it to JSON etc.....*/
});

【讨论】:

  • 这不适用于 https 协议。 :( 如何调用 https 服务?
【解决方案2】:

你没有那么多选择。

您可能想要使用以下之一:

  • 节点肥皂
  • 冲洗
  • soapjs

我尝试使用 node-soap 使用以下代码获取 INR USD 汇率。

app.get('/getcurr', function(req, res) {
var soap = require('soap');
var args = {FromCurrency: 'USD', ToCurrency: 'INR'};
var url = "http://www.webservicex.net/CurrencyConvertor.asmx?WSDL";
soap.createClient(url, function(err, client) {
    client.ConversionRate(args, function(err, result) {
        console.log(result);
    });
  });
});

【讨论】:

    【解决方案3】:

    代码项目有一个neat sample,它使用wcf.js,其api类似于wcf,因此无需学习新的范例。

    【讨论】:

      【解决方案4】:

      我认为另一种选择是:

      • 使用SoapUI等工具记录输入输出xml消息
      • 使用node request 形成输入xml 消息以将请求发送(POST) 到Web 服务(请注意,标准的javascript 模板机制,如ejsmustache 可以在这里为您提供帮助),最后
      • 使用 XML 解析器将响应数据反序列化为 JavaScript 对象

      是的,这是一种相当肮脏和低级的方法,但它应该可以正常工作

      【讨论】:

        【解决方案5】:

        您可能想要使用以下之一:

        另外,还有an existing question

        【讨论】:

        【解决方案6】:

        就我而言,我使用了https://www.npmjs.com/package/soap。默认情况下,forceSoap12Headers 选项设置为 false,这会阻止 node-soap 根据 SOAP 1.2 生成正确的肥皂消息。查看更多详情:I am confused about SOAP namespaces。将其设置为true 后,我就可以调用 .NET WCF 服务了。这是一个对我有用的 TypeScript 代码剪辑器。

        import * as soap from 'soap';
        import { IOptions } from 'soap';
        
        // ...
        
        const url = 'https://www.your-domain.com/stock.svc?wsdl';
        const opt: IOptions = {
          forceSoap12Headers: true,
        };
        
        soap.createClient(url, opt, (err, client: soap.Client) => {
          if (err) {
            throw err;
          }
        
          const wsSecurityOptions = {
            hasTimeStamp: false,
          };
        
          const wsSecurity = new soap.WSSecurity('username', 'password', wsSecurityOptions);
          client.setSecurity(wsSecurity);
          client.addSoapHeader({ Action: 'http://tempuri.org/API/GetStockDetail' }, undefined, 'wsa', 'http://www.w3.org/2005/08/addressing');
          client.addSoapHeader({ To: 'https://www.your-domain.com/stock.svc' }, undefined, 'wsa', 'http://www.w3.org/2005/08/addressing');
        
          const args = {
            symbol: 'GOOG',
          };
        
          client.GetStockDetail(
            args,
            (requestErr, result) => {
              if (requestErr) {
                throw requestErr;
              }
        
              console.log(result);
            },
          );
        });
        

        这里有几个node-soap用法文档的链接:

        1. https://github.com/vpulim/node-soap/tree/master/test
        2. https://github.com/vpulim/node-soap

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-12
          • 2015-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多