public bool Save(string key, GetMarketDataResponse data)
		{
			var cachedData = _client.Get<GetMarketDataResponse>(key);
			if (cachedData == null)
			{
				var expireInTimespan = new TimeSpan(0, 0, 5, 0);
				_client.Add(key, data, expireInTimespan);
				return true;
			}
			else
			{
				return false;
			}
		}
        public bool Save(string key, GetMarketDataResponse data)
        {
            var cachedData = _client.Get <GetMarketDataResponse>(key);

            if (cachedData == null)
            {
                var expireInTimespan = new TimeSpan(0, 0, 5, 0);
                _client.Add(key, data, expireInTimespan);
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public object Get(GetMarketData request)
        {
            var response = new GetMarketDataResponse();

            try
            {
                if (string.IsNullOrEmpty(request.DataSource))
                {
                    throw new ArgumentNullException("request", "[DataSource] field is empty");
                }
                if (string.IsNullOrEmpty(request.Ticker))
                {
                    throw new ArgumentNullException("request", "[Ticker] field is empty");
                }

                var cache = _cachingManager.GetMarketData(request.ToJson());
                if (cache != null)
                {
                    return(cache);
                }
                else
                {
                    var result = _dataProvider.GetMarketData(request);
                    if (result.Success)
                    {
                        response.Success = true;
                        response.Data    = result.Data;
                        _cachingManager.Save(request.ToJson(), response);
                        _cachingManager.SaveCurrentChart("CurrentChart", request);
                    }
                    else
                    {
                        response.ResponseStatus = new ResponseStatus(string.Empty, result.ErrorMessage);
                    }
                }
            }
            catch (Exception ex)
            {
                var status = new ResponseStatus();
                status.Message    = ex.Message;
                status.ErrorCode  = ex.Source;
                status.StackTrace = ex.StackTrace;

                response.ResponseStatus = status;
            }

            return(response);
        }
		public object Get(GetMarketData request)
		{
			var response = new GetMarketDataResponse();

			try
			{
				if (string.IsNullOrEmpty(request.DataSource))
				{
					throw new ArgumentNullException("request", "[DataSource] field is empty");
				}
				if (string.IsNullOrEmpty(request.Ticker))
				{
					throw new ArgumentNullException("request", "[Ticker] field is empty");
				}

				var cache = _cachingManager.GetMarketData(request.ToJson());
				if (cache != null)
				{
					return cache;
				}
				else
				{
					var result = _dataProvider.GetMarketData(request);
					if (result.Success)
					{
						response.Success = true;
						response.Data = result.Data;
						_cachingManager.Save(request.ToJson(), response);
						_cachingManager.SaveCurrentChart("CurrentChart", request);
					}
					else
					{
						response.ResponseStatus = new ResponseStatus(string.Empty, result.ErrorMessage);
					}
				}
			}
			catch (Exception ex)
			{
				var status = new ResponseStatus();
				status.Message = ex.Message;
				status.ErrorCode = ex.Source;
				status.StackTrace = ex.StackTrace;

				response.ResponseStatus = status;
			}

			return response;
		}