Я использовал трюк с отметкой времени на Silverlight (см. GetLastWriteTime()
, используя ответы в Как заставить Firefox не кэшировать или повторно загружать файл Silverlight XAP? ) с Silverlight4.
При использовании среды исполнения 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 для разработчиков.Проблема возникает (по крайней мере) на моем компьютере разработчика, использующем 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).Поэтому любая помощь приветствуется.
Обновление 5: В соответствии с запросом, вот мой код, довольно простой:
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
- нет.