/// <summary>
        /// Gets the zip codes.
        /// </summary>
        /// <param name="country">The country.</param>
        /// <param name="state">The state.</param>
        /// <param name="district">The district.</param>
        /// <param name="city">The city.</param>
        /// <returns></returns>
        public override List <string> GetZipCodes(string country, string state, string district, string city)
        {
            try
            {
                string    CacheKey = string.Format("{0}{1}_{2}_{3}", "ZIPS_UA_", state, district, city);
                const int STREET_HU_CACHE_MINUTES = 60;

                List <string> lsZips = HttpRuntime.Cache[CacheKey] as List <string>;
                if (lsZips != null)
                {
                    return(lsZips);
                }

                var proxy = ServiceClientProvider.GetShippingServiceProxy();

                var zips = new List <string>();
                //check if region2 is not selected, list all the zips
                if (null == district || string.IsNullOrEmpty(district))
                {
                    var provider = ShippingProvider.GetShippingProvider(country);
                    var zip      = provider.GetZipsForCity(country, state, city);
                    zips.AddRange(zip);
                    zips.Distinct();
                }
                else
                {
                    var provider = ShippingProvider.GetShippingProvider(country);
                    if (provider != null)
                    {
                        zips = provider.GetZipsForStreet(country, state, city, district);
                    }
                }
                HttpRuntime.Cache.Insert(CacheKey, zips, null, DateTime.Now.AddMinutes(STREET_HU_CACHE_MINUTES), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
                return(zips);
            }
            catch (Exception ex)
            {
                LoggerHelper.Error(string.Format("GetStreets error: country: {0}, city: {1} error: {2}", country, state, ex.ToString()));
            }
            return(null);
        }
        //agregar estos metodos al base y hacer override ....
        /// <summary>
        /// Gets the streets.
        /// </summary>
        /// <param name="country">The country.</param>
        /// <param name="state">The state.</param>
        /// <param name="district">The district.</param>
        /// <returns></returns>
        public override List <string> GetStreets(string country, string state, string district)
        {
            try
            {
                string    CacheKey = string.Format("{0}{1}_{2}", "STREET_UA_", state, district);
                const int STREET_HU_CACHE_MINUTES = 60;

                List <string> lsStreet = HttpRuntime.Cache[CacheKey] as List <string>;
                if (lsStreet != null)
                {
                    return(lsStreet);
                }

                var proxy = ServiceClientProvider.GetShippingServiceProxy();

                var streets = new List <string>();
                //check if region2 is not selected, list all the cities
                if (null == district || string.IsNullOrEmpty(district))
                {
                    var provider = ShippingProvider.GetShippingProvider(country);
                    // city is district(region) for Ukraine
                    var lookupResults = provider.GetCitiesForState(country, state);

                    foreach (var lookupResult in lookupResults)
                    {
                        var request = new StreetsForCityRequest_V01
                        {
                            Country = country,
                            State   = state,
                            City    = string.IsNullOrEmpty(lookupResult) ? " " :
                                      lookupResult
                        };
                        //Aqui ciclar para recorrer todas las cities apra obtener todos los streets del state
                        var response = proxy.GetStreetsForCity(new GetStreetsForCityRequest(request)).GetStreetsForCityResult as StreetsForCityResponse_V01;
                        if (response != null)
                        {
                            streets.AddRange(from s in response.Streets
                                             where !string.IsNullOrEmpty(s)
                                             select s);
                            streets.Distinct();
                        }
                    }
                }
                else
                {
                    var request = new StreetsForCityRequest_V01
                    {
                        Country = country,
                        State   = state,
                        City    = string.IsNullOrEmpty(district) ? " " : district
                    };
                    var response = proxy.GetStreetsForCity(new GetStreetsForCityRequest(request)).GetStreetsForCityResult as StreetsForCityResponse_V01;
                    if (response != null)
                    {
                        streets = (from s in response.Streets
                                   where !string.IsNullOrEmpty(s)
                                   select s).ToList();
                    }
                }
                HttpRuntime.Cache.Insert(CacheKey, streets, null, DateTime.Now.AddMinutes(STREET_HU_CACHE_MINUTES), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
                return(streets);
            }
            catch (Exception ex)
            {
                LoggerHelper.Error(string.Format("UA GetStreets error: country: {0}, city: {1} error: {2}", country, state, ex.ToString()));
            }
            return(null);
        }