Веб-сервис конвертера валют - PullRequest
2 голосов
/ 06 марта 2012

Я пытаюсь использовать веб-сервис конвертации валют на моем веб-сайте.Я добавил ссылку на файл .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: невозможно преобразовать из «строки» в «abc.net.webservicex.www.Currency»

Аргумент 2: невозможно преобразовать из «строки» в «abc.net.webservicex.www.Currency»'

Вот ссылка на описание веб-службы:

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

Как я могу решить эту проблему?Заранее спасибо.

Ответы [ 4 ]

5 голосов
/ 06 марта 2012

Он говорит вам ясно, как день ... вы передаете 2 строки для вашего ConversionRate(...) метода, когда он ожидает 2 Currency с.


Это кажется как будто это может быть не веб-сервис, которым вы управляете, а просто потребитель ...

Во-первых, самый простой способ справиться с использованием этого WebService - это использовать «Добавить ссылку на службу ...» в своем проекте (адрес WSDL: http://www.webservicex.net/CurrencyConvertor.asmx?WSDL) ...

Но, если вы хотите сделать это вручную, создайте перечисление для использования и передайте значение перечисления ...

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

Convertor.ConversionRate(Currency.EUR, Currency.GBP);
3 голосов
/ 29 ноября 2012

Вместо использования строки "EUR" используйте Convertor.Currency.EUR.

2 голосов
/ 13 июля 2012

Я довольно новичок в C # и WPF, поэтому прошел ту же фазу, что и вы. Позвольте мне попытаться дать пошаговый метод, чтобы он работал.

Как уже говорилось в некоторых других постах, сначала вам нужно добавить веб-ссылку. Вы можете сделать это, перейдя в Solution Explorer, щелкнув правой кнопкой мыши «Service References» и нажав «Add Service Reference». В новом окне нажмите «Дополнительно» внизу, а в следующем окне нажмите «Добавить веб-ссылку» внизу. Затем введите 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();

Надеюсь, это поможет!

1 голос
/ 15 мая 2014

Я написал это некоторое время назад, я называю текущие валюты и сохраняю их в классе как объект 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(",",".");
    }
}
...