2012-03-06 135 views
2

我想在我的網站中使用貨幣轉換Web服務。我添加了對.asmx文件的引用。貨幣轉換器Web服務

這裏是我的代碼:

net.webservicex.www.CurrencyConvertor Convertor; //creating instance of web service 

float new_donation = donation * Convertor.ConversionRate("EUR", "GBP"); //converting donation to new value 

的問題是,我張貼的第二行是給我下面的錯誤:

爲「abc.net.webservicex.www的最佳重載的方法匹配.CurrencyConvertor.ConversionRate(abc.net.webservicex.www.Currency,abc.net.webservicex.www.Currency) '有一些無效參數

參數1:不能從轉換 '字符串' 到' abc.net.webservicex .Currency'

說法二:無法從 '字符串' 到 'abc.net.webservicex.www.Currency' 轉換

這裏是鏈接到Web服務描述:

http://www.webservicex.net/ws/wsdetails.aspx?wsid=10

我怎樣才能解決這個問題?先謝謝你。

回答

5

這是告訴你清楚的一天...你通過2個字符串到你ConversionRate(...)方法當它期待2 Currency s。


似乎像它可能不是一個WebService你是在控制,但只是一個消費者...

首先,要耗費處理此WebService是使用最簡單的方法在您的項目「添加服務引用...」(WSDL地址:http://www.webservicex.net/CurrencyConvertor.asmx?WSDL)...

但是,如果你想要做手工,然後創建一個枚舉使用,並傳遞一個枚舉值...

public enum Currency 
{ 
    AFA, 
    ALL, 
    ... 
} 

Convertor.ConversionRate(Currency.EUR, Currency.GBP); 
+0

我明白,但你怎麼格式貨幣? – Matthew 2012-03-06 18:35:41

+0

'Currency'不是內建的.NET類型,它是您定義的類型...所以不可能回答這個問題。 – 2012-03-06 18:37:37

+0

該類型由WSDL定義。添加引用時,它應該也創建了一個net.webservicex.www.Currency類。他在調用方法時需要使用它的實例。 – Mufaka 2012-03-06 18:40:09

2

我對C#和WPF很新,所以我經歷了和你一樣的階段。 讓我試着給出一步一步的方法,使其工作。

由於其他一些帖子已經說過,首先你需要添加web引用。您可以通過轉到解決方案資源管理器來執行此操作,右鍵單擊「服務參考」,然後單擊「添加服務參考」。在新窗口中,點擊底部的「高級」,然後在下一個窗口中點擊底部的「添加Web引用」。然後輸入網址:

「http://www.webservicex.net/CurrencyConvertor.asmx?WSDL」

通常由現在應該尋找與此相關的URL提供的服務,並找到一個:「CurrencyConverter 」。給它一個參考名稱,如「net.webservicex.www」,然後單擊「添加引用」。現在你可以在你的代碼中使用它。

現在我們來看看代碼。如果你想顯示,例如,歐元/美元匯率,所有你需要的是這樣的代碼:

net.webservicex.www.CurrencyConvertor conver = new net.webservicex.www.CurrencyConvertor(); 
MessageBox.Show((conver.ConversionRate(net.webservicex.www.Currency.EUR, net.webservicex.www.Currency.USD)).ToString()); 
conver.dispose(); 

希望這有助於!

+0

我試過用它,但它返回-1.0,總是 – Salman 2016-01-07 09:21:18

3

而不是使用字符串"EUR"使用Convertor.Currency.EUR

1

我寫了一段時間後,我調用當前貨幣並將它們作爲json對象存儲在類中。當您在平臺上進行操作時,這可以加快多種貨幣的計算速度。 getCurrencies - >返回字符串[] 「EUR」, 「USD」 等 計算 - >( 「USD」, 「EUR」,1.0),1美元轉換成歐元

class CurrencyConvertor 
{ 
    public string[] currencyList; 
    RestClient client = new RestClient ("http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote?format=json"); 
    RestRequest request = new RestRequest ("",Method.GET); 
    JObject json; 

    public CurrencyConvertor() 
    { 
     var response = client.Execute(request); 
     json = JObject.Parse (response.Content); 
    } 
    public string[] getCurrencies() 
    { 
     ArrayList currencies = new ArrayList(); 
     foreach (var item in json["list"]["resources"]) { 
      string tempN = item ["resource"] ["fields"] ["name"].ToString().Replace ("USD/", ""); 
      if(tempN.Length < 4) 
       currencies.Add (tempN); 
     } 
     currencies.Sort(); 
     currencyList = (string[])currencies.ToArray(typeof(string)); 

     return currencyList; 
    } 
    public string calculate(string Base, string Target, decimal amount) 
    { 
     decimal temp1 = 1; 
     decimal temp2 = 1; 
     Console.WriteLine (Base + "to"+Target); 
     foreach (var item in json["list"]["resources"]) { 
      if (item["resource"]["fields"]["name"].ToString().Contains("/"+Base)) { 
       temp1 = decimal.Parse(amount.ToString()) * decimal.Parse(item ["resource"] ["fields"] ["price"].ToString(), CultureInfo.InvariantCulture.NumberFormat); 
      } 
      if (item ["resource"] ["fields"] ["name"].ToString().Contains("/"+Target)) { 
       temp2=decimal.Parse(amount.ToString()) * decimal.Parse(item ["resource"] ["fields"] ["price"].ToString(), CultureInfo.InvariantCulture.NumberFormat); 
      } 
     } 
     var dec = ((decimal)temp2/(decimal)temp1); 
     return (Math.Round(dec*amount,5)).ToString().Replace(",","."); 
    } 
}