Silverlight 5 - Instalação / atualização OOB interrompida ao usar o truque anti-cache
Eu estava usando o truque de carimbo de data e hora no <object> do Silverlight (consulteGetLastWriteTime()
usando respostas emComo você força o Firefox a não armazenar em cache ou baixar novamente um arquivo XAP do Silverligh) com sucesso com o Silverlight 4.
Usando um tempo de execução do Silverlight 5*, o recurso de instalação / atualização automática do OOB agora parece estar quebrado. Eu tenho dois problemas:
ao iniciar no navegador, o estado atual da instalação sempre é 'não instalado' (no código:Application.Current.InstallState == System.Windows.InstallState.NotInstalled
é sempretrue
) ao iniciar no modo OOB, está sempre dizendo que uma nova versão está disponível (no código:CheckAndDownloadUpdateAsync()
sempre retorna come.Error == null
ee.UpdateAvailable == true
).Alguém mais encontrou isso e, melhor ainda, tem uma solução alternativa?
* Precisão: atualmente, meu aplicativo é criado usando o Silverlight 5 Tools, mas tem como alvo o Silverlight 4 e funciona bem no Silverlight 4 Developer Runtime. O problema ocorre (pelo menos) na minha máquina de desenvolvimento usando o Silverlight 5. Developer Runtim
Atualizar Verifiquei com o Fiddler o que acontece na minha caixa de desenvolvimento. Quando o processo de atualização é chamado, vejo:
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
Tudo bem para mim, exceto que o servidor (Servidor: ASP.NET Development Server / 10.0.0.0, X-AspNet-Version: 4.0.30319) retorna uma nova versão, com os seguintes cabeçalhos de cache:
HTTP/1.1 200 OK
Cache-Control: private
Date: Tue, 24 Jan 2012 09:11:28 GMT
Toda vez que executo o aplicativo, a solicitação de verificação tem a data correta (a retornada anteriormente pelo servidor) e cada vez que o servidor diz ter uma nova versão, com a data atual. Vou tentar ajustar a configuração do servido
Update2: Eu tinha uma diretiva de controle de cache no meu arquivo Web.config, mas removê-lo apenas resolveu metade do problema. Agora, o aplicativo no navegador detecta que a instalação do OOB está ok, mas o ciclo de atualização continua, com o mesmo rastreamento do Fiddle
Update3: O problema está definitivamente relacionado ao servidor web de depuração. O mesmo aplicativo implantado em um IIS adequado com o mesmo Web.config não possui esse problema. Mas isso ainda é irritante, pois diminui consideravelmente o meu processo de depuração OO
Update4: Na verdade, o problema ainda está presente, mesmo na minha implantação principal do IIS, e aconteceu em outros servidores também (e usando o PHP para gerar o registro de data e hora em vez do ASP.NET). Portanto, qualquer ajuda é apreciada
Update5: Conforme solicitado, aqui está o meu código, bastante direto:
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
é uma propriedade do tipo enum que me permite escolher a string localizada certa em outro luga
Update6: Os vários//(...)
partes estão (indiretamente) alterando a visualização do aplicativo,UpdateType
não é