尝试从Node.js获取信息SOAP时出错

时间:2014-03-07 20:40:59

标签: xml node.js web-services api soap

这在php上运行正常,但它不在node.js上 我收到以下错误(我替换了clientlink的实际服务 我不是节点专家所以我不知道从哪里开始, 谢谢你的一切!!!

  

正文:'\ r \ n \ t \ r \ n \ t \ t \ r \ n \ n \ t \ t \ t \ t \ tapap:服务器\ r \ n \ t \ t \ t \ t错误响应(代码500来自   clientlink / soap:&lt; soap:Enve lope   的xmlns:SOAP =“http://schemas.xmlsoap.org/soap/envelope/"><soa   号码:身体与GT;&LT;皂:故障&GT;&LT;&的faultcode GT;肥皂:客户端与LT; /&的faultcode GT;&LT; FA   ultstring&gt;解组错误:意外元素   (uri:“clientlink”,local:“callerIp”)。   预期的元素是   &安培; LT; {} enterpriseActorId&GT;,&安培; LT; {} onBelhalfOfId&GT;,&安培;是   磷; LT; {} externalClientId&GT;,&安培; LT; {} callerIp&GT;,&安培; LT; {}的actorId&GT;,&安培; LT   ; {} agencyIdLong&GT;,&安培; LT; {} onBehalfOfId&GT;,&安培; LT; {}的applicationID&GT;,&安培;   LT; {} actionId&GT;,&安培; LT; {} agencyId&GT;   &LT; / faultstring&GT;&LT; /皂:故障&GT;   &LT; /皂:身体与GT;&LT; /皂:信封&GT; \ n \ r \ n \吨\吨\ r \   n \ t \ r \ n'},

节点上的代码是:

var url = 'clientlink';
  var args = {
    "context": {
      "appToken": 'MEGATOKEN'
    },
    "version": 1.0
  };

soap.createClient(url, function(err, client) {
      if (err) {
        console.log(err);
        callback(err);
        return
      }
      client.getEvents(args, function(err, result) {
          if (err) {
            console.log(err);
            callback(err);
            return;
          }
          console.log(result);
      });
    });

php上的代码工作正常!

$soapClient = new SoapClient('clientlink');
$params['context']['appToken'] = 'MEGATOKEN';
$params['version'] =1.0;
$info = $soapClient->__call('getEvents', array($params));

感谢您阅读第二个感谢!! :)

1 个答案:

答案 0 :(得分:1)

首先使用describe()查看远程服务的哪些方法可用。

//...
soap.createClient(url, function(err, client) {
  if (err) {
    // ...
  } else {
    client.describe();
  }
});

以下是client.describe()的输出示例:

{
  MyService: {
    MyPort: {
      getEvents: {
        input: {
          name: 'string'
        }
      }
    }
  }
}

然后你可以这样打电话给getEvents()

//...
soap.createClient(url, function(err, client) {
  if (err) {
    // ...
  } else {
    client.MyService.MyPort.getEvents({name: 'value'}, function(err, result) {
      // ...
    });
  }
});