4

我在使 wsdl soap 请求中的多个元素正常工作时遇到问题。当我直接在webservicex网站上直接尝试以下转换时,我得到了当前的货币转换。当我尝试在应用程序脚本中做同样的事情时,它总是返回“0”作为速率。我在这里想念什么?

function getCurrencyConversion2(){
  var fromCurr = "USD";
  var toCurr = "AUD";
  var wsdl = SoapService.wsdl("http://www.webservicex.net/CurrencyConvertor.asmx?WSDL");
  Logger.log(wsdl.getServiceNames());
  var currencyService = wsdl.getService("CurrencyConvertor");
  Logger.log(currencyService.getOperationNames());
  //var convertOp = currencyService.getOperation("ConversionRate");
  var param = Xml.element("ConversionRate", [
                                  Xml.attribute("xmlns", "http://www.webservicex.net/"),
                                  Xml.element("FromCurrency", [fromCurr]),
                                  Xml.element("ToCurrency", [toCurr])
             ]);
  var result = currencyService.invokeOperation("ConversionRate", [param]);

  return;
}
4

1 回答 1

5

你会爱上这个的。也难倒了我好一阵子。

问题是 的属性xmlns区分大小写。您正在添加它,因为http://www.webservicex.net/正确的版本是http://www.webserviceX.NET/. 注意X.NET最后的。

以下调整后的版本应该可以正常工作(以 0.9602 作为汇率记录 XML)。

function getCurrencyConversion2(){
  var fromCurr = "USD";
  var toCurr = "AUD";
  var wsdl = SoapService.wsdl("http://www.webservicex.net/CurrencyConvertor.asmx?WSDL");
  var currencyService = wsdl.getService("CurrencyConvertor");
  var param = Xml.element("ConversionRate", [
                                  Xml.attribute("xmlns", "http://www.webserviceX.NET/"),
                                  Xml.element("FromCurrency", [fromCurr]),
                                  Xml.element("ToCurrency", [toCurr])
             ]);
  var result = currencyService.invokeOperation("ConversionRate", [param]);
  Logger.log(result.toXmlString());
  return;
}

由于 SOAP 的复杂性以及该服务没有返回有价值的错误消息这一事实,这很痛苦。

于 2012-11-13T06:58:54.010 回答