2012-11-13 32 views
4

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

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; 
} 

回答

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的复杂性以及此服务没有返回有价值的错误消息,这很痛苦。

+0

感谢您花时间回复。我从来不会猜到案件是问题。我看过的所有书籍,教程和论坛都没有提及“哦,顺便说一句,xmlns是区分大小写的,不像普通的URL。 – MarkB

+0

不,问题。请标记响应为接受的人知道复杂类型params工作意。 –