Silverlight 5 - установка / обновление OOB прервано при использовании уловки анти-кэша
Я использовал трюк с отметкой времени на Silverlight <объект> (см.GetLastWriteTime()
используя ответы вКак заставить Firefox не кэшировать или повторно загружать XAP-файл Silverlight?) успешно с Silverlight 4.
Использование среды выполнения Silverlight 5*, функция установки / автоматического обновления OOB теперь не работает. У меня есть две проблемы:
при запуске в браузере текущее состояние установки всегда «не установлено» (в коде:Application.Current.InstallState == System.Windows.InstallState.NotInstalled
является всегдаtrue
)при запуске в режиме OOB всегда говорится, что доступна новая версия (в коде:CheckAndDownloadUpdateAsync()
всегда возвращается сe.Error == null
а такжеe.UpdateAvailable == true
).Кто-нибудь еще сталкивался с этим, и еще лучше, есть обходной путь?
* Точность: в настоящее время мое приложение построено с использованием инструментов Silverlight 5, но нацелено на Silverlight 4 и прекрасно работает в среде выполнения Silverlight 4 Developer. Проблема возникает (по крайней мере) на моем компьютере разработчика, использующем Silverlight 5 Developer Runtime.
Обновить: Я проверил с Fiddler, что происходит на моей коробке разработчика. Когда запускается процесс обновления, я вижу:
GET /ClientBin/Client.xap?timestamp=23%2f01%2f2012+17%3a42%3a14 HTTP/1.1
If-Modified-Since: Tue, 24 Jan 2012 09:10:07 GMT
Это хорошо для меня, за исключением того, что сервер (Сервер: ASP.NET Development Server / 10.0.0.0, X-AspNet-Version: 4.0.30319) возвращает новую версию со следующими заголовками кэша:
HTTP/1.1 200 OK
Cache-Control: private
Date: Tue, 24 Jan 2012 09:11:28 GMT
Каждый раз, когда я запускаю приложение, в запросе на проверку указывается правильная дата (ранее возвращенная сервером), и каждый раз сервер сообщает, что у него есть новая версия с текущей датой. Я постараюсь настроить конфиг сервера.
Update2: В моем файле Web.config была директива управления кешем, но удаление ее решило только половину проблемы. Теперь приложение в браузере обнаруживает, что установка OOB в порядке, но цикл обновления продолжается с той же трассировкой Fiddler.
Update3: Проблема определенно связана с отладочным веб-сервером. У того же приложения, развернутого на соответствующем IIS с тем же Web.config, такой проблемы нет. Но это по-прежнему раздражает, поскольку значительно замедляет процесс отладки OOB.
Update4: Фактически, проблема все еще присутствует даже в моем основном развертывании IIS, и произошла на других серверах (и с использованием PHP для генерации метки времени вместо ASP.NET). Так что любая помощь приветствуется.
Update5: Как я и просил, вот мой код, довольно простой:
private void CheckAndDownloadUpdateCompleted(object sender, System.Windows.CheckAndDownloadUpdateCompletedEventArgs e)
{
if (e.Error != null)
{
if (e.Error is PlatformNotSupportedException)
{
UpdateType = UpdateTypes.PlatformUpdate;
//(...)
return;
}
else if (e.Error is SecurityException)
{
UpdateType = UpdateTypes.ElevationRequired;
//(...)
return;
}
else
{
// Error handling code
//(...)
}
}
else if (e.UpdateAvailable)
{
UpdateType = UpdateTypes.Available;
//(...)
return;
}
UpdateType = UpdateTypes.NoUpdate;
//(...)
}
UpdateType
это свойство типа enum, которое позволяет мне выбрать правильную локализованную строку где-то еще.
Update6: Различные//(...)
части (косвенно) меняют вид приложения,UpdateType
не является.