<%@ WebService Language="c#" Codebehind="ConverterService.asmx.cs" Class="WebServiceTests.ConverterService" %> using System; using System.Collections; using System.Web.Services; using System.Web.Services.Protocols; namespace WebServiceTests { public class CurrencyInfo { public CurrencyInfo () { } public CurrencyInfo (string name, double rate) { Name = name; Rate = rate; } public string Name; public double Rate; } [WebServiceAttribute (Description="Web service that can make currency conversions")] public class ConverterService : System.Web.Services.WebService { static Hashtable conversionTable; static ConverterService () { conversionTable = new Hashtable (); InternalSetCurrencyRate ("USD", 1); InternalSetCurrencyRate ("EUR", 0.883884 ); InternalSetCurrencyRate ("GBP", 0.611817 ); InternalSetCurrencyRate ("JPY", 118.271 ); InternalSetCurrencyRate ("CAD", 1.36338 ); InternalSetCurrencyRate ("AUD", 1.51485 ); InternalSetCurrencyRate ("CHF", 1.36915 ); InternalSetCurrencyRate ("RUR", 30.4300 ); InternalSetCurrencyRate ("CNY", 8.27740 ); InternalSetCurrencyRate ("ZAR", 7.62645 ); InternalSetCurrencyRate ("MXN", 10.5025 ); } [WebMethod (Description="Converts an amount from one currency to another currency")] public double Convert (string sourceCurrency, string targetCurrency, double value) { double usd = (1 / GetCurrencyRate (sourceCurrency)) * value; return usd * GetCurrencyRate (targetCurrency); } [Compress (MinLength=100)] [WebMethod (Description="Returns a list of currency rates")] public CurrencyInfo[] GetCurrencyInfo () { lock (conversionTable) { CurrencyInfo[] info = new CurrencyInfo[conversionTable.Count]; int n = 0; foreach (CurrencyInfo cinfo in conversionTable.Values) info [n++] = cinfo; return info; } } [WebMethod (Description="Sets the rate of a currency")] public void SetCurrencyRate (string currency, double rate) { InternalSetCurrencyRate (currency, rate); } static void InternalSetCurrencyRate (string currency, double rate) { lock (conversionTable) { conversionTable [currency] = new CurrencyInfo (currency, rate); } } [WebMethod (Description="Returns the rate of a currency")] public double GetCurrencyRate (string cname) { lock (conversionTable) { if (!conversionTable.ContainsKey (cname)) throw new SoapException ("Unknown currency '" + cname + "'", SoapException.ServerFaultCode); return ((CurrencyInfo) conversionTable [cname]).Rate; } } } }