Проблемы с подключением API Yahoo PlaceFinder - PullRequest
0 голосов
/ 01 марта 2012

Я пытаюсь использовать Yahoo PlaceFinder API, чтобы получить долготу и широту для почтового индекса.Все отлично работает на моем локальном компьютере, но когда я загружаю его на свой рабочий сервер, я получаю сообщение об ошибке соединения с Yahoo.Я скопировал мой код ниже:

Dictionary<string, decimal> GetYahooGeoCode(string postcode)
    {

        string url = "http://where.yahooapis.com/geocode?flags=J&appid=[My_App_ID]&location=";

        decimal latitude = 0;
        decimal longitude = 0;

        try
        {
            dynamic yahooResults = new Uri(url + postcode).GetDynamicJsonObject();
            foreach (var result in yahooResults.ResultSet.Results)
            {
                latitude = (decimal)result.latitude;
                longitude = (decimal)result.longitude;
            }

            Dictionary<string, decimal> geoCode = new Dictionary<string, decimal>();

            geoCode.Add("latitude", latitude);
            geoCode.Add("longitude", longitude);

            return geoCode;
        }
        catch (Exception ex)
        {
            Log4NetLogger logger = new Log4NetLogger();

            logger.Error(ex);

            return null;
        }
    }

Ошибка, которую я получаю, заключается в следующем: невозможно установить соединение, потому что целевая машина активно отказала ему.У кого-нибудь есть идеи по этому поводу?Я много занимался поиском и не могу найти какую-либо информацию по этой проблеме.Я не знаю, имеет ли это какое-то значение, но мой рабочий сервер является выделенным облачным сервером.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 01 марта 2012

Я пытаюсь решить вашу проблему здесь, мое решение:

Проверьте ваш web.config:

<system.net>
    <defaultProxy />
</system.net>

И мой код (GetDynamicJsonObject () не проанализировал ответ):

        string postcode = "10003";
        string url = String.Format("http://where.yahooapis.com/geocode?state={0}&postal={1}", "NY", postcode);

        Dictionary<string, decimal> geoCode = new Dictionary<string, decimal>();

        System.Xml.Linq.XDocument xDocument = XDocument.Load(url);
        var latlon = (from r in xDocument.Descendants("Result")
                      select new { latitude = r.Element("latitude").Value, longitude = r.Element("longitude").Value }).FirstOrDefault();

        if(null != latlon)
        {
            geoCode.Add("latitude", Convert.ToDecimal(latlon.latitude));
            geoCode.Add("longitude", Convert.ToDecimal(latlon.longitude));
        }

Проверьте параметры поиска API Yahoo здесь http://developer.yahoo.com/geo/placefinder/guide/requests.html#base-uri

...