货币转换器Web服务

时间:2012-03-06 18:31:28

标签: c# service web currency

我正在尝试在我的网站中使用货币转换网络服务。我添加了对.asmx文件的引用。

这是我的代码:

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:无法从'string'转换为'abc.net.webservicex.www.Currency'

参数2:无法从'string'转换为'abc.net.webservicex.www.Currency'

以下是网络服务说明的链接:

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

我该如何解决这个问题?提前谢谢。

4 个答案:

答案 0 :(得分:5)

它告诉你清楚的是......当你期待2 ConversionRate(...) s时,你将2个字符串传递给Currency方法。


似乎就好像它可能不是您可以控制的WebService,而只是消费者......

首先,处理此WebService的最简单方法是使用项目中的“添加服务引用...”(WSDL地址:http://www.webservicex.net/CurrencyConvertor.asmx?WSDL)...

但是,如果你想手动完成,那么创建一个枚举来使用并传入一个枚举值...

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

我对C#和WPF很陌生,所以我和你一样经历了同样的阶段。 让我尝试一步一步地让它发挥作用。

正如其他一些帖子所说,首先你需要添加网络参考。您可以通过转到解决方案资源管理器,右键单击“服务引用”,然后单击“添加服务引用”来完成此操作。在新窗口中,单击底部的“高级”,然后在下一个窗口中单击底部的“添加Web引用”。然后输入URL:

“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();

希望这有帮助!

答案 3 :(得分:1)

我写了一段时间后,我调用当前货币并将它们作为json对象存储在类中。这样,您可以更快地在平台上进行多种货币的计算。 getCurrencies - >返回字符串[]“EUR”,“USD”等 计算 - > (“美元”,“欧元”,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(",",".");
    }
}