2012-03-06 7 views
2

私は自分のWebサイトで通貨換算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 'に変換できません.www.Currency '

引数2:ここにabc.net.webservicex.www.Currency "

に '文字列' から変換することはできませんが、Webサービスの説明へのリンクです:

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

どのようにすることができますこの問題を解決します?前もって感謝します。

答えて

5

あなたが2弦をあなたに渡しているのは、あなたがConversionRate(...)の方法であることを期待しているときに2 Currencyです。


このそれはあなたがコントロールしているWebサービスが、

まず...の単なる消費者ではないかもしれないように、このWebServiceを消費して処理するための最も簡単な方法は、使用することですようです

...あなたはそれを手動で行いたい場合は、次に列挙値に使用し、合格する列挙を作成し、...

をしかし:あなたのプロジェクト(http://www.webservicex.net/CurrencyConvertor.asmx?WSDL WSDLアドレス)に「...サービス参照の追加」

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

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

は、私はそれを理解しますが、どのようなフォーマット行います通貨ですか? – Matthew

+0

'Currency'は組み込みの.NETタイプではありません。あなたが定義した型です...それで答えは不可能です。 –

+0

タイプはWSDLによって定義されます。参照が追加されると、net.webservicex.www.Currencyクラスも作成されているはずです。彼はメソッドを呼び出すときに、そのインスタンスを使用する必要があります。 – Mufaka

2

私はC#とWPFでかなり新しくなっていますので、私はあなたと同じ段階を経ました。 私はそれを動作させるためにステップバイステップの方法を教えてみましょう。

他の投稿のいくつかはすでに述べたように、まずウェブ参照を追加する必要があります。これを行うには、ソリューションエクスプローラで[サービス参照]を右クリックし、[サービス参照の追加]をクリックします。新しいウィンドウで、下部にある[詳細]をクリックし、次のウィンドウで、下部にある[Web参照の追加]をクリックします。

「http://www.webservicex.net/CurrencyConvertor.asmx?WSDL」今では、このURLに関連する利用可能なサービスを探して、1を見つけるべきであることにより、通常

:「CurrencyConverter次にURLを入力" 「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

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(",","."); 
    } 
}