Изолированное хранилище - странная ошибка с исключением

Я пытаюсь сохранить картинку в IsolatedStorage на моем устройстве. Я выключаю интернет и нажимаю кнопку в моем приложении. В первый раз исключение отображается правильно: "Удаленный сервер возвратил ошибку: NotFound".

следующий шаг: я включаю интернет и нажимаю кнопку - изображение сохраняется на моем телефоне. Все отлично.

И теперь самое главное: когда я снова выключу интернет, я больше никогда не увижу это исключение (если я хочу увидеть, я должен удалить и установить приложение снова)

Зачем?

PS: извините за мой английский

public void update()
{
    WebClient client = new WebClient();
    client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
    client.OpenReadAsync(new Uri(@"http://www.myurl.com/" + path + "/" + number.ToString() + ".jpg"), client);
}

void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    try
    {
        var resInfo = new StreamResourceInfo(e.Result, null);
        var reader = new StreamReader(resInfo.Stream);
        byte[] contents;

        using (BinaryReader bReader = new BinaryReader(reader.BaseStream))
        {
            contents = bReader.ReadBytes((int)reader.BaseStream.Length);
        }

        if (!MyStore.DirectoryExists(path))
            MyStore.CreateDirectory(path);

        IsolatedStorageFileStream stream = MyStore.CreateFile(path +"/"+ number.ToString() + ".jpg");
        stream.Write(contents, 0, contents.Length);
        stream.Close();
    }

    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

}

1 ответ

Решение

Ваше изображение было кэшировано после первого запроса, и все остальные запросы будут пытаться сначала получить файл из кэша, и, если файл был найден, никаких запросов в Интернет не будет.

Если вы хотите избежать этого:

1) На вашем собственном сервере с файлами вы можете изменить Cache-Control: max-age значение заголовка до некоторого времени, когда изображение может быть кэшировано.

2) Создайте уникальный URI запроса для каждого запроса, например client.OpenReadAsync(new Uri(@"http://www.myurl.com/" + path + "/" + number.ToString() + ".jpg" + "?rand=" + GetRandomNumber()), client);

Другие вопросы по тегам