locked
Работа с HTTP в Windows Phone. RRS feed

  • Вопрос

  • Доброго времени суток, уважаемые. Изучаю программирование приложений под WinPhone, решил попрактиковаться, поработать с HTTP. 

    Вот код простенького приложения:

    using System;
    using System.Net;
    using System.Windows;
    using Microsoft.Phone.Controls;
    
    namespace PhoneApp1
    {
        public partial class MainPage : PhoneApplicationPage
        {
            private WebClient web = null;
            private Uri uri = null;
            private string advice = "";
    
            public MainPage()
            {
                InitializeComponent();
                uri = new Uri("http://fucking-great-advice.ru/api/random");
                web = new WebClient();
                web.DownloadStringCompleted += new DownloadStringCompletedEventHandler(web_DownloadStringCompleted);
            }
    
            private void web_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
            {
                advice = e.Result;
                textBlock1.Text = advice;
            }
    
            private void LoadAdvice()
            {
                web.DownloadStringAsync(uri);
            }
    
            private void button1_Click(object sender, RoutedEventArgs e)
            {
                textBlock1.Text = "";
                LoadAdvice();
            }
        }
    }

    В LoadAdvice() происходит асинхронная загрузка строки в формате json по ссылке. Если перейти по ссылке, то эту строку можно увидеть. Если обновить - будет видна другая строка. По нажатию клавиши button1 текст в textblock должен обновляться на новый обновленный совет, но этого не происходит. Что я делаю не так? Заранее спасибо за ответ и потраченное время!


    31 июля 2012 г. 21:55

Ответы

  • Привет.

    Ваш код вполне рабочий, в том смысле что он вызывает нужны url и возвращает ответ. Но проблема здесь в том, что в телефоне кешируются результаты запроса с одинаковый url и 2ой запрос вам уже выдает не сервер, а кеш телефона. Проблема и одно из ее решений описано здесь - http://www.benday.com/2011/10/06/disable-rest-webrequest-url-caching-on-wp7-mango/

    В вашем случае можно, например выполнять запросы по такому url:

    new Uri("http://fucking-great-advice.ru/api/random/ticks/"+DateTime.Now.Ticks)


    Для связи [mail]

    • Помечено в качестве ответа Abolmasov Dmitry 24 августа 2012 г. 13:10
    16 августа 2012 г. 8:01

Все ответы

  • Не используйте повторно WebClient, создавайте его заново при каждом нажтии на кнопку.

    [MCPD: .NET 2.0 WEB]

    1 августа 2012 г. 14:45
  • Да вроде все правильно (должно работать никуда из приложения не уходить, и если повезет с потоками, по крайней мере). Сам по себе textBlock1 виден, если задать ему текст прямо в разметке?
    1 августа 2012 г. 15:13
  • Не используйте повторно WebClient, создавайте его заново при каждом нажтии на кнопку.

    [MCPD: .NET 2.0 WEB]

    Пробовал, переносил инициализацию WebClient и подписку на событие в LoadAdvice(). Тот же результат:(
    1 августа 2012 г. 18:34
  • Да вроде все правильно (должно работать никуда из приложения не уходить, и если повезет с потоками, по крайней мере). Сам по себе textBlock1 виден, если задать ему текст прямо в разметке?
    Да вот и я думаю, что должен,  оно не так:(
    Создал консольное приложение с тем же функционалом, теми же классами и методами - все работает.
    1 августа 2012 г. 18:35
  • Привет.

    Ваш код вполне рабочий, в том смысле что он вызывает нужны url и возвращает ответ. Но проблема здесь в том, что в телефоне кешируются результаты запроса с одинаковый url и 2ой запрос вам уже выдает не сервер, а кеш телефона. Проблема и одно из ее решений описано здесь - http://www.benday.com/2011/10/06/disable-rest-webrequest-url-caching-on-wp7-mango/

    В вашем случае можно, например выполнять запросы по такому url:

    new Uri("http://fucking-great-advice.ru/api/random/ticks/"+DateTime.Now.Ticks)


    Для связи [mail]

    • Помечено в качестве ответа Abolmasov Dmitry 24 августа 2012 г. 13:10
    16 августа 2012 г. 8:01