Изображение от HttpHandler не будет кэшироваться в браузере

MediaPlayer не поддерживает настройку громкости для нескольких каналов.

Я думаю, что SoundPool - единственное, что подходит вам здесь.

РЕДАКТИРОВАТЬ: Да, вам нужен SoundPool, прочтите это: http://www.wiseandroid.com/post/2010/07/13/Intro-to-the-three-Android-Audio-APIs. ASPX

21
задан Jeff Putz 15 June 2009 в 05:13
поделиться

3 ответа

AFAIK, вы несете ответственность за отправку 304 Not Modified, что означает, что мне ничего не известно в платформе .Net, что делает это за вас в этом случае использования вас отправка «динамических» данных изображения. Что вам нужно сделать (в псевдокоде):

  • Проверить заголовок If-Modified-Since в запросе и проанализировать дату (если она существует).
  • Сравните ее с датой последней модификации вашего исходное изображение (динамически сгенерированное) изображение. Отслеживание этого, вероятно, самая сложная часть решения этой проблемы. В вашей текущей ситуации вы воссоздаете изображение по каждому запросу; вы не хотите делать это, если только в этом нет крайней необходимости.
  • Если дата файла, который есть в браузере, новее или равна дате, указанной у вас для изображения, отправьте 304 Not Modified.
  • В противном случае, продолжить с вашей текущей реализацией

Простой способ отслеживать время последнего изменения на вашем конце - это кэшировать вновь сгенерированные изображения в файловой системе и хранить в памяти словарь, который сопоставляет идентификатор изображения со структурой, содержащей имя файла на диск и дату последней модификации. Используйте Response.WriteFile для отправки данных с диска. Конечно, каждый раз, когда вы перезапускаете рабочий процесс, словарь будет пустым, но вы получаете хоть какое-то преимущество кэширования без необходимости иметь дело с сохраняющейся где-то информацией кеширования.

Вы можете поддержать этот подход, разделив проблемы «Генерация изображений» и «Отправка изображений по HTTP» в разные классы. Прямо сейчас вы делаете две совершенно разные вещи в одном месте.

Я знаю, что это может показаться немного сложным, но оно того стоит.

23
ответ дан 29 November 2019 в 20:55
поделиться

Если у вас есть исходный файл на диске, вы можете использовать этот код:

context.Response.AddFileDependency(pathImageSource);
context.Response.Cache.SetETagFromFileDependencies();
context.Response.Cache.SetLastModifiedFromFileDependencies();
context.Response.Cache.SetCacheability(HttpCacheability.Public);

Кроме того, убедитесь, что вы тестируете с помощью IIS, а не из Visual Studio. Сервер разработки ASP.NET (также известный как Cassini) всегда устанавливает Cache-Control как частный.

См. Также: Учебное пособие по кэшированию для веб-авторов и веб-мастеров

7
ответ дан 29 November 2019 в 20:55
поделиться

Происходит ли буферизация ответа? В таком случае вы можете захотеть установить заголовки перед записью в выходной поток. т.е. попробуйте переместить строку Response.OutputStream.Write () ниже строк настройки кэша.

0
ответ дан 29 November 2019 в 20:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: