2012-11-13 68 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工作意。 –