вызвать удаленный веб-сервис в asp.net - PullRequest
2 голосов
/ 28 февраля 2011

Я пытаюсь вызвать веб-сервисы geonames и вернуть результат в формате json.Я нашел некоторые учебники в сети, которые используют httpwebrequest, однако в msdn говорится, что это устарело.Когда мой код попадает в веб-запрос, время ожидания истекает.Есть идеи?Мой код .asmx ниже:

 /// Summary description for Geonames
/// </summary>
[WebService(Namespace = "http://api.geonames.org")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService]
public class Geonames : System.Web.Services.WebService
{
    private readonly static string FindCoordinates = "http://api.geonames.org/postalCodeSearchJSON?placename={0}&username=<username>";
    [WebMethod]
    [System.Web.Script.Services.ScriptMethod()]
    public string getCoordinates(string location)
    {
        Uri address = new Uri(String.Format(FindCoordinates, HttpUtility.UrlPathEncode(location)));
     //   HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(address.AbsoluteUri);
     //   wr.ProtocolVersion = HttpVersion.Version10;
        string jsonResponse = string.Empty;
        WebClient client = new WebClient();
        jsonResponse = client.DownloadString(address.AbsoluteUri);

        return jsonResponse;
    }
}

1 Ответ

4 голосов
/ 28 февраля 2011

Вы пытались использовать это вместо этого, это намного проще:

        WebClient client = new WebClient();
        client.DownloadString("Your_api_location_goes_here");

Таким образом, вы можете загрузить JSON в виде строки.

Кроме того, вы пытались поместить URL

http://api.geonames.org/postalCodeSearchJSON?placename={0}&username=

с вашим местоположением в таком инструменте, как fiddler - http://www.fiddler2.com/fiddler2/?

Может случиться так, что сервис на самом деле истекает, или как вы строитезапрос не совсем верно.Таким образом, вы можете исключить, является ли это служба или ваш код.

Кроме того, вы можете удалить свое имя пользователя из вашего вопроса, просто чтобы никто не мог позвонить в службу, используя ваше имя пользователя!

...