2012-03-06 96 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(",","."); 
    } 
}